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 2014/01/03 16:24:07 UTC
git commit: Fix creating cellnameType for super columns
Updated Branches:
refs/heads/trunk af3ad31c3 -> 4260736e1
Fix creating cellnameType for super columns
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/4260736e
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/4260736e
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/4260736e
Branch: refs/heads/trunk
Commit: 4260736e1eed08b49a31a9328d6823ae3fc86d0d
Parents: af3ad31
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Fri Jan 3 16:23:52 2014 +0100
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Fri Jan 3 16:24:02 2014 +0100
----------------------------------------------------------------------
.../cassandra/db/composites/CellNames.java | 5 ++--
.../composites/CompoundSparseCellNameType.java | 27 ++++++++++++--------
2 files changed, 20 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4260736e/src/java/org/apache/cassandra/db/composites/CellNames.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/composites/CellNames.java b/src/java/org/apache/cassandra/db/composites/CellNames.java
index 7c8cbbd..dc7d0e2 100644
--- a/src/java/org/apache/cassandra/db/composites/CellNames.java
+++ b/src/java/org/apache/cassandra/db/composites/CellNames.java
@@ -50,13 +50,14 @@ public abstract class CellNames
List<AbstractType<?>> types = ((CompositeType)type).types;
if (types.get(types.size() - 1) instanceof ColumnToCollectionType)
{
+ // We don't allow collection for super columns, so the "name" type *must* be UTF8
assert types.get(types.size() - 2) instanceof UTF8Type;
return new CompoundSparseCellNameType.WithCollection(types.subList(0, types.size() - 2), (ColumnToCollectionType)types.get(types.size() - 1));
}
else
{
- assert types.get(types.size() - 1) instanceof UTF8Type;
- return new CompoundSparseCellNameType(types.subList(0, types.size() - 1));
+ AbstractType<?> nameType = types.get(types.size() - 1);
+ return new CompoundSparseCellNameType(types.subList(0, types.size() - 1), nameType);
}
}
else
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4260736e/src/java/org/apache/cassandra/db/composites/CompoundSparseCellNameType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/composites/CompoundSparseCellNameType.java b/src/java/org/apache/cassandra/db/composites/CompoundSparseCellNameType.java
index a301665..d0e66f8 100644
--- a/src/java/org/apache/cassandra/db/composites/CompoundSparseCellNameType.java
+++ b/src/java/org/apache/cassandra/db/composites/CompoundSparseCellNameType.java
@@ -30,29 +30,36 @@ import org.apache.cassandra.utils.ByteBufferUtil;
public class CompoundSparseCellNameType extends AbstractCompoundCellNameType
{
- private static final AbstractType<?> columnNameType = UTF8Type.instance;
private static final ColumnIdentifier rowMarkerId = new ColumnIdentifier(ByteBufferUtil.EMPTY_BYTE_BUFFER, UTF8Type.instance);
private static final CellName rowMarkerNoPrefix = new CompoundSparseCellName(rowMarkerId);
+ // For CQL3 columns, this is always UTF8Type. However, for compatibility with super columns, we need to allow it to be non-UTF8.
+ private final AbstractType<?> columnNameType;
protected final Map<ByteBuffer, ColumnIdentifier> internedIds;
public CompoundSparseCellNameType(List<AbstractType<?>> types)
{
- this(new CompoundCType(types));
+ this(types, UTF8Type.instance);
}
- public CompoundSparseCellNameType(CompoundCType clusteringType)
+ public CompoundSparseCellNameType(List<AbstractType<?>> types, AbstractType<?> columnNameType)
{
- this(clusteringType, makeCType(clusteringType, null), new HashMap<ByteBuffer, ColumnIdentifier>());
+ this(new CompoundCType(types), columnNameType);
}
- private CompoundSparseCellNameType(CompoundCType clusteringType, CompoundCType fullType, Map<ByteBuffer, ColumnIdentifier> internedIds)
+ private CompoundSparseCellNameType(CompoundCType clusteringType, AbstractType<?> columnNameType)
+ {
+ this(clusteringType, columnNameType, makeCType(clusteringType, columnNameType, null), new HashMap<ByteBuffer, ColumnIdentifier>());
+ }
+
+ private CompoundSparseCellNameType(CompoundCType clusteringType, AbstractType<?> columnNameType, CompoundCType fullType, Map<ByteBuffer, ColumnIdentifier> internedIds)
{
super(clusteringType, fullType);
+ this.columnNameType = columnNameType;
this.internedIds = internedIds;
}
- protected static CompoundCType makeCType(CompoundCType clusteringType, ColumnToCollectionType collectionType)
+ protected static CompoundCType makeCType(CompoundCType clusteringType, AbstractType<?> columnNameType, ColumnToCollectionType collectionType)
{
List<AbstractType<?>> allSubtypes = new ArrayList<AbstractType<?>>(clusteringType.size() + (collectionType == null ? 1 : 2));
for (int i = 0; i < clusteringType.size(); i++)
@@ -66,7 +73,7 @@ public class CompoundSparseCellNameType extends AbstractCompoundCellNameType
public CellNameType setSubtype(int position, AbstractType<?> newType)
{
if (position < clusteringSize)
- return new CompoundSparseCellNameType(clusteringType.setSubtype(position, newType), fullType.setSubtype(position, newType), internedIds);
+ return new CompoundSparseCellNameType(clusteringType.setSubtype(position, newType), columnNameType, fullType.setSubtype(position, newType), internedIds);
if (position == clusteringSize)
throw new IllegalArgumentException();
@@ -159,17 +166,17 @@ public class CompoundSparseCellNameType extends AbstractCompoundCellNameType
WithCollection(CompoundCType clusteringType, ColumnToCollectionType collectionType)
{
- this(clusteringType, makeCType(clusteringType, collectionType), collectionType, new HashMap<ByteBuffer, ColumnIdentifier>());
+ this(clusteringType, collectionType, new HashMap<ByteBuffer, ColumnIdentifier>());
}
private WithCollection(CompoundCType clusteringType, ColumnToCollectionType collectionType, Map<ByteBuffer, ColumnIdentifier> internedIds)
{
- this(clusteringType, makeCType(clusteringType, collectionType), collectionType, internedIds);
+ this(clusteringType, makeCType(clusteringType, UTF8Type.instance, collectionType), collectionType, internedIds);
}
private WithCollection(CompoundCType clusteringType, CompoundCType fullCType, ColumnToCollectionType collectionType, Map<ByteBuffer, ColumnIdentifier> internedIds)
{
- super(clusteringType, fullCType, internedIds);
+ super(clusteringType, UTF8Type.instance, fullCType, internedIds);
this.collectionType = collectionType;
}