Merge branch 'cassandra-1.2' into trunk

Conflicts:
        bin/cqlsh
        doc/cql3/CQL.textile
        src/java/org/apache/cassandra/cql3/QueryProcessor.java
        src/java/org/apache/cassandra/cql3/statements/CreateIndexStatement.java


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7edd0e0c
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7edd0e0c
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7edd0e0c

Branch: refs/heads/trunk
Commit: 7edd0e0c7e05e87a1a48b81a6add08a6e65d73f1
Parents: 26018be 2397bc8
Author: Aleksey Yeschenko <alek...@apache.org>
Authored: Tue Jun 18 17:29:23 2013 +0300
Committer: Aleksey Yeschenko <alek...@apache.org>
Committed: Tue Jun 18 17:29:23 2013 +0300

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 NEWS.txt                                        |  3 +
 doc/cql3/CQL.textile                            |  8 ++-
 pylib/cqlshlib/cql3handling.py                  |  2 +-
 src/java/org/apache/cassandra/cql3/Cql.g        |  8 +--
 .../apache/cassandra/cql3/IndexPropDefs.java    | 68 --------------------
 .../cql3/statements/CreateIndexStatement.java   | 30 ++++-----
 7 files changed, 26 insertions(+), 94 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/7edd0e0c/CHANGES.txt
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/7edd0e0c/NEWS.txt
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/7edd0e0c/doc/cql3/CQL.textile
----------------------------------------------------------------------
diff --cc doc/cql3/CQL.textile
index 169cf2b,5fa36ab..1648cc8
--- a/doc/cql3/CQL.textile
+++ b/doc/cql3/CQL.textile
@@@ -1056,11 -1048,10 +1056,15 @@@ h2(#changes). Change
  
  The following describes the addition/changes brought for each version of CQL.
  
 +h3. 3.1.0
 +
 +* "ALTER TABLE":#alterTableStmt @DROP@ option has been reenabled for CQL3 
tables and has new semantics now: the space formerly used by dropped columns 
will now be eventually reclaimed (post-compaction). You should not readd 
previously dropped columns unless you use timestamps with microsecond precision 
(see "CASSANDRA-3919":https://issues.apache.org/jira/browse/CASSANDRA-3919 for 
more details).
 +* SELECT statement now supports aliases in select clause. Aliases in WHERE 
and ORDER BY clauses are not supported. See the "section on select"#selectStmt 
for details.
 +
+ h3. 3.0.4
+ 
+ * Updated the syntax for custom "secondary indexes":#createIndexStmt.
+ 
  h3. 3.0.3
  
  * Support for custom "secondary indexes":#createIndexStmt has been added.

http://git-wip-us.apache.org/repos/asf/cassandra/blob/7edd0e0c/pylib/cqlshlib/cql3handling.py
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/7edd0e0c/src/java/org/apache/cassandra/cql3/Cql.g
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/7edd0e0c/src/java/org/apache/cassandra/cql3/statements/CreateIndexStatement.java
----------------------------------------------------------------------
diff --cc 
src/java/org/apache/cassandra/cql3/statements/CreateIndexStatement.java
index 4b61ab3,b79a255..12f762f
--- a/src/java/org/apache/cassandra/cql3/statements/CreateIndexStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/CreateIndexStatement.java
@@@ -26,8 -28,11 +26,9 @@@ import org.apache.cassandra.auth.Permis
  import org.apache.cassandra.config.CFMetaData;
  import org.apache.cassandra.config.ColumnDefinition;
  import org.apache.cassandra.config.Schema;
+ import org.apache.cassandra.db.index.SecondaryIndex;
  import org.apache.cassandra.exceptions.*;
  import org.apache.cassandra.cql3.*;
 -import org.apache.cassandra.db.index.composites.CompositesIndex;
 -import org.apache.cassandra.db.marshal.CompositeType;
  import org.apache.cassandra.service.ClientState;
  import org.apache.cassandra.service.MigrationManager;
  import org.apache.cassandra.thrift.IndexType;
@@@ -62,25 -67,32 +63,29 @@@ public class CreateIndexStatement exten
      public void validate(ClientState state) throws RequestValidationException
      {
          CFMetaData cfm = ThriftValidation.validateColumnFamily(keyspace(), 
columnFamily());
 -        CFDefinition.Name name = cfm.getCfDef().get(columnName);
 +        ColumnDefinition cd = cfm.getColumnDefinition(columnName.key);
  
 -        if (name == null)
 +        if (cd == null)
              throw new InvalidRequestException("No column definition found for 
column " + columnName);
  
 -        switch (name.kind)
 -        {
 -            case KEY_ALIAS:
 -            case COLUMN_ALIAS:
 -                throw new InvalidRequestException(String.format("Cannot 
create index on PRIMARY KEY part %s", columnName));
 -            case VALUE_ALIAS:
 -                throw new InvalidRequestException(String.format("Cannot 
create index on column %s of compact CF", columnName));
 -            case COLUMN_METADATA:
 -                ColumnDefinition cd = cfm.getColumnDefinition(columnName.key);
 -                if (cd.getIndexType() != null)
 -                    throw new InvalidRequestException("Index already exists");
 -                if (isCustom && indexClass == null)
 -                    throw new InvalidRequestException("CUSTOM index requires 
specifiying the index class");
 -                if (!isCustom && indexClass != null)
 -                    throw new InvalidRequestException("Cannot specify index 
class for a non-CUSTOM index");
 -                if (cd.getValidator().isCollection() && !isCustom)
 -                    throw new InvalidRequestException("Indexes on collections 
are no yet supported");
 -                break;
 -            default:
 -                throw new AssertionError();
 -        }
 +        if (cd.getIndexType() != null)
 +            throw new InvalidRequestException("Index already exists");
 +
++        if (isCustom && indexClass == null)
++            throw new InvalidRequestException("CUSTOM index requires 
specifiying the index class");
++
++        if (!isCustom && indexClass != null)
++            throw new InvalidRequestException("Cannot specify index class for 
a non-CUSTOM index");
++
 +        // TODO: we could lift that limitation
 +        if (cfm.getCfDef().isCompact && cd.type != 
ColumnDefinition.Type.REGULAR)
 +            throw new InvalidRequestException(String.format("Secondary index 
on %s column %s is not yet supported for compact table", cd.type, columnName));
 +
 +        if (cd.getValidator().isCollection() && !isCustom)
 +            throw new InvalidRequestException("Indexes on collections are no 
yet supported");
 +
 +        if (cd.type == ColumnDefinition.Type.PARTITION_KEY && 
(cd.componentIndex == null || cd.componentIndex == 0))
 +            throw new InvalidRequestException(String.format("Cannot add 
secondary index to already primarily indexed column %s", columnName));
- 
-         props.validate(isCustom);
      }
  
      public void announceMigration() throws InvalidRequestException, 
ConfigurationException
@@@ -90,24 -102,21 +95,11 @@@
          ColumnDefinition cd = cfm.getColumnDefinition(columnName.key);
  
          if (isCustom)
--        {
-             try
-             {
-                 cd.setIndexType(IndexType.CUSTOM, props.getOptions());
-             }
-             catch (SyntaxException e)
-             {
-                 throw new AssertionError(); // can't happen after validation.
-             }
-         }
+             cd.setIndexType(IndexType.CUSTOM, 
Collections.singletonMap(SecondaryIndex.CUSTOM_INDEX_OPTION_NAME, indexClass));
 -        }
 -        else if (cfDef.isComposite)
 -        {
 -            CompositeType composite = (CompositeType)cfm.comparator;
 -            Map<String, String> opts = new HashMap<String, String>();
 -            opts.put(CompositesIndex.PREFIX_SIZE_OPTION, 
String.valueOf(composite.types.size() - (cfDef.hasCollections ? 2 : 1)));
 -            cd.setIndexType(IndexType.COMPOSITES, opts);
 -        }
 +        else if (cfm.getCfDef().isComposite)
-         {
 +            cd.setIndexType(IndexType.COMPOSITES, Collections.<String, 
String>emptyMap());
-         }
          else
--        {
              cd.setIndexType(IndexType.KEYS, Collections.<String, 
String>emptyMap());
--        }
  
          cd.setIndexName(indexName);
          cfm.addDefaultIndexNames();

Reply via email to