You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2017/01/27 22:18:40 UTC
[34/37] cassandra git commit: Make TableMetadata immutable,
optimize Schema
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/Relation.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/Relation.java b/src/java/org/apache/cassandra/cql3/Relation.java
index 097b88e..1d27874 100644
--- a/src/java/org/apache/cassandra/cql3/Relation.java
+++ b/src/java/org/apache/cassandra/cql3/Relation.java
@@ -20,8 +20,8 @@ package org.apache.cassandra.cql3;
import java.util.ArrayList;
import java.util.List;
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.schema.TableMetadata;
+import org.apache.cassandra.schema.ColumnMetadata;
import org.apache.cassandra.cql3.restrictions.Restriction;
import org.apache.cassandra.cql3.statements.Bound;
import org.apache.cassandra.exceptions.InvalidRequestException;
@@ -132,31 +132,30 @@ public abstract class Relation
/**
* Converts this <code>Relation</code> into a <code>Restriction</code>.
*
- * @param cfm the Column Family meta data
+ * @param table the Column Family meta data
* @param boundNames the variables specification where to collect the bind variables
* @return the <code>Restriction</code> corresponding to this <code>Relation</code>
* @throws InvalidRequestException if this <code>Relation</code> is not valid
*/
- public final Restriction toRestriction(CFMetaData cfm,
- VariableSpecifications boundNames) throws InvalidRequestException
+ public final Restriction toRestriction(TableMetadata table, VariableSpecifications boundNames)
{
switch (relationType)
{
- case EQ: return newEQRestriction(cfm, boundNames);
- case LT: return newSliceRestriction(cfm, boundNames, Bound.END, false);
- case LTE: return newSliceRestriction(cfm, boundNames, Bound.END, true);
- case GTE: return newSliceRestriction(cfm, boundNames, Bound.START, true);
- case GT: return newSliceRestriction(cfm, boundNames, Bound.START, false);
- case IN: return newINRestriction(cfm, boundNames);
- case CONTAINS: return newContainsRestriction(cfm, boundNames, false);
- case CONTAINS_KEY: return newContainsRestriction(cfm, boundNames, true);
- case IS_NOT: return newIsNotRestriction(cfm, boundNames);
+ case EQ: return newEQRestriction(table, boundNames);
+ case LT: return newSliceRestriction(table, boundNames, Bound.END, false);
+ case LTE: return newSliceRestriction(table, boundNames, Bound.END, true);
+ case GTE: return newSliceRestriction(table, boundNames, Bound.START, true);
+ case GT: return newSliceRestriction(table, boundNames, Bound.START, false);
+ case IN: return newINRestriction(table, boundNames);
+ case CONTAINS: return newContainsRestriction(table, boundNames, false);
+ case CONTAINS_KEY: return newContainsRestriction(table, boundNames, true);
+ case IS_NOT: return newIsNotRestriction(table, boundNames);
case LIKE_PREFIX:
case LIKE_SUFFIX:
case LIKE_CONTAINS:
case LIKE_MATCHES:
case LIKE:
- return newLikeRestriction(cfm, boundNames, relationType);
+ return newLikeRestriction(table, boundNames, relationType);
default: throw invalidRequest("Unsupported \"!=\" relation: %s", this);
}
}
@@ -164,59 +163,52 @@ public abstract class Relation
/**
* Creates a new EQ restriction instance.
*
- * @param cfm the Column Family meta data
+ * @param table the table meta data
* @param boundNames the variables specification where to collect the bind variables
* @return a new EQ restriction instance.
* @throws InvalidRequestException if the relation cannot be converted into an EQ restriction.
*/
- protected abstract Restriction newEQRestriction(CFMetaData cfm,
- VariableSpecifications boundNames) throws InvalidRequestException;
+ protected abstract Restriction newEQRestriction(TableMetadata table, VariableSpecifications boundNames);
/**
* Creates a new IN restriction instance.
*
- * @param cfm the Column Family meta data
+ * @param table the table meta data
* @param boundNames the variables specification where to collect the bind variables
* @return a new IN restriction instance
* @throws InvalidRequestException if the relation cannot be converted into an IN restriction.
*/
- protected abstract Restriction newINRestriction(CFMetaData cfm,
- VariableSpecifications boundNames) throws InvalidRequestException;
+ protected abstract Restriction newINRestriction(TableMetadata table, VariableSpecifications boundNames);
/**
* Creates a new Slice restriction instance.
*
- * @param cfm the Column Family meta data
+ * @param table the table meta data
* @param boundNames the variables specification where to collect the bind variables
* @param bound the slice bound
* @param inclusive <code>true</code> if the bound is included.
* @return a new slice restriction instance
* @throws InvalidRequestException if the <code>Relation</code> is not valid
*/
- protected abstract Restriction newSliceRestriction(CFMetaData cfm,
+ protected abstract Restriction newSliceRestriction(TableMetadata table,
VariableSpecifications boundNames,
Bound bound,
- boolean inclusive) throws InvalidRequestException;
+ boolean inclusive);
/**
* Creates a new Contains restriction instance.
*
- * @param cfm the Column Family meta data
+ * @param table the table meta data
* @param boundNames the variables specification where to collect the bind variables
* @param isKey <code>true</code> if the restriction to create is a CONTAINS KEY
* @return a new Contains <code>Restriction</code> instance
* @throws InvalidRequestException if the <code>Relation</code> is not valid
*/
- protected abstract Restriction newContainsRestriction(CFMetaData cfm,
- VariableSpecifications boundNames,
- boolean isKey) throws InvalidRequestException;
+ protected abstract Restriction newContainsRestriction(TableMetadata table, VariableSpecifications boundNames, boolean isKey);
- protected abstract Restriction newIsNotRestriction(CFMetaData cfm,
- VariableSpecifications boundNames) throws InvalidRequestException;
+ protected abstract Restriction newIsNotRestriction(TableMetadata table, VariableSpecifications boundNames);
- protected abstract Restriction newLikeRestriction(CFMetaData cfm,
- VariableSpecifications boundNames,
- Operator operator) throws InvalidRequestException;
+ protected abstract Restriction newLikeRestriction(TableMetadata table, VariableSpecifications boundNames, Operator operator);
/**
* Converts the specified <code>Raw</code> into a <code>Term</code>.
@@ -231,8 +223,7 @@ public abstract class Relation
protected abstract Term toTerm(List<? extends ColumnSpecification> receivers,
Term.Raw raw,
String keyspace,
- VariableSpecifications boundNames)
- throws InvalidRequestException;
+ VariableSpecifications boundNames);
/**
* Converts the specified <code>Raw</code> terms into a <code>Term</code>s.
@@ -247,7 +238,7 @@ public abstract class Relation
protected final List<Term> toTerms(List<? extends ColumnSpecification> receivers,
List<? extends Term.Raw> raws,
String keyspace,
- VariableSpecifications boundNames) throws InvalidRequestException
+ VariableSpecifications boundNames)
{
if (raws == null)
return null;
@@ -266,5 +257,5 @@ public abstract class Relation
* @return this object, if the old identifier is not in the set of entities that this relation covers; otherwise
* a new Relation with "from" replaced by "to" is returned.
*/
- public abstract Relation renameIdentifier(ColumnDefinition.Raw from, ColumnDefinition.Raw to);
+ public abstract Relation renameIdentifier(ColumnMetadata.Raw from, ColumnMetadata.Raw to);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/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 e79bda7..2920ed7 100644
--- a/src/java/org/apache/cassandra/cql3/Sets.java
+++ b/src/java/org/apache/cassandra/cql3/Sets.java
@@ -24,7 +24,7 @@ import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
-import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.schema.ColumnMetadata;
import org.apache.cassandra.cql3.functions.Function;
import org.apache.cassandra.db.DecoratedKey;
import org.apache.cassandra.db.rows.*;
@@ -301,7 +301,7 @@ public abstract class Sets
public static class Setter extends Operation
{
- public Setter(ColumnDefinition column, Term t)
+ public Setter(ColumnMetadata column, Term t)
{
super(column, t);
}
@@ -321,7 +321,7 @@ public abstract class Sets
public static class Adder extends Operation
{
- public Adder(ColumnDefinition column, Term t)
+ public Adder(ColumnMetadata column, Term t)
{
super(column, t);
}
@@ -334,7 +334,7 @@ public abstract class Sets
doAdd(value, column, params);
}
- static void doAdd(Term.Terminal value, ColumnDefinition column, UpdateParameters params) throws InvalidRequestException
+ static void doAdd(Term.Terminal value, ColumnMetadata column, UpdateParameters params) throws InvalidRequestException
{
if (column.type.isMultiCell())
{
@@ -363,7 +363,7 @@ public abstract class Sets
// Note that this is reused for Map subtraction too (we subtract a set from a map)
public static class Discarder extends Operation
{
- public Discarder(ColumnDefinition column, Term t)
+ public Discarder(ColumnMetadata column, Term t)
{
super(column, t);
}
@@ -388,7 +388,7 @@ public abstract class Sets
public static class ElementDiscarder extends Operation
{
- public ElementDiscarder(ColumnDefinition column, Term k)
+ public ElementDiscarder(ColumnMetadata column, Term k)
{
super(column, k);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/SingleColumnRelation.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/SingleColumnRelation.java b/src/java/org/apache/cassandra/cql3/SingleColumnRelation.java
index 719ef68..412eb16 100644
--- a/src/java/org/apache/cassandra/cql3/SingleColumnRelation.java
+++ b/src/java/org/apache/cassandra/cql3/SingleColumnRelation.java
@@ -21,8 +21,8 @@ import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.schema.ColumnMetadata;
+import org.apache.cassandra.schema.TableMetadata;
import org.apache.cassandra.cql3.Term.Raw;
import org.apache.cassandra.cql3.restrictions.Restriction;
import org.apache.cassandra.cql3.restrictions.SingleColumnRestriction;
@@ -44,12 +44,12 @@ import static org.apache.cassandra.cql3.statements.RequestValidations.invalidReq
*/
public final class SingleColumnRelation extends Relation
{
- private final ColumnDefinition.Raw entity;
+ private final ColumnMetadata.Raw entity;
private final Term.Raw mapKey;
private final Term.Raw value;
private final List<Term.Raw> inValues;
- private SingleColumnRelation(ColumnDefinition.Raw entity, Term.Raw mapKey, Operator type, Term.Raw value, List<Term.Raw> inValues)
+ private SingleColumnRelation(ColumnMetadata.Raw entity, Term.Raw mapKey, Operator type, Term.Raw value, List<Term.Raw> inValues)
{
this.entity = entity;
this.mapKey = mapKey;
@@ -69,7 +69,7 @@ public final class SingleColumnRelation extends Relation
* @param type the type that describes how this entity relates to the value.
* @param value the value being compared.
*/
- public SingleColumnRelation(ColumnDefinition.Raw entity, Term.Raw mapKey, Operator type, Term.Raw value)
+ public SingleColumnRelation(ColumnMetadata.Raw entity, Term.Raw mapKey, Operator type, Term.Raw value)
{
this(entity, mapKey, type, value, null);
}
@@ -81,7 +81,7 @@ public final class SingleColumnRelation extends Relation
* @param type the type that describes how this entity relates to the value.
* @param value the value being compared.
*/
- public SingleColumnRelation(ColumnDefinition.Raw entity, Operator type, Term.Raw value)
+ public SingleColumnRelation(ColumnMetadata.Raw entity, Operator type, Term.Raw value)
{
this(entity, null, type, value);
}
@@ -96,12 +96,12 @@ public final class SingleColumnRelation extends Relation
return inValues;
}
- public static SingleColumnRelation createInRelation(ColumnDefinition.Raw entity, List<Term.Raw> inValues)
+ public static SingleColumnRelation createInRelation(ColumnMetadata.Raw entity, List<Term.Raw> inValues)
{
return new SingleColumnRelation(entity, null, Operator.IN, null, inValues);
}
- public ColumnDefinition.Raw getEntity()
+ public ColumnMetadata.Raw getEntity()
{
return entity;
}
@@ -135,7 +135,7 @@ public final class SingleColumnRelation extends Relation
}
}
- public Relation renameIdentifier(ColumnDefinition.Raw from, ColumnDefinition.Raw to)
+ public Relation renameIdentifier(ColumnMetadata.Raw from, ColumnMetadata.Raw to)
{
return entity.equals(from)
? new SingleColumnRelation(to, mapKey, operator(), value, inValues)
@@ -156,31 +156,29 @@ public final class SingleColumnRelation extends Relation
}
@Override
- protected Restriction newEQRestriction(CFMetaData cfm,
- VariableSpecifications boundNames) throws InvalidRequestException
+ protected Restriction newEQRestriction(TableMetadata table, VariableSpecifications boundNames)
{
- ColumnDefinition columnDef = entity.prepare(cfm);
+ ColumnMetadata columnDef = entity.prepare(table);
if (mapKey == null)
{
- Term term = toTerm(toReceivers(columnDef), value, cfm.ksName, boundNames);
+ Term term = toTerm(toReceivers(columnDef), value, table.keyspace, boundNames);
return new SingleColumnRestriction.EQRestriction(columnDef, term);
}
List<? extends ColumnSpecification> receivers = toReceivers(columnDef);
- Term entryKey = toTerm(Collections.singletonList(receivers.get(0)), mapKey, cfm.ksName, boundNames);
- Term entryValue = toTerm(Collections.singletonList(receivers.get(1)), value, cfm.ksName, boundNames);
+ Term entryKey = toTerm(Collections.singletonList(receivers.get(0)), mapKey, table.keyspace, boundNames);
+ Term entryValue = toTerm(Collections.singletonList(receivers.get(1)), value, table.keyspace, boundNames);
return new SingleColumnRestriction.ContainsRestriction(columnDef, entryKey, entryValue);
}
@Override
- protected Restriction newINRestriction(CFMetaData cfm,
- VariableSpecifications boundNames) throws InvalidRequestException
+ protected Restriction newINRestriction(TableMetadata table, VariableSpecifications boundNames)
{
- ColumnDefinition columnDef = entity.prepare(cfm);
+ ColumnMetadata columnDef = entity.prepare(table);
List<? extends ColumnSpecification> receivers = toReceivers(columnDef);
- List<Term> terms = toTerms(receivers, inValues, cfm.ksName, boundNames);
+ List<Term> terms = toTerms(receivers, inValues, table.keyspace, boundNames);
if (terms == null)
{
- Term term = toTerm(receivers, value, cfm.ksName, boundNames);
+ Term term = toTerm(receivers, value, table.keyspace, boundNames);
return new SingleColumnRestriction.InRestrictionWithMarker(columnDef, (Lists.Marker) term);
}
@@ -192,46 +190,46 @@ public final class SingleColumnRelation extends Relation
}
@Override
- protected Restriction newSliceRestriction(CFMetaData cfm,
+ protected Restriction newSliceRestriction(TableMetadata table,
VariableSpecifications boundNames,
Bound bound,
- boolean inclusive) throws InvalidRequestException
+ boolean inclusive)
{
- ColumnDefinition columnDef = entity.prepare(cfm);
+ ColumnMetadata columnDef = entity.prepare(table);
checkFalse(columnDef.type instanceof DurationType, "Slice restriction are not supported on duration columns");
- Term term = toTerm(toReceivers(columnDef), value, cfm.ksName, boundNames);
+ Term term = toTerm(toReceivers(columnDef), value, table.keyspace, boundNames);
return new SingleColumnRestriction.SliceRestriction(columnDef, bound, inclusive, term);
}
@Override
- protected Restriction newContainsRestriction(CFMetaData cfm,
+ protected Restriction newContainsRestriction(TableMetadata table,
VariableSpecifications boundNames,
boolean isKey) throws InvalidRequestException
{
- ColumnDefinition columnDef = entity.prepare(cfm);
- Term term = toTerm(toReceivers(columnDef), value, cfm.ksName, boundNames);
+ ColumnMetadata columnDef = entity.prepare(table);
+ Term term = toTerm(toReceivers(columnDef), value, table.keyspace, boundNames);
return new SingleColumnRestriction.ContainsRestriction(columnDef, term, isKey);
}
@Override
- protected Restriction newIsNotRestriction(CFMetaData cfm,
+ protected Restriction newIsNotRestriction(TableMetadata table,
VariableSpecifications boundNames) throws InvalidRequestException
{
- ColumnDefinition columnDef = entity.prepare(cfm);
+ ColumnMetadata columnDef = entity.prepare(table);
// currently enforced by the grammar
assert value == Constants.NULL_LITERAL : "Expected null literal for IS NOT relation: " + this.toString();
return new SingleColumnRestriction.IsNotNullRestriction(columnDef);
}
@Override
- protected Restriction newLikeRestriction(CFMetaData cfm, VariableSpecifications boundNames, Operator operator) throws InvalidRequestException
+ protected Restriction newLikeRestriction(TableMetadata table, VariableSpecifications boundNames, Operator operator)
{
if (mapKey != null)
throw invalidRequest("%s can't be used with collections.", operator());
- ColumnDefinition columnDef = entity.prepare(cfm);
- Term term = toTerm(toReceivers(columnDef), value, cfm.ksName, boundNames);
+ ColumnMetadata columnDef = entity.prepare(table);
+ Term term = toTerm(toReceivers(columnDef), value, table.keyspace, boundNames);
return new SingleColumnRestriction.LikeRestriction(columnDef, operator, term);
}
@@ -242,7 +240,7 @@ public final class SingleColumnRelation extends Relation
* @return the receivers for the specified relation.
* @throws InvalidRequestException if the relation is invalid
*/
- private List<? extends ColumnSpecification> toReceivers(ColumnDefinition columnDef) throws InvalidRequestException
+ private List<? extends ColumnSpecification> toReceivers(ColumnMetadata columnDef) throws InvalidRequestException
{
ColumnSpecification receiver = columnDef;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/TokenRelation.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/TokenRelation.java b/src/java/org/apache/cassandra/cql3/TokenRelation.java
index 42464ef..62f603b 100644
--- a/src/java/org/apache/cassandra/cql3/TokenRelation.java
+++ b/src/java/org/apache/cassandra/cql3/TokenRelation.java
@@ -24,8 +24,8 @@ import java.util.stream.Collectors;
import com.google.common.base.Joiner;
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.schema.ColumnMetadata;
+import org.apache.cassandra.schema.TableMetadata;
import org.apache.cassandra.cql3.Term.Raw;
import org.apache.cassandra.cql3.restrictions.Restriction;
import org.apache.cassandra.cql3.restrictions.TokenRestriction;
@@ -47,11 +47,11 @@ import static org.apache.cassandra.cql3.statements.RequestValidations.invalidReq
*/
public final class TokenRelation extends Relation
{
- private final List<ColumnDefinition.Raw> entities;
+ private final List<ColumnMetadata.Raw> entities;
private final Term.Raw value;
- public TokenRelation(List<ColumnDefinition.Raw> entities, Operator type, Term.Raw value)
+ public TokenRelation(List<ColumnMetadata.Raw> entities, Operator type, Term.Raw value)
{
this.entities = entities;
this.relationType = type;
@@ -75,44 +75,44 @@ public final class TokenRelation extends Relation
}
@Override
- protected Restriction newEQRestriction(CFMetaData cfm, VariableSpecifications boundNames) throws InvalidRequestException
+ protected Restriction newEQRestriction(TableMetadata table, VariableSpecifications boundNames)
{
- List<ColumnDefinition> columnDefs = getColumnDefinitions(cfm);
- Term term = toTerm(toReceivers(cfm, columnDefs), value, cfm.ksName, boundNames);
- return new TokenRestriction.EQRestriction(cfm, columnDefs, term);
+ List<ColumnMetadata> columnDefs = getColumnDefinitions(table);
+ Term term = toTerm(toReceivers(table, columnDefs), value, table.keyspace, boundNames);
+ return new TokenRestriction.EQRestriction(table, columnDefs, term);
}
@Override
- protected Restriction newINRestriction(CFMetaData cfm, VariableSpecifications boundNames) throws InvalidRequestException
+ protected Restriction newINRestriction(TableMetadata table, VariableSpecifications boundNames)
{
throw invalidRequest("%s cannot be used with the token function", operator());
}
@Override
- protected Restriction newSliceRestriction(CFMetaData cfm,
+ protected Restriction newSliceRestriction(TableMetadata table,
VariableSpecifications boundNames,
Bound bound,
- boolean inclusive) throws InvalidRequestException
+ boolean inclusive)
{
- List<ColumnDefinition> columnDefs = getColumnDefinitions(cfm);
- Term term = toTerm(toReceivers(cfm, columnDefs), value, cfm.ksName, boundNames);
- return new TokenRestriction.SliceRestriction(cfm, columnDefs, bound, inclusive, term);
+ List<ColumnMetadata> columnDefs = getColumnDefinitions(table);
+ Term term = toTerm(toReceivers(table, columnDefs), value, table.keyspace, boundNames);
+ return new TokenRestriction.SliceRestriction(table, columnDefs, bound, inclusive, term);
}
@Override
- protected Restriction newContainsRestriction(CFMetaData cfm, VariableSpecifications boundNames, boolean isKey) throws InvalidRequestException
+ protected Restriction newContainsRestriction(TableMetadata table, VariableSpecifications boundNames, boolean isKey)
{
throw invalidRequest("%s cannot be used with the token function", operator());
}
@Override
- protected Restriction newIsNotRestriction(CFMetaData cfm, VariableSpecifications boundNames) throws InvalidRequestException
+ protected Restriction newIsNotRestriction(TableMetadata table, VariableSpecifications boundNames)
{
throw invalidRequest("%s cannot be used with the token function", operator());
}
@Override
- protected Restriction newLikeRestriction(CFMetaData cfm, VariableSpecifications boundNames, Operator operator) throws InvalidRequestException
+ protected Restriction newLikeRestriction(TableMetadata table, VariableSpecifications boundNames, Operator operator)
{
throw invalidRequest("%s cannot be used with the token function", operator);
}
@@ -128,12 +128,12 @@ public final class TokenRelation extends Relation
return term;
}
- public Relation renameIdentifier(ColumnDefinition.Raw from, ColumnDefinition.Raw to)
+ public Relation renameIdentifier(ColumnMetadata.Raw from, ColumnMetadata.Raw to)
{
if (!entities.contains(from))
return this;
- List<ColumnDefinition.Raw> newEntities = entities.stream().map(e -> e.equals(from) ? to : e).collect(Collectors.toList());
+ List<ColumnMetadata.Raw> newEntities = entities.stream().map(e -> e.equals(from) ? to : e).collect(Collectors.toList());
return new TokenRelation(newEntities, operator(), value);
}
@@ -146,48 +146,48 @@ public final class TokenRelation extends Relation
/**
* Returns the definition of the columns to which apply the token restriction.
*
- * @param cfm the column family metadata
+ * @param table the table metadata
* @return the definition of the columns to which apply the token restriction.
* @throws InvalidRequestException if the entity cannot be resolved
*/
- private List<ColumnDefinition> getColumnDefinitions(CFMetaData cfm) throws InvalidRequestException
+ private List<ColumnMetadata> getColumnDefinitions(TableMetadata table)
{
- List<ColumnDefinition> columnDefs = new ArrayList<>(entities.size());
- for ( ColumnDefinition.Raw raw : entities)
- columnDefs.add(raw.prepare(cfm));
+ List<ColumnMetadata> columnDefs = new ArrayList<>(entities.size());
+ for ( ColumnMetadata.Raw raw : entities)
+ columnDefs.add(raw.prepare(table));
return columnDefs;
}
/**
* Returns the receivers for this relation.
*
- * @param cfm the Column Family meta data
+ * @param table the table meta data
* @param columnDefs the column definitions
* @return the receivers for the specified relation.
* @throws InvalidRequestException if the relation is invalid
*/
- private static List<? extends ColumnSpecification> toReceivers(CFMetaData cfm,
- List<ColumnDefinition> columnDefs)
+ private static List<? extends ColumnSpecification> toReceivers(TableMetadata table,
+ List<ColumnMetadata> columnDefs)
throws InvalidRequestException
{
- if (!columnDefs.equals(cfm.partitionKeyColumns()))
+ if (!columnDefs.equals(table.partitionKeyColumns()))
{
- checkTrue(columnDefs.containsAll(cfm.partitionKeyColumns()),
+ checkTrue(columnDefs.containsAll(table.partitionKeyColumns()),
"The token() function must be applied to all partition key components or none of them");
checkContainsNoDuplicates(columnDefs, "The token() function contains duplicate partition key components");
- checkContainsOnly(columnDefs, cfm.partitionKeyColumns(), "The token() function must contains only partition key components");
+ checkContainsOnly(columnDefs, table.partitionKeyColumns(), "The token() function must contains only partition key components");
throw invalidRequest("The token function arguments must be in the partition key order: %s",
- Joiner.on(", ").join(ColumnDefinition.toIdentifiers(cfm.partitionKeyColumns())));
+ Joiner.on(", ").join(ColumnMetadata.toIdentifiers(table.partitionKeyColumns())));
}
- ColumnDefinition firstColumn = columnDefs.get(0);
+ ColumnMetadata firstColumn = columnDefs.get(0);
return Collections.singletonList(new ColumnSpecification(firstColumn.ksName,
firstColumn.cfName,
new ColumnIdentifier("partition key token", true),
- cfm.partitioner.getTokenValidator()));
+ table.partitioner.getTokenValidator()));
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/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 d896071..9733830 100644
--- a/src/java/org/apache/cassandra/cql3/UntypedResultSet.java
+++ b/src/java/org/apache/cassandra/cql3/UntypedResultSet.java
@@ -22,17 +22,16 @@ import java.net.InetAddress;
import java.nio.ByteBuffer;
import java.util.*;
-import org.apache.cassandra.transport.ProtocolVersion;
-import org.apache.cassandra.utils.AbstractIterator;
-
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.schema.ColumnMetadata;
import org.apache.cassandra.cql3.statements.SelectStatement;
import org.apache.cassandra.db.*;
-import org.apache.cassandra.db.rows.*;
-import org.apache.cassandra.db.partitions.PartitionIterator;
import org.apache.cassandra.db.marshal.*;
+import org.apache.cassandra.db.partitions.PartitionIterator;
+import org.apache.cassandra.db.rows.*;
+import org.apache.cassandra.schema.TableMetadata;
import org.apache.cassandra.service.pager.QueryPager;
+import org.apache.cassandra.transport.ProtocolVersion;
+import org.apache.cassandra.utils.AbstractIterator;
import org.apache.cassandra.utils.FBUtilities;
/** a utility for doing internal cql-based queries */
@@ -221,19 +220,19 @@ public abstract class UntypedResultSet implements Iterable<UntypedResultSet.Row>
data.put(names.get(i).name.toString(), columns.get(i));
}
- public static Row fromInternalRow(CFMetaData metadata, DecoratedKey key, org.apache.cassandra.db.rows.Row row)
+ public static Row fromInternalRow(TableMetadata metadata, DecoratedKey key, org.apache.cassandra.db.rows.Row row)
{
Map<String, ByteBuffer> data = new HashMap<>();
ByteBuffer[] keyComponents = SelectStatement.getComponents(metadata, key);
- for (ColumnDefinition def : metadata.partitionKeyColumns())
+ for (ColumnMetadata def : metadata.partitionKeyColumns())
data.put(def.name.toString(), keyComponents[def.position()]);
Clustering clustering = row.clustering();
- for (ColumnDefinition def : metadata.clusteringColumns())
+ for (ColumnMetadata def : metadata.clusteringColumns())
data.put(def.name.toString(), clustering.get(def.position()));
- for (ColumnDefinition def : metadata.partitionColumns())
+ for (ColumnMetadata def : metadata.regularAndStaticColumns())
{
if (def.isSimple())
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/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 d065269..0be8f51 100644
--- a/src/java/org/apache/cassandra/cql3/UpdateParameters.java
+++ b/src/java/org/apache/cassandra/cql3/UpdateParameters.java
@@ -20,8 +20,8 @@ package org.apache.cassandra.cql3;
import java.nio.ByteBuffer;
import java.util.Map;
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.schema.ColumnMetadata;
+import org.apache.cassandra.schema.TableMetadata;
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.context.CounterContext;
import org.apache.cassandra.db.filter.ColumnFilter;
@@ -35,8 +35,8 @@ import org.apache.cassandra.utils.FBUtilities;
*/
public class UpdateParameters
{
- public final CFMetaData metadata;
- public final PartitionColumns updatedColumns;
+ public final TableMetadata metadata;
+ public final RegularAndStaticColumns updatedColumns;
public final QueryOptions options;
private final int nowInSec;
@@ -54,8 +54,8 @@ public class UpdateParameters
// The builder currently in use. Will alias either staticBuilder or regularBuilder, which are themselves built lazily.
private Row.Builder builder;
- public UpdateParameters(CFMetaData metadata,
- PartitionColumns updatedColumns,
+ public UpdateParameters(TableMetadata metadata,
+ RegularAndStaticColumns updatedColumns,
QueryOptions options,
long timestamp,
int ttl,
@@ -124,27 +124,27 @@ public class UpdateParameters
// the "compact" one. As such, deleting the row or deleting that single cell is equivalent. We favor the later
// for backward compatibility (thought it doesn't truly matter anymore).
if (metadata.isCompactTable() && builder.clustering() != Clustering.STATIC_CLUSTERING)
- addTombstone(metadata.compactValueColumn());
+ addTombstone(metadata.compactValueColumn);
else
builder.addRowDeletion(Row.Deletion.regular(deletionTime));
}
- public void addTombstone(ColumnDefinition column) throws InvalidRequestException
+ public void addTombstone(ColumnMetadata column) throws InvalidRequestException
{
addTombstone(column, null);
}
- public void addTombstone(ColumnDefinition column, CellPath path) throws InvalidRequestException
+ public void addTombstone(ColumnMetadata column, CellPath path) throws InvalidRequestException
{
builder.addCell(BufferCell.tombstone(column, timestamp, nowInSec, path));
}
- public void addCell(ColumnDefinition column, ByteBuffer value) throws InvalidRequestException
+ public void addCell(ColumnMetadata column, ByteBuffer value) throws InvalidRequestException
{
addCell(column, null, value);
}
- public void addCell(ColumnDefinition column, CellPath path, ByteBuffer value) throws InvalidRequestException
+ public void addCell(ColumnMetadata column, CellPath path, ByteBuffer value) throws InvalidRequestException
{
Cell cell = ttl == LivenessInfo.NO_TTL
? BufferCell.live(column, timestamp, value, path)
@@ -152,7 +152,7 @@ public class UpdateParameters
builder.addCell(cell);
}
- public void addCounter(ColumnDefinition column, long increment) throws InvalidRequestException
+ public void addCounter(ColumnMetadata column, long increment) throws InvalidRequestException
{
assert ttl == LivenessInfo.NO_TTL;
@@ -168,12 +168,12 @@ public class UpdateParameters
builder.addCell(BufferCell.live(column, timestamp, CounterContext.instance().createLocal(increment)));
}
- public void setComplexDeletionTime(ColumnDefinition column)
+ public void setComplexDeletionTime(ColumnMetadata column)
{
builder.addComplexDeletion(column, deletionTime);
}
- public void setComplexDeletionTimeForOverwrite(ColumnDefinition column)
+ public void setComplexDeletionTimeForOverwrite(ColumnMetadata column)
{
builder.addComplexDeletion(column, new DeletionTime(deletionTime.markedForDeleteAt() - 1, deletionTime.localDeletionTime()));
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/UserTypes.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/UserTypes.java b/src/java/org/apache/cassandra/cql3/UserTypes.java
index c8ddad0..9b87352 100644
--- a/src/java/org/apache/cassandra/cql3/UserTypes.java
+++ b/src/java/org/apache/cassandra/cql3/UserTypes.java
@@ -21,7 +21,7 @@ import java.nio.ByteBuffer;
import java.util.*;
import java.util.stream.Collectors;
-import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.schema.ColumnMetadata;
import org.apache.cassandra.cql3.functions.Function;
import org.apache.cassandra.db.DecoratedKey;
import org.apache.cassandra.db.marshal.*;
@@ -315,7 +315,7 @@ public abstract class UserTypes
public static class Setter extends Operation
{
- public Setter(ColumnDefinition column, Term t)
+ public Setter(ColumnMetadata column, Term t)
{
super(column, t);
}
@@ -361,7 +361,7 @@ public abstract class UserTypes
{
private final FieldIdentifier field;
- public SetterByField(ColumnDefinition column, FieldIdentifier field, Term t)
+ public SetterByField(ColumnMetadata column, FieldIdentifier field, Term t)
{
super(column, t);
this.field = field;
@@ -388,7 +388,7 @@ public abstract class UserTypes
{
private final FieldIdentifier field;
- public DeleterByField(ColumnDefinition column, FieldIdentifier field)
+ public DeleterByField(ColumnMetadata column, FieldIdentifier field)
{
super(column, null);
this.field = field;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/Validation.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/Validation.java b/src/java/org/apache/cassandra/cql3/Validation.java
index 3f388eb..34a4027 100644
--- a/src/java/org/apache/cassandra/cql3/Validation.java
+++ b/src/java/org/apache/cassandra/cql3/Validation.java
@@ -19,12 +19,9 @@ package org.apache.cassandra.cql3;
import java.nio.ByteBuffer;
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.Schema;
-import org.apache.cassandra.config.SchemaConstants;
-import org.apache.cassandra.db.KeyspaceNotDefinedException;
-import org.apache.cassandra.serializers.MarshalException;
import org.apache.cassandra.exceptions.InvalidRequestException;
+import org.apache.cassandra.schema.TableMetadata;
+import org.apache.cassandra.serializers.MarshalException;
import org.apache.cassandra.utils.FBUtilities;
/**
@@ -36,37 +33,6 @@ import org.apache.cassandra.utils.FBUtilities;
*/
public abstract class Validation
{
- /**
- * Retrieves the metadata for the provided keyspace and table name, throwing
- * a meaningful user exception if those doen't exist.
- *
- * @param keyspaceName the keyspace name.
- * @param tableName the table name.
- * @return the metadata for table {@code keyspaceName.tableName} if it
- * exists (otherwise an {@code InvalidRequestException} is thrown).
- *
- * @throws InvalidRequestException if the table requested doesn't exist.
- */
- public static CFMetaData validateColumnFamily(String keyspaceName, String tableName)
- throws InvalidRequestException
- {
- validateKeyspace(keyspaceName);
- if (tableName.isEmpty())
- throw new InvalidRequestException("non-empty table is required");
-
- CFMetaData metadata = Schema.instance.getCFMetaData(keyspaceName, tableName);
- if (metadata == null)
- throw new InvalidRequestException("unconfigured table " + tableName);
-
- return metadata;
- }
-
- private static void validateKeyspace(String keyspaceName)
- throws KeyspaceNotDefinedException
- {
- if (!Schema.instance.getKeyspaces().contains(keyspaceName))
- throw new KeyspaceNotDefinedException("Keyspace " + keyspaceName + " does not exist");
- }
/**
* Validates a (full serialized) partition key.
@@ -76,8 +42,7 @@ public abstract class Validation
*
* @throws InvalidRequestException if the provided {@code key} is invalid.
*/
- public static void validateKey(CFMetaData metadata, ByteBuffer key)
- throws InvalidRequestException
+ public static void validateKey(TableMetadata metadata, ByteBuffer key)
{
if (key == null || key.remaining() == 0)
throw new InvalidRequestException("Key may not be empty");
@@ -92,26 +57,11 @@ public abstract class Validation
try
{
- metadata.getKeyValidator().validate(key);
+ metadata.partitionKeyType.validate(key);
}
catch (MarshalException e)
{
throw new InvalidRequestException(e.getMessage());
}
}
-
- /**
- * Validates that the provided keyspace is not one of the system keyspace.
- *
- * @param keyspace the keyspace name to validate.
- *
- * @throws InvalidRequestException if {@code keyspace} is the name of a
- * system keyspace.
- */
- public static void validateKeyspaceNotSystem(String keyspace)
- throws InvalidRequestException
- {
- if (SchemaConstants.isSystemKeyspace(keyspace))
- throw new InvalidRequestException(String.format("%s keyspace is not user-modifiable", keyspace));
- }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/VariableSpecifications.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/VariableSpecifications.java b/src/java/org/apache/cassandra/cql3/VariableSpecifications.java
index 24f71e4..96290a6 100644
--- a/src/java/org/apache/cassandra/cql3/VariableSpecifications.java
+++ b/src/java/org/apache/cassandra/cql3/VariableSpecifications.java
@@ -17,24 +17,24 @@
*/
package org.apache.cassandra.cql3;
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.ColumnDefinition;
-
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import org.apache.cassandra.schema.ColumnMetadata;
+import org.apache.cassandra.schema.TableMetadata;
+
public class VariableSpecifications
{
private final List<ColumnIdentifier> variableNames;
private final ColumnSpecification[] specs;
- private final ColumnDefinition[] targetColumns;
+ private final ColumnMetadata[] targetColumns;
public VariableSpecifications(List<ColumnIdentifier> variableNames)
{
this.variableNames = variableNames;
this.specs = new ColumnSpecification[variableNames.size()];
- this.targetColumns = new ColumnDefinition[variableNames.size()];
+ this.targetColumns = new ColumnMetadata[variableNames.size()];
}
/**
@@ -58,21 +58,21 @@ public class VariableSpecifications
/**
* Returns an array with the same length as the number of partition key columns for the table corresponding
- * to cfm. Each short in the array represents the bind index of the marker that holds the value for that
+ * to table. Each short in the array represents the bind index of the marker that holds the value for that
* partition key column. If there are no bind markers for any of the partition key columns, null is returned.
*
* Callers of this method should ensure that all statements operate on the same table.
*/
- public short[] getPartitionKeyBindIndexes(CFMetaData cfm)
+ public short[] getPartitionKeyBindIndexes(TableMetadata metadata)
{
- short[] partitionKeyPositions = new short[cfm.partitionKeyColumns().size()];
+ short[] partitionKeyPositions = new short[metadata.partitionKeyColumns().size()];
boolean[] set = new boolean[partitionKeyPositions.length];
for (int i = 0; i < targetColumns.length; i++)
{
- ColumnDefinition targetColumn = targetColumns[i];
+ ColumnMetadata targetColumn = targetColumns[i];
if (targetColumn != null && targetColumn.isPartitionKey())
{
- assert targetColumn.ksName.equals(cfm.ksName) && targetColumn.cfName.equals(cfm.cfName);
+ assert targetColumn.ksName.equals(metadata.keyspace) && targetColumn.cfName.equals(metadata.name);
partitionKeyPositions[targetColumn.position()] = (short) i;
set[targetColumn.position()] = true;
}
@@ -87,8 +87,8 @@ public class VariableSpecifications
public void add(int bindIndex, ColumnSpecification spec)
{
- if (spec instanceof ColumnDefinition)
- targetColumns[bindIndex] = (ColumnDefinition) spec;
+ if (spec instanceof ColumnMetadata)
+ targetColumns[bindIndex] = (ColumnMetadata) spec;
ColumnIdentifier bindMarkerName = variableNames.get(bindIndex);
// Use the user name, if there is one
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/conditions/AbstractConditions.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/conditions/AbstractConditions.java b/src/java/org/apache/cassandra/cql3/conditions/AbstractConditions.java
index 9b6dd7e..0e2646e 100644
--- a/src/java/org/apache/cassandra/cql3/conditions/AbstractConditions.java
+++ b/src/java/org/apache/cassandra/cql3/conditions/AbstractConditions.java
@@ -19,7 +19,7 @@ package org.apache.cassandra.cql3.conditions;
import java.util.List;
-import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.schema.ColumnMetadata;
import org.apache.cassandra.cql3.functions.Function;
/**
@@ -32,7 +32,7 @@ abstract class AbstractConditions implements Conditions
{
}
- public Iterable<ColumnDefinition> getColumns()
+ public Iterable<ColumnMetadata> getColumns()
{
return null;
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/conditions/ColumnCondition.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/conditions/ColumnCondition.java b/src/java/org/apache/cassandra/cql3/conditions/ColumnCondition.java
index cfd62f5..31b7185 100644
--- a/src/java/org/apache/cassandra/cql3/conditions/ColumnCondition.java
+++ b/src/java/org/apache/cassandra/cql3/conditions/ColumnCondition.java
@@ -22,13 +22,13 @@ import java.util.*;
import com.google.common.collect.Iterators;
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.cql3.*;
import org.apache.cassandra.cql3.Term.Terminal;
import org.apache.cassandra.cql3.functions.Function;
import org.apache.cassandra.db.rows.*;
import org.apache.cassandra.db.marshal.*;
+import org.apache.cassandra.schema.ColumnMetadata;
+import org.apache.cassandra.schema.TableMetadata;
import org.apache.cassandra.transport.ProtocolVersion;
import org.apache.cassandra.utils.ByteBufferUtil;
@@ -39,11 +39,11 @@ import static org.apache.cassandra.cql3.statements.RequestValidations.*;
*/
public abstract class ColumnCondition
{
- public final ColumnDefinition column;
+ public final ColumnMetadata column;
public final Operator operator;
private final Terms terms;
- private ColumnCondition(ColumnDefinition column, Operator op, Terms terms)
+ private ColumnCondition(ColumnMetadata column, Operator op, Terms terms)
{
this.column = column;
this.operator = op;
@@ -116,7 +116,7 @@ public abstract class ColumnCondition
*/
private static final class SimpleColumnCondition extends ColumnCondition
{
- public SimpleColumnCondition(ColumnDefinition column, Operator op, Terms values)
+ public SimpleColumnCondition(ColumnMetadata column, Operator op, Terms values)
{
super(column, op, values);
}
@@ -140,7 +140,7 @@ public abstract class ColumnCondition
{
private final Term collectionElement;
- public CollectionElementCondition(ColumnDefinition column, Term collectionElement, Operator op, Terms values)
+ public CollectionElementCondition(ColumnMetadata column, Term collectionElement, Operator op, Terms values)
{
super(column, op, values);
this.collectionElement = collectionElement;
@@ -171,7 +171,7 @@ public abstract class ColumnCondition
{
private final FieldIdentifier udtField;
- public UDTFieldCondition(ColumnDefinition column, FieldIdentifier udtField, Operator op, Terms values)
+ public UDTFieldCondition(ColumnMetadata column, FieldIdentifier udtField, Operator op, Terms values)
{
super(column, op, values);
assert udtField != null;
@@ -187,7 +187,7 @@ public abstract class ColumnCondition
/**
* A regular column, simple condition.
*/
- public static ColumnCondition condition(ColumnDefinition column, Operator op, Terms terms)
+ public static ColumnCondition condition(ColumnMetadata column, Operator op, Terms terms)
{
return new SimpleColumnCondition(column, op, terms);
}
@@ -195,7 +195,7 @@ public abstract class ColumnCondition
/**
* A collection column, simple condition.
*/
- public static ColumnCondition condition(ColumnDefinition column, Term collectionElement, Operator op, Terms terms)
+ public static ColumnCondition condition(ColumnMetadata column, Term collectionElement, Operator op, Terms terms)
{
return new CollectionElementCondition(column, collectionElement, op, terms);
}
@@ -203,17 +203,17 @@ public abstract class ColumnCondition
/**
* A UDT column, simple condition.
*/
- public static ColumnCondition condition(ColumnDefinition column, FieldIdentifier udtField, Operator op, Terms terms)
+ public static ColumnCondition condition(ColumnMetadata column, FieldIdentifier udtField, Operator op, Terms terms)
{
return new UDTFieldCondition(column, udtField, op, terms);
}
public static abstract class Bound
{
- public final ColumnDefinition column;
+ public final ColumnMetadata column;
public final Operator comparisonOperator;
- protected Bound(ColumnDefinition column, Operator operator)
+ protected Bound(ColumnMetadata column, Operator operator)
{
this.column = column;
// If the operator is an IN we want to compare the value using an EQ.
@@ -257,21 +257,21 @@ public abstract class ColumnCondition
}
}
- protected static final Cell getCell(Row row, ColumnDefinition column)
+ protected static final Cell getCell(Row row, ColumnMetadata column)
{
// If we're asking for a given cell, and we didn't got any row from our read, it's
// the same as not having said cell.
return row == null ? null : row.getCell(column);
}
- protected static final Cell getCell(Row row, ColumnDefinition column, CellPath path)
+ protected static final Cell getCell(Row row, ColumnMetadata column, CellPath path)
{
// If we're asking for a given cell, and we didn't got any row from our read, it's
// the same as not having said cell.
return row == null ? null : row.getCell(column, path);
}
- protected static final Iterator<Cell> getCells(Row row, ColumnDefinition column)
+ protected static final Iterator<Cell> getCells(Row row, ColumnMetadata column)
{
// If we're asking for a complex cells, and we didn't got any row from our read, it's
// the same as not having any cells for that column.
@@ -312,7 +312,7 @@ public abstract class ColumnCondition
*/
private final List<ByteBuffer> values;
- private SimpleBound(ColumnDefinition column, Operator operator, List<ByteBuffer> values)
+ private SimpleBound(ColumnMetadata column, Operator operator, List<ByteBuffer> values)
{
super(column, operator);
this.values = values;
@@ -356,10 +356,10 @@ public abstract class ColumnCondition
*/
private final List<ByteBuffer> values;
- private ElementAccessBound(ColumnDefinition column,
- ByteBuffer collectionElement,
- Operator operator,
- List<ByteBuffer> values)
+ private ElementAccessBound(ColumnMetadata column,
+ ByteBuffer collectionElement,
+ Operator operator,
+ List<ByteBuffer> values)
{
super(column, operator);
@@ -452,7 +452,7 @@ public abstract class ColumnCondition
{
private final List<Term.Terminal> values;
- public MultiCellCollectionBound(ColumnDefinition column, Operator operator, List<Term.Terminal> values)
+ public MultiCellCollectionBound(ColumnMetadata column, Operator operator, List<Term.Terminal> values)
{
super(column, operator);
assert column.type.isMultiCell();
@@ -586,7 +586,7 @@ public abstract class ColumnCondition
*/
private final List<ByteBuffer> values;
- private UDTFieldAccessBound(ColumnDefinition column, FieldIdentifier field, Operator operator, List<ByteBuffer> values)
+ private UDTFieldAccessBound(ColumnMetadata column, FieldIdentifier field, Operator operator, List<ByteBuffer> values)
{
super(column, operator);
assert column.type.isUDT() && field != null;
@@ -645,7 +645,7 @@ public abstract class ColumnCondition
*/
private final ProtocolVersion protocolVersion;
- private MultiCellUdtBound(ColumnDefinition column, Operator op, List<ByteBuffer> values, ProtocolVersion protocolVersion)
+ private MultiCellUdtBound(ColumnMetadata column, Operator op, List<ByteBuffer> values, ProtocolVersion protocolVersion)
{
super(column, op);
assert column.type.isMultiCell();
@@ -756,7 +756,7 @@ public abstract class ColumnCondition
return new Raw(null, null, inMarker, null, udtField, Operator.IN);
}
- public ColumnCondition prepare(String keyspace, ColumnDefinition receiver, CFMetaData cfm)
+ public ColumnCondition prepare(String keyspace, ColumnMetadata receiver, TableMetadata cfm)
{
if (receiver.type instanceof CounterColumnType)
throw invalidRequest("Conditions on counters are not supported");
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/conditions/ColumnConditions.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/conditions/ColumnConditions.java b/src/java/org/apache/cassandra/cql3/conditions/ColumnConditions.java
index b0378b7..3057b05 100644
--- a/src/java/org/apache/cassandra/cql3/conditions/ColumnConditions.java
+++ b/src/java/org/apache/cassandra/cql3/conditions/ColumnConditions.java
@@ -24,11 +24,11 @@ import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.cql3.QueryOptions;
import org.apache.cassandra.cql3.functions.Function;
import org.apache.cassandra.cql3.statements.CQL3CasRequest;
import org.apache.cassandra.db.Clustering;
+import org.apache.cassandra.schema.ColumnMetadata;
/**
* A set of <code>ColumnCondition</code>s.
@@ -68,7 +68,7 @@ public final class ColumnConditions extends AbstractConditions
}
@Override
- public Collection<ColumnDefinition> getColumns()
+ public Collection<ColumnMetadata> getColumns()
{
return Stream.concat(columnConditions.stream(), staticConditions.stream())
.map(e -> e.column)
@@ -136,7 +136,7 @@ public final class ColumnConditions extends AbstractConditions
*/
public Builder add(ColumnCondition condition)
{
- List<ColumnCondition> conds = null;
+ List<ColumnCondition> conds;
if (condition.column.isStatic())
{
if (staticConditions.isEmpty())
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/conditions/Conditions.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/conditions/Conditions.java b/src/java/org/apache/cassandra/cql3/conditions/Conditions.java
index 0214fcf..1622be0 100644
--- a/src/java/org/apache/cassandra/cql3/conditions/Conditions.java
+++ b/src/java/org/apache/cassandra/cql3/conditions/Conditions.java
@@ -19,11 +19,11 @@ package org.apache.cassandra.cql3.conditions;
import java.util.List;
-import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.cql3.QueryOptions;
import org.apache.cassandra.cql3.functions.Function;
import org.apache.cassandra.cql3.statements.CQL3CasRequest;
import org.apache.cassandra.db.Clustering;
+import org.apache.cassandra.schema.ColumnMetadata;
/**
* Conditions that can be applied to a mutation statement.
@@ -56,7 +56,7 @@ public interface Conditions
* Returns the column definitions to which apply the conditions.
* @return the column definitions to which apply the conditions.
*/
- Iterable<ColumnDefinition> getColumns();
+ Iterable<ColumnMetadata> getColumns();
/**
* Checks if this <code>Conditions</code> is empty.
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/functions/AbstractFunction.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/functions/AbstractFunction.java b/src/java/org/apache/cassandra/cql3/functions/AbstractFunction.java
index aa7555f..5e10e9f 100644
--- a/src/java/org/apache/cassandra/cql3/functions/AbstractFunction.java
+++ b/src/java/org/apache/cassandra/cql3/functions/AbstractFunction.java
@@ -22,10 +22,13 @@ import java.util.List;
import com.google.common.base.Objects;
import org.apache.cassandra.cql3.AssignmentTestable;
+import org.apache.cassandra.cql3.CQL3Type;
import org.apache.cassandra.cql3.ColumnSpecification;
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.commons.lang3.text.StrBuilder;
+import static java.util.stream.Collectors.toList;
+
/**
* Base class for our native/hardcoded functions.
*/
@@ -57,6 +60,14 @@ public abstract class AbstractFunction implements Function
return returnType;
}
+ public List<String> argumentsList()
+ {
+ return argTypes().stream()
+ .map(AbstractType::asCQL3Type)
+ .map(CQL3Type::toString)
+ .collect(toList());
+ }
+
@Override
public boolean equals(Object o)
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/functions/FunctionName.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/functions/FunctionName.java b/src/java/org/apache/cassandra/cql3/functions/FunctionName.java
index aa980e9..be71d52 100644
--- a/src/java/org/apache/cassandra/cql3/functions/FunctionName.java
+++ b/src/java/org/apache/cassandra/cql3/functions/FunctionName.java
@@ -19,7 +19,7 @@ package org.apache.cassandra.cql3.functions;
import com.google.common.base.Objects;
-import org.apache.cassandra.config.SchemaConstants;
+import org.apache.cassandra.schema.SchemaConstants;
public final class FunctionName
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/functions/FunctionResolver.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/functions/FunctionResolver.java b/src/java/org/apache/cassandra/cql3/functions/FunctionResolver.java
index 7234d1f..9c7e85f 100644
--- a/src/java/org/apache/cassandra/cql3/functions/FunctionResolver.java
+++ b/src/java/org/apache/cassandra/cql3/functions/FunctionResolver.java
@@ -21,11 +21,11 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import org.apache.cassandra.config.Schema;
import org.apache.cassandra.cql3.AbstractMarker;
import org.apache.cassandra.cql3.AssignmentTestable;
import org.apache.cassandra.cql3.ColumnIdentifier;
import org.apache.cassandra.cql3.ColumnSpecification;
+import org.apache.cassandra.schema.Schema;
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.exceptions.InvalidRequestException;
@@ -70,7 +70,7 @@ public final class FunctionResolver
throws InvalidRequestException
{
if (name.equalsNativeFunction(TOKEN_FUNCTION_NAME))
- return new TokenFct(Schema.instance.getCFMetaData(receiverKs, receiverCf));
+ return new TokenFct(Schema.instance.getTableMetadata(receiverKs, receiverCf));
// The toJson() function can accept any type of argument, so instances of it are not pre-declared. Instead,
// we create new instances as needed while handling selectors (which is the only place that toJson() is supported,
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/functions/OperationFcts.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/functions/OperationFcts.java b/src/java/org/apache/cassandra/cql3/functions/OperationFcts.java
index 1f115a9..0a039c0 100644
--- a/src/java/org/apache/cassandra/cql3/functions/OperationFcts.java
+++ b/src/java/org/apache/cassandra/cql3/functions/OperationFcts.java
@@ -22,7 +22,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import org.apache.cassandra.config.SchemaConstants;
+import org.apache.cassandra.schema.SchemaConstants;
import org.apache.cassandra.db.marshal.*;
import org.apache.cassandra.exceptions.OperationExecutionException;
import org.apache.cassandra.transport.ProtocolVersion;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/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 1907641..e93084f 100644
--- a/src/java/org/apache/cassandra/cql3/functions/TokenFct.java
+++ b/src/java/org/apache/cassandra/cql3/functions/TokenFct.java
@@ -20,8 +20,8 @@ package org.apache.cassandra.cql3.functions;
import java.nio.ByteBuffer;
import java.util.List;
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.schema.ColumnMetadata;
+import org.apache.cassandra.schema.TableMetadata;
import org.apache.cassandra.db.CBuilder;
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.exceptions.InvalidRequestException;
@@ -29,26 +29,26 @@ import org.apache.cassandra.transport.ProtocolVersion;
public class TokenFct extends NativeScalarFunction
{
- private final CFMetaData cfm;
+ private final TableMetadata metadata;
- public TokenFct(CFMetaData cfm)
+ public TokenFct(TableMetadata metadata)
{
- super("token", cfm.partitioner.getTokenValidator(), getKeyTypes(cfm));
- this.cfm = cfm;
+ super("token", metadata.partitioner.getTokenValidator(), getKeyTypes(metadata));
+ this.metadata = metadata;
}
- private static AbstractType[] getKeyTypes(CFMetaData cfm)
+ private static AbstractType[] getKeyTypes(TableMetadata metadata)
{
- AbstractType[] types = new AbstractType[cfm.partitionKeyColumns().size()];
+ AbstractType[] types = new AbstractType[metadata.partitionKeyColumns().size()];
int i = 0;
- for (ColumnDefinition def : cfm.partitionKeyColumns())
+ for (ColumnMetadata def : metadata.partitionKeyColumns())
types[i++] = def.type;
return types;
}
public ByteBuffer execute(ProtocolVersion protocolVersion, List<ByteBuffer> parameters) throws InvalidRequestException
{
- CBuilder builder = CBuilder.create(cfm.getKeyValidatorAsClusteringComparator());
+ CBuilder builder = CBuilder.create(metadata.partitionKeyAsClusteringComparator());
for (int i = 0; i < parameters.size(); i++)
{
ByteBuffer bb = parameters.get(i);
@@ -56,6 +56,6 @@ public class TokenFct extends NativeScalarFunction
return null;
builder.add(bb);
}
- return cfm.partitioner.getTokenFactory().toByteArray(cfm.partitioner.getToken(CFMetaData.serializePartitionKey(builder.build())));
+ return metadata.partitioner.getTokenFactory().toByteArray(metadata.partitioner.getToken(builder.build().serializeAsPartitionKey()));
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/functions/UDFunction.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/functions/UDFunction.java b/src/java/org/apache/cassandra/cql3/functions/UDFunction.java
index f8af619..b6fedcc 100644
--- a/src/java/org/apache/cassandra/cql3/functions/UDFunction.java
+++ b/src/java/org/apache/cassandra/cql3/functions/UDFunction.java
@@ -42,10 +42,9 @@ import org.slf4j.LoggerFactory;
import com.datastax.driver.core.DataType;
import com.datastax.driver.core.TypeCodec;
-import com.datastax.driver.core.UserType;
import org.apache.cassandra.config.Config;
import org.apache.cassandra.config.DatabaseDescriptor;
-import org.apache.cassandra.config.Schema;
+import org.apache.cassandra.schema.Schema;
import org.apache.cassandra.cql3.ColumnIdentifier;
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.exceptions.FunctionExecutionException;
@@ -53,10 +52,8 @@ import org.apache.cassandra.exceptions.InvalidRequestException;
import org.apache.cassandra.schema.Functions;
import org.apache.cassandra.schema.KeyspaceMetadata;
import org.apache.cassandra.service.ClientWarn;
-import org.apache.cassandra.service.MigrationManager;
import org.apache.cassandra.tracing.Tracing;
import org.apache.cassandra.transport.ProtocolVersion;
-import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.JVMStabilityInspector;
/**
@@ -212,7 +209,7 @@ public abstract class UDFunction extends AbstractFunction implements ScalarFunct
this.argCodecs = UDHelper.codecsFor(argDataTypes);
this.returnCodec = UDHelper.codecFor(returnDataType);
this.calledOnNullInput = calledOnNullInput;
- KeyspaceMetadata keyspaceMetadata = Schema.instance.getKSMetaData(name.keyspace);
+ KeyspaceMetadata keyspaceMetadata = Schema.instance.getKeyspaceMetadata(name.keyspace);
this.udfContext = new UDFContextImpl(argNames, argCodecs, returnCodec,
keyspaceMetadata);
}
@@ -605,37 +602,6 @@ public abstract class UDFunction extends AbstractFunction implements ScalarFunct
return Objects.hashCode(name, Functions.typeHashCode(argTypes), Functions.typeHashCode(returnType), returnType, language, body);
}
- public void userTypeUpdated(String ksName, String typeName)
- {
- boolean updated = false;
-
- for (int i = 0; i < argCodecs.length; i++)
- {
- DataType dataType = argCodecs[i].getCqlType();
- if (dataType instanceof UserType)
- {
- UserType userType = (UserType) dataType;
- if (userType.getKeyspace().equals(ksName) && userType.getTypeName().equals(typeName))
- {
- KeyspaceMetadata ksm = Schema.instance.getKSMetaData(ksName);
- assert ksm != null;
-
- org.apache.cassandra.db.marshal.UserType ut = ksm.types.get(ByteBufferUtil.bytes(typeName)).get();
-
- DataType newUserType = UDHelper.driverType(ut);
- argCodecs[i] = UDHelper.codecFor(newUserType);
-
- argTypes.set(i, ut);
-
- updated = true;
- }
- }
- }
-
- if (updated)
- MigrationManager.announceNewFunction(this, true);
- }
-
private static class UDFClassLoader extends ClassLoader
{
// insecureClassLoader is the C* class loader
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/restrictions/ClusteringColumnRestrictions.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/restrictions/ClusteringColumnRestrictions.java b/src/java/org/apache/cassandra/cql3/restrictions/ClusteringColumnRestrictions.java
index ed0d325..f537255 100644
--- a/src/java/org/apache/cassandra/cql3/restrictions/ClusteringColumnRestrictions.java
+++ b/src/java/org/apache/cassandra/cql3/restrictions/ClusteringColumnRestrictions.java
@@ -19,8 +19,8 @@ package org.apache.cassandra.cql3.restrictions;
import java.util.*;
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.schema.ColumnMetadata;
+import org.apache.cassandra.schema.TableMetadata;
import org.apache.cassandra.cql3.QueryOptions;
import org.apache.cassandra.cql3.statements.Bound;
import org.apache.cassandra.db.*;
@@ -47,14 +47,14 @@ final class ClusteringColumnRestrictions extends RestrictionSetWrapper
*/
private final boolean allowFiltering;
- public ClusteringColumnRestrictions(CFMetaData cfm)
+ public ClusteringColumnRestrictions(TableMetadata table)
{
- this(cfm, false);
+ this(table, false);
}
- public ClusteringColumnRestrictions(CFMetaData cfm, boolean allowFiltering)
+ public ClusteringColumnRestrictions(TableMetadata table, boolean allowFiltering)
{
- this(cfm.comparator, new RestrictionSet(), allowFiltering);
+ this(table.comparator, new RestrictionSet(), allowFiltering);
}
private ClusteringColumnRestrictions(ClusteringComparator comparator,
@@ -74,8 +74,8 @@ final class ClusteringColumnRestrictions extends RestrictionSetWrapper
if (!isEmpty() && !allowFiltering)
{
SingleRestriction lastRestriction = restrictions.lastRestriction();
- ColumnDefinition lastRestrictionStart = lastRestriction.getFirstColumn();
- ColumnDefinition newRestrictionStart = restriction.getFirstColumn();
+ ColumnMetadata lastRestrictionStart = lastRestriction.getFirstColumn();
+ ColumnMetadata newRestrictionStart = restriction.getFirstColumn();
checkFalse(lastRestriction.isSlice() && newRestrictionStart.position() > lastRestrictionStart.position(),
"Clustering column \"%s\" cannot be restricted (preceding column \"%s\" is restricted by a non-EQ relation)",
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/restrictions/CustomIndexExpression.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/restrictions/CustomIndexExpression.java b/src/java/org/apache/cassandra/cql3/restrictions/CustomIndexExpression.java
index eb91928..6ea6842 100644
--- a/src/java/org/apache/cassandra/cql3/restrictions/CustomIndexExpression.java
+++ b/src/java/org/apache/cassandra/cql3/restrictions/CustomIndexExpression.java
@@ -18,7 +18,7 @@
package org.apache.cassandra.cql3.restrictions;
-import org.apache.cassandra.config.CFMetaData;
+import org.apache.cassandra.schema.TableMetadata;
import org.apache.cassandra.cql3.*;
import org.apache.cassandra.db.filter.RowFilter;
import org.apache.cassandra.db.marshal.AbstractType;
@@ -38,21 +38,19 @@ public class CustomIndexExpression
this.valueRaw = value;
}
- public void prepareValue(CFMetaData cfm, AbstractType<?> expressionType, VariableSpecifications boundNames)
+ public void prepareValue(TableMetadata table, AbstractType<?> expressionType, VariableSpecifications boundNames)
{
- ColumnSpecification spec = new ColumnSpecification(cfm.ksName, cfm.ksName, valueColId, expressionType);
- value = valueRaw.prepare(cfm.ksName, spec);
+ ColumnSpecification spec = new ColumnSpecification(table.keyspace, table.keyspace, valueColId, expressionType);
+ value = valueRaw.prepare(table.keyspace, spec);
value.collectMarkerSpecification(boundNames);
}
- public void addToRowFilter(RowFilter filter,
- CFMetaData cfm,
- QueryOptions options)
+ public void addToRowFilter(RowFilter filter, TableMetadata table, QueryOptions options)
{
- filter.addCustomIndexExpression(cfm,
- cfm.getIndexes()
- .get(targetIndex.getIdx())
- .orElseThrow(() -> IndexRestrictions.indexNotFound(targetIndex, cfm)),
+ filter.addCustomIndexExpression(table,
+ table.indexes
+ .get(targetIndex.getIdx())
+ .orElseThrow(() -> IndexRestrictions.indexNotFound(targetIndex, table)),
value.bindAndGet(options));
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/restrictions/IndexRestrictions.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/restrictions/IndexRestrictions.java b/src/java/org/apache/cassandra/cql3/restrictions/IndexRestrictions.java
index c7f6b5f..ced04ed 100644
--- a/src/java/org/apache/cassandra/cql3/restrictions/IndexRestrictions.java
+++ b/src/java/org/apache/cassandra/cql3/restrictions/IndexRestrictions.java
@@ -21,14 +21,14 @@ package org.apache.cassandra.cql3.restrictions;
import java.util.ArrayList;
import java.util.List;
-import org.apache.cassandra.config.CFMetaData;
+import org.apache.cassandra.schema.TableMetadata;
import org.apache.cassandra.cql3.IndexName;
import org.apache.cassandra.exceptions.InvalidRequestException;
public class IndexRestrictions
{
- public static final String INDEX_NOT_FOUND = "Invalid index expression, index %s not found for %s.%s";
- public static final String INVALID_INDEX = "Target index %s cannot be used to query %s.%s";
+ public static final String INDEX_NOT_FOUND = "Invalid index expression, index %s not found for %s";
+ public static final String INVALID_INDEX = "Target index %s cannot be used to query %s";
public static final String CUSTOM_EXPRESSION_NOT_SUPPORTED = "Index %s does not support custom expressions";
public static final String NON_CUSTOM_INDEX_IN_EXPRESSION = "Only CUSTOM indexes may be used in custom index expressions, %s is not valid";
public static final String MULTIPLE_EXPRESSIONS = "Multiple custom index expressions in a single query are not supported";
@@ -61,14 +61,14 @@ public class IndexRestrictions
return customExpressions;
}
- static InvalidRequestException invalidIndex(IndexName indexName, CFMetaData cfm)
+ static InvalidRequestException invalidIndex(IndexName indexName, TableMetadata table)
{
- return new InvalidRequestException(String.format(INVALID_INDEX, indexName.getIdx(), cfm.ksName, cfm.cfName));
+ return new InvalidRequestException(String.format(INVALID_INDEX, indexName.getIdx(), table.toString()));
}
- static InvalidRequestException indexNotFound(IndexName indexName, CFMetaData cfm)
+ static InvalidRequestException indexNotFound(IndexName indexName, TableMetadata table)
{
- return new InvalidRequestException(String.format(INDEX_NOT_FOUND,indexName.getIdx(), cfm.ksName, cfm.cfName));
+ return new InvalidRequestException(String.format(INDEX_NOT_FOUND, indexName.getIdx(), table.toString()));
}
static InvalidRequestException nonCustomIndexInExpression(IndexName indexName)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cql3/restrictions/MultiColumnRestriction.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/restrictions/MultiColumnRestriction.java b/src/java/org/apache/cassandra/cql3/restrictions/MultiColumnRestriction.java
index b0cbdff..bf10024 100644
--- a/src/java/org/apache/cassandra/cql3/restrictions/MultiColumnRestriction.java
+++ b/src/java/org/apache/cassandra/cql3/restrictions/MultiColumnRestriction.java
@@ -20,7 +20,7 @@ package org.apache.cassandra.cql3.restrictions;
import java.nio.ByteBuffer;
import java.util.*;
-import org.apache.cassandra.config.ColumnDefinition;
+import org.apache.cassandra.schema.ColumnMetadata;
import org.apache.cassandra.cql3.*;
import org.apache.cassandra.cql3.Term.Terminal;
import org.apache.cassandra.cql3.functions.Function;
@@ -40,9 +40,9 @@ public abstract class MultiColumnRestriction implements SingleRestriction
/**
* The columns to which the restriction apply.
*/
- protected final List<ColumnDefinition> columnDefs;
+ protected final List<ColumnMetadata> columnDefs;
- public MultiColumnRestriction(List<ColumnDefinition> columnDefs)
+ public MultiColumnRestriction(List<ColumnMetadata> columnDefs)
{
this.columnDefs = columnDefs;
}
@@ -54,19 +54,19 @@ public abstract class MultiColumnRestriction implements SingleRestriction
}
@Override
- public ColumnDefinition getFirstColumn()
+ public ColumnMetadata getFirstColumn()
{
return columnDefs.get(0);
}
@Override
- public ColumnDefinition getLastColumn()
+ public ColumnMetadata getLastColumn()
{
return columnDefs.get(columnDefs.size() - 1);
}
@Override
- public List<ColumnDefinition> getColumnDefs()
+ public List<ColumnMetadata> getColumnDefs()
{
return columnDefs;
}
@@ -96,14 +96,14 @@ public abstract class MultiColumnRestriction implements SingleRestriction
*/
protected final String getColumnsInCommons(Restriction otherRestriction)
{
- Set<ColumnDefinition> commons = new HashSet<>(getColumnDefs());
+ Set<ColumnMetadata> commons = new HashSet<>(getColumnDefs());
commons.retainAll(otherRestriction.getColumnDefs());
StringBuilder builder = new StringBuilder();
- for (ColumnDefinition columnDefinition : commons)
+ for (ColumnMetadata columnMetadata : commons)
{
if (builder.length() != 0)
builder.append(" ,");
- builder.append(columnDefinition.name);
+ builder.append(columnMetadata.name);
}
return builder.toString();
}
@@ -130,7 +130,7 @@ public abstract class MultiColumnRestriction implements SingleRestriction
{
protected final Term value;
- public EQRestriction(List<ColumnDefinition> columnDefs, Term value)
+ public EQRestriction(List<ColumnMetadata> columnDefs, Term value)
{
super(columnDefs);
this.value = value;
@@ -158,7 +158,7 @@ public abstract class MultiColumnRestriction implements SingleRestriction
@Override
protected boolean isSupportedBy(Index index)
{
- for(ColumnDefinition column : columnDefs)
+ for(ColumnMetadata column : columnDefs)
if (index.supportsExpression(column, Operator.EQ))
return true;
return false;
@@ -185,7 +185,7 @@ public abstract class MultiColumnRestriction implements SingleRestriction
for (int i = 0, m = columnDefs.size(); i < m; i++)
{
- ColumnDefinition columnDef = columnDefs.get(i);
+ ColumnMetadata columnDef = columnDefs.get(i);
filter.add(columnDef, Operator.EQ, values.get(i));
}
}
@@ -193,7 +193,7 @@ public abstract class MultiColumnRestriction implements SingleRestriction
public abstract static class INRestriction extends MultiColumnRestriction
{
- public INRestriction(List<ColumnDefinition> columnDefs)
+ public INRestriction(List<ColumnMetadata> columnDefs)
{
super(columnDefs);
}
@@ -208,7 +208,7 @@ public abstract class MultiColumnRestriction implements SingleRestriction
builder.addAllElementsToAll(splitInValues);
if (builder.containsNull())
- throw invalidRequest("Invalid null value in condition for columns: %s", ColumnDefinition.toIdentifiers(columnDefs));
+ throw invalidRequest("Invalid null value in condition for columns: %s", ColumnMetadata.toIdentifiers(columnDefs));
return builder;
}
@@ -228,7 +228,7 @@ public abstract class MultiColumnRestriction implements SingleRestriction
@Override
protected boolean isSupportedBy(Index index)
{
- for (ColumnDefinition column: columnDefs)
+ for (ColumnMetadata column: columnDefs)
if (index.supportsExpression(column, Operator.IN))
return true;
return false;
@@ -253,7 +253,7 @@ public abstract class MultiColumnRestriction implements SingleRestriction
{
protected final List<Term> values;
- public InRestrictionWithValues(List<ColumnDefinition> columnDefs, List<Term> values)
+ public InRestrictionWithValues(List<ColumnMetadata> columnDefs, List<Term> values)
{
super(columnDefs);
this.values = values;
@@ -292,7 +292,7 @@ public abstract class MultiColumnRestriction implements SingleRestriction
{
protected final AbstractMarker marker;
- public InRestrictionWithMarker(List<ColumnDefinition> columnDefs, AbstractMarker marker)
+ public InRestrictionWithMarker(List<ColumnMetadata> columnDefs, AbstractMarker marker)
{
super(columnDefs);
this.marker = marker;
@@ -323,12 +323,12 @@ public abstract class MultiColumnRestriction implements SingleRestriction
{
private final TermSlice slice;
- public SliceRestriction(List<ColumnDefinition> columnDefs, Bound bound, boolean inclusive, Term term)
+ public SliceRestriction(List<ColumnMetadata> columnDefs, Bound bound, boolean inclusive, Term term)
{
this(columnDefs, TermSlice.newInstance(bound, inclusive, term));
}
- SliceRestriction(List<ColumnDefinition> columnDefs, TermSlice slice)
+ SliceRestriction(List<ColumnMetadata> columnDefs, TermSlice slice)
{
super(columnDefs);
this.slice = slice;
@@ -360,7 +360,7 @@ public abstract class MultiColumnRestriction implements SingleRestriction
for (int i = 0, m = columnDefs.size(); i < m; i++)
{
- ColumnDefinition column = columnDefs.get(i);
+ ColumnMetadata column = columnDefs.get(i);
Bound b = bound.reverseIfNeeded(column);
// For mixed order columns, we need to create additional slices when 2 columns are in reverse order
@@ -410,7 +410,7 @@ public abstract class MultiColumnRestriction implements SingleRestriction
@Override
protected boolean isSupportedBy(Index index)
{
- for(ColumnDefinition def : columnDefs)
+ for(ColumnMetadata def : columnDefs)
if (slice.isSupportedBy(def, index))
return true;
return false;
@@ -443,7 +443,7 @@ public abstract class MultiColumnRestriction implements SingleRestriction
if (!getFirstColumn().equals(otherRestriction.getFirstColumn()))
{
- ColumnDefinition column = getFirstColumn().position() > otherRestriction.getFirstColumn().position()
+ ColumnMetadata column = getFirstColumn().position() > otherRestriction.getFirstColumn().position()
? getFirstColumn() : otherRestriction.getFirstColumn();
throw invalidRequest("Column \"%s\" cannot be restricted by two inequalities not starting with the same column",
@@ -458,7 +458,7 @@ public abstract class MultiColumnRestriction implements SingleRestriction
getColumnsInCommons(otherRestriction));
SliceRestriction otherSlice = (SliceRestriction) otherRestriction;
- List<ColumnDefinition> newColumnDefs = columnDefs.size() >= otherSlice.columnDefs.size() ? columnDefs : otherSlice.columnDefs;
+ List<ColumnMetadata> newColumnDefs = columnDefs.size() >= otherSlice.columnDefs.size() ? columnDefs : otherSlice.columnDefs;
return new SliceRestriction(newColumnDefs, slice.merge(otherSlice.slice));
}
@@ -507,7 +507,7 @@ public abstract class MultiColumnRestriction implements SingleRestriction
public static class NotNullRestriction extends MultiColumnRestriction
{
- public NotNullRestriction(List<ColumnDefinition> columnDefs)
+ public NotNullRestriction(List<ColumnMetadata> columnDefs)
{
super(columnDefs);
assert columnDefs.size() == 1;
@@ -540,7 +540,7 @@ public abstract class MultiColumnRestriction implements SingleRestriction
@Override
protected boolean isSupportedBy(Index index)
{
- for(ColumnDefinition column : columnDefs)
+ for(ColumnMetadata column : columnDefs)
if (index.supportsExpression(column, Operator.IS_NOT))
return true;
return false;