You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sa...@apache.org on 2016/04/01 15:48:11 UTC
cassandra git commit: Make value of LIKE relations a Term
Repository: cassandra
Updated Branches:
refs/heads/trunk 21448c508 -> bdae4520c
Make value of LIKE relations a Term
Patch by Sam Tunnicliffe; reviewed by Pavel Yaskevich for
CASSANDRA-11456
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/bdae4520
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/bdae4520
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/bdae4520
Branch: refs/heads/trunk
Commit: bdae4520c5bd19caf607ed92eea3e8c02a694bd0
Parents: 21448c5
Author: Sam Tunnicliffe <sa...@beobal.com>
Authored: Thu Mar 31 15:08:36 2016 +0100
Committer: Sam Tunnicliffe <sa...@beobal.com>
Committed: Fri Apr 1 14:45:47 2016 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
src/antlr/Parser.g | 41 +------------
.../org/apache/cassandra/cql3/Operator.java | 15 +++--
.../org/apache/cassandra/cql3/Relation.java | 4 +-
.../cassandra/cql3/SingleColumnRelation.java | 3 -
.../restrictions/SingleColumnRestriction.java | 62 ++++++++++++++++++-
.../restrictions/StatementRestrictions.java | 4 +-
.../apache/cassandra/db/filter/RowFilter.java | 10 +--
.../cassandra/index/sasi/conf/ColumnIndex.java | 3 +
.../validation/entities/SecondaryIndexTest.java | 64 ++++++++++++++++++++
.../cql3/validation/operations/SelectTest.java | 3 +-
.../cassandra/index/sasi/SASIIndexTest.java | 4 +-
.../index/sasi/plan/OperationTest.java | 2 +-
13 files changed, 155 insertions(+), 61 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/bdae4520/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 0401357..cf05d7b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.6
+ * Support LIKE operator in prepared statements (CASSANDRA-11456)
* Add a command to see if a Materialized View has finished building (CASSANDRA-9967)
* Log endpoint and port associated with streaming operation (CASSANDRA-8777)
* Print sensible units for all log messages (CASSANDRA-9692)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/bdae4520/src/antlr/Parser.g
----------------------------------------------------------------------
diff --git a/src/antlr/Parser.g b/src/antlr/Parser.g
index b4aa235..78a2d0d 100644
--- a/src/antlr/Parser.g
+++ b/src/antlr/Parser.g
@@ -156,45 +156,6 @@ options {
return filtered;
}
- public void buildLIKERelation(WhereClause.Builder whereClause, ColumnIdentifier.Raw name, String likeValue)
- {
- Operator operator;
- int beginIndex = 0;
- int endIndex = likeValue.length() - 1;
-
- if (likeValue.charAt(endIndex) == '\%')
- {
- if (likeValue.charAt(beginIndex) == '\%')
- {
- operator = Operator.LIKE_CONTAINS;
- beginIndex =+ 1;
- }
- else
- {
- operator = Operator.LIKE_PREFIX;
- }
- }
- else if (likeValue.charAt(beginIndex) == '\%')
- {
- operator = Operator.LIKE_SUFFIX;
- beginIndex += 1;
- endIndex += 1;
- }
- else
- {
- operator = Operator.LIKE_MATCHES;
- endIndex += 1;
- }
-
- if (endIndex == 0 || beginIndex == endIndex)
- {
- addRecognitionError("LIKE value can't be empty.");
- return;
- }
-
- String value = likeValue.substring(beginIndex, endIndex);
- whereClause.add(new SingleColumnRelation(name, operator, Constants.Literal.string(value)));
- }
}
/** STATEMENTS **/
@@ -1402,7 +1363,7 @@ relationType returns [Operator op]
relation[WhereClause.Builder clauses]
: name=cident type=relationType t=term { $clauses.add(new SingleColumnRelation(name, type, t)); }
- | name=cident K_LIKE v=STRING_LITERAL { buildLIKERelation($clauses, name, $v.text); }
+ | name=cident K_LIKE t=term { $clauses.add(new SingleColumnRelation(name, Operator.LIKE, t)); }
| name=cident K_IS K_NOT K_NULL { $clauses.add(new SingleColumnRelation(name, Operator.IS_NOT, Constants.NULL_LITERAL)); }
| K_TOKEN l=tupleOfIdentifiers type=relationType t=term
{ $clauses.add(new TokenRelation(l, type, t)); }
http://git-wip-us.apache.org/repos/asf/cassandra/blob/bdae4520/src/java/org/apache/cassandra/cql3/Operator.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/Operator.java b/src/java/org/apache/cassandra/cql3/Operator.java
index accb786..07c92f0 100644
--- a/src/java/org/apache/cassandra/cql3/Operator.java
+++ b/src/java/org/apache/cassandra/cql3/Operator.java
@@ -25,10 +25,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.db.marshal.ListType;
-import org.apache.cassandra.db.marshal.MapType;
-import org.apache.cassandra.db.marshal.SetType;
+import org.apache.cassandra.db.marshal.*;
import org.apache.cassandra.utils.ByteBufferUtil;
public enum Operator
@@ -134,6 +131,14 @@ public enum Operator
{
return "LIKE '<term>'";
}
+ },
+ LIKE(14)
+ {
+ @Override
+ public String toString()
+ {
+ return "LIKE";
+ }
};
/**
@@ -234,7 +239,7 @@ public enum Operator
case LIKE_CONTAINS:
return ByteBufferUtil.contains(leftOperand, rightOperand);
default:
- // we shouldn't get CONTAINS, CONTAINS KEY, or IS NOT here
+ // we shouldn't get LIKE, CONTAINS, CONTAINS KEY, or IS NOT here
throw new AssertionError();
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/bdae4520/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 616fd30..bc986f6 100644
--- a/src/java/org/apache/cassandra/cql3/Relation.java
+++ b/src/java/org/apache/cassandra/cql3/Relation.java
@@ -113,7 +113,8 @@ public abstract class Relation {
return relationType == Operator.LIKE_PREFIX
|| relationType == Operator.LIKE_SUFFIX
|| relationType == Operator.LIKE_CONTAINS
- || relationType == Operator.LIKE_MATCHES;
+ || relationType == Operator.LIKE_MATCHES
+ || relationType == Operator.LIKE;
}
/**
@@ -155,6 +156,7 @@ public abstract class Relation {
case LIKE_SUFFIX:
case LIKE_CONTAINS:
case LIKE_MATCHES:
+ case LIKE:
return newLikeRestriction(cfm, boundNames, relationType);
default: throw invalidRequest("Unsupported \"!=\" relation: %s", this);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/bdae4520/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 f61225b..3cb07b9 100644
--- a/src/java/org/apache/cassandra/cql3/SingleColumnRelation.java
+++ b/src/java/org/apache/cassandra/cql3/SingleColumnRelation.java
@@ -151,9 +151,6 @@ public final class SingleColumnRelation extends Relation
if (isIN())
return String.format("%s IN %s", entityAsString, inValues);
- if (isLIKE())
- return String.format("%s %s", entityAsString, relationType);
-
return String.format("%s %s %s", entityAsString, relationType, value);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/bdae4520/src/java/org/apache/cassandra/cql3/restrictions/SingleColumnRestriction.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/restrictions/SingleColumnRestriction.java b/src/java/org/apache/cassandra/cql3/restrictions/SingleColumnRestriction.java
index ab4815a..a5804be 100644
--- a/src/java/org/apache/cassandra/cql3/restrictions/SingleColumnRestriction.java
+++ b/src/java/org/apache/cassandra/cql3/restrictions/SingleColumnRestriction.java
@@ -18,7 +18,9 @@
package org.apache.cassandra.cql3.restrictions;
import java.nio.ByteBuffer;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import com.google.common.collect.Iterables;
@@ -32,6 +34,8 @@ import org.apache.cassandra.db.filter.RowFilter;
import org.apache.cassandra.exceptions.InvalidRequestException;
import org.apache.cassandra.index.Index;
import org.apache.cassandra.index.SecondaryIndexManager;
+import org.apache.cassandra.utils.ByteBufferUtil;
+import org.apache.cassandra.utils.Pair;
import static org.apache.cassandra.cql3.statements.RequestValidations.checkBindValueSet;
import static org.apache.cassandra.cql3.statements.RequestValidations.checkFalse;
@@ -653,6 +657,7 @@ public abstract class SingleColumnRestriction extends AbstractRestriction
public static final class LikeRestriction extends SingleColumnRestriction
{
+ private static final ByteBuffer LIKE_WILDCARD = ByteBufferUtil.bytes("%");
private final Operator operator;
private final Term value;
@@ -698,7 +703,14 @@ public abstract class SingleColumnRestriction extends AbstractRestriction
SecondaryIndexManager indexManager,
QueryOptions options)
{
- filter.add(columnDef, operator, value.bindAndGet(options));
+ Pair<Operator, ByteBuffer> operation = makeSpecific(value.bindAndGet(options));
+
+ // there must be a suitable INDEX for LIKE_XXX expressions
+ RowFilter.SimpleExpression expression = filter.add(columnDef, operation.left, operation.right);
+ indexManager.getBestIndexFor(expression)
+ .orElseThrow(() -> new InvalidRequestException(expression.toString() +
+ " is only supported on properly" +
+ " indexed columns"));
}
@Override
@@ -727,5 +739,51 @@ public abstract class SingleColumnRestriction extends AbstractRestriction
{
return index.supportsExpression(columnDef, operator);
}
+
+ /**
+ * As the specific subtype of LIKE (LIKE_PREFIX, LIKE_SUFFIX, LIKE_CONTAINS, LIKE_MATCHES) can only be
+ * determined by examining the value, which in turn can only be known after binding, all LIKE restrictions
+ * are initially created with the generic LIKE operator. This function takes the bound value, trims the
+ * wildcard '%' chars from it and returns a tuple of the inferred operator subtype and the final value
+ * @param value the bound value for the LIKE operation
+ * @return Pair containing the inferred LIKE subtype and the value with wildcards removed
+ */
+ private static Pair<Operator, ByteBuffer> makeSpecific(ByteBuffer value)
+ {
+ Operator operator;
+ int beginIndex = value.position();
+ int endIndex = value.limit() - 1;
+ if (ByteBufferUtil.endsWith(value, LIKE_WILDCARD))
+ {
+ if (ByteBufferUtil.startsWith(value, LIKE_WILDCARD))
+ {
+ operator = Operator.LIKE_CONTAINS;
+ beginIndex =+ 1;
+ }
+ else
+ {
+ operator = Operator.LIKE_PREFIX;
+ }
+ }
+ else if (ByteBufferUtil.startsWith(value, LIKE_WILDCARD))
+ {
+ operator = Operator.LIKE_SUFFIX;
+ beginIndex += 1;
+ endIndex += 1;
+ }
+ else
+ {
+ operator = Operator.LIKE_MATCHES;
+ endIndex += 1;
+ }
+
+ if (endIndex == 0 || beginIndex == endIndex)
+ throw new InvalidRequestException("LIKE value can't be empty.");
+
+ ByteBuffer newValue = value.duplicate();
+ newValue.position(beginIndex);
+ newValue.limit(endIndex);
+ return Pair.create(operator, newValue);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/bdae4520/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java b/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
index 0672a99..a35d86b 100644
--- a/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
+++ b/src/java/org/apache/cassandra/cql3/restrictions/StatementRestrictions.java
@@ -164,7 +164,9 @@ public final class StatementRestrictions
Restriction restriction = relation.toRestriction(cfm, boundNames);
if (!type.allowUseOfSecondaryIndices() || !restriction.hasSupportingIndex(secondaryIndexManager))
- throw new InvalidRequestException(relation + " restriction is only supported on properly indexed columns");
+ throw new InvalidRequestException(String.format("LIKE restriction is only supported on properly " +
+ "indexed columns. %s is not valid.",
+ relation.toString()));
addRestriction(restriction);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/bdae4520/src/java/org/apache/cassandra/db/filter/RowFilter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/filter/RowFilter.java b/src/java/org/apache/cassandra/db/filter/RowFilter.java
index c96820e..fea8ea8 100644
--- a/src/java/org/apache/cassandra/db/filter/RowFilter.java
+++ b/src/java/org/apache/cassandra/db/filter/RowFilter.java
@@ -78,9 +78,11 @@ public abstract class RowFilter implements Iterable<RowFilter.Expression>
return new ThriftFilter(new ArrayList<>(capacity));
}
- public void add(ColumnDefinition def, Operator op, ByteBuffer value)
+ public SimpleExpression add(ColumnDefinition def, Operator op, ByteBuffer value)
{
- add(new SimpleExpression(def, op, value));
+ SimpleExpression expression = new SimpleExpression(def, op, value);
+ add(expression);
+ return expression;
}
public void addMapEquality(ColumnDefinition def, ByteBuffer key, Operator op, ByteBuffer value)
@@ -593,9 +595,9 @@ public abstract class RowFilter implements Iterable<RowFilter.Expression>
/**
* An expression of the form 'column' 'op' 'value'.
*/
- private static class SimpleExpression extends Expression
+ public static class SimpleExpression extends Expression
{
- public SimpleExpression(ColumnDefinition column, Operator operator, ByteBuffer value)
+ SimpleExpression(ColumnDefinition column, Operator operator, ByteBuffer value)
{
super(column, operator, value);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/bdae4520/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java b/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java
index 76ab968..89129e7 100644
--- a/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java
+++ b/src/java/org/apache/cassandra/index/sasi/conf/ColumnIndex.java
@@ -212,6 +212,9 @@ public class ColumnIndex
public boolean supports(Operator op)
{
+ if (op == Operator.LIKE)
+ return isLiteral();
+
Op operator = Op.valueOf(op);
return !(isTokenized && operator == Op.EQ) // EQ is only applicable to non-tokenized indexes
&& !(isLiteral() && operator == Op.RANGE) // RANGE only applicable to indexes non-literal indexes
http://git-wip-us.apache.org/repos/asf/cassandra/blob/bdae4520/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexTest.java
index b6c786e..e357d74 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexTest.java
@@ -44,6 +44,7 @@ import org.apache.cassandra.index.IndexNotAvailableException;
import org.apache.cassandra.index.SecondaryIndexManager;
import org.apache.cassandra.index.StubIndex;
import org.apache.cassandra.index.internal.CustomCassandraIndex;
+import org.apache.cassandra.index.sasi.SASIIndex;
import org.apache.cassandra.schema.IndexMetadata;
import org.apache.cassandra.service.ClientState;
import org.apache.cassandra.transport.messages.ResultMessage;
@@ -685,6 +686,69 @@ public class SecondaryIndexTest extends CQLTester
"APPLY BATCH", map);
}
+ @Test
+ public void prepareStatementsWithLIKEClauses() throws Throwable
+ {
+ createTable("CREATE TABLE %s (a int, c1 text, c2 text, v1 text, v2 text, v3 int, PRIMARY KEY (a, c1, c2))");
+ createIndex(String.format("CREATE CUSTOM INDEX c1_idx on %%s(c1) USING '%s' WITH OPTIONS = {'mode' : 'PREFIX'}",
+ SASIIndex.class.getName()));
+ createIndex(String.format("CREATE CUSTOM INDEX c2_idx on %%s(c2) USING '%s' WITH OPTIONS = {'mode' : 'CONTAINS'}",
+ SASIIndex.class.getName()));
+ createIndex(String.format("CREATE CUSTOM INDEX v1_idx on %%s(v1) USING '%s' WITH OPTIONS = {'mode' : 'PREFIX'}",
+ SASIIndex.class.getName()));
+ createIndex(String.format("CREATE CUSTOM INDEX v2_idx on %%s(v2) USING '%s' WITH OPTIONS = {'mode' : 'CONTAINS'}",
+ SASIIndex.class.getName()));
+ createIndex(String.format("CREATE CUSTOM INDEX v3_idx on %%s(v3) USING '%s'", SASIIndex.class.getName()));
+
+ forcePreparedValues();
+ // prefix mode indexes support prefix/contains/matches
+ assertInvalidMessage("c1 LIKE '%<term>' abc is only supported on properly indexed columns",
+ "SELECT * FROM %s WHERE c1 LIKE ?",
+ "%abc");
+ assertInvalidMessage("c1 LIKE '%<term>%' abc is only supported on properly indexed columns",
+ "SELECT * FROM %s WHERE c1 LIKE ?",
+ "%abc%");
+ execute("SELECT * FROM %s WHERE c1 LIKE ?", "abc%");
+ execute("SELECT * FROM %s WHERE c1 LIKE ?", "abc");
+ assertInvalidMessage("v1 LIKE '%<term>' abc is only supported on properly indexed columns",
+ "SELECT * FROM %s WHERE v1 LIKE ?",
+ "%abc");
+ assertInvalidMessage("v1 LIKE '%<term>%' abc is only supported on properly indexed columns",
+ "SELECT * FROM %s WHERE v1 LIKE ?",
+ "%abc%");
+ execute("SELECT * FROM %s WHERE v1 LIKE ?", "abc%");
+ execute("SELECT * FROM %s WHERE v1 LIKE ?", "abc");
+
+ // contains mode indexes support suffix/contains/matches
+ assertInvalidMessage("c2 LIKE '<term>%' abc is only supported on properly indexed columns",
+ "SELECT * FROM %s WHERE c2 LIKE ?",
+ "abc%");
+ execute("SELECT * FROM %s WHERE c2 LIKE ?", "%abc");
+ execute("SELECT * FROM %s WHERE c2 LIKE ?", "%abc%");
+ execute("SELECT * FROM %s WHERE c2 LIKE ?", "abc");
+ assertInvalidMessage("v2 LIKE '<term>%' abc is only supported on properly indexed columns",
+ "SELECT * FROM %s WHERE v2 LIKE ?",
+ "abc%");
+ execute("SELECT * FROM %s WHERE v2 LIKE ?", "%abc");
+ execute("SELECT * FROM %s WHERE v2 LIKE ?", "%abc%");
+ execute("SELECT * FROM %s WHERE v2 LIKE ?", "abc");
+
+ // LIKE is not supported on indexes of non-literal values
+ // this is rejected before binding, so the value isn't available in the error message
+ assertInvalidMessage("LIKE restriction is only supported on properly indexed columns. v3 LIKE ? is not valid",
+ "SELECT * FROM %s WHERE v3 LIKE ?",
+ "%abc");
+ assertInvalidMessage("LIKE restriction is only supported on properly indexed columns. v3 LIKE ? is not valid",
+ "SELECT * FROM %s WHERE v3 LIKE ?",
+ "%abc%");
+ assertInvalidMessage("LIKE restriction is only supported on properly indexed columns. v3 LIKE ? is not valid",
+ "SELECT * FROM %s WHERE v3 LIKE ?",
+ "%abc%");
+ assertInvalidMessage("LIKE restriction is only supported on properly indexed columns. v3 LIKE ? is not valid",
+ "SELECT * FROM %s WHERE v3 LIKE ?",
+ "abc");
+ }
+
public void failInsert(String insertCQL, Object...args) throws Throwable
{
try
http://git-wip-us.apache.org/repos/asf/cassandra/blob/bdae4520/test/unit/org/apache/cassandra/cql3/validation/operations/SelectTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectTest.java
index c5feccb..077712e 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectTest.java
@@ -23,10 +23,10 @@ import java.util.UUID;
import org.junit.Test;
import junit.framework.Assert;
+import org.apache.cassandra.cql3.CQLTester;
import org.apache.cassandra.cql3.UntypedResultSet;
import org.apache.cassandra.cql3.restrictions.StatementRestrictions;
import org.apache.cassandra.utils.ByteBufferUtil;
-import org.apache.cassandra.cql3.CQLTester;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -2353,5 +2353,4 @@ public class SelectTest extends CQLTester
"SELECT * FROM %s WHERE c CONTAINS KEY ? ALLOW FILTERING",
unset());
}
-
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/bdae4520/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java
index 4b9c3f9..b3d641c 100644
--- a/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java
+++ b/test/unit/org/apache/cassandra/index/sasi/SASIIndexTest.java
@@ -1694,7 +1694,7 @@ public class SASIIndexTest
executeCQL(CLUSTERING_CF_NAME_1 ,"SELECT * FROM %s.%s WHERE location LIKE '%%' ALLOW FILTERING");
Assert.fail();
}
- catch (SyntaxException e)
+ catch (InvalidRequestException e)
{
Assert.assertTrue(e.getMessage().contains("empty"));
// expected
@@ -1705,7 +1705,7 @@ public class SASIIndexTest
executeCQL(CLUSTERING_CF_NAME_1 ,"SELECT * FROM %s.%s WHERE location LIKE '%%%%' ALLOW FILTERING");
Assert.fail();
}
- catch (SyntaxException e)
+ catch (InvalidRequestException e)
{
Assert.assertTrue(e.getMessage().contains("empty"));
// expected
http://git-wip-us.apache.org/repos/asf/cassandra/blob/bdae4520/test/unit/org/apache/cassandra/index/sasi/plan/OperationTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/index/sasi/plan/OperationTest.java b/test/unit/org/apache/cassandra/index/sasi/plan/OperationTest.java
index 22d5c88..52cee3b 100644
--- a/test/unit/org/apache/cassandra/index/sasi/plan/OperationTest.java
+++ b/test/unit/org/apache/cassandra/index/sasi/plan/OperationTest.java
@@ -577,7 +577,7 @@ public class OperationTest extends SchemaLoader
private static class SimpleExpression extends RowFilter.Expression
{
- protected SimpleExpression(ColumnDefinition column, Operator operator, ByteBuffer value)
+ SimpleExpression(ColumnDefinition column, Operator operator, ByteBuffer value)
{
super(column, operator, value);
}