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/04/02 20:32:56 UTC
[2/4] git commit: Replace equals by type compare
Replace equals by type compare
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/17278b3a
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/17278b3a
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/17278b3a
Branch: refs/heads/trunk
Commit: 17278b3a343575f4c32414cfffb52cdc2e7c7d00
Parents: 167380f
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Wed Apr 2 20:14:42 2014 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Wed Apr 2 20:14:42 2014 +0200
----------------------------------------------------------------------
.../apache/cassandra/cql3/ColumnCondition.java | 27 ++++++++++----------
1 file changed, 14 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/17278b3a/src/java/org/apache/cassandra/cql3/ColumnCondition.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/ColumnCondition.java b/src/java/org/apache/cassandra/cql3/ColumnCondition.java
index 0ebd4af..e6cdf43 100644
--- a/src/java/org/apache/cassandra/cql3/ColumnCondition.java
+++ b/src/java/org/apache/cassandra/cql3/ColumnCondition.java
@@ -26,9 +26,7 @@ import com.google.common.collect.Iterators;
import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.filter.ColumnSlice;
-import org.apache.cassandra.db.marshal.CollectionType;
-import org.apache.cassandra.db.marshal.CounterColumnType;
-import org.apache.cassandra.db.marshal.CompositeType;
+import org.apache.cassandra.db.marshal.*;
import org.apache.cassandra.exceptions.InvalidRequestException;
/**
@@ -140,9 +138,9 @@ public class ColumnCondition
switch (type.kind)
{
- case LIST: return listAppliesTo(current.metadata(), iter, ((Lists.Value)v).elements);
- case SET: return setAppliesTo(current.metadata(), iter, ((Sets.Value)v).elements);
- case MAP: return mapAppliesTo(current.metadata(), iter, ((Maps.Value)v).map);
+ case LIST: return listAppliesTo((ListType)type, current.metadata(), iter, ((Lists.Value)v).elements);
+ case SET: return setAppliesTo((SetType)type, current.metadata(), iter, ((Sets.Value)v).elements);
+ case MAP: return mapAppliesTo((MapType)type, current.metadata(), iter, ((Maps.Value)v).map);
}
throw new AssertionError();
}
@@ -153,18 +151,19 @@ public class ColumnCondition
return bbs[bbs.length - 1];
}
- private boolean listAppliesTo(CFMetaData cfm, Iterator<Column> iter, List<ByteBuffer> elements)
+ private boolean listAppliesTo(ListType type, CFMetaData cfm, Iterator<Column> iter, List<ByteBuffer> elements)
{
for (ByteBuffer e : elements)
- if (!iter.hasNext() || !iter.next().value().equals(e))
+ if (!iter.hasNext() || type.elements.compare(iter.next().value(), e) != 0)
return false;
// We must not have more elements than expected
return !iter.hasNext();
}
- private boolean setAppliesTo(CFMetaData cfm, Iterator<Column> iter, Set<ByteBuffer> elements)
+ private boolean setAppliesTo(SetType type, CFMetaData cfm, Iterator<Column> iter, Set<ByteBuffer> elements)
{
- Set<ByteBuffer> remaining = new HashSet<>(elements);
+ Set<ByteBuffer> remaining = new TreeSet<>(type.elements);
+ remaining.addAll(elements);
while (iter.hasNext())
{
if (remaining.isEmpty())
@@ -176,16 +175,18 @@ public class ColumnCondition
return remaining.isEmpty();
}
- private boolean mapAppliesTo(CFMetaData cfm, Iterator<Column> iter, Map<ByteBuffer, ByteBuffer> elements)
+ private boolean mapAppliesTo(MapType type, CFMetaData cfm, Iterator<Column> iter, Map<ByteBuffer, ByteBuffer> elements)
{
- Map<ByteBuffer, ByteBuffer> remaining = new HashMap<>(elements);
+ Map<ByteBuffer, ByteBuffer> remaining = new TreeMap<>(type.keys);
+ remaining.putAll(elements);
while (iter.hasNext())
{
if (remaining.isEmpty())
return false;
Column c = iter.next();
- if (!remaining.remove(collectionKey(cfm, c)).equals(c.value()))
+ ByteBuffer previous = remaining.remove(collectionKey(cfm, c));
+ if (previous == null || type.values.compare(previous, c.value()) != 0)
return false;
}
return remaining.isEmpty();