You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2011/07/15 19:33:51 UTC
svn commit: r1147259 - in /cassandra/branches/cassandra-0.8:
src/java/org/apache/cassandra/cli/CliClient.java
test/unit/org/apache/cassandra/cli/CliTest.java
Author: brandonwilliams
Date: Fri Jul 15 17:33:50 2011
New Revision: 1147259
URL: http://svn.apache.org/viewvc?rev=1147259&view=rev
Log:
Proper function support and key validation for cli deletes.
Patch by Pavel Yaskevich, reviewed by brandonwilliams for CASSANDRA-2821
Modified:
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliClient.java
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java
Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliClient.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliClient.java?rev=1147259&r1=1147258&r2=1147259&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliClient.java (original)
+++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliClient.java Fri Jul 15 17:33:50 2011
@@ -376,13 +376,14 @@ public class CliClient
Tree columnFamilySpec = statement.getChild(0);
- String key = CliCompiler.getKey(columnFamilySpec);
String columnFamily = CliCompiler.getColumnFamily(columnFamilySpec, keyspacesMap.get(keySpace).cf_defs);
+ CfDef cfDef = getCfDef(columnFamily);
+
+ ByteBuffer key = getKeyAsBytes(columnFamily, columnFamilySpec.getChild(1));
int columnSpecCnt = CliCompiler.numColumnSpecifiers(columnFamilySpec);
byte[] superColumnName = null;
byte[] columnName = null;
- CfDef cfDef = getCfDef(columnFamily);
boolean isSuper = cfDef.column_type.equals("Super");
if ((columnSpecCnt < 0) || (columnSpecCnt > 2))
@@ -390,20 +391,42 @@ public class CliClient
sessionState.out.println("Invalid row, super column, or column specification.");
return;
}
-
+
+ Tree columnTree = (columnSpecCnt >= 1)
+ ? columnFamilySpec.getChild(2)
+ : null;
+
+ Tree subColumnTree = (columnSpecCnt == 2)
+ ? columnFamilySpec.getChild(3)
+ : null;
+
if (columnSpecCnt == 1)
{
+ assert columnTree != null;
+
+ byte[] columnNameBytes = (columnTree.getType() == CliParser.FUNCTION_CALL)
+ ? convertValueByFunction(columnTree, null, null).array()
+ : columnNameAsByteArray(CliCompiler.getColumn(columnFamilySpec, 0), cfDef);
+
// table.cf['key']['column']
if (isSuper)
- superColumnName = columnNameAsByteArray(CliCompiler.getColumn(columnFamilySpec, 0), cfDef);
+ superColumnName = columnNameBytes;
else
- columnName = columnNameAsByteArray(CliCompiler.getColumn(columnFamilySpec, 0), cfDef);
+ columnName = columnNameBytes;
}
else if (columnSpecCnt == 2)
{
+ assert columnTree != null;
+ assert subColumnTree != null;
+
// table.cf['key']['column']['column']
- superColumnName = columnNameAsByteArray(CliCompiler.getColumn(columnFamilySpec, 0), cfDef);
- columnName = subColumnNameAsByteArray(CliCompiler.getColumn(columnFamilySpec, 1), cfDef);
+ superColumnName = (columnTree.getType() == CliParser.FUNCTION_CALL)
+ ? convertValueByFunction(columnTree, null, null).array()
+ : columnNameAsByteArray(CliCompiler.getColumn(columnFamilySpec, 0), cfDef);
+
+ columnName = (subColumnTree.getType() == CliParser.FUNCTION_CALL)
+ ? convertValueByFunction(subColumnTree, null, null).array()
+ : subColumnNameAsByteArray(CliCompiler.getColumn(columnFamilySpec, 1), cfDef);
}
ColumnPath path = new ColumnPath(columnFamily);
@@ -415,12 +438,11 @@ public class CliClient
if (isCounterCF(cfDef))
{
- thriftClient.remove_counter(ByteBufferUtil.bytes(key), path, consistencyLevel);
+ thriftClient.remove_counter(key, path, consistencyLevel);
}
else
{
- thriftClient.remove(ByteBufferUtil.bytes(key), path,
- FBUtilities.timestampMicros(), consistencyLevel);
+ thriftClient.remove(key, path, FBUtilities.timestampMicros(), consistencyLevel);
}
sessionState.out.println(String.format("%s removed.", (columnSpecCnt == 0) ? "row" : "column"));
}
Modified: cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java?rev=1147259&r1=1147258&r2=1147259&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java (original)
+++ cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java Fri Jul 15 17:33:50 2011
@@ -54,6 +54,8 @@ public class CliTest extends CleanupHelp
"get CF1 where world2 = long(15);",
"get cF1 where world2 = long(15);",
"get Cf1 where world2 = long(15);",
+ "del CF1[utf8('hello')][utf8('world')];",
+ "del CF1[hello][world2];",
"set CF1['hello'][time_spent_uuid] = timeuuid(a8098c1a-f86e-11da-bd1a-00112444be1e);",
"create column family CF2 with comparator=IntegerType;",
"assume CF2 keys as utf8;",