You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2013/10/30 17:10:19 UTC
[3/4] Remove CFDefinition
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql/QueryProcessor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/QueryProcessor.java b/src/java/org/apache/cassandra/cql/QueryProcessor.java
index b6d5656..b15dc82 100644
--- a/src/java/org/apache/cassandra/cql/QueryProcessor.java
+++ b/src/java/org/apache/cassandra/cql/QueryProcessor.java
@@ -117,7 +117,7 @@ public class QueryProcessor
// ...a range (slice) of column names
else
{
- AbstractType<?> comparator = select.getComparator(metadata.ksName);
+ AbstractType<?> comparator = metadata.comparator;
ByteBuffer start = select.getColumnStart().getByteBuffer(comparator,variables);
ByteBuffer finish = select.getColumnFinish().getByteBuffer(comparator,variables);
@@ -187,7 +187,7 @@ public class QueryProcessor
{
// Left and right side of relational expression encoded according to comparator/validator.
ByteBuffer entity = columnRelation.getEntity().getByteBuffer(metadata.comparator, variables);
- ByteBuffer value = columnRelation.getValue().getByteBuffer(select.getValueValidator(metadata.ksName, entity), variables);
+ ByteBuffer value = columnRelation.getValue().getByteBuffer(metadata.getValueValidatorFromCellName(entity), variables);
expressions.add(new IndexExpression(entity,
IndexExpression.Operator.valueOf(columnRelation.operator().toString()),
@@ -264,8 +264,9 @@ public class QueryProcessor
if (select.getColumnRelations().size() > 0)
{
- AbstractType<?> comparator = select.getComparator(keyspace);
- SecondaryIndexManager idxManager = Keyspace.open(keyspace).getColumnFamilyStore(select.getColumnFamily()).indexManager;
+ ColumnFamilyStore cfstore = Keyspace.open(keyspace).getColumnFamilyStore(select.getColumnFamily());
+ AbstractType<?> comparator = cfstore.metadata.comparator;
+ SecondaryIndexManager idxManager = cfstore.indexManager;
for (Relation relation : select.getColumnRelations())
{
ByteBuffer name = relation.getEntity().getByteBuffer(comparator, variables);
@@ -323,7 +324,7 @@ public class QueryProcessor
throws InvalidRequestException
{
validateColumnName(name);
- AbstractType<?> validator = metadata.getValueValidator(name);
+ AbstractType<?> validator = metadata.getValueValidatorFromCellName(name);
try
{
@@ -466,9 +467,9 @@ public class QueryProcessor
if (c.isMarkedForDelete(now))
continue;
- ColumnDefinition cd = metadata.getColumnDefinitionFromColumnName(c.name());
+ ColumnDefinition cd = metadata.getColumnDefinitionFromCellName(c.name());
if (cd != null)
- result.schema.value_types.put(c.name(), TypeParser.getShortName(cd.getValidator()));
+ result.schema.value_types.put(c.name(), TypeParser.getShortName(cd.type));
thriftColumns.add(thriftify(c));
}
@@ -504,9 +505,9 @@ public class QueryProcessor
throw new AssertionError(e);
}
- ColumnDefinition cd = metadata.getColumnDefinitionFromColumnName(name);
+ ColumnDefinition cd = metadata.getColumnDefinitionFromCellName(name);
if (cd != null)
- result.schema.value_types.put(name, TypeParser.getShortName(cd.getValidator()));
+ result.schema.value_types.put(name, TypeParser.getShortName(cd.type));
org.apache.cassandra.db.Column c = row.cf.getColumn(name);
if (c == null || c.isMarkedForDelete(now))
thriftColumns.add(new Column().setName(name));
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql/SelectStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/SelectStatement.java b/src/java/org/apache/cassandra/cql/SelectStatement.java
index 2314b73..b77e9ec 100644
--- a/src/java/org/apache/cassandra/cql/SelectStatement.java
+++ b/src/java/org/apache/cassandra/cql/SelectStatement.java
@@ -172,16 +172,6 @@ public class SelectStatement
clause.extractKeysFromColumns(cfm);
}
- public AbstractType<?> getComparator(String keyspace)
- {
- return Schema.instance.getComparator(keyspace, columnFamily);
- }
-
- public AbstractType<?> getValueValidator(String keyspace, ByteBuffer column)
- {
- return Schema.instance.getValueValidator(keyspace, columnFamily, column);
- }
-
public List<Relation> getClauseRelations()
{
return clause.getClauseRelations();
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql/UpdateStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/UpdateStatement.java b/src/java/org/apache/cassandra/cql/UpdateStatement.java
index 0e1250f..59d797f 100644
--- a/src/java/org/apache/cassandra/cql/UpdateStatement.java
+++ b/src/java/org/apache/cassandra/cql/UpdateStatement.java
@@ -177,7 +177,7 @@ public class UpdateStatement extends AbstractModification
throws InvalidRequestException
{
validateKey(key);
- AbstractType<?> comparator = getComparator(keyspace);
+ AbstractType<?> comparator = metadata.comparator;
// if true we need to wrap RowMutation into CounterMutation
boolean hasCounterColumn = false;
@@ -193,7 +193,7 @@ public class UpdateStatement extends AbstractModification
if (hasCounterColumn)
throw new InvalidRequestException("Mix of commutative and non-commutative operations is not allowed.");
- ByteBuffer colValue = op.a.getByteBuffer(getValueValidator(keyspace, colName),variables);
+ ByteBuffer colValue = op.a.getByteBuffer(metadata.getValueValidatorFromCellName(colName),variables);
validateColumn(metadata, colName, colValue);
rm.add(columnFamily,
@@ -277,16 +277,6 @@ public class UpdateStatement extends AbstractModification
return Schema.instance.getCFMetaData(keyspace, columnFamily).getKeyValidator();
}
- public AbstractType<?> getComparator(String keyspace)
- {
- return Schema.instance.getComparator(keyspace, columnFamily);
- }
-
- public AbstractType<?> getValueValidator(String keyspace, ByteBuffer column)
- {
- return Schema.instance.getValueValidator(keyspace, columnFamily, column);
- }
-
public List<Term> getColumnNames()
{
return columnNames;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/CFDefinition.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/CFDefinition.java b/src/java/org/apache/cassandra/cql3/CFDefinition.java
deleted file mode 100644
index 54ca2b8..0000000
--- a/src/java/org/apache/cassandra/cql3/CFDefinition.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.cassandra.cql3;
-
-import java.nio.ByteBuffer;
-import java.util.*;
-
-import com.google.common.base.Joiner;
-import com.google.common.base.Objects;
-import com.google.common.collect.AbstractIterator;
-
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.ColumnDefinition;
-import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.db.marshal.ColumnToCollectionType;
-import org.apache.cassandra.db.marshal.CompositeType;
-import org.apache.cassandra.db.marshal.UTF8Type;
-import org.apache.cassandra.utils.ByteBufferUtil;
-
-/**
- * Holds metadata on a CF preprocessed for use by CQL queries.
- */
-public class CFDefinition implements Iterable<CFDefinition.Name>
-{
- public static final AbstractType<?> definitionType = UTF8Type.instance;
-
-
- public final CFMetaData cfm;
- // LinkedHashMap because the order does matter (it is the order in the composite type)
- public final LinkedHashMap<ColumnIdentifier, Name> keys = new LinkedHashMap<ColumnIdentifier, Name>();
- public final LinkedHashMap<ColumnIdentifier, Name> columns = new LinkedHashMap<ColumnIdentifier, Name>();
- public final Name value;
- // Keep metadata lexicographically ordered so that wildcard expansion have a deterministic order
- public final Map<ColumnIdentifier, Name> metadata = new TreeMap<ColumnIdentifier, Name>();
-
- public final boolean isComposite;
- public final boolean hasCompositeKey;
- // Note that isCompact means here that no componet of the comparator correspond to the column names
- // defined in the CREATE TABLE QUERY. This is not exactly equivalent to the 'WITH COMPACT STORAGE'
- // option when creating a table in that "static CF" without a composite type will have isCompact == false
- // even though one must use 'WITH COMPACT STORAGE' to declare them.
- public final boolean isCompact;
- public final boolean hasCollections;
-
- public CFDefinition(CFMetaData cfm)
- {
- this.cfm = cfm;
-
- this.hasCompositeKey = cfm.getKeyValidator() instanceof CompositeType;
- for (int i = 0; i < cfm.partitionKeyColumns().size(); ++i)
- {
- ColumnIdentifier id = new ColumnIdentifier(cfm.partitionKeyColumns().get(i).name, definitionType);
- this.keys.put(id, new Name(cfm.ksName, cfm.cfName, id, Name.Kind.KEY_ALIAS, i, cfm.getKeyValidator().getComponents().get(i)));
- }
-
- this.isComposite = cfm.comparator instanceof CompositeType;
- this.hasCollections = cfm.comparator.getComponents().get(cfm.comparator.componentsCount() - 1) instanceof ColumnToCollectionType;
- this.isCompact = cfm.clusteringKeyColumns().size() == cfm.comparator.componentsCount();
- for (int i = 0; i < cfm.clusteringKeyColumns().size(); ++i)
- {
- ColumnIdentifier id = new ColumnIdentifier(cfm.clusteringKeyColumns().get(i).name, definitionType);
- this.columns.put(id, new Name(cfm.ksName, cfm.cfName, id, Name.Kind.COLUMN_ALIAS, i, cfm.comparator.getComponents().get(i)));
- }
-
- if (isCompact)
- {
- this.value = createValue(cfm);
- }
- else
- {
- this.value = null;
- for (ColumnDefinition def : cfm.regularColumns())
- {
- ColumnIdentifier id = new ColumnIdentifier(def.name, cfm.getColumnDefinitionComparator(def));
- this.metadata.put(id, new Name(cfm.ksName, cfm.cfName, id, Name.Kind.COLUMN_METADATA, def.getValidator()));
- }
- }
- }
-
- public ColumnToCollectionType getCollectionType()
- {
- if (!hasCollections)
- return null;
-
- CompositeType composite = (CompositeType)cfm.comparator;
- return (ColumnToCollectionType)composite.types.get(composite.types.size() - 1);
- }
-
- private static Name createValue(CFMetaData cfm)
- {
- ColumnIdentifier alias = new ColumnIdentifier(cfm.compactValueColumn().name, definitionType);
- // That's how we distinguish between 'no value alias because coming from thrift' and 'I explicitely did not
- // define a value' (see CreateTableStatement)
- return alias.key.equals(ByteBufferUtil.EMPTY_BYTE_BUFFER)
- ? null
- : new Name(cfm.ksName, cfm.cfName, alias, Name.Kind.VALUE_ALIAS, cfm.getDefaultValidator());
- }
-
- public Name get(ColumnIdentifier name)
- {
- CFDefinition.Name kdef = keys.get(name);
- if (kdef != null)
- return kdef;
- if (value != null && name.equals(value.name))
- return value;
- CFDefinition.Name def = columns.get(name);
- if (def != null)
- return def;
- return metadata.get(name);
- }
-
- public Iterator<Name> iterator()
- {
- return new AbstractIterator<Name>()
- {
- private final Iterator<Name> keyIter = keys.values().iterator();
- private final Iterator<Name> columnIter = columns.values().iterator();
- private boolean valueDone;
- private final Iterator<Name> metadataIter = metadata.values().iterator();
-
- protected Name computeNext()
- {
- if (keyIter.hasNext())
- return keyIter.next();
-
- if (columnIter.hasNext())
- return columnIter.next();
-
- if (value != null && !valueDone)
- {
- valueDone = true;
- return value;
- }
-
- if (metadataIter.hasNext())
- return metadataIter.next();
-
- return endOfData();
- }
- };
- }
-
- public ColumnNameBuilder getKeyNameBuilder()
- {
- return hasCompositeKey
- ? new CompositeType.Builder((CompositeType)cfm.getKeyValidator())
- : new NonCompositeBuilder(cfm.getKeyValidator());
- }
-
- public ColumnNameBuilder getColumnNameBuilder()
- {
- return isComposite
- ? new CompositeType.Builder((CompositeType)cfm.comparator)
- : new NonCompositeBuilder(cfm.comparator);
- }
-
- public static class Name extends ColumnSpecification
- {
- public static enum Kind
- {
- KEY_ALIAS, COLUMN_ALIAS, VALUE_ALIAS, COLUMN_METADATA
- }
-
- private Name(String ksName, String cfName, ColumnIdentifier name, Kind kind, AbstractType<?> type)
- {
- this(ksName, cfName, name, kind, -1, type);
- }
-
- private Name(String ksName, String cfName, ColumnIdentifier name, Kind kind, int position, AbstractType<?> type)
- {
- super(ksName, cfName, name, type);
- this.kind = kind;
- this.position = position;
- }
-
- public final Kind kind;
- public final int position; // only make sense for KEY_ALIAS and COLUMN_ALIAS
-
- @Override
- public boolean equals(Object o)
- {
- if(!(o instanceof Name))
- return false;
- Name that = (Name)o;
- return Objects.equal(ksName, that.ksName)
- && Objects.equal(cfName, that.cfName)
- && Objects.equal(name, that.name)
- && Objects.equal(type, that.type)
- && kind == that.kind
- && position == that.position;
- }
-
- @Override
- public final int hashCode()
- {
- return Objects.hashCode(ksName, cfName, name, type, kind, position);
- }
- }
-
- @Override
- public String toString()
- {
- StringBuilder sb = new StringBuilder();
- sb.append(Joiner.on(", ").join(keys.values()));
- if (!columns.isEmpty())
- sb.append(", ").append(Joiner.on(", ").join(columns.values()));
- sb.append(" => ");
- if (value != null)
- sb.append(value.name);
- if (!metadata.isEmpty())
- sb.append("{").append(Joiner.on(", ").join(metadata.values())).append(" }");
- return sb.toString();
- }
-
- private static class NonCompositeBuilder implements ColumnNameBuilder
- {
- private final AbstractType<?> type;
- private ByteBuffer columnName;
-
- private NonCompositeBuilder(AbstractType<?> type)
- {
- this.type = type;
- }
-
- public NonCompositeBuilder add(ByteBuffer bb)
- {
- if (columnName != null)
- throw new IllegalStateException("Column name is already constructed");
-
- columnName = bb;
- return this;
- }
-
- public NonCompositeBuilder add(ByteBuffer bb, Relation.Type op)
- {
- return add(bb);
- }
-
- public int componentCount()
- {
- return columnName == null ? 0 : 1;
- }
-
- public int remainingCount()
- {
- return columnName == null ? 1 : 0;
- }
-
- public ByteBuffer get(int i)
- {
- if (i < 0 || i >= (columnName == null ? 0 : 1))
- throw new IllegalArgumentException();
-
- return columnName;
- }
-
- public ByteBuffer build()
- {
- return columnName == null ? ByteBufferUtil.EMPTY_BYTE_BUFFER : columnName;
- }
-
- public ByteBuffer buildAsEndOfRange()
- {
- return build();
- }
-
- public NonCompositeBuilder copy()
- {
- NonCompositeBuilder newBuilder = new NonCompositeBuilder(type);
- newBuilder.columnName = columnName;
- return newBuilder;
- }
-
- public ByteBuffer getComponent(int i)
- {
- if (i != 0 || columnName == null)
- throw new IllegalArgumentException();
-
- return columnName;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/ColumnIdentifier.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/ColumnIdentifier.java b/src/java/org/apache/cassandra/cql3/ColumnIdentifier.java
index 330eec0..a11094e 100644
--- a/src/java/org/apache/cassandra/cql3/ColumnIdentifier.java
+++ b/src/java/org/apache/cassandra/cql3/ColumnIdentifier.java
@@ -29,25 +29,25 @@ import org.apache.cassandra.utils.ByteBufferUtil;
*/
public class ColumnIdentifier implements Selectable, Comparable<ColumnIdentifier>
{
- public final ByteBuffer key;
+ public final ByteBuffer bytes;
private final String text;
public ColumnIdentifier(String rawText, boolean keepCase)
{
this.text = keepCase ? rawText : rawText.toLowerCase(Locale.US);
- this.key = ByteBufferUtil.bytes(this.text);
+ this.bytes = ByteBufferUtil.bytes(this.text);
}
- public ColumnIdentifier(ByteBuffer key, AbstractType type)
+ public ColumnIdentifier(ByteBuffer bytes, AbstractType type)
{
- this.key = key;
- this.text = type.getString(key);
+ this.bytes = bytes;
+ this.text = type.getString(bytes);
}
@Override
public final int hashCode()
{
- return key.hashCode();
+ return bytes.hashCode();
}
@Override
@@ -56,7 +56,7 @@ public class ColumnIdentifier implements Selectable, Comparable<ColumnIdentifier
if(!(o instanceof ColumnIdentifier))
return false;
ColumnIdentifier that = (ColumnIdentifier)o;
- return key.equals(that.key);
+ return bytes.equals(that.bytes);
}
@Override
@@ -67,6 +67,6 @@ public class ColumnIdentifier implements Selectable, Comparable<ColumnIdentifier
public int compareTo(ColumnIdentifier other)
{
- return key.compareTo(other.key);
+ return bytes.compareTo(other.bytes);
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/ColumnNameBuilder.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/ColumnNameBuilder.java b/src/java/org/apache/cassandra/cql3/ColumnNameBuilder.java
index b6625ab..384916d 100644
--- a/src/java/org/apache/cassandra/cql3/ColumnNameBuilder.java
+++ b/src/java/org/apache/cassandra/cql3/ColumnNameBuilder.java
@@ -32,6 +32,8 @@ public interface ColumnNameBuilder
*/
public ColumnNameBuilder add(ByteBuffer bb);
+ public ColumnNameBuilder add(ColumnIdentifier name);
+
/**
* Add a new ByteBuffer as the next component for this name.
* @param t the ByteBuffer to add
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/ColumnSpecification.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/ColumnSpecification.java b/src/java/org/apache/cassandra/cql3/ColumnSpecification.java
index 4dae701..d2e08f9 100644
--- a/src/java/org/apache/cassandra/cql3/ColumnSpecification.java
+++ b/src/java/org/apache/cassandra/cql3/ColumnSpecification.java
@@ -33,11 +33,4 @@ public class ColumnSpecification
this.name = name;
this.type = type;
}
-
- @Override
- public String toString()
- {
- // Not fully conventional, but convenient (for error message to users in particular)
- return name.toString();
- }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/Constants.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/Constants.java b/src/java/org/apache/cassandra/cql3/Constants.java
index bcfe00d..34b3f8d 100644
--- a/src/java/org/apache/cassandra/cql3/Constants.java
+++ b/src/java/org/apache/cassandra/cql3/Constants.java
@@ -296,7 +296,7 @@ public abstract class Constants
public void execute(ByteBuffer rowKey, ColumnFamily cf, ColumnNameBuilder prefix, UpdateParameters params) throws InvalidRequestException
{
- ByteBuffer cname = columnName == null ? prefix.build() : prefix.add(columnName.key).build();
+ ByteBuffer cname = columnName == null ? prefix.build() : prefix.add(columnName).build();
ByteBuffer value = t.bindAndGet(params.variables);
cf.addColumn(value == null ? params.makeTombstone(cname) : params.makeColumn(cname, value));
}
@@ -315,7 +315,7 @@ public abstract class Constants
if (bytes == null)
throw new InvalidRequestException("Invalid null value for counter increment");
long increment = ByteBufferUtil.toLong(bytes);
- ByteBuffer cname = columnName == null ? prefix.build() : prefix.add(columnName.key).build();
+ ByteBuffer cname = columnName == null ? prefix.build() : prefix.add(columnName).build();
cf.addCounter(cname, increment);
}
}
@@ -337,7 +337,7 @@ public abstract class Constants
if (increment == Long.MIN_VALUE)
throw new InvalidRequestException("The negation of " + increment + " overflows supported counter precision (signed 8 bytes integer)");
- ByteBuffer cname = columnName == null ? prefix.build() : prefix.add(columnName.key).build();
+ ByteBuffer cname = columnName == null ? prefix.build() : prefix.add(columnName).build();
cf.addCounter(cname, -increment);
}
}
@@ -356,7 +356,7 @@ public abstract class Constants
public void execute(ByteBuffer rowKey, ColumnFamily cf, ColumnNameBuilder prefix, UpdateParameters params) throws InvalidRequestException
{
- ColumnNameBuilder column = prefix.add(columnName.key);
+ ColumnNameBuilder column = prefix.add(columnName);
if (isCollection)
cf.addAtom(params.makeRangeTombstone(column.build(), column.buildAsEndOfRange()));
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/Lists.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/Lists.java b/src/java/org/apache/cassandra/cql3/Lists.java
index 4ca5eb3..35da98e 100644
--- a/src/java/org/apache/cassandra/cql3/Lists.java
+++ b/src/java/org/apache/cassandra/cql3/Lists.java
@@ -266,7 +266,7 @@ public abstract class Lists
public void execute(ByteBuffer rowKey, ColumnFamily cf, ColumnNameBuilder prefix, UpdateParameters params) throws InvalidRequestException
{
// delete + append
- ColumnNameBuilder column = prefix.add(columnName.key);
+ ColumnNameBuilder column = prefix.add(columnName);
cf.addAtom(params.makeTombstoneForOverwrite(column.build(), column.buildAsEndOfRange()));
Appender.doAppend(t, cf, column, params);
}
@@ -303,7 +303,7 @@ public abstract class Lists
if (index == null)
throw new InvalidRequestException("Invalid null value for list index");
- List<Pair<ByteBuffer, Column>> existingList = params.getPrefetchedList(rowKey, columnName.key);
+ List<Pair<ByteBuffer, Column>> existingList = params.getPrefetchedList(rowKey, columnName);
int idx = ByteBufferUtil.toInt(index);
if (idx < 0 || idx >= existingList.size())
throw new InvalidRequestException(String.format("List index %d out of bound, list has size %d", idx, existingList.size()));
@@ -336,7 +336,7 @@ public abstract class Lists
public void execute(ByteBuffer rowKey, ColumnFamily cf, ColumnNameBuilder prefix, UpdateParameters params) throws InvalidRequestException
{
- doAppend(t, cf, prefix.add(columnName.key), params);
+ doAppend(t, cf, prefix.add(columnName), params);
}
static void doAppend(Term t, ColumnFamily cf, ColumnNameBuilder columnName, UpdateParameters params) throws InvalidRequestException
@@ -376,7 +376,7 @@ public abstract class Lists
long time = PrecisionTime.REFERENCE_TIME - (System.currentTimeMillis() - PrecisionTime.REFERENCE_TIME);
List<ByteBuffer> toAdd = ((Lists.Value)value).elements;
- ColumnNameBuilder column = prefix.add(columnName.key);
+ ColumnNameBuilder column = prefix.add(columnName);
for (int i = 0; i < toAdd.size(); i++)
{
ColumnNameBuilder b = i == toAdd.size() - 1 ? column : column.copy();
@@ -403,7 +403,7 @@ public abstract class Lists
public void execute(ByteBuffer rowKey, ColumnFamily cf, ColumnNameBuilder prefix, UpdateParameters params) throws InvalidRequestException
{
- List<Pair<ByteBuffer, Column>> existingList = params.getPrefetchedList(rowKey, columnName.key);
+ List<Pair<ByteBuffer, Column>> existingList = params.getPrefetchedList(rowKey, columnName);
if (existingList.isEmpty())
return;
@@ -448,7 +448,7 @@ public abstract class Lists
assert index instanceof Constants.Value;
- List<Pair<ByteBuffer, Column>> existingList = params.getPrefetchedList(rowKey, columnName.key);
+ List<Pair<ByteBuffer, Column>> existingList = params.getPrefetchedList(rowKey, columnName);
int idx = ByteBufferUtil.toInt(((Constants.Value)index).bytes);
if (idx < 0 || idx >= existingList.size())
throw new InvalidRequestException(String.format("List index %d out of bound, list has size %d", idx, existingList.size()));
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/Maps.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/Maps.java b/src/java/org/apache/cassandra/cql3/Maps.java
index 30d796c..4107b95 100644
--- a/src/java/org/apache/cassandra/cql3/Maps.java
+++ b/src/java/org/apache/cassandra/cql3/Maps.java
@@ -244,7 +244,7 @@ public abstract class Maps
public void execute(ByteBuffer rowKey, ColumnFamily cf, ColumnNameBuilder prefix, UpdateParameters params) throws InvalidRequestException
{
// delete + put
- ColumnNameBuilder column = prefix.add(columnName.key);
+ ColumnNameBuilder column = prefix.add(columnName);
cf.addAtom(params.makeTombstoneForOverwrite(column.build(), column.buildAsEndOfRange()));
Putter.doPut(t, cf, column, params);
}
@@ -274,7 +274,7 @@ public abstract class Maps
if (key == null)
throw new InvalidRequestException("Invalid null map key");
- ByteBuffer cellName = prefix.add(columnName.key).add(key).build();
+ ByteBuffer cellName = prefix.add(columnName).add(key).build();
if (value == null)
{
@@ -302,7 +302,7 @@ public abstract class Maps
public void execute(ByteBuffer rowKey, ColumnFamily cf, ColumnNameBuilder prefix, UpdateParameters params) throws InvalidRequestException
{
- doPut(t, cf, prefix.add(columnName.key), params);
+ doPut(t, cf, prefix.add(columnName), params);
}
static void doPut(Term t, ColumnFamily cf, ColumnNameBuilder columnName, UpdateParameters params) throws InvalidRequestException
@@ -335,7 +335,7 @@ public abstract class Maps
throw new InvalidRequestException("Invalid null map key");
assert key instanceof Constants.Value;
- ByteBuffer cellName = prefix.add(columnName.key).add(((Constants.Value)key).bytes).build();
+ ByteBuffer cellName = prefix.add(columnName).add(((Constants.Value)key).bytes).build();
cf.addColumn(params.makeTombstone(cellName));
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/Operation.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/Operation.java b/src/java/org/apache/cassandra/cql3/Operation.java
index d84f57b..e0272b7 100644
--- a/src/java/org/apache/cassandra/cql3/Operation.java
+++ b/src/java/org/apache/cassandra/cql3/Operation.java
@@ -19,6 +19,7 @@ package org.apache.cassandra.cql3;
import java.nio.ByteBuffer;
+import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.db.ColumnFamily;
import org.apache.cassandra.db.marshal.CollectionType;
import org.apache.cassandra.db.marshal.CounterColumnType;
@@ -109,7 +110,7 @@ public abstract class Operation
* be a true column.
* @return the prepared update operation.
*/
- public Operation prepare(CFDefinition.Name receiver) throws InvalidRequestException;
+ public Operation prepare(ColumnDefinition receiver) throws InvalidRequestException;
/**
* @return whether this operation can be applied alongside the {@code
@@ -155,7 +156,7 @@ public abstract class Operation
this.value = value;
}
- public Operation prepare(CFDefinition.Name receiver) throws InvalidRequestException
+ public Operation prepare(ColumnDefinition receiver) throws InvalidRequestException
{
Term v = value.prepare(receiver);
@@ -163,7 +164,7 @@ public abstract class Operation
throw new InvalidRequestException(String.format("Cannot set the value of counter column %s (counters can only be incremented/decremented, not set)", receiver));
if (!(receiver.type instanceof CollectionType))
- return new Constants.Setter(receiver.kind == CFDefinition.Name.Kind.VALUE_ALIAS ? null : receiver.name, v);
+ return new Constants.Setter(receiver.kind == ColumnDefinition.Kind.COMPACT_VALUE ? null : receiver.name, v);
switch (((CollectionType)receiver.type).kind)
{
@@ -201,7 +202,7 @@ public abstract class Operation
this.value = value;
}
- public Operation prepare(CFDefinition.Name receiver) throws InvalidRequestException
+ public Operation prepare(ColumnDefinition receiver) throws InvalidRequestException
{
if (!(receiver.type instanceof CollectionType))
throw new InvalidRequestException(String.format("Invalid operation (%s) for non collection column %s", toString(receiver), receiver));
@@ -244,7 +245,7 @@ public abstract class Operation
this.value = value;
}
- public Operation prepare(CFDefinition.Name receiver) throws InvalidRequestException
+ public Operation prepare(ColumnDefinition receiver) throws InvalidRequestException
{
Term v = value.prepare(receiver);
@@ -252,7 +253,7 @@ public abstract class Operation
{
if (!(receiver.type instanceof CounterColumnType))
throw new InvalidRequestException(String.format("Invalid operation (%s) for non counter column %s", toString(receiver), receiver));
- return new Constants.Adder(receiver.kind == CFDefinition.Name.Kind.VALUE_ALIAS ? null : receiver.name, v);
+ return new Constants.Adder(receiver.kind == ColumnDefinition.Kind.COMPACT_VALUE ? null : receiver.name, v);
}
switch (((CollectionType)receiver.type).kind)
@@ -287,7 +288,7 @@ public abstract class Operation
this.value = value;
}
- public Operation prepare(CFDefinition.Name receiver) throws InvalidRequestException
+ public Operation prepare(ColumnDefinition receiver) throws InvalidRequestException
{
Term v = value.prepare(receiver);
@@ -295,7 +296,7 @@ public abstract class Operation
{
if (!(receiver.type instanceof CounterColumnType))
throw new InvalidRequestException(String.format("Invalid operation (%s) for non counter column %s", toString(receiver), receiver));
- return new Constants.Substracter(receiver.kind == CFDefinition.Name.Kind.VALUE_ALIAS ? null : receiver.name, v);
+ return new Constants.Substracter(receiver.kind == ColumnDefinition.Kind.COMPACT_VALUE ? null : receiver.name, v);
}
switch (((CollectionType)receiver.type).kind)
@@ -330,7 +331,7 @@ public abstract class Operation
this.value = value;
}
- public Operation prepare(CFDefinition.Name receiver) throws InvalidRequestException
+ public Operation prepare(ColumnDefinition receiver) throws InvalidRequestException
{
Term v = value.prepare(receiver);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/ResultSet.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/ResultSet.java b/src/java/org/apache/cassandra/cql3/ResultSet.java
index e4f27f9..79459df 100644
--- a/src/java/org/apache/cassandra/cql3/ResultSet.java
+++ b/src/java/org/apache/cassandra/cql3/ResultSet.java
@@ -124,11 +124,11 @@ public class ResultSet
// The 2 following ones shouldn't be needed in CQL3
UTF8, UTF8);
- for (ColumnSpecification name : metadata.names)
+ for (ColumnSpecification spec : metadata.names)
{
- ByteBuffer colName = ByteBufferUtil.bytes(name.toString());
+ ByteBuffer colName = ByteBufferUtil.bytes(spec.name.toString());
schema.name_types.put(colName, UTF8);
- AbstractType<?> normalizedType = name.type instanceof ReversedType ? ((ReversedType)name.type).baseType : name.type;
+ AbstractType<?> normalizedType = spec.type instanceof ReversedType ? ((ReversedType)spec.type).baseType : spec.type;
schema.value_types.put(colName, normalizedType.toString());
}
@@ -139,7 +139,7 @@ public class ResultSet
List<Column> thriftCols = new ArrayList<Column>(metadata.names.size());
for (int i = 0; i < metadata.names.size(); i++)
{
- Column col = new Column(ByteBufferUtil.bytes(metadata.names.get(i).toString()));
+ Column col = new Column(ByteBufferUtil.bytes(metadata.names.get(i).name.toString()));
col.setValue(row.get(i));
thriftCols.add(col);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/Sets.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/Sets.java b/src/java/org/apache/cassandra/cql3/Sets.java
index 0fcb8bf..01ac1e7 100644
--- a/src/java/org/apache/cassandra/cql3/Sets.java
+++ b/src/java/org/apache/cassandra/cql3/Sets.java
@@ -230,7 +230,7 @@ public abstract class Sets
public void execute(ByteBuffer rowKey, ColumnFamily cf, ColumnNameBuilder prefix, UpdateParameters params) throws InvalidRequestException
{
// delete + add
- ColumnNameBuilder column = prefix.add(columnName.key);
+ ColumnNameBuilder column = prefix.add(columnName);
cf.addAtom(params.makeTombstoneForOverwrite(column.build(), column.buildAsEndOfRange()));
Adder.doAdd(t, cf, column, params);
}
@@ -245,7 +245,7 @@ public abstract class Sets
public void execute(ByteBuffer rowKey, ColumnFamily cf, ColumnNameBuilder prefix, UpdateParameters params) throws InvalidRequestException
{
- doAdd(t, cf, prefix.add(columnName.key), params);
+ doAdd(t, cf, prefix.add(columnName), params);
}
static void doAdd(Term t, ColumnFamily cf, ColumnNameBuilder columnName, UpdateParameters params) throws InvalidRequestException
@@ -283,7 +283,7 @@ public abstract class Sets
? Collections.singleton(((Constants.Value)value).bytes)
: ((Sets.Value)value).elements;
- ColumnNameBuilder column = prefix.add(columnName.key);
+ ColumnNameBuilder column = prefix.add(columnName);
for (ByteBuffer bb : toDiscard)
{
ByteBuffer cellName = column.copy().add(bb).build();
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/UntypedResultSet.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/UntypedResultSet.java b/src/java/org/apache/cassandra/cql3/UntypedResultSet.java
index e5bd863..8f1aaf5 100644
--- a/src/java/org/apache/cassandra/cql3/UntypedResultSet.java
+++ b/src/java/org/apache/cassandra/cql3/UntypedResultSet.java
@@ -83,7 +83,7 @@ public class UntypedResultSet implements Iterable<UntypedResultSet.Row>
{
this.columns.addAll(names);
for (int i = 0; i < names.size(); i++)
- data.put(names.get(i).toString(), columns.get(i));
+ data.put(names.get(i).name.toString(), columns.get(i));
}
public boolean has(String column)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/UpdateParameters.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/UpdateParameters.java b/src/java/org/apache/cassandra/cql3/UpdateParameters.java
index 0034b16..1288576 100644
--- a/src/java/org/apache/cassandra/cql3/UpdateParameters.java
+++ b/src/java/org/apache/cassandra/cql3/UpdateParameters.java
@@ -78,12 +78,12 @@ public class UpdateParameters
return new RangeTombstone(start, end, timestamp - 1, localDeletionTime);
}
- public List<Pair<ByteBuffer, Column>> getPrefetchedList(ByteBuffer rowKey, ByteBuffer cql3ColumnName)
+ public List<Pair<ByteBuffer, Column>> getPrefetchedList(ByteBuffer rowKey, ColumnIdentifier cql3ColumnName)
{
if (prefetchedLists == null)
return Collections.emptyList();
ColumnGroupMap m = prefetchedLists.get(rowKey);
- return m == null ? Collections.<Pair<ByteBuffer, Column>>emptyList() : m.getCollection(cql3ColumnName);
+ return m == null ? Collections.<Pair<ByteBuffer, Column>>emptyList() : m.getCollection(cql3ColumnName.bytes);
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/functions/TokenFct.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/functions/TokenFct.java b/src/java/org/apache/cassandra/cql3/functions/TokenFct.java
index ac6b999..cb6e6c4 100644
--- a/src/java/org/apache/cassandra/cql3/functions/TokenFct.java
+++ b/src/java/org/apache/cassandra/cql3/functions/TokenFct.java
@@ -21,8 +21,8 @@ import java.nio.ByteBuffer;
import java.util.List;
import org.apache.cassandra.config.CFMetaData;
+import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.config.Schema;
-import org.apache.cassandra.cql3.CFDefinition;
import org.apache.cassandra.cql3.ColumnNameBuilder;
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.dht.IPartitioner;
@@ -42,26 +42,26 @@ public class TokenFct extends AbstractFunction
}
};
- private final CFDefinition cfDef;
+ private final CFMetaData cfm;
public TokenFct(CFMetaData cfm)
{
super("token", partitioner.getTokenValidator(), getKeyTypes(cfm));
- this.cfDef = cfm.getCfDef();
+ this.cfm = cfm;
}
private static AbstractType[] getKeyTypes(CFMetaData cfm)
{
- AbstractType[] types = new AbstractType[cfm.getCfDef().keys.size()];
+ AbstractType[] types = new AbstractType[cfm.partitionKeyColumns().size()];
int i = 0;
- for (CFDefinition.Name name : cfm.getCfDef().keys.values())
- types[i++] = name.type;
+ for (ColumnDefinition def : cfm.partitionKeyColumns())
+ types[i++] = def.type;
return types;
}
public ByteBuffer execute(List<ByteBuffer> parameters) throws InvalidRequestException
{
- ColumnNameBuilder builder = cfDef.getKeyNameBuilder();
+ ColumnNameBuilder builder = cfm.getKeyNameBuilder();
for (int i = 0; i < parameters.size(); i++)
{
ByteBuffer bb = parameters.get(i);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java b/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java
index f740ea6..049f90d 100644
--- a/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java
@@ -73,21 +73,20 @@ public class AlterTableStatement extends SchemaAlteringStatement
CFMetaData meta = validateColumnFamily(keyspace(), columnFamily());
CFMetaData cfm = meta.clone();
- CFDefinition cfDef = meta.getCfDef();
- CFDefinition.Name name = columnName == null ? null : cfDef.get(columnName);
+ ColumnDefinition def = columnName == null ? null : cfm.getColumnDefinition(columnName);
switch (oType)
{
case ADD:
- if (cfDef.isCompact)
+ if (cfm.isDense())
throw new InvalidRequestException("Cannot add new column to a compact CF");
- if (name != null)
+ if (def != null)
{
- switch (name.kind)
+ switch (def.kind)
{
- case KEY_ALIAS:
- case COLUMN_ALIAS:
+ case PARTITION_KEY:
+ case CLUSTERING_COLUMN:
throw new InvalidRequestException(String.format("Invalid column name %s because it conflicts with a PRIMARY KEY part", columnName));
- case COLUMN_METADATA:
+ case REGULAR:
throw new InvalidRequestException(String.format("Invalid column name %s because it conflicts with an existing column", columnName));
}
}
@@ -95,52 +94,52 @@ public class AlterTableStatement extends SchemaAlteringStatement
AbstractType<?> type = validator.getType();
if (type instanceof CollectionType)
{
- if (!cfDef.isComposite)
+ if (!cfm.hasCompositeComparator())
throw new InvalidRequestException("Cannot use collection types with non-composite PRIMARY KEY");
- if (cfDef.cfm.isSuper())
+ if (cfm.isSuper())
throw new InvalidRequestException("Cannot use collection types with Super column family");
- Map<ByteBuffer, CollectionType> collections = cfDef.hasCollections
- ? new HashMap<ByteBuffer, CollectionType>(cfDef.getCollectionType().defined)
+ Map<ByteBuffer, CollectionType> collections = cfm.hasCollections()
+ ? new HashMap<ByteBuffer, CollectionType>(cfm.getCollectionType().defined)
: new HashMap<ByteBuffer, CollectionType>();
- collections.put(columnName.key, (CollectionType)type);
+ collections.put(columnName.bytes, (CollectionType)type);
ColumnToCollectionType newColType = ColumnToCollectionType.getInstance(collections);
List<AbstractType<?>> ctypes = new ArrayList<AbstractType<?>>(((CompositeType)cfm.comparator).types);
- if (cfDef.hasCollections)
+ if (cfm.hasCollections())
ctypes.set(ctypes.size() - 1, newColType);
else
ctypes.add(newColType);
cfm.comparator = CompositeType.getInstance(ctypes);
}
- Integer componentIndex = cfDef.isComposite
- ? ((CompositeType)meta.comparator).types.size() - (cfDef.hasCollections ? 2 : 1)
+ Integer componentIndex = meta.hasCompositeComparator()
+ ? ((CompositeType)meta.comparator).types.size() - (meta.hasCollections() ? 2 : 1)
: null;
- cfm.addColumnDefinition(ColumnDefinition.regularDef(columnName.key, type, componentIndex));
+ cfm.addColumnDefinition(ColumnDefinition.regularDef(cfm, columnName.bytes, type, componentIndex));
break;
case ALTER:
- if (name == null)
+ if (def == null)
throw new InvalidRequestException(String.format("Column %s was not found in table %s", columnName, columnFamily()));
- switch (name.kind)
+ switch (def.kind)
{
- case KEY_ALIAS:
+ case PARTITION_KEY:
AbstractType<?> newType = validator.getType();
if (newType instanceof CounterColumnType)
throw new InvalidRequestException(String.format("counter type is not supported for PRIMARY KEY part %s", columnName));
- if (cfDef.hasCompositeKey)
+ if (cfm.getKeyValidator() instanceof CompositeType)
{
List<AbstractType<?>> oldTypes = ((CompositeType) cfm.getKeyValidator()).types;
- if (!newType.isValueCompatibleWith(oldTypes.get(name.position)))
+ if (!newType.isValueCompatibleWith(oldTypes.get(def.position())))
throw new ConfigurationException(String.format("Cannot change %s from type %s to type %s: types are incompatible.",
columnName,
- oldTypes.get(name.position).asCQL3Type(),
+ oldTypes.get(def.position()).asCQL3Type(),
validator));
List<AbstractType<?>> newTypes = new ArrayList<AbstractType<?>>(oldTypes);
- newTypes.set(name.position, newType);
+ newTypes.set(def.position(), newType);
cfm.keyValidator(CompositeType.getInstance(newTypes));
}
else
@@ -153,22 +152,22 @@ public class AlterTableStatement extends SchemaAlteringStatement
cfm.keyValidator(newType);
}
break;
- case COLUMN_ALIAS:
- assert cfDef.isComposite;
+ case CLUSTERING_COLUMN:
+ assert cfm.hasCompositeComparator();
List<AbstractType<?>> oldTypes = ((CompositeType) cfm.comparator).types;
// Note that CFMetaData.validateCompatibility already validate the change we're about to do. However, the error message it
// sends is a bit cryptic for a CQL3 user, so validating here for a sake of returning a better error message
// Do note that we need isCompatibleWith here, not just isValueCompatibleWith.
- if (!validator.getType().isCompatibleWith(oldTypes.get(name.position)))
+ if (!validator.getType().isCompatibleWith(oldTypes.get(def.position())))
throw new ConfigurationException(String.format("Cannot change %s from type %s to type %s: types are not order-compatible.",
columnName,
- oldTypes.get(name.position).asCQL3Type(),
+ oldTypes.get(def.position()).asCQL3Type(),
validator));
List<AbstractType<?>> newTypes = new ArrayList<AbstractType<?>>(oldTypes);
- newTypes.set(name.position, validator.getType());
+ newTypes.set(def.position(), validator.getType());
cfm.comparator = CompositeType.getInstance(newTypes);
break;
- case VALUE_ALIAS:
+ case COMPACT_VALUE:
// See below
if (!validator.getType().isValueCompatibleWith(cfm.getDefaultValidator()))
throw new ConfigurationException(String.format("Cannot change %s from type %s to type %s: types are incompatible.",
@@ -177,42 +176,42 @@ public class AlterTableStatement extends SchemaAlteringStatement
validator));
cfm.defaultValidator(validator.getType());
break;
- case COLUMN_METADATA:
- ColumnDefinition column = cfm.getColumnDefinition(columnName.key);
+ case REGULAR:
// Thrift allows to change a column validator so CFMetaData.validateCompatibility will let it slide
// if we change to an incompatible type (contrarily to the comparator case). But we don't want to
// allow it for CQL3 (see #5882) so validating it explicitly here. We only care about value compatibility
// though since we won't compare values (except when there is an index, but that is validated by
// ColumnDefinition already).
- if (!validator.getType().isValueCompatibleWith(column.getValidator()))
+ if (!validator.getType().isValueCompatibleWith(def.type))
throw new ConfigurationException(String.format("Cannot change %s from type %s to type %s: types are incompatible.",
columnName,
- column.getValidator().asCQL3Type(),
+ def.type.asCQL3Type(),
validator));
- column.setValidator(validator.getType());
break;
}
+ // In any case, we update the column definition
+ cfm.addOrReplaceColumnDefinition(def.withNewType(validator.getType()));
break;
case DROP:
- if (cfDef.isCompact)
+ if (cfm.isDense())
throw new InvalidRequestException("Cannot drop columns from a compact CF");
- if (!cfDef.isComposite)
+ if (!cfm.hasCompositeComparator())
throw new InvalidRequestException("Cannot drop columns from a non-CQL3 CF");
- if (name == null)
+ if (def == null)
throw new InvalidRequestException(String.format("Column %s was not found in table %s", columnName, columnFamily()));
- switch (name.kind)
+ switch (def.kind)
{
- case KEY_ALIAS:
- case COLUMN_ALIAS:
+ case PARTITION_KEY:
+ case CLUSTERING_COLUMN:
throw new InvalidRequestException(String.format("Cannot drop PRIMARY KEY part %s", columnName));
- case COLUMN_METADATA:
+ case REGULAR:
ColumnDefinition toDelete = null;
for (ColumnDefinition columnDef : cfm.regularColumns())
{
- if (columnDef.name.equals(columnName.key))
+ if (columnDef.name.equals(columnName))
toDelete = columnDef;
}
assert toDelete != null;
@@ -230,11 +229,7 @@ public class AlterTableStatement extends SchemaAlteringStatement
break;
case RENAME:
for (Map.Entry<ColumnIdentifier, ColumnIdentifier> entry : renames.entrySet())
- {
- ColumnIdentifier from = entry.getKey();
- ColumnIdentifier to = entry.getValue();
- cfm.renameColumn(from.key, from.toString(), to.key, to.toString());
- }
+ cfm.renameColumn(entry.getKey(), entry.getValue());
break;
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/statements/CreateIndexStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/CreateIndexStatement.java b/src/java/org/apache/cassandra/cql3/statements/CreateIndexStatement.java
index 1c0627f..b040121 100644
--- a/src/java/org/apache/cassandra/cql3/statements/CreateIndexStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/CreateIndexStatement.java
@@ -28,6 +28,7 @@ import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.config.IndexType;
import org.apache.cassandra.config.Schema;
import org.apache.cassandra.db.index.SecondaryIndex;
+import org.apache.cassandra.db.marshal.CompositeType;
import org.apache.cassandra.exceptions.*;
import org.apache.cassandra.cql3.*;
import org.apache.cassandra.service.ClientState;
@@ -67,7 +68,7 @@ public class CreateIndexStatement extends SchemaAlteringStatement
if (cfm.getDefaultValidator().isCommutative())
throw new InvalidRequestException("Secondary indexes are not supported on counter tables");
- ColumnDefinition cd = cfm.getColumnDefinition(columnName.key);
+ ColumnDefinition cd = cfm.getColumnDefinition(columnName);
if (cd == null)
throw new InvalidRequestException("No column definition found for column " + columnName);
@@ -87,13 +88,13 @@ public class CreateIndexStatement extends SchemaAlteringStatement
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 (cfm.isDense() && cd.kind != ColumnDefinition.Kind.REGULAR)
+ throw new InvalidRequestException(String.format("Secondary index on %s column %s is not yet supported for compact table", cd.kind, columnName));
- if (cd.getValidator().isCollection() && !isCustom)
+ if (cd.type.isCollection() && !isCustom)
throw new InvalidRequestException("Indexes on collections are no yet supported");
- if (cd.type == ColumnDefinition.Type.PARTITION_KEY && cd.componentIndex == null)
+ if (cd.kind == ColumnDefinition.Kind.PARTITION_KEY && cd.isOnAllComponents())
throw new InvalidRequestException(String.format("Cannot add secondary index to already primarily indexed column %s", columnName));
}
@@ -101,14 +102,14 @@ public class CreateIndexStatement extends SchemaAlteringStatement
{
logger.debug("Updating column {} definition for index {}", columnName, indexName);
CFMetaData cfm = Schema.instance.getCFMetaData(keyspace(), columnFamily()).clone();
- ColumnDefinition cd = cfm.getColumnDefinition(columnName.key);
+ ColumnDefinition cd = cfm.getColumnDefinition(columnName);
if (cd.getIndexType() != null && ifNotExists)
return;
if (isCustom)
cd.setIndexType(IndexType.CUSTOM, Collections.singletonMap(SecondaryIndex.CUSTOM_INDEX_OPTION_NAME, indexClass));
- else if (cfm.getCfDef().isComposite)
+ else if (cfm.hasCompositeComparator())
cd.setIndexType(IndexType.COMPOSITES, Collections.<String, String>emptyMap());
else
cd.setIndexType(IndexType.KEYS, Collections.<String, String>emptyMap());
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java b/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java
index 74f7570..809e0dc 100644
--- a/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java
@@ -87,11 +87,11 @@ public class CreateTableStatement extends SchemaAlteringStatement
}
// Column definitions
- private Map<ByteBuffer, ColumnDefinition> getColumns()
+ private Map<ByteBuffer, ColumnDefinition> getColumns(CFMetaData cfm)
{
Map<ByteBuffer, ColumnDefinition> columnDefs = new HashMap<ByteBuffer, ColumnDefinition>();
Integer componentIndex = null;
- if (comparator instanceof CompositeType)
+ if (cfm.hasCompositeComparator())
{
CompositeType ct = (CompositeType) comparator;
componentIndex = ct.types.get(ct.types.size() - 1) instanceof ColumnToCollectionType
@@ -101,7 +101,7 @@ public class CreateTableStatement extends SchemaAlteringStatement
for (Map.Entry<ColumnIdentifier, AbstractType> col : columns.entrySet())
{
- columnDefs.put(col.getKey().key, ColumnDefinition.regularDef(col.getKey().key, col.getValue(), componentIndex));
+ columnDefs.put(col.getKey().bytes, ColumnDefinition.regularDef(cfm, col.getKey().bytes, col.getValue(), componentIndex));
}
return columnDefs;
@@ -148,12 +148,12 @@ public class CreateTableStatement extends SchemaAlteringStatement
{
cfmd.defaultValidator(defaultValidator)
.keyValidator(keyValidator)
- .columnMetadata(getColumns());
+ .columnMetadata(getColumns(cfmd));
- cfmd.addColumnMetadataFromAliases(keyAliases, keyValidator, ColumnDefinition.Type.PARTITION_KEY);
- cfmd.addColumnMetadataFromAliases(columnAliases, comparator, ColumnDefinition.Type.CLUSTERING_KEY);
+ cfmd.addColumnMetadataFromAliases(keyAliases, keyValidator, ColumnDefinition.Kind.PARTITION_KEY);
+ cfmd.addColumnMetadataFromAliases(columnAliases, comparator, ColumnDefinition.Kind.CLUSTERING_COLUMN);
if (valueAlias != null)
- cfmd.addColumnMetadataFromAliases(Collections.<ByteBuffer>singletonList(valueAlias), defaultValidator, ColumnDefinition.Type.COMPACT_VALUE);
+ cfmd.addColumnMetadataFromAliases(Collections.<ByteBuffer>singletonList(valueAlias), defaultValidator, ColumnDefinition.Kind.COMPACT_VALUE);
properties.applyToCFMetadata(cfmd);
}
@@ -206,7 +206,7 @@ public class CreateTableStatement extends SchemaAlteringStatement
{
if (definedCollections == null)
definedCollections = new HashMap<ByteBuffer, CollectionType>();
- definedCollections.put(id.key, (CollectionType)pt.getType());
+ definedCollections.put(id.bytes, (CollectionType)pt.getType());
}
stmt.columns.put(id, pt.getType()); // we'll remove what is not a column below
}
@@ -221,7 +221,7 @@ public class CreateTableStatement extends SchemaAlteringStatement
List<AbstractType<?>> keyTypes = new ArrayList<AbstractType<?>>(kAliases.size());
for (ColumnIdentifier alias : kAliases)
{
- stmt.keyAliases.add(alias.key);
+ stmt.keyAliases.add(alias.bytes);
AbstractType<?> t = getTypeAndRemove(stmt.columns, alias);
if (t instanceof CounterColumnType)
throw new InvalidRequestException(String.format("counter type is not supported for PRIMARY KEY part %s", alias));
@@ -241,12 +241,12 @@ public class CreateTableStatement extends SchemaAlteringStatement
if (definedCollections != null)
throw new InvalidRequestException("Collection types are not supported with COMPACT STORAGE");
- stmt.comparator = CFDefinition.definitionType;
+ stmt.comparator = UTF8Type.instance;
}
else
{
List<AbstractType<?>> types = new ArrayList<AbstractType<?>>(definedCollections == null ? 1 : 2);
- types.add(CFDefinition.definitionType);
+ types.add(UTF8Type.instance);
if (definedCollections != null)
types.add(ColumnToCollectionType.getInstance(definedCollections));
stmt.comparator = CompositeType.getInstance(types);
@@ -260,7 +260,7 @@ public class CreateTableStatement extends SchemaAlteringStatement
{
if (definedCollections != null)
throw new InvalidRequestException("Collection types are not supported with COMPACT STORAGE");
- stmt.columnAliases.add(columnAliases.get(0).key);
+ stmt.columnAliases.add(columnAliases.get(0).bytes);
stmt.comparator = getTypeAndRemove(stmt.columns, columnAliases.get(0));
if (stmt.comparator instanceof CounterColumnType)
throw new InvalidRequestException(String.format("counter type is not supported for PRIMARY KEY part %s", stmt.columnAliases.get(0)));
@@ -270,11 +270,11 @@ public class CreateTableStatement extends SchemaAlteringStatement
List<AbstractType<?>> types = new ArrayList<AbstractType<?>>(columnAliases.size() + 1);
for (ColumnIdentifier t : columnAliases)
{
- stmt.columnAliases.add(t.key);
+ stmt.columnAliases.add(t.bytes);
AbstractType<?> type = getTypeAndRemove(stmt.columns, t);
if (type instanceof CounterColumnType)
- throw new InvalidRequestException(String.format("counter type is not supported for PRIMARY KEY part %s", t.key));
+ throw new InvalidRequestException(String.format("counter type is not supported for PRIMARY KEY part %s", t));
types.add(type);
}
@@ -287,7 +287,7 @@ public class CreateTableStatement extends SchemaAlteringStatement
{
// For sparse, we must add the last UTF8 component
// and the collection type if there is one
- types.add(CFDefinition.definitionType);
+ types.add(UTF8Type.instance);
if (definedCollections != null)
types.add(ColumnToCollectionType.getInstance(definedCollections));
}
@@ -317,7 +317,7 @@ public class CreateTableStatement extends SchemaAlteringStatement
Map.Entry<ColumnIdentifier, AbstractType> lastEntry = stmt.columns.entrySet().iterator().next();
stmt.defaultValidator = lastEntry.getValue();
- stmt.valueAlias = lastEntry.getKey().key;
+ stmt.valueAlias = lastEntry.getKey().bytes;
stmt.columns.remove(lastEntry.getKey());
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/statements/DeleteStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/DeleteStatement.java b/src/java/org/apache/cassandra/cql3/statements/DeleteStatement.java
index 3704e14..db991c0 100644
--- a/src/java/org/apache/cassandra/cql3/statements/DeleteStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/DeleteStatement.java
@@ -22,6 +22,7 @@ import java.util.*;
import org.apache.cassandra.cql3.*;
import org.apache.cassandra.config.CFMetaData;
+import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.db.*;
import org.apache.cassandra.exceptions.*;
import org.apache.cassandra.utils.Pair;
@@ -44,12 +45,11 @@ public class DeleteStatement extends ModificationStatement
public ColumnFamily updateForKey(ByteBuffer key, ColumnNameBuilder builder, UpdateParameters params)
throws InvalidRequestException
{
- CFDefinition cfDef = cfm.getCfDef();
ColumnFamily cf = TreeMapBackedSortedColumns.factory.create(cfm);
List<Operation> deletions = getOperations();
- boolean fullKey = builder.componentCount() == cfDef.columns.size();
- boolean isRange = cfDef.isCompact ? !fullKey : (!fullKey || deletions.isEmpty());
+ boolean fullKey = builder.componentCount() == cfm.clusteringColumns().size();
+ boolean isRange = cfm.isDense() ? !fullKey : (!fullKey || deletions.isEmpty());
if (!deletions.isEmpty() && isRange)
throw new InvalidRequestException(String.format("Missing mandatory PRIMARY KEY part %s since %s specified", getFirstEmptyKey(), deletions.get(0).columnName));
@@ -71,7 +71,7 @@ public class DeleteStatement extends ModificationStatement
else
{
// Delete specific columns
- if (cfDef.isCompact)
+ if (cfm.isDense())
{
ByteBuffer columnName = builder.build();
cf.addColumn(params.makeTombstone(columnName));
@@ -103,22 +103,22 @@ public class DeleteStatement extends ModificationStatement
this.whereClause = whereClause;
}
- protected ModificationStatement prepareInternal(CFDefinition cfDef, VariableSpecifications boundNames, Attributes attrs) throws InvalidRequestException
+ protected ModificationStatement prepareInternal(CFMetaData cfm, VariableSpecifications boundNames, Attributes attrs) throws InvalidRequestException
{
- DeleteStatement stmt = new DeleteStatement(boundNames.size(), cfDef.cfm, attrs);
+ DeleteStatement stmt = new DeleteStatement(boundNames.size(), cfm, attrs);
for (Operation.RawDeletion deletion : deletions)
{
- CFDefinition.Name name = cfDef.get(deletion.affectedColumn());
- if (name == null)
+ ColumnDefinition def = cfm.getColumnDefinition(deletion.affectedColumn());
+ if (def == null)
throw new InvalidRequestException(String.format("Unknown identifier %s", deletion.affectedColumn()));
// For compact, we only have one value except the key, so the only form of DELETE that make sense is without a column
// list. However, we support having the value name for coherence with the static/sparse case
- if (name.kind != CFDefinition.Name.Kind.COLUMN_METADATA && name.kind != CFDefinition.Name.Kind.VALUE_ALIAS)
- throw new InvalidRequestException(String.format("Invalid identifier %s for deletion (should not be a PRIMARY KEY part)", name));
+ if (def.kind != ColumnDefinition.Kind.REGULAR && def.kind != ColumnDefinition.Kind.COMPACT_VALUE)
+ throw new InvalidRequestException(String.format("Invalid identifier %s for deletion (should not be a PRIMARY KEY part)", def.name));
- Operation op = deletion.prepare(name);
+ Operation op = deletion.prepare(def);
op.collectMarkerSpecification(boundNames);
stmt.addOperation(op);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/5f5905d5/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
index 0f425b8..d8e0945 100644
--- a/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
@@ -22,6 +22,7 @@ import java.util.*;
import org.apache.cassandra.auth.Permission;
import org.apache.cassandra.config.CFMetaData;
+import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.cql3.*;
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.filter.ColumnSlice;
@@ -152,30 +153,29 @@ public abstract class ModificationStatement implements CQLStatement
public void processWhereClause(List<Relation> whereClause, VariableSpecifications names) throws InvalidRequestException
{
- CFDefinition cfDef = cfm.getCfDef();
for (Relation rel : whereClause)
{
- CFDefinition.Name name = cfDef.get(rel.getEntity());
- if (name == null)
+ ColumnDefinition def = cfm.getColumnDefinition(rel.getEntity());
+ if (def == null)
throw new InvalidRequestException(String.format("Unknown key identifier %s", rel.getEntity()));
- switch (name.kind)
+ switch (def.kind)
{
- case KEY_ALIAS:
- case COLUMN_ALIAS:
+ case PARTITION_KEY:
+ case CLUSTERING_COLUMN:
Restriction restriction;
if (rel.operator() == Relation.Type.EQ)
{
- Term t = rel.getValue().prepare(name);
+ Term t = rel.getValue().prepare(def);
t.collectMarkerSpecification(names);
restriction = new Restriction.EQ(t, false);
}
- else if (name.kind == CFDefinition.Name.Kind.KEY_ALIAS && rel.operator() == Relation.Type.IN)
+ else if (def.kind == ColumnDefinition.Kind.PARTITION_KEY && rel.operator() == Relation.Type.IN)
{
if (rel.getValue() != null)
{
- Term t = rel.getValue().prepare(name);
+ Term t = rel.getValue().prepare(def);
t.collectMarkerSpecification(names);
restriction = Restriction.IN.create(t);
}
@@ -184,7 +184,7 @@ public abstract class ModificationStatement implements CQLStatement
List<Term> values = new ArrayList<Term>(rel.getInValues().size());
for (Term.Raw raw : rel.getInValues())
{
- Term t = raw.prepare(name);
+ Term t = raw.prepare(def);
t.collectMarkerSpecification(names);
values.add(t);
}
@@ -193,14 +193,14 @@ public abstract class ModificationStatement implements CQLStatement
}
else
{
- throw new InvalidRequestException(String.format("Invalid operator %s for PRIMARY KEY part %s", rel.operator(), name));
+ throw new InvalidRequestException(String.format("Invalid operator %s for PRIMARY KEY part %s", rel.operator(), def.name));
}
- addKeyValues(name.name, restriction);
+ addKeyValues(def.name, restriction);
break;
- case VALUE_ALIAS:
- case COLUMN_METADATA:
- throw new InvalidRequestException(String.format("Non PRIMARY KEY %s found in where clause", name));
+ case COMPACT_VALUE:
+ case REGULAR:
+ throw new InvalidRequestException(String.format("Non PRIMARY KEY %s found in where clause", def.name));
}
}
}
@@ -208,14 +208,13 @@ public abstract class ModificationStatement implements CQLStatement
public List<ByteBuffer> buildPartitionKeyNames(List<ByteBuffer> variables)
throws InvalidRequestException
{
- CFDefinition cfDef = cfm.getCfDef();
- ColumnNameBuilder keyBuilder = cfDef.getKeyNameBuilder();
+ ColumnNameBuilder keyBuilder = cfm.getKeyNameBuilder();
List<ByteBuffer> keys = new ArrayList<ByteBuffer>();
- for (CFDefinition.Name name : cfDef.keys.values())
+ for (ColumnDefinition def : cfm.partitionKeyColumns())
{
- Restriction r = processedKeys.get(name.name);
+ Restriction r = processedKeys.get(def.name);
if (r == null)
- throw new InvalidRequestException(String.format("Missing mandatory PRIMARY KEY part %s", name));
+ throw new InvalidRequestException(String.format("Missing mandatory PRIMARY KEY part %s", def.name));
List<ByteBuffer> values = r.values(variables);
@@ -224,7 +223,7 @@ public abstract class ModificationStatement implements CQLStatement
for (ByteBuffer val : values)
{
if (val == null)
- throw new InvalidRequestException(String.format("Invalid null value for partition key part %s", name));
+ throw new InvalidRequestException(String.format("Invalid null value for partition key part %s", def.name));
keys.add(keyBuilder.copy().add(val).build());
}
}
@@ -234,7 +233,7 @@ public abstract class ModificationStatement implements CQLStatement
throw new InvalidRequestException("IN is only supported on the last column of the partition key");
ByteBuffer val = values.get(0);
if (val == null)
- throw new InvalidRequestException(String.format("Invalid null value for partition key part %s", name));
+ throw new InvalidRequestException(String.format("Invalid null value for partition key part %s", def.name));
keyBuilder.add(val);
}
}
@@ -244,21 +243,20 @@ public abstract class ModificationStatement implements CQLStatement
public ColumnNameBuilder createClusteringPrefixBuilder(List<ByteBuffer> variables)
throws InvalidRequestException
{
- CFDefinition cfDef = cfm.getCfDef();
- ColumnNameBuilder builder = cfDef.getColumnNameBuilder();
- CFDefinition.Name firstEmptyKey = null;
- for (CFDefinition.Name name : cfDef.columns.values())
+ ColumnNameBuilder builder = cfm.getColumnNameBuilder();
+ ColumnDefinition firstEmptyKey = null;
+ for (ColumnDefinition def : cfm.clusteringColumns())
{
- Restriction r = processedKeys.get(name.name);
+ Restriction r = processedKeys.get(def.name);
if (r == null)
{
- firstEmptyKey = name;
- if (requireFullClusteringKey() && cfDef.isComposite && !cfDef.isCompact)
- throw new InvalidRequestException(String.format("Missing mandatory PRIMARY KEY part %s", name));
+ firstEmptyKey = def;
+ if (requireFullClusteringKey() && cfm.hasCompositeComparator() && !cfm.isDense())
+ throw new InvalidRequestException(String.format("Missing mandatory PRIMARY KEY part %s", def.name));
}
else if (firstEmptyKey != null)
{
- throw new InvalidRequestException(String.format("Missing PRIMARY KEY part %s since %s is set", firstEmptyKey.name, name.name));
+ throw new InvalidRequestException(String.format("Missing PRIMARY KEY part %s since %s is set", firstEmptyKey.name, def.name));
}
else
{
@@ -266,19 +264,19 @@ public abstract class ModificationStatement implements CQLStatement
assert values.size() == 1; // We only allow IN for row keys so far
ByteBuffer val = values.get(0);
if (val == null)
- throw new InvalidRequestException(String.format("Invalid null value for clustering key part %s", name));
+ throw new InvalidRequestException(String.format("Invalid null value for clustering key part %s", def.name));
builder.add(val);
}
}
return builder;
}
- protected CFDefinition.Name getFirstEmptyKey()
+ protected ColumnDefinition getFirstEmptyKey()
{
- for (CFDefinition.Name name : cfm.getCfDef().columns.values())
+ for (ColumnDefinition def : cfm.clusteringColumns())
{
- if (processedKeys.get(name.name) == null)
- return name;
+ if (processedKeys.get(def.name) == null)
+ return def;
}
return null;
}
@@ -287,21 +285,21 @@ public abstract class ModificationStatement implements CQLStatement
throws RequestExecutionException, RequestValidationException
{
// Lists SET operation incurs a read.
- Set<ByteBuffer> toRead = null;
+ Set<ColumnIdentifier> toRead = null;
for (Operation op : columnOperations)
{
if (op.requiresRead())
{
if (toRead == null)
- toRead = new TreeSet<ByteBuffer>(UTF8Type.instance);
- toRead.add(op.columnName.key);
+ toRead = new TreeSet<ColumnIdentifier>();
+ toRead.add(op.columnName);
}
}
return toRead == null ? null : readRows(partitionKeys, clusteringPrefix, toRead, (CompositeType)cfm.comparator, local, cl);
}
- private Map<ByteBuffer, ColumnGroupMap> readRows(List<ByteBuffer> partitionKeys, ColumnNameBuilder clusteringPrefix, Set<ByteBuffer> toRead, CompositeType composite, boolean local, ConsistencyLevel cl)
+ private Map<ByteBuffer, ColumnGroupMap> readRows(List<ByteBuffer> partitionKeys, ColumnNameBuilder clusteringPrefix, Set<ColumnIdentifier> toRead, CompositeType composite, boolean local, ConsistencyLevel cl)
throws RequestExecutionException, RequestValidationException
{
try
@@ -315,7 +313,7 @@ public abstract class ModificationStatement implements CQLStatement
ColumnSlice[] slices = new ColumnSlice[toRead.size()];
int i = 0;
- for (ByteBuffer name : toRead)
+ for (ColumnIdentifier name : toRead)
{
ByteBuffer start = clusteringPrefix.copy().add(name).build();
ByteBuffer finish = clusteringPrefix.copy().add(name).buildAsEndOfRange();
@@ -450,24 +448,22 @@ public abstract class ModificationStatement implements CQLStatement
private ResultSet buildCasFailureResultSet(ByteBuffer key, ColumnFamily cf) throws InvalidRequestException
{
- CFDefinition cfDef = cfm.getCfDef();
-
Selection selection;
if (ifNotExists)
{
- selection = Selection.wildcard(cfDef);
+ selection = Selection.wildcard(cfm);
}
else
{
- List<CFDefinition.Name> names = new ArrayList<CFDefinition.Name>(columnConditions.size());
+ List<ColumnDefinition> defs = new ArrayList<>(columnConditions.size());
for (Operation condition : columnConditions)
- names.add(cfDef.get(condition.columnName));
- selection = Selection.forColumns(names);
+ defs.add(cfm.getColumnDefinition(condition.columnName));
+ selection = Selection.forColumns(defs);
}
long now = System.currentTimeMillis();
Selection.ResultSetBuilder builder = selection.resultSetBuilder(now);
- SelectStatement.forSelection(cfDef, selection).processColumnFamily(key, cf, Collections.<ByteBuffer>emptyList(), now, builder);
+ SelectStatement.forSelection(cfm, selection).processColumnFamily(key, cf, Collections.<ByteBuffer>emptyList(), now, builder);
return builder.build();
}
@@ -538,8 +534,7 @@ public abstract class ModificationStatement implements CQLStatement
ColumnFamily cf = TreeMapBackedSortedColumns.factory.create(cfm);
// CQL row marker
- CFDefinition cfDef = cfm.getCfDef();
- if (cfDef.isComposite && !cfDef.isCompact && !cfm.isSuper())
+ if (cfm.hasCompositeComparator() && !cfm.isDense() && !cfm.isSuper())
{
ByteBuffer name = clusteringPrefix.copy().add(ByteBufferUtil.EMPTY_BYTE_BUFFER).build();
cf.addColumn(params.makeColumn(name, ByteBufferUtil.EMPTY_BYTE_BUFFER));
@@ -577,12 +572,11 @@ public abstract class ModificationStatement implements CQLStatement
public ModificationStatement prepare(VariableSpecifications boundNames) throws InvalidRequestException
{
CFMetaData metadata = ThriftValidation.validateColumnFamily(keyspace(), columnFamily());
- CFDefinition cfDef = metadata.getCfDef();
Attributes preparedAttributes = attrs.prepare(keyspace(), columnFamily());
preparedAttributes.collectMarkerSpecification(boundNames);
- ModificationStatement stmt = prepareInternal(cfDef, boundNames, preparedAttributes);
+ ModificationStatement stmt = prepareInternal(metadata, boundNames, preparedAttributes);
if (ifNotExists || (conditions != null && !conditions.isEmpty()))
{
@@ -603,8 +597,8 @@ public abstract class ModificationStatement implements CQLStatement
{
for (Pair<ColumnIdentifier, Operation.RawUpdate> entry : conditions)
{
- CFDefinition.Name name = cfDef.get(entry.left);
- if (name == null)
+ ColumnDefinition def = metadata.getColumnDefinition(entry.left);
+ if (def == null)
throw new InvalidRequestException(String.format("Unknown identifier %s", entry.left));
/*
@@ -613,21 +607,21 @@ public abstract class ModificationStatement implements CQLStatement
* now, we just refuse lists, which also save use from having to bother about the read that some
* list operation involve.
*/
- if (name.type instanceof ListType)
- throw new InvalidRequestException(String.format("List operation (%s) are not allowed in conditional updates", name));
+ if (def.type instanceof ListType)
+ throw new InvalidRequestException(String.format("List operation (%s) are not allowed in conditional updates", def.name));
- Operation condition = entry.right.prepare(name);
+ Operation condition = entry.right.prepare(def);
assert !condition.requiresRead();
condition.collectMarkerSpecification(boundNames);
- switch (name.kind)
+ switch (def.kind)
{
- case KEY_ALIAS:
- case COLUMN_ALIAS:
+ case PARTITION_KEY:
+ case CLUSTERING_COLUMN:
throw new InvalidRequestException(String.format("PRIMARY KEY part %s found in SET part", entry.left));
- case VALUE_ALIAS:
- case COLUMN_METADATA:
+ case COMPACT_VALUE:
+ case REGULAR:
stmt.addCondition(condition);
break;
}
@@ -637,6 +631,6 @@ public abstract class ModificationStatement implements CQLStatement
return stmt;
}
- protected abstract ModificationStatement prepareInternal(CFDefinition cfDef, VariableSpecifications boundNames, Attributes attrs) throws InvalidRequestException;
+ protected abstract ModificationStatement prepareInternal(CFMetaData cfm, VariableSpecifications boundNames, Attributes attrs) throws InvalidRequestException;
}
}