Author: jbellis Date: Wed May 18 14:07:55 2011 New Revision: 1124273 URL: http://svn.apache.org/viewvc?rev=1124273&view=rev Log: add DROP INDEX support to CLI patch by pyaskevich; reviewed by jbellis for CASSANDRA-2616
Modified: cassandra/branches/cassandra-0.8/CHANGES.txt cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/Cli.g cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/CliClient.java cassandra/branches/cassandra-0.8/src/resources/org/apache/cassandra/cli/CliHelp.yaml cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java Modified: cassandra/branches/cassandra-0.8/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/CHANGES.txt?rev=1124273&r1=1124272&r2=1124273&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/CHANGES.txt (original) +++ cassandra/branches/cassandra-0.8/CHANGES.txt Wed May 18 14:07:55 2011 @@ -4,9 +4,10 @@ * update CQL consistency levels (CASSANDRA-2566) * mark BRAF buffer invalid post-flush so we don't re-flush partial buffers again, especially on CL writes (CASSANDRA-2660) + * add DROP INDEX support to CLI (CASSANDRA-2616) -0.8.0-rc1 +0.8.0-rc1 * faster flushes and compaction from fixing excessively pessimistic rebuffering in BRAF (CASSANDRA-2581) * fix returning null column values in the python cql driver (CASSANDRA-2593) Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/Cli.g URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/Cli.g?rev=1124273&r1=1124272&r2=1124273&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/Cli.g (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cli/Cli.g Wed May 18 14:07:55 2011 @@ -61,6 +61,7 @@ tokens { NODE_TRUNCATE; NODE_ASSUME; NODE_CONSISTENCY_LEVEL; + NODE_DROP_INDEX; // Internal Nodes. NODE_COLUMN_ACCESS; @@ -160,6 +161,7 @@ statement | truncateStatement | assumeStatement | consistencyLevelStatement + | dropIndex | -> ^(NODE_NO_OP) ; @@ -203,6 +205,8 @@ helpStatement -> ^(NODE_HELP NODE_DEL_KEYSPACE) | HELP DROP COLUMN FAMILY -> ^(NODE_HELP NODE_DEL_COLUMN_FAMILY) + | HELP DROP INDEX + -> ^(NODE_HELP NODE_DROP_INDEX) | HELP GET -> ^(NODE_HELP NODE_THRIFT_GET) | HELP SET @@ -337,6 +341,11 @@ delColumnFamily -> ^(NODE_DEL_COLUMN_FAMILY columnFamily) ; +dropIndex + : DROP INDEX ON columnFamily '.' columnName + -> ^(NODE_DROP_INDEX columnFamily columnName) + ; + showVersion : SHOW API_VERSION -> ^(NODE_SHOW_VERSION) @@ -562,6 +571,8 @@ TRUNCATE: 'TRUNCATE'; ASSUME: 'ASSUME'; TTL: 'TTL'; CONSISTENCYLEVEL: 'CONSISTENCYLEVEL'; +INDEX: 'INDEX'; +ON: 'ON'; IP_ADDRESS : IntegerPositiveLiteral '.' IntegerPositiveLiteral '.' IntegerPositiveLiteral '.' IntegerPositiveLiteral 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=1124273&r1=1124272&r2=1124273&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 Wed May 18 14:07:55 2011 @@ -269,6 +269,10 @@ public class CliClient case CliParser.NODE_THRIFT_DECR: executeIncr(tree, -1L); break; + case CliParser.NODE_DROP_INDEX: + executeDropIndex(tree); + break; + case CliParser.NODE_NO_OP: // comment lines come here; they are treated as no ops. break; @@ -1295,6 +1299,58 @@ public class CliClient printSliceList(columnFamilyDef, keySlices); } + // DROP INDEX ON <CF>.<COLUMN> + private void executeDropIndex(Tree statement) + { + if (!CliMain.isConnected() || !hasKeySpace()) + return; + + // getColumnFamily will check if CF exists for us + String columnFamily = CliCompiler.getColumnFamily(statement, keyspacesMap.get(keySpace).cf_defs); + String rawColumName = statement.getChild(1).getText(); + + CfDef cfDef = getCfDef(columnFamily); + + ByteBuffer columnName = columnNameAsBytes(rawColumName, cfDef); + + boolean foundColumn = false; + + for (ColumnDef column : cfDef.getColumn_metadata()) + { + if (column.name.equals(columnName)) + { + foundColumn = true; + + if (column.getIndex_type() == null) + throw new RuntimeException(String.format("Column '%s' does not have an index.", rawColumName)); + + column.setIndex_name(null); + column.setIndex_type(null); + } + } + + if (!foundColumn) + throw new RuntimeException(String.format("Column '%s' definition was not found in ColumnFamily '%s'.", + rawColumName, + columnFamily)); + + try + { + String mySchemaVersion = thriftClient.system_update_column_family(cfDef); + sessionState.out.println(mySchemaVersion); + validateSchemaIsSettled(mySchemaVersion); + keyspacesMap.put(keySpace, thriftClient.describe_keyspace(keySpace)); + } + catch (InvalidRequestException e) + { + System.err.println(e.why); + } + catch (Exception e) + { + throw new RuntimeException(e.getMessage(), e); + } + } + // TRUNCATE <columnFamily> private void executeTruncate(String columnFamily) { Modified: cassandra/branches/cassandra-0.8/src/resources/org/apache/cassandra/cli/CliHelp.yaml URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/resources/org/apache/cassandra/cli/CliHelp.yaml?rev=1124273&r1=1124272&r2=1124273&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/resources/org/apache/cassandra/cli/CliHelp.yaml (original) +++ cassandra/branches/cassandra-0.8/src/resources/org/apache/cassandra/cli/CliHelp.yaml Wed May 18 14:07:55 2011 @@ -44,6 +44,7 @@ help: | describe keyspace Describe a keyspace and it's column families. drop column family Remove a column family and it's data. drop keyspace Remove a keyspace and it's data. + drop index Remove an existing index from specific column. get Get rows and columns. incr Increments a counter column. list List rows in a column family. @@ -827,6 +828,18 @@ commands: Example: drop column family Standard2; + - name: NODE_DROP_INDEX + help: | + drop index on <cf>.<column>; + + Drops index on specified column of the column family. + + Required Parameters: + - cf: Name of the column family. + - column: Name of the column to delete index on. + + Example: + drop index on Users.name; - name: NODE_THRIFT_GET help: | get <cf>['<key>']; 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=1124273&r1=1124272&r2=1124273&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 Wed May 18 14:07:55 2011 @@ -110,6 +110,7 @@ public class CliTest extends CleanupHelp "get Counter1['hello']['cassandra'];", "get Counter1['hello'];", "truncate CF1;", + "drop index on CF1.world2;", "update keyspace TestKeySpace with placement_strategy='org.apache.cassandra.locator.LocalStrategy';", "update keyspace TestKeySpace with strategy_options=[{DC1:3, DC2:4, DC5:1}];", "assume CF1 comparator as utf8;",