cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jbel...@apache.org
Subject svn commit: r1036945 - in /cassandra/branches/cassandra-0.7: ./ src/java/org/apache/cassandra/cli/ test/unit/org/apache/cassandra/cli/
Date Fri, 19 Nov 2010 17:07:53 GMT
Author: jbellis
Date: Fri Nov 19 17:07:53 2010
New Revision: 1036945

URL: http://svn.apache.org/viewvc?rev=1036945&view=rev
Log:
multi-line cli commands, other cleanup
patch by Pavel Yaskevich; reviewed by jbellis for CASSANDRA-1742

Modified:
    cassandra/branches/cassandra-0.7/CHANGES.txt
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliCompiler.java
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliMain.java
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUserHelp.java
    cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java

Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1036945&r1=1036944&r2=1036945&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Fri Nov 19 17:07:53 2010
@@ -43,6 +43,7 @@ dev
  * fix for bootstrap when no non-system tables are defined (CASSANDRA-1732)
  * handle replica unavailability in index scan (CASSANDRA-1755)
  * fix service initialization order deadlock (CASSANDRA-1756)
+ * multi-line cli commands (CASSANDRA-1742)
 
 
 0.7.0-beta3

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java?rev=1036945&r1=1036944&r2=1036945&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java Fri Nov 19 17:07:53 2010
@@ -226,7 +226,7 @@ public class CliClient extends CliUserHe
         Tree columnFamilySpec = statement.getChild(0);
 
         String key = CliCompiler.getKey(columnFamilySpec);
-        String columnFamily = CliCompiler.getColumnFamily(columnFamilySpec);
+        String columnFamily = CliCompiler.getColumnFamily(columnFamilySpec, keyspacesMap.get(keySpace).cf_defs);
         int columnSpecCnt = CliCompiler.numColumnSpecifiers(columnFamilySpec);
        
         ColumnParent colParent = new ColumnParent(columnFamily).setSuper_column((ByteBuffer) null);
@@ -253,7 +253,7 @@ public class CliClient extends CliUserHe
         Tree columnFamilySpec = statement.getChild(0);
 
         String key = CliCompiler.getKey(columnFamilySpec);
-        String columnFamily = CliCompiler.getColumnFamily(columnFamilySpec);
+        String columnFamily = CliCompiler.getColumnFamily(columnFamilySpec, keyspacesMap.get(keySpace).cf_defs);
         int columnSpecCnt = CliCompiler.numColumnSpecifiers(columnFamilySpec);
 
         byte[] superColumnName = null;
@@ -370,7 +370,7 @@ public class CliClient extends CliUserHe
             return;
 
         Tree columnFamilySpec = statement.getChild(0);
-        String columnFamily = CliCompiler.getColumnFamily(columnFamilySpec);
+        String columnFamily = CliCompiler.getColumnFamily(columnFamilySpec, keyspacesMap.get(keySpace).cf_defs);
         ByteBuffer key = getKeyAsBytes(columnFamily, columnFamilySpec.getChild(1));
         int columnSpecCnt = CliCompiler.numColumnSpecifiers(columnFamilySpec);
         CfDef cfDef = getCfDef(columnFamily);
@@ -562,7 +562,7 @@ public class CliClient extends CliUserHe
         Tree columnFamilySpec = statement.getChild(0);
         Tree keyTree = columnFamilySpec.getChild(1); // could be a function or regular text
 
-        String columnFamily = CliCompiler.getColumnFamily(columnFamilySpec);
+        String columnFamily = CliCompiler.getColumnFamily(columnFamilySpec, keyspacesMap.get(keySpace).cf_defs);
         CfDef cfDef = getCfDef(columnFamily);
         int columnSpecCnt = CliCompiler.numColumnSpecifiers(columnFamilySpec);
         String value = CliUtils.unescapeSQLString(statement.getChild(1).getText());
@@ -693,10 +693,10 @@ public class CliClient extends CliUserHe
         if (!CliMain.isConnected())
             return;
 
-        String keyspaceName = statement.getChild(0).getText();
-        
         try
         {
+            String keyspaceName = CliCompiler.getKeySpace(statement, thriftClient.describe_keyspaces());
+
             KsDef currentKsDef = getKSMetaData(keyspaceName);
             KsDef updatedKsDef = updateKsDefAttributes(statement, currentKsDef);
 
@@ -722,8 +722,9 @@ public class CliClient extends CliUserHe
         if (!CliMain.isConnected() || !hasKeySpace())
             return;
 
+        String cfName = CliCompiler.getColumnFamily(statement, keyspacesMap.get(keySpace).cf_defs);
         // first child is a column family name
-        CfDef cfDef = getCfDef(statement.getChild(0).getText());
+        CfDef cfDef = getCfDef(cfName);
 
         try
         {
@@ -874,7 +875,7 @@ public class CliClient extends CliUserHe
         if (!CliMain.isConnected())
             return;
 
-        String keyspaceName = statement.getChild(0).getText();
+        String keyspaceName = CliCompiler.getKeySpace(statement, thriftClient.describe_keyspaces());
         sessionState.out.println(thriftClient.system_drop_keyspace(keyspaceName));
     }
 
@@ -891,8 +892,8 @@ public class CliClient extends CliUserHe
         if (!CliMain.isConnected() || !hasKeySpace())
             return;
 
-        String columnName = statement.getChild(0).getText();
-        sessionState.out.println(thriftClient.system_drop_column_family(columnName));
+        String cfName = CliCompiler.getColumnFamily(statement, keyspacesMap.get(keySpace).cf_defs);
+        sessionState.out.println(thriftClient.system_drop_column_family(cfName));
     }
 
     private void executeList(Tree statement)
@@ -902,7 +903,7 @@ public class CliClient extends CliUserHe
             return;
         
         // extract column family
-        String columnFamily = statement.getChild(0).getText();
+        String columnFamily = CliCompiler.getColumnFamily(statement, keyspacesMap.get(keySpace).cf_defs);
 
         String rawStartKey = "";
         String rawEndKey = "";
@@ -971,7 +972,7 @@ public class CliClient extends CliUserHe
             return;
 
         // getting CfDef, it will fail if there is no such column family in current keySpace. 
-        CfDef cfDef = getCfDef(columnFamily);
+        CfDef cfDef = getCfDef(CliCompiler.getColumnFamily(columnFamily, keyspacesMap.get(keySpace).cf_defs));
 
         try
         {
@@ -998,7 +999,8 @@ public class CliClient extends CliUserHe
         if (!CliMain.isConnected() || !hasKeySpace())
             return;
 
-        CfDef columnFamily = getCfDef(statement.getChild(0).getText());
+        String cfName = CliCompiler.getColumnFamily(statement, keyspacesMap.get(keySpace).cf_defs);
+        CfDef columnFamily = getCfDef(cfName);
 
         // VALIDATOR | COMPARATOR | KEYS | SUB_COMPARATOR
         String assumptionElement = statement.getChild(1).getText().toUpperCase();
@@ -1059,8 +1061,12 @@ public class CliClient extends CliUserHe
     {
         if (!CliMain.isConnected())
             return;
-        
-        for (KsDef keySpace : thriftClient.describe_keyspaces()) {
+
+        List<KsDef> keySpaces = thriftClient.describe_keyspaces();
+
+        Collections.sort(keySpaces, new KsDefNamesComparator());
+        for (KsDef keySpace : keySpaces)
+        {
             describeKeySpace(keySpace.name, keySpace);
         }
     }
@@ -1111,7 +1117,7 @@ public class CliClient extends CliUserHe
         int childCount = statement.getChildCount();
         String keySpaceName, username = null, password = null;
 
-        // Get table name
+        // Get keyspace name
         keySpaceName = statement.getChild(0).getText();
         
         if (childCount == 3) {
@@ -1129,10 +1135,11 @@ public class CliClient extends CliUserHe
         {
         	AuthenticationRequest authRequest;
         	Map<String, String> credentials = new HashMap<String, String>();
-        	
-        	
-        	thriftClient.set_keyspace(keySpaceName);
-   
+
+            keySpaceName = CliCompiler.getKeySpace(keySpaceName, thriftClient.describe_keyspaces());
+
+            thriftClient.set_keyspace(keySpaceName);
+
         	if (username != null && password != null) 
         	{
         	    /* remove quotes */
@@ -1186,6 +1193,7 @@ public class CliClient extends CliUserHe
             sessionState.out.println("  Replication Factor: " + ks_def.replication_factor);
             sessionState.out.println("  Column Families:");
 
+            Collections.sort(ks_def.cf_defs, new CfDefNamesComparator());
             for (CfDef cf_def : ks_def.cf_defs)
             {
                 sessionState.out.printf("    ColumnFamily: %s%s\n", cf_def.name, cf_def.column_type.equals("Super") ? " (Super)" : "");
@@ -1254,13 +1262,13 @@ public class CliClient extends CliUserHe
         }
     }
     // DESCRIBE KEYSPACE <keyspace_name> 
-    private void executeDescribeKeySpace(Tree statement) throws TException
+    private void executeDescribeKeySpace(Tree statement) throws TException, InvalidRequestException
     {
         if (!CliMain.isConnected())
             return;
 
         // Get keySpace name
-        String keySpaceName = statement.getChild(0).getText();
+        String keySpaceName = CliCompiler.getKeySpace(statement, thriftClient.describe_keyspaces());
 
         if( keySpaceName == null ) {
             sessionState.out.println("Keyspace argument required");
@@ -1795,7 +1803,7 @@ public class CliClient extends CliUserHe
      * @throws NoSuchFieldException - column not found
      */
     private void printSliceList(CfDef columnFamilyDef, List<KeySlice> slices)
-    throws NotFoundException, TException, IllegalAccessException, InstantiationException, NoSuchFieldException
+            throws NotFoundException, TException, IllegalAccessException, InstantiationException, NoSuchFieldException
     {
         AbstractType validator;
         String columnFamilyName = columnFamilyDef.getName();
@@ -1887,4 +1895,20 @@ public class CliClient extends CliUserHe
         AbstractType keyComparator = this.cfKeysComparators.get(columnFamily);
         return getBytesAccordingToType(key, keyComparator);
     }
+
+    private class KsDefNamesComparator implements Comparator<KsDef>
+    {
+        public int compare(KsDef a, KsDef b)
+        {
+            return a.name.compareTo(b.name);
+        }
+    }
+
+    private class CfDefNamesComparator implements Comparator<CfDef>
+    {
+        public int compare(CfDef a, CfDef b)
+        {
+            return a.name.compareTo(b.name);
+        }
+    }
 }

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliCompiler.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliCompiler.java?rev=1036945&r1=1036944&r2=1036945&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliCompiler.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliCompiler.java Fri Nov 19 17:07:53 2010
@@ -20,6 +20,10 @@ package org.apache.cassandra.cli;
 
 import org.antlr.runtime.*;
 import org.antlr.runtime.tree.*;
+import org.apache.cassandra.thrift.KsDef;
+import org.apache.cassandra.thrift.CfDef;
+
+import java.util.List;
 
 
 public class CliCompiler
@@ -88,9 +92,62 @@ public class CliCompiler
      * NODE_COLUMN_ACCESS related functions.
      */
 
-    public static String getColumnFamily(Tree astNode)
+    public static String getColumnFamily(Tree astNode, List<CfDef> cfDefs)
+    {
+        return getColumnFamily(astNode.getChild(0).getText(), cfDefs);
+    }
+
+    public static String getColumnFamily(String cfName, List<CfDef> cfDefs)
+    {
+        int matches = 0;
+        String lastMatchedName = "";
+
+        for (CfDef cfDef : cfDefs)
+        {
+            if (cfDef.name.equals(cfName))
+            {
+                return cfName;
+            }
+            else if (cfDef.name.toUpperCase().equals(cfName.toUpperCase()))
+            {
+                lastMatchedName = cfDef.name;
+                matches++;
+            }
+        }
+
+        if (matches > 1 || matches == 0)
+            throw new RuntimeException(cfName + " not found in current keyspace.");
+
+        return lastMatchedName;
+    }
+
+    public static String getKeySpace(Tree statement, List<KsDef> keyspaces)
     {
-        return astNode.getChild(0).getText();
+        return getKeySpace(statement.getChild(0).getText(), keyspaces);
+    }
+
+    public static String getKeySpace(String ksName, List<KsDef> keyspaces)
+    {
+        int matches = 0;
+        String lastMatchedName = "";
+
+        for (KsDef ksDef : keyspaces)
+        {
+            if (ksDef.name.equals(ksName))
+            {
+                return ksName;
+            }
+            else if (ksDef.name.toUpperCase().equals(ksName.toUpperCase()))
+            {
+                lastMatchedName = ksDef.name;
+                matches++;
+            }
+        }
+
+        if (matches > 1 || matches == 0)
+            throw new RuntimeException("Keyspace '" + ksName + "' not found.");
+
+        return lastMatchedName;
     }
 
     public static String getKey(Tree astNode)

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliMain.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliMain.java?rev=1036945&r1=1036944&r2=1036945&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliMain.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliMain.java Fri Nov 19 17:07:53 2010
@@ -93,7 +93,9 @@ public class CliMain
         
         if (sessionState.keyspace != null)
         {
-            try {
+            try
+            {
+                sessionState.keyspace = CliCompiler.getKeySpace(sessionState.keyspace, thriftClient.describe_keyspaces());;
                 thriftClient.set_keyspace(sessionState.keyspace);
                 cliClient.setKeySpace(sessionState.keyspace);
                 updateCompletor(CliUtils.getCfNamesByKeySpace(cliClient.getKSMetaData(sessionState.keyspace)));
@@ -284,15 +286,7 @@ public class CliMain
                 return;
             }
 
-            BufferedReader reader = new BufferedReader(fileReader);
-
-            String statement;
-
-            while ((statement = reader.readLine()) != null)
-            {
-                processStatement(statement);
-            }
-
+            evaluateFileStatements(new BufferedReader(fileReader));
             return;
         }
 
@@ -322,10 +316,57 @@ public class CliMain
 
         printBanner();
 
-        String line;
-        while ((line = reader.readLine(getPrompt(cliClient))) != null)
+        String prompt;
+        String line = "";
+        String currentStatement = "";
+        boolean inCompoundStatement = false;
+
+        while (line != null)
+        {
+            prompt = (inCompoundStatement) ? "\t" : getPrompt(cliClient);
+
+            line = reader.readLine(prompt).trim();
+
+            if (line.isEmpty())
+                continue;
+
+            currentStatement += line;
+
+            if (line.endsWith(";"))
+            {
+                processStatement(currentStatement);
+                currentStatement = "";
+                inCompoundStatement = false;
+            }
+            else
+            {
+                currentStatement += " "; // ready for new line
+                inCompoundStatement = true;
+            }
+        }
+    }
+
+    private static void evaluateFileStatements(BufferedReader reader) throws IOException
+    {
+        String line = "";
+        String currentStatement = "";
+
+        while ((line = reader.readLine()) != null)
         {
-            processStatement(line);
+            if (line.isEmpty())
+                continue;
+
+            currentStatement += line;
+
+            if (line.endsWith(";"))
+            {
+                processStatement(currentStatement);
+                currentStatement = "";
+            }
+            else
+            {
+                currentStatement += " "; // ready for new line
+            }
         }
     }
 

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUserHelp.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUserHelp.java?rev=1036945&r1=1036944&r2=1036945&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUserHelp.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUserHelp.java Fri Nov 19 17:07:53 2010
@@ -79,55 +79,55 @@ public class CliUserHelp {
             switch(helpType)
             {
             case CliParser.NODE_HELP:
-                state.out.println("help <command>\n");
+                state.out.println("help <command>;\n");
                 state.out.println("Display the general help page with a list of available commands.");
                 break;
             case CliParser.NODE_CONNECT:
-                state.out.println("connect <hostname>/<port>\n");
+                state.out.println("connect <hostname>/<port>;\n");
                 state.out.println("Connect to the specified host on the specified port.\n");
                 state.out.println("example:");
-                state.out.println("connect localhost/9160");
+                state.out.println("connect localhost/9160;");
                 break;
 
             case CliParser.NODE_USE_TABLE:
-                state.out.println("use <keyspace>");
-                state.out.println("use <keyspace> <username> '<password>'\n");
+                state.out.println("use <keyspace>;");
+                state.out.println("use <keyspace> <username> '<password>';\n");
                 state.out.println("Switch to the specified keyspace. The optional username and password fields");
                 state.out.println("are needed when performing authentication.\n");
                 break;
 
             case CliParser.NODE_DESCRIBE_TABLE:
-                state.out.println("describe keyspace <keyspace>\n");
+                state.out.println("describe keyspace <keyspace>;\n");
                 state.out.println("Show additional information about the specified keyspace.\n");
                 state.out.println("example:");
-                state.out.println("describe keyspace system");
+                state.out.println("describe keyspace system;");
                 break;
 
             case CliParser.NODE_EXIT:
-                state.out.println("exit");
-                state.out.println("quit\n");
+                state.out.println("exit;");
+                state.out.println("quit;\n");
                 state.out.println("Exit this utility.");
                 break;
 
             case CliParser.NODE_SHOW_CLUSTER_NAME:
-                state.out.println("show cluster name\n");
+                state.out.println("show cluster name;\n");
                 state.out.println("Displays the name of the currently connected cluster.");
                 break;
 
             case CliParser.NODE_SHOW_VERSION:
-                state.out.println("show api version\n");
+                state.out.println("show api version;\n");
                 state.out.println("Displays the API version number.");
                 break;
 
             case CliParser.NODE_SHOW_KEYSPACES:
-                state.out.println("show keyspaces\n");
+                state.out.println("show keyspaces;\n");
                 state.out.println("Displays a list of the keyspaces available on the currently connected cluster.");
                 break;
 
             case CliParser.NODE_ADD_KEYSPACE:
-                state.out.println("create keyspace <keyspace>");
-                state.out.println("create keyspace <keyspace> with <att1>=<value1>");
-                state.out.println("create keyspace <keyspace> with <att1>=<value1> and <att2>=<value2> ...\n");
+                state.out.println("create keyspace <keyspace>;");
+                state.out.println("create keyspace <keyspace> with <att1>=<value1>;");
+                state.out.println("create keyspace <keyspace> with <att1>=<value1> and <att2>=<value2> ...;\n");
                 state.out.println("Create a new keyspace with the specified values for the given set of attributes.\n");
                 state.out.println("valid attributes are:");
                 state.out.println("    replication_factor: to how many nodes should entries to this keyspace be");
@@ -141,13 +141,13 @@ public class CliUserHelp {
                 state.out.println("example:");
                 state.out.println("create keyspace foo with replication_factor = 3 and ");
                 state.out.println("        placement_strategy = 'org.apache.cassandra.locator.SimpleStrategy'");
-                state.out.println("        and strategy_options=[{DC1:2, DC2:2}]");
+                state.out.println("        and strategy_options=[{DC1:2, DC2:2}];");
                 break;
 
             case CliParser.NODE_UPDATE_KEYSPACE:
-                state.out.println("update keyspace <keyspace>");
-                state.out.println("update keyspace <keyspace> with <att1>=<value1>");
-                state.out.println("update keyspace <keyspace> with <att1>=<value1> and <att2>=<value2> ...\n");
+                state.out.println("update keyspace <keyspace>;");
+                state.out.println("update keyspace <keyspace> with <att1>=<value1>;");
+                state.out.println("update keyspace <keyspace> with <att1>=<value1> and <att2>=<value2> ...;\n");
                 state.out.println("Update a keyspace with the specified values for the given set of attributes.\n");
                 state.out.println("valid attributes are:");
                 state.out.println("    replication_factor: to how many nodes should entries to this keyspace be");
@@ -161,13 +161,13 @@ public class CliUserHelp {
                 state.out.println("example:");
                 state.out.println("update keyspace foo with replication_factor = 2 and ");
                 state.out.println("        placement_strategy = 'org.apache.cassandra.locator.LocalStrategy'");
-                state.out.println("        and strategy_options=[{DC1:1, DC2:4, DC3:2}]");
+                state.out.println("        and strategy_options=[{DC1:1, DC2:4, DC3:2}];");
                 break;
 
             case CliParser.NODE_ADD_COLUMN_FAMILY:
-                state.out.println("create column family Bar");
-                state.out.println("create column family Bar with <att1>=<value1>");
-                state.out.println("create column family Bar with <att1>=<value1> and <att2>=<value2>...\n");
+                state.out.println("create column family Bar;");
+                state.out.println("create column family Bar with <att1>=<value1>;");
+                state.out.println("create column family Bar with <att1>=<value1> and <att2>=<value2>...;\n");
                 state.out.println("Create a new column family with the specified values for the given set of");
                 state.out.println("attributes. Note that you must be using a keyspace.\n");
                 state.out.println("valid attributes are:");
@@ -179,17 +179,17 @@ public class CliUserHelp {
                 state.out.println("                          index_type (integer), index_name.");
                 state.out.println("example:\n");
                 state.out.println("create column family Bar with column_type = 'Super' and comparator = 'AsciiType'");
-                state.out.println("      and rows_cached = 10000");
-                state.out.println("create column family Baz with comparator = 'LongType' and rows_cached = 10000");
+                state.out.println("      and rows_cached = 10000;");
+                state.out.println("create column family Baz with comparator = 'LongType' and rows_cached = 10000;");
                 state.out.print("create column family Foo with comparator=LongType and column_metadata=");
                 state.out.print("[{ column_name:Test, validation_class:IntegerType, index_type:0, index_name:IdxName");
-                state.out.println("}, { column_name:'other name', validation_class:LongType }]");
+                state.out.println("}, { column_name:'other name', validation_class:LongType }];");
                 break;
 
             case CliParser.NODE_UPDATE_COLUMN_FAMILY:
-                state.out.println("update column family Bar");
-                state.out.println("update column family Bar with <att1>=<value1>");
-                state.out.println("update column family Bar with <att1>=<value1> and <att2>=<value2>...\n");
+                state.out.println("update column family Bar;");
+                state.out.println("update column family Bar with <att1>=<value1>;");
+                state.out.println("update column family Bar with <att1>=<value1> and <att2>=<value2>...;\n");
                 state.out.println("Update a column family with the specified values for the given set of");
                 state.out.println("attributes. Note that you must be using a keyspace.\n");
                 state.out.println("valid attributes are:");
@@ -206,103 +206,103 @@ public class CliUserHelp {
                 state.out.println("example:\n");
                 state.out.print("update column family Foo with column_metadata=");
                 state.out.print("[{ column_name:Test, validation_class:IntegerType, index_type:0, index_name:IdxName");
-                state.out.println("}] and rows_cached=100 and comment='this is helpful comment.'");
+                state.out.println("}] and rows_cached=100 and comment='this is helpful comment.';");
                 break;
 
             case CliParser.NODE_DEL_KEYSPACE:
-                state.out.println("drop keyspace <keyspace>\n");
+                state.out.println("drop keyspace <keyspace>;\n");
                 state.out.println("Drops the specified keyspace.\n");
                 state.out.println("example:");
-                state.out.println("drop keyspace foo");
+                state.out.println("drop keyspace foo;");
                 break;
 
             case CliParser.NODE_DEL_COLUMN_FAMILY:
-                state.out.println("drop column family <name>\n");
+                state.out.println("drop column family <name>;\n");
                 state.out.println("Drops the specified column family.\n");
                 state.out.println("example:");
-                state.out.println("drop column family foo");
+                state.out.println("drop column family foo;");
                 break;
 
             case CliParser.NODE_THRIFT_GET :
-                state.out.println("get <cf>['<key>']");
-                state.out.println("get <cf>['<key>']['<col>'] (as <type>)*");
-                state.out.println("get <cf>['<key>']['<super>']");
-                state.out.println("get <cf>['<key>'][<function>]");
-                state.out.println("get <cf>['<key>'][<function>(<super>)][<function>(<col>)]");
-                state.out.println("get <cf> where <column> = <value> [and <column> > <value> and ...] [limit <integer>]");
+                state.out.println("get <cf>['<key>'];");
+                state.out.println("get <cf>['<key>']['<col>'] (as <type>)*;");
+                state.out.println("get <cf>['<key>']['<super>'];");
+                state.out.println("get <cf>['<key>'][<function>];");
+                state.out.println("get <cf>['<key>'][<function>(<super>)][<function>(<col>)];");
+                state.out.println("get <cf> where <column> = <value> [and <column> > <value> and ...] [limit <integer>];");
                 state.out.println("Default LIMIT is 100. Available operations: =, >, >=, <, <=\n");
-                state.out.println("get <cf>['<key>']['<super>']['<col>'] (as <type>)*");
+                state.out.println("get <cf>['<key>']['<super>']['<col>'] (as <type>)*;");
                 state.out.print("Note: `as <type>` is optional, it dynamically converts column value to the specified type");
                 state.out.println(", column value validator will be set to <type>.");
                 state.out.println("Available functions: " + CliClient.Function.getFunctionNames());
                 state.out.println("Available types: IntegerType, LongType, UTF8Type, ASCIIType, TimeUUIDType, LexicalUUIDType.\n");
                 state.out.println("examples:");
-                state.out.println("get bar[testkey]");
-                state.out.println("get bar[testkey][test_column] as IntegerType");
-                state.out.println("get bar[testkey][utf8(hello)]");
+                state.out.println("get bar[testkey];");
+                state.out.println("get bar[testkey][test_column] as IntegerType;");
+                state.out.println("get bar[testkey][utf8(hello)];");
                 break;
 
             case CliParser.NODE_THRIFT_SET:
-                state.out.println("set <cf>['<key>']['<col>'] = <value>");
-                state.out.println("set <cf>['<key>']['<super>']['<col>'] = <value>");
-                state.out.println("set <cf>['<key>']['<col>'] = <function>(<argument>)");
-                state.out.println("set <cf>['<key>']['<super>']['<col>'] = <function>(<argument>)");
-                state.out.println("set <cf>[<key>][<function>(<col>)] = <value> || <function>");
+                state.out.println("set <cf>['<key>']['<col>'] = <value>;");
+                state.out.println("set <cf>['<key>']['<super>']['<col>'] = <value>;");
+                state.out.println("set <cf>['<key>']['<col>'] = <function>(<argument>);");
+                state.out.println("set <cf>['<key>']['<super>']['<col>'] = <function>(<argument>);");
+                state.out.println("set <cf>[<key>][<function>(<col>)] = <value> || <function>;");
                 state.out.println("Available functions: " + CliClient.Function.getFunctionNames() + "\n");
                 state.out.println("examples:");
-                state.out.println("set bar['testkey']['my super']['test col']='this is a test'");
-                state.out.println("set baz['testkey']['test col']='this is also a test'");
-                state.out.println("set diz[testkey][testcol] = utf8('this is utf8 string.')");
-                state.out.println("set bar[testkey][timeuuid()] = utf('hello world')");
+                state.out.println("set bar['testkey']['my super']['test col']='this is a test';");
+                state.out.println("set baz['testkey']['test col']='this is also a test';");
+                state.out.println("set diz[testkey][testcol] = utf8('this is utf8 string.');");
+                state.out.println("set bar[testkey][timeuuid()] = utf('hello world');");
                 break;
 
             case CliParser.NODE_THRIFT_DEL:
-                state.out.println("del <cf>['<key>'] ");
-                state.out.println("del <cf>['<key>']['<col>'] ");
-                state.out.println("del <cf>['<key>']['<super>']['<col>']\n");
+                state.out.println("del <cf>['<key>'];");
+                state.out.println("del <cf>['<key>']['<col>'];");
+                state.out.println("del <cf>['<key>']['<super>']['<col>'];\n");
                 state.out.println("Deletes a record, a column, or a subcolumn.\n");
                 state.out.println("example:");
-                state.out.println("del bar['testkey']['my super']['test col']");
-                state.out.println("del baz['testkey']['test col']");
-                state.out.println("del baz['testkey']");
+                state.out.println("del bar['testkey']['my super']['test col'];");
+                state.out.println("del baz['testkey']['test col'];");
+                state.out.println("del baz['testkey'];");
                 break;
 
             case CliParser.NODE_THRIFT_COUNT:
-                state.out.println("count <cf>['<key>']");
-                state.out.println("count <cf>['<key>']['<super>']\n");
+                state.out.println("count <cf>['<key>'];");
+                state.out.println("count <cf>['<key>']['<super>'];\n");
                 state.out.println("Count the number of columns in the specified key or subcolumns in the specified");
                 state.out.println("super column.\n");
                 state.out.println("example:");
-                state.out.println("count bar['testkey']['my super']");
-                state.out.println("count baz['testkey']");
+                state.out.println("count bar['testkey']['my super'];");
+                state.out.println("count baz['testkey'];");
                 break;
 
             case CliParser.NODE_LIST:
-                state.out.println("list <cf>");
-                state.out.println("list <cf>[<startKey>:]");
-                state.out.println("list <cf>[<startKey>:<endKey>]");
-                state.out.println("list ... limit N");
+                state.out.println("list <cf>;");
+                state.out.println("list <cf>[<startKey>:];");
+                state.out.println("list <cf>[<startKey>:<endKey>];");
+                state.out.println("list ... limit N;");
                 state.out.println("List a range of rows in the column or supercolumn family.\n");
                 state.out.println("example:");
-                state.out.println("list Users[j:] limit 40");
+                state.out.println("list Users[j:] limit 40;");
                 break;
 
             case CliParser.NODE_TRUNCATE:
-                state.out.println("truncate <column_family>");
+                state.out.println("truncate <column_family>;");
                 state.out.println("Truncate specified column family.\n");
                 state.out.println("example:");
-                state.out.println("truncate Category");
+                state.out.println("truncate Category;");
                 break;
 
             case CliParser.NODE_ASSUME:
-                state.out.println("assume <column_family> comparator as <type>");
-                state.out.println("assume <column_family> sub_comparator as <type>");
-                state.out.println("assume <column_family> validator as <type>");
-                state.out.println("assume <column_family> keys as <type>\n");
+                state.out.println("assume <column_family> comparator as <type>;");
+                state.out.println("assume <column_family> sub_comparator as <type>;");
+                state.out.println("assume <column_family> validator as <type>;");
+                state.out.println("assume <column_family> keys as <type>;\n");
                 state.out.println("Assume one of the attributes (comparator, sub_comparator, validator or keys)");
                 state.out.println("of the given column family to match specified type. Available types: " + CliClient.Function.getFunctionNames());
                 state.out.println("example:");
-                state.out.println("assume Users comparator as lexicaluuid");
+                state.out.println("assume Users comparator as lexicaluuid;");
                 break;
 
             default:
@@ -314,47 +314,47 @@ public class CliUserHelp {
         {
             state.out.println("List of all CLI commands:");
             state.out.println("?                                                          Display this message.");
-            state.out.println("help                                                          Display this help.");
-            state.out.println("help <command>                          Display detailed, command-specific help.");
-            state.out.println("connect <hostname>/<port>                             Connect to thrift service.");
-            state.out.println("use <keyspace> [<username> 'password']                     Switch to a keyspace.");
-            state.out.println("describe keyspace <keyspacename>                              Describe keyspace.");
-            state.out.println("exit                                                                   Exit CLI.");
-            state.out.println("quit                                                                   Exit CLI.");
-            state.out.println("show cluster name                                          Display cluster name.");
-            state.out.println("show keyspaces                                           Show list of keyspaces.");
-            state.out.println("show api version                                        Show server API version.");
-            state.out.println("create keyspace <keyspace> [with <att1>=<value1> [and <att2>=<value2> ...]]");
+            state.out.println("help;                                                          Display this help.");
+            state.out.println("help <command>;                          Display detailed, command-specific help.");
+            state.out.println("connect <hostname>/<port>;                             Connect to thrift service.");
+            state.out.println("use <keyspace> [<username> 'password'];                     Switch to a keyspace.");
+            state.out.println("describe keyspace <keyspacename>;                              Describe keyspace.");
+            state.out.println("exit;                                                                   Exit CLI.");
+            state.out.println("quit;                                                                   Exit CLI.");
+            state.out.println("show cluster name;                                          Display cluster name.");
+            state.out.println("show keyspaces;                                           Show list of keyspaces.");
+            state.out.println("show api version;                                        Show server API version.");
+            state.out.println("create keyspace <keyspace> [with <att1>=<value1> [and <att2>=<value2> ...]];");
             state.out.println("                Add a new keyspace with the specified attribute(s) and value(s).");
-            state.out.println("update keyspace <keyspace> [with <att1>=<value1> [and <att2>=<value2> ...]]");
+            state.out.println("update keyspace <keyspace> [with <att1>=<value1> [and <att2>=<value2> ...]];");
             state.out.println("                 Update a keyspace with the specified attribute(s) and value(s).");
-            state.out.println("create column family <cf> [with <att1>=<value1> [and <att2>=<value2> ...]]");
+            state.out.println("create column family <cf> [with <att1>=<value1> [and <att2>=<value2> ...]];");
             state.out.println("        Create a new column family with the specified attribute(s) and value(s).");
-            state.out.println("update column family <cf> [with <att1>=<value1> [and <att2>=<value2> ...]]");
+            state.out.println("update column family <cf> [with <att1>=<value1> [and <att2>=<value2> ...]];");
             state.out.println("            Update a column family with the specified attribute(s) and value(s).");
-            state.out.println("drop keyspace <keyspace>                                      Delete a keyspace.");
-            state.out.println("drop column family <cf>                                  Delete a column family.");
-            state.out.println("get <cf>['<key>']                                        Get a slice of columns.");
-            state.out.println("get <cf>['<key>']['<super>']                         Get a slice of sub columns.");
-            state.out.println("get <cf> where <column> = <value> [and <column> > <value> and ...] [limit int]. ");
-            state.out.println("get <cf>['<key>']['<col>'] (as <type>)*                      Get a column value.");
-            state.out.println("get <cf>['<key>']['<super>']['<col>'] (as <type>)*       Get a sub column value.");
-            state.out.println("set <cf>['<key>']['<col>'] = <value>                               Set a column.");
-            state.out.println("set <cf>['<key>']['<super>']['<col>'] = <value>                Set a sub column.");
-            state.out.println("del <cf>['<key>']                                                 Delete record.");
-            state.out.println("del <cf>['<key>']['<col>']                                        Delete column.");
-            state.out.println("del <cf>['<key>']['<super>']['<col>']                         Delete sub column.");
-            state.out.println("count <cf>['<key>']                                     Count columns in record.");
-            state.out.println("count <cf>['<key>']['<super>']                  Count columns in a super column.");
-            state.out.println("truncate <column_family>                       Truncate specified column family.");
-            state.out.println("assume <column_family> <attribute> as <type>");
-            state.out.println("Assume one of the attributes of the given column family to match specified type.");
-            state.out.println("list <cf>                                    List all rows in the column family.");
-            state.out.println("list <cf>[<startKey>:]");
-            state.out.println("                       List rows in the column family beginning with <startKey>.");
-            state.out.println("list <cf>[<startKey>:<endKey>]");
-            state.out.println("        List rows in the column family in the range from <startKey> to <endKey>.");
-            state.out.println("list ... limit N                                    Limit the list results to N.");
+            state.out.println("drop keyspace <keyspace>;                                      Delete a keyspace.");
+            state.out.println("drop column family <cf>;                                  Delete a column family.");
+            state.out.println("get <cf>['<key>'];                                        Get a slice of columns.");
+            state.out.println("get <cf>['<key>']['<super>'];                         Get a slice of sub columns.");
+            state.out.println("get <cf> where <column> = <value> [and <column> > <value> and ...] [limit int];  ");
+            state.out.println("get <cf>['<key>']['<col>'] (as <type>)*;                      Get a column value.");
+            state.out.println("get <cf>['<key>']['<super>']['<col>'] (as <type>)*;       Get a sub column value.");
+            state.out.println("set <cf>['<key>']['<col>'] = <value>;                               Set a column.");
+            state.out.println("set <cf>['<key>']['<super>']['<col>'] = <value>;                Set a sub column.");
+            state.out.println("del <cf>['<key>'];                                                 Delete record.");
+            state.out.println("del <cf>['<key>']['<col>'];                                        Delete column.");
+            state.out.println("del <cf>['<key>']['<super>']['<col>'];                         Delete sub column.");
+            state.out.println("count <cf>['<key>'];                                     Count columns in record.");
+            state.out.println("count <cf>['<key>']['<super>'];                  Count columns in a super column.");
+            state.out.println("truncate <column_family>;                       Truncate specified column family.");
+            state.out.println("assume <column_family> <attribute> as <type>;");
+            state.out.println(" Assume one of the attributes of the given column family to match specified type.");
+            state.out.println("list <cf>;                                    List all rows in the column family.");
+            state.out.println("list <cf>[<startKey>:];");
+            state.out.println("                        List rows in the column family beginning with <startKey>.");
+            state.out.println("list <cf>[<startKey>:<endKey>];");
+            state.out.println("         List rows in the column family in the range from <startKey> to <endKey>.");
+            state.out.println("list ... limit N;                                    Limit the list results to N.");
         }
     }
 

Modified: cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java?rev=1036945&r1=1036944&r2=1036945&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java (original)
+++ cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/cli/CliTest.java Fri Nov 19 17:07:53 2010
@@ -35,66 +35,76 @@ public class CliTest extends CleanupHelp
 {
     // please add new statements here so they could be auto-runned by this test.
     private String[] statements = {
-        "use TestKeySpace",
-        "create column family CF1 with comparator=UTF8Type and column_metadata=[{ column_name:world, validation_class:IntegerType, index_type:0, index_name:IdxName }, { column_name:world2, validation_class:LongType, index_type:0, index_name:LongIdxName}]",
-        "set CF1[hello][world] = 123848374878933948398384",
-        "get CF1[hello][world]",
-        "set CF1[hello][world2] = 15",
-        "get CF1 where world2 = long(15)",
-        "set CF1['hello'][time_spent_uuid] = timeuuid(a8098c1a-f86e-11da-bd1a-00112444be1e)",
-        "create column family CF2 with comparator=IntegerType",
-        "set CF2['key'][98349387493847748398334] = 'some text'",
-        "get CF2['key'][98349387493847748398334]",
-        "set CF2['key'][98349387493] = 'some text other'",
-        "get CF2['key'][98349387493]",
-        "create column family CF3 with comparator=UTF8Type and column_metadata=[{column_name:'big world', validation_class:LongType}]",
-        "set CF3['hello']['big world'] = 3748",
-        "get CF3['hello']['big world']",
-        "list CF3",
-        "list CF3[:]",
-        "list CF3[h:]",
-        "list CF3 limit 10",
-        "list CF3[h:] limit 10",
-        "create column family CF4 with comparator=IntegerType and column_metadata=[{column_name:9999, validation_class:LongType}]",
-        "set CF4['hello'][9999] = 1234",
-        "get CF4['hello'][9999]",
-        "get CF4['hello'][9999] as Long",
-        "get CF4['hello'][9999] as Bytes",
-        "set CF4['hello'][9999] = Long(1234)",
-        "get CF4['hello'][9999]",
-        "get CF4['hello'][9999] as Long",
-        "del CF4['hello'][9999]",
-        "get CF4['hello'][9999]",
-        "create column family SCF1 with column_type=Super and comparator=IntegerType and subcomparator=LongType and column_metadata=[{column_name:9999, validation_class:LongType}]",
-        "set SCF1['hello'][1][9999] = 1234",
-        "get SCF1['hello'][1][9999]",
-        "get SCF1['hello'][1][9999] as Long",
-        "get SCF1['hello'][1][9999] as Bytes",
-        "set SCF1['hello'][1][9999] = Long(1234)",
-        "get SCF1['hello'][1][9999]",
-        "get SCF1['hello'][1][9999] as Long",
-        "del SCF1['hello'][1][9999]",
-        "get SCF1['hello'][1][9999]",
-        "set SCF1['hello'][1][9999] = Long(1234)",
-        "del SCF1['hello'][9999]",
-        "get SCF1['hello'][1][9999]",
-        "truncate CF1",
-        "update keyspace TestKeySpace with placement_strategy='org.apache.cassandra.locator.LocalStrategy'",
-        "update keyspace TestKeySpace with replication_factor=1 and strategy_options=[{DC1:3, DC2:4, DC5:1}]",
-        "assume CF1 comparator as utf8",
-        "assume CF1 sub_comparator as integer",
-        "assume CF1 validator as lexicaluuid",
-        "assume CF1 keys as timeuuid",
-        "create column family CF7",
-        "set CF7[1][timeuuid()] = utf8(test1)",
-        "set CF7[2][lexicaluuid()] = utf8('hello world!')",
-        "set CF7[3][lexicaluuid(550e8400-e29b-41d4-a716-446655440000)] = utf8(test2)",
-        "set CF7[key2][timeuuid()] = utf8(test3)",
-        "assume CF7 comparator as lexicaluuid",
-        "assume CF7 keys as utf8",
-        "list CF7",
-        "get CF7[3]",
-        "get CF7[3][lexicaluuid(550e8400-e29b-41d4-a716-446655440000)]"
+        "use TestKeySpace;",
+        "create column family CF1 with comparator=UTF8Type and column_metadata=[{ column_name:world, validation_class:IntegerType, index_type:0, index_name:IdxName }, { column_name:world2, validation_class:LongType, index_type:0, index_name:LongIdxName}];",
+        "set CF1[hello][world] = 123848374878933948398384;",
+        "get CF1[hello][world];",
+        "set CF1[hello][world2] = 15;",
+        "get CF1 where world2 = long(15);",
+        "set CF1['hello'][time_spent_uuid] = timeuuid(a8098c1a-f86e-11da-bd1a-00112444be1e);",
+        "create column family CF2 with comparator=IntegerType;",
+        "set CF2['key'][98349387493847748398334] = 'some text';",
+        "get CF2['key'][98349387493847748398334];",
+        "set CF2['key'][98349387493] = 'some text other';",
+        "get CF2['key'][98349387493];",
+        "create column family CF3 with comparator=UTF8Type and column_metadata=[{column_name:'big world', validation_class:LongType}];",
+        "set CF3['hello']['big world'] = 3748;",
+        "get CF3['hello']['big world'];",
+        "list CF3;",
+        "list CF3[:];",
+        "list CF3[h:];",
+        "list CF3 limit 10;",
+        "list CF3[h:] limit 10;",
+        "create column family CF4 with comparator=IntegerType and column_metadata=[{column_name:9999, validation_class:LongType}];",
+        "set CF4['hello'][9999] = 1234;",
+        "get CF4['hello'][9999];",
+        "get CF4['hello'][9999] as Long;",
+        "get CF4['hello'][9999] as Bytes;",
+        "set CF4['hello'][9999] = Long(1234);",
+        "get CF4['hello'][9999];",
+        "get CF4['hello'][9999] as Long;",
+        "del CF4['hello'][9999];",
+        "get CF4['hello'][9999];",
+        "create column family SCF1 with column_type=Super and comparator=IntegerType and subcomparator=LongType and column_metadata=[{column_name:9999, validation_class:LongType}];",
+        "set SCF1['hello'][1][9999] = 1234;",
+        "get SCF1['hello'][1][9999];",
+        "get SCF1['hello'][1][9999] as Long;",
+        "get SCF1['hello'][1][9999] as Bytes;",
+        "set SCF1['hello'][1][9999] = Long(1234);",
+        "get SCF1['hello'][1][9999];",
+        "get SCF1['hello'][1][9999] as Long;",
+        "del SCF1['hello'][1][9999];",
+        "get SCF1['hello'][1][9999];",
+        "set SCF1['hello'][1][9999] = Long(1234);",
+        "del SCF1['hello'][9999];",
+        "get SCF1['hello'][1][9999];",
+        "truncate CF1;",
+        "update keyspace TestKeySpace with placement_strategy='org.apache.cassandra.locator.LocalStrategy';",
+        "update keyspace TestKeySpace with replication_factor=1 and strategy_options=[{DC1:3, DC2:4, DC5:1}];",
+        "assume CF1 comparator as utf8;",
+        "assume CF1 sub_comparator as integer;",
+        "assume CF1 validator as lexicaluuid;",
+        "assume CF1 keys as timeuuid;",
+        "create column family CF7;",
+        "set CF7[1][timeuuid()] = utf8(test1);",
+        "set CF7[2][lexicaluuid()] = utf8('hello world!');",
+        "set CF7[3][lexicaluuid(550e8400-e29b-41d4-a716-446655440000)] = utf8(test2);",
+        "set CF7[key2][timeuuid()] = utf8(test3);",
+        "assume CF7 comparator as lexicaluuid;",
+        "assume CF7 keys as utf8;",
+        "list CF7;",
+        "get CF7[3];",
+        "get CF7[3][lexicaluuid(550e8400-e29b-41d4-a716-446655440000)];",
+        "get sCf1['hello'][1][9999];",
+        "set sCf1['hello'][1][9999] = 938;",
+        "list sCf1;",
+        "del SCF1['hello'][1][9999];",
+        "assume sCf1 comparator as utf8;",
+        "create column family CF8;",
+        "drop column family cF8;",
+        "create keyspace TESTIN;",
+        "drop keyspace tesTIN;",
+        "use TestKEYSpace;",
     };
     
     @Test
@@ -115,8 +125,8 @@ public class CliTest extends CleanupHelp
 
         // re-creating keyspace for tests
         // dropping in case it exists e.g. could be left from previous run
-        CliMain.processStatement("drop keyspace TestKeySpace");
-        CliMain.processStatement("create keyspace TestKeySpace");
+        CliMain.processStatement("drop keyspace TestKeySpace;");
+        CliMain.processStatement("create keyspace TestKeySpace;");
 
         for (String statement : statements)
         {



Mime
View raw message