You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ee...@apache.org on 2009/08/10 21:34:46 UTC
svn commit: r802909 - in
/incubator/cassandra/trunk/src/java/org/apache/cassandra/cli: Cli.g
CliClient.java CliCompiler.java CliMain.java CliUtils.java
Author: eevans
Date: Mon Aug 10 19:34:45 2009
New Revision: 802909
URL: http://svn.apache.org/viewvc?rev=802909&view=rev
Log:
CASSANDRA-296 remove CQL support from the CLI
Added:
incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliUtils.java
Modified:
incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/Cli.g
incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliCompiler.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/Cli.g
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/Cli.g?rev=802909&r1=802908&r2=802909&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/Cli.g (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/Cli.g Mon Aug 10 19:34:45 2009
@@ -16,13 +16,7 @@
* limitations under the License.
*/
-//
// ANTLR Grammar for the Cassandra Command Line Interface (CLI).
-//
-// Note: This grammar handles all but the CQL statements. CQL
-// statements are detected separately (based on the first token)
-// and directly sent to server-side for processing.
-//
grammar Cli;
@@ -99,11 +93,11 @@
;
getStmt
- : K_THRIFT K_GET columnFamilyExpr -> ^(NODE_THRIFT_GET columnFamilyExpr)
+ : K_GET columnFamilyExpr -> ^(NODE_THRIFT_GET columnFamilyExpr)
;
setStmt
- : K_THRIFT K_SET columnFamilyExpr '=' value -> ^(NODE_THRIFT_SET columnFamilyExpr value)
+ : K_SET columnFamilyExpr '=' value -> ^(NODE_THRIFT_SET columnFamilyExpr value)
;
showStmt
@@ -180,7 +174,6 @@
K_SHOW: 'SHOW';
K_TABLE: 'KEYSPACE';
K_TABLES: 'KEYSPACES';
-K_THRIFT: 'THRIFT';
K_VERSION: 'VERSION';
// private syntactic rules
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java?rev=802909&r1=802908&r2=802909&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java Mon Aug 10 19:34:45 2009
@@ -20,9 +20,7 @@
import org.apache.thrift.*;
import org.antlr.runtime.tree.*;
-import org.apache.cassandra.cql.common.Utils;
import org.apache.cassandra.service.*;
-import org.apache.cassandra.utils.LogUtil;
import java.util.*;
import java.io.UnsupportedEncodingException;
@@ -91,23 +89,19 @@
private void printCmdHelp()
{
css_.out.println("List of all CLI commands:");
- css_.out.println("? Same as help.");
- css_.out.println("connect <hostname>/<port> Connect to Cassandra's thrift service.");
- css_.out.println("describe keyspace <keyspacename> Describe keyspace.");
- css_.out.println("exit Exit CLI.");
- css_.out.println("explain plan [<set stmt>|<get stmt>|<select stmt>] Explains the PLAN for specified stmt.");
- css_.out.println("help Display this help.");
- css_.out.println("quit Exit CLI.");
- css_.out.println("show config file Display contents of config file");
- css_.out.println("show cluster name Display cassandra server version");
- css_.out.println("show keyspaces Show list of keyspaces.");
- css_.out.println("show version Show server version.");
- css_.out.println("select ... CQL select statement (TBD).");
- css_.out.println("get ... CQL data retrieval statement.");
- css_.out.println("set ... CQL DML statement.");
- css_.out.println("thrift get <tbl>.<cf>['<rowKey>'] (will be deprecated)");
- css_.out.println("thrift get <tbl>.<cf>['<rowKey>']['<colKey>'] (will be deprecated)");
- css_.out.println("thrift set <tbl>.<cf>['<rowKey>']['<colKey>'] = '<value>' (will be deprecated)");
+ css_.out.println("? Same as help.");
+ css_.out.println("connect <hostname>/<port> Connect to Cassandra's thrift service.");
+ css_.out.println("describe keyspace <keyspacename> Describe keyspace.");
+ css_.out.println("exit Exit CLI.");
+ css_.out.println("help Display this help.");
+ css_.out.println("quit Exit CLI.");
+ css_.out.println("show config file Display contents of config file");
+ css_.out.println("show cluster name Display cluster name.");
+ css_.out.println("show keyspaces Show list of keyspaces.");
+ css_.out.println("show version Show server version.");
+ css_.out.println("get <tbl>.<cf>['<rowKey>'] Get a slice of columns.");
+ css_.out.println("get <tbl>.<cf>['<rowKey>']['<colKey>'] Get a column value.");
+ css_.out.println("set <tbl>.<cf>['<rowKey>']['<colKey>'] = '<value>' Set a column.");
}
private void cleanupAndExit()
@@ -143,8 +137,18 @@
for (ColumnOrSuperColumn cosc : columns)
{
Column column = cosc.column;
- css_.out.printf(" (column=%s, value=%s; timestamp=%d)\n",
- column.name, column.value, column.timestamp);
+ try
+ {
+ css_.out.printf(" (column=%s, value=%s; timestamp=%d)\n",
+ new String(column.name, "UTF-8"),
+ new String(column.value, "UTF-8"),
+ column.timestamp);
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ css_.out.printf("Cannot display results (UTF-8 not supported).");
+ break;
+ }
}
css_.out.println("Returned " + size + " rows.");
}
@@ -184,7 +188,7 @@
String key = CliCompiler.getKey(columnFamilySpec);
String columnFamily = CliCompiler.getColumnFamily(columnFamilySpec);
int columnSpecCnt = CliCompiler.numColumnSpecifiers(columnFamilySpec);
- String value = Utils.unescapeSQLString(ast.getChild(1).getText());
+ String value = CliUtils.unescapeSQLString(ast.getChild(1).getText());
// assume simple columnFamily for now
if (columnSpecCnt == 1)
@@ -293,44 +297,4 @@
css_.thriftPort = portNumber;
CliMain.connect(css_.hostName, css_.thriftPort);
}
-
- // execute CQL query on server
- public void executeQueryOnServer(String query) throws TException
- {
- if (!CliMain.isConnected())
- return;
-
- CqlResult result = thriftClient_.execute_query(query);
-
- if (result == null)
- {
- css_.out.println("Unexpected error. Received null result from server.");
- return;
- }
-
- if ((result.error_txt != null) || (result.error_code != 0))
- {
- css_.out.println("Error: " + result.error_txt);
- }
- else
- {
- List<Map<String, String>> rows = result.result_set;
-
- if (rows != null)
- {
- for (Map<String, String> row : rows)
- {
- for (Iterator<Map.Entry<String, String>> it = row.entrySet().iterator(); it.hasNext(); )
- {
- Map.Entry<String, String> entry = it.next();
- String key = entry.getKey();
- String value = entry.getValue();
- css_.out.print(key + " = " + value + "; ");
- }
- css_.out.println();
- }
- }
- css_.out.println("Statement processed.");
- }
- }
}
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliCompiler.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliCompiler.java?rev=802909&r1=802908&r2=802909&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliCompiler.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliCompiler.java Mon Aug 10 19:34:45 2009
@@ -20,7 +20,6 @@
import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
-import org.apache.cassandra.cql.common.Utils;
public class CliCompiler
@@ -104,7 +103,7 @@
{
assert(astNode.getType() == CliParser.NODE_COLUMN_ACCESS);
- return Utils.unescapeSQLString(astNode.getChild(2).getText());
+ return CliUtils.unescapeSQLString(astNode.getChild(2).getText());
}
public static int numColumnSpecifiers(CommonTree astNode)
@@ -117,7 +116,7 @@
public static String getColumn(CommonTree astNode, int pos)
{
// Skip over table, column family and rowKey
- return Utils.unescapeSQLString(astNode.getChild(pos + 3).getText());
+ return CliUtils.unescapeSQLString(astNode.getChild(pos + 3).getText());
}
}
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java?rev=802909&r1=802908&r2=802909&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java Mon Aug 10 19:34:45 2009
@@ -24,7 +24,6 @@
import jline.*;
import java.io.*;
-import java.util.*;
import org.apache.cassandra.service.Cassandra;
@@ -96,23 +95,6 @@
}
return true;
}
-
- private static void processServerQuery(String query)
- {
- if (!isConnected())
- return;
-
- try
- {
- cliClient_.executeQueryOnServer(query);
- }
- catch(Exception e)
- {
- System.err.println("Exception " + e.getMessage());
- e.printStackTrace(System.err);
- }
- return;
- }
private static void processCLIStmt(String query)
{
@@ -128,32 +110,6 @@
return;
}
- private static void processLine(String line)
- {
- StringTokenizer tokenizer = new StringTokenizer(line);
- if (tokenizer.hasMoreTokens())
- {
- // Use first token for now to determine if this statement is
- // a CQL statement. Technically, the line could start with
- // a comment token followed by a CQL statement. That case
- // isn't handled right now.
- String token = tokenizer.nextToken().toUpperCase();
- if (token.startsWith("GET")
- || token.startsWith("SELECT")
- || token.startsWith("SET")
- || token.startsWith("DELETE")
- || token.startsWith("EXPLAIN")) // explain plan statement
- {
- // these are CQL Statements that are compiled and executed on server-side
- processServerQuery(line);
- }
- else
- {
- // These are CLI statements processed locally
- processCLIStmt(line);
- }
- }
- }
public static void main(String args[]) throws IOException
{
@@ -184,7 +140,7 @@
String line;
while ((line = reader.readLine(PROMPT+"> ")) != null)
{
- processLine(line);
+ processCLIStmt(line);
}
}
}
Added: incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliUtils.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliUtils.java?rev=802909&view=auto
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliUtils.java (added)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/cli/CliUtils.java Mon Aug 10 19:34:45 2009
@@ -0,0 +1,44 @@
+package org.apache.cassandra.cli;
+
+public class CliUtils
+{
+ /*
+ * Strips leading and trailing "'" characters, and handles
+ * and escaped characters such as \n, \r, etc.
+ * [Shameless clone from hive.]
+ */
+ public static String unescapeSQLString(String b)
+ {
+ assert(b.charAt(0) == '\'');
+ assert(b.charAt(b.length()-1) == '\'');
+ StringBuilder sb = new StringBuilder(b.length());
+
+ for (int i=1; i+1<b.length(); i++)
+ {
+ if (b.charAt(i) == '\\' && i+2<b.length())
+ {
+ char n=b.charAt(i+1);
+ switch(n)
+ {
+ case '0': sb.append("\0"); break;
+ case '\'': sb.append("'"); break;
+ case '"': sb.append("\""); break;
+ case 'b': sb.append("\b"); break;
+ case 'n': sb.append("\n"); break;
+ case 'r': sb.append("\r"); break;
+ case 't': sb.append("\t"); break;
+ case 'Z': sb.append("\u001A"); break;
+ case '\\': sb.append("\\"); break;
+ case '%': sb.append("%"); break;
+ case '_': sb.append("_"); break;
+ default: sb.append(n);
+ }
+ }
+ else
+ {
+ sb.append(b.charAt(i));
+ }
+ }
+ return sb.toString();
+ }
+}