You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2013/08/09 00:09:42 UTC
[12/19] git commit: make scrubbing collection-aware
make scrubbing collection-aware
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/73b0ffba
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/73b0ffba
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/73b0ffba
Branch: refs/heads/cassandra-2.0
Commit: 73b0ffba82f431d6fca2a876504fe9f0631ef0a6
Parents: 9e0efa3
Author: Jonathan Ellis <jb...@apache.org>
Authored: Thu Aug 8 17:06:56 2013 -0500
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Thu Aug 8 17:06:56 2013 -0500
----------------------------------------------------------------------
src/java/org/apache/cassandra/db/Column.java | 13 +++--------
.../cassandra/db/marshal/CompositeType.java | 24 ++++++++++++++++++++
2 files changed, 27 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/73b0ffba/src/java/org/apache/cassandra/db/Column.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Column.java b/src/java/org/apache/cassandra/db/Column.java
index 7b614f5..632392f 100644
--- a/src/java/org/apache/cassandra/db/Column.java
+++ b/src/java/org/apache/cassandra/db/Column.java
@@ -293,16 +293,9 @@ public class Column implements IColumn
// If this is a CQL table, we need to pull out the CQL column name to look up the correct column type.
// (Note that COMPACT composites are handled by validateName, above.)
ByteBuffer internalName;
- if (cfdef.isComposite && !cfdef.isCompact)
- {
- AbstractCompositeType comparator = (AbstractCompositeType) metadata.comparator;
- List<AbstractCompositeType.CompositeComponent> components = comparator.deconstruct(name);
- internalName = components.get(components.size() - 1).value;
- }
- else
- {
- internalName = name;
- }
+ internalName = (cfdef.isComposite && !cfdef.isCompact)
+ ? ((CompositeType) metadata.comparator).extractLastComponent(name)
+ : name;
AbstractType<?> valueValidator = metadata.getValueValidator(internalName);
if (valueValidator != null)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/73b0ffba/src/java/org/apache/cassandra/db/marshal/CompositeType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/CompositeType.java b/src/java/org/apache/cassandra/db/marshal/CompositeType.java
index 522be13..2a27617 100644
--- a/src/java/org/apache/cassandra/db/marshal/CompositeType.java
+++ b/src/java/org/apache/cassandra/db/marshal/CompositeType.java
@@ -124,6 +124,30 @@ public class CompositeType extends AbstractCompositeType
return build(serialized);
}
+ // Extract component idx from bb. Return null if there is not enough component.
+ public static ByteBuffer extractComponent(ByteBuffer bb, int idx)
+ {
+ bb = bb.duplicate();
+ int i = 0;
+ while (bb.remaining() > 0)
+ {
+ ByteBuffer c = getWithShortLength(bb);
+ if (i == idx)
+ return c;
+
+ bb.get(); // skip end-of-component
+ ++i;
+ }
+ return null;
+ }
+
+ // Extract CQL3 column name from the full column name.
+ public ByteBuffer extractLastComponent(ByteBuffer bb)
+ {
+ int idx = types.get(types.size() - 1) instanceof ColumnToCollectionType ? types.size() - 2 : types.size() - 1;
+ return extractComponent(bb, idx);
+ }
+
@Override
public boolean isCompatibleWith(AbstractType<?> previous)
{