Updated Branches: refs/heads/trunk 383d35ea5 -> 6a5495afe
Fix use of CQL3 functions with descending clustering order patch by slebresne; reviewed by iamaleksey for CASSANDRA-5472 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7eae57ae Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7eae57ae Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7eae57ae Branch: refs/heads/trunk Commit: 7eae57aeac291799d54d5a1b5a444e27336215f1 Parents: 9851b73 Author: Sylvain Lebresne <sylv...@datastax.com> Authored: Mon Apr 29 09:29:22 2013 +0200 Committer: Sylvain Lebresne <sylv...@datastax.com> Committed: Mon Apr 29 09:29:22 2013 +0200 ---------------------------------------------------------------------- CHANGES.txt | 3 +- .../cassandra/cql3/statements/Selection.java | 42 ++++++++++++-- 2 files changed, 38 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/7eae57ae/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index c843e5e..241ef7c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -13,9 +13,10 @@ * Fix shutdown of binary protocol server (CASSANDRA-5507) * Fix repair -snapshot not working (CASSANDRA-5512) * Set isRunning flag later in binary protocol server (CASSANDRA-5467) + * Fix use of CQL3 functions with descencind clustering order (CASSANDRA-5472) Merged from 1.1 * Add retry mechanism to OTC for non-droppable_verbs (CASSANDRA-5393) - * Use allocator information to improve memtable memory usage estimate + * Use allocator information to improve memtable memory usage estimate (CASSANDRA-5497) * Fix trying to load deleted row into row cache on startup (CASSANDRA-4463) http://git-wip-us.apache.org/repos/asf/cassandra/blob/7eae57ae/src/java/org/apache/cassandra/cql3/statements/Selection.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/Selection.java b/src/java/org/apache/cassandra/cql3/statements/Selection.java index e4e59c5..64710be 100644 --- a/src/java/org/apache/cassandra/cql3/statements/Selection.java +++ b/src/java/org/apache/cassandra/cql3/statements/Selection.java @@ -92,7 +92,7 @@ public abstract class Selection throw new InvalidRequestException(String.format("Undefined name %s in selection clause", raw)); if (metadata != null) metadata.add(name); - return new SimpleSelector(addAndGetIndex(name, names), name.type); + return new SimpleSelector(name.toString(), addAndGetIndex(name, names), name.type); } else if (raw instanceof RawSelector.WritetimeOrTTL) { @@ -107,7 +107,7 @@ public abstract class Selection if (metadata != null) metadata.add(makeWritetimeOrTTLSpec(cfDef, tot)); - return new WritetimeOrTTLSelector(addAndGetIndex(name, names), tot.isWritetime); + return new WritetimeOrTTLSelector(name.toString(), addAndGetIndex(name, names), tot.isWritetime); } else { @@ -313,11 +313,13 @@ public abstract class Selection private static class SimpleSelector implements Selector { + private final String columnName; private final int idx; private final AbstractType<?> type; - public SimpleSelector(int idx, AbstractType<?> type) + public SimpleSelector(String columnName, int idx, AbstractType<?> type) { + this.columnName = columnName; this.idx = idx; this.type = type; } @@ -329,7 +331,13 @@ public abstract class Selection public boolean isAssignableTo(ColumnSpecification receiver) { - return type.equals(receiver.type); + return type.asCQL3Type().equals(receiver.type.asCQL3Type()); + } + + @Override + public String toString() + { + return columnName; } } @@ -355,17 +363,33 @@ public abstract class Selection public boolean isAssignableTo(ColumnSpecification receiver) { - return fun.returnType().equals(receiver.type); + return fun.returnType().asCQL3Type().equals(receiver.type.asCQL3Type()); + } + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder(); + sb.append(fun.name()).append("("); + for (int i = 0; i < argSelectors.size(); i++) + { + if (i > 0) + sb.append(", "); + sb.append(argSelectors.get(i)); + } + return sb.append(")").toString(); } } private static class WritetimeOrTTLSelector implements Selector { + private final String columnName; private final int idx; private final boolean isWritetime; - public WritetimeOrTTLSelector(int idx, boolean isWritetime) + public WritetimeOrTTLSelector(String columnName, int idx, boolean isWritetime) { + this.columnName = columnName; this.idx = idx; this.isWritetime = isWritetime; } @@ -386,6 +410,12 @@ public abstract class Selection { return receiver.type.asCQL3Type().equals(isWritetime ? CQL3Type.Native.BIGINT : CQL3Type.Native.INT); } + + @Override + public String toString() + { + return columnName; + } } private static class SelectionWithFunctions extends Selection