Repository: cassandra Updated Branches: refs/heads/trunk d4bf6d328 -> 5f643ffcc
Backport first patch of 6975 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/362e5480 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/362e5480 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/362e5480 Branch: refs/heads/trunk Commit: 362e54803434053fea25f874f64c69bdc1db78da Parents: 2635632 Author: Sylvain Lebresne <sylv...@datastax.com> Authored: Wed May 14 14:25:29 2014 +0200 Committer: Sylvain Lebresne <sylv...@datastax.com> Committed: Thu May 22 14:41:53 2014 +0200 ---------------------------------------------------------------------- .../org/apache/cassandra/cql3/CQLStatement.java | 2 +- .../apache/cassandra/cql3/QueryProcessor.java | 2 +- .../statements/AuthenticationStatement.java | 2 +- .../cql3/statements/AuthorizationStatement.java | 2 +- .../cql3/statements/BatchStatement.java | 4 +- .../cql3/statements/ModificationStatement.java | 4 +- .../statements/SchemaAlteringStatement.java | 2 +- .../cql3/statements/SelectStatement.java | 47 ++++++++++---------- .../cql3/statements/TruncateStatement.java | 2 +- .../cassandra/cql3/statements/UseStatement.java | 2 +- 10 files changed, 34 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/362e5480/src/java/org/apache/cassandra/cql3/CQLStatement.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/CQLStatement.java b/src/java/org/apache/cassandra/cql3/CQLStatement.java index 81cd2b2..a1642ef 100644 --- a/src/java/org/apache/cassandra/cql3/CQLStatement.java +++ b/src/java/org/apache/cassandra/cql3/CQLStatement.java @@ -57,5 +57,5 @@ public interface CQLStatement * * @param state the current query state */ - public ResultMessage executeInternal(QueryState state) throws RequestValidationException, RequestExecutionException; + public ResultMessage executeInternal(QueryState state, QueryOptions options) throws RequestValidationException, RequestExecutionException; } http://git-wip-us.apache.org/repos/asf/cassandra/blob/362e5480/src/java/org/apache/cassandra/cql3/QueryProcessor.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/QueryProcessor.java b/src/java/org/apache/cassandra/cql3/QueryProcessor.java index 15ee59f..30d1bd7 100644 --- a/src/java/org/apache/cassandra/cql3/QueryProcessor.java +++ b/src/java/org/apache/cassandra/cql3/QueryProcessor.java @@ -205,7 +205,7 @@ public class QueryProcessor implements QueryHandler state.setKeyspace(Keyspace.SYSTEM_KS); CQLStatement statement = getStatement(query, state).statement; statement.validate(state); - ResultMessage result = statement.executeInternal(qState); + ResultMessage result = statement.executeInternal(qState, QueryOptions.DEFAULT); if (result instanceof ResultMessage.Rows) return new UntypedResultSet(((ResultMessage.Rows)result).result); else http://git-wip-us.apache.org/repos/asf/cassandra/blob/362e5480/src/java/org/apache/cassandra/cql3/statements/AuthenticationStatement.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/AuthenticationStatement.java b/src/java/org/apache/cassandra/cql3/statements/AuthenticationStatement.java index 5fcf085..b47dd92 100644 --- a/src/java/org/apache/cassandra/cql3/statements/AuthenticationStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/AuthenticationStatement.java @@ -45,7 +45,7 @@ public abstract class AuthenticationStatement extends ParsedStatement implements public abstract ResultMessage execute(ClientState state) throws RequestExecutionException, RequestValidationException; - public ResultMessage executeInternal(QueryState state) + public ResultMessage executeInternal(QueryState state, QueryOptions options) { // executeInternal is for local query only, thus altering users doesn't make sense and is not supported throw new UnsupportedOperationException(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/362e5480/src/java/org/apache/cassandra/cql3/statements/AuthorizationStatement.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/AuthorizationStatement.java b/src/java/org/apache/cassandra/cql3/statements/AuthorizationStatement.java index db4581e..2c7f2cb 100644 --- a/src/java/org/apache/cassandra/cql3/statements/AuthorizationStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/AuthorizationStatement.java @@ -47,7 +47,7 @@ public abstract class AuthorizationStatement extends ParsedStatement implements public abstract ResultMessage execute(ClientState state) throws RequestValidationException, RequestExecutionException; - public ResultMessage executeInternal(QueryState state) + public ResultMessage executeInternal(QueryState state, QueryOptions options) { // executeInternal is for local query only, thus altering permission doesn't make sense and is not supported throw new UnsupportedOperationException(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/362e5480/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java b/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java index 6a1201b..875e41c 100644 --- a/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/BatchStatement.java @@ -327,11 +327,11 @@ public class BatchStatement implements CQLStatement, MeasurableForPreparedCache return new ResultMessage.Rows(ModificationStatement.buildCasResultSet(ksName, key, cfName, result, columnsWithConditions, true)); } - public ResultMessage executeInternal(QueryState queryState) throws RequestValidationException, RequestExecutionException + public ResultMessage executeInternal(QueryState queryState, QueryOptions options) throws RequestValidationException, RequestExecutionException { assert !hasConditions; - for (IMutation mutation : getMutations(new PreparedBatchVariables(Collections.<ByteBuffer>emptyList()), true, null, queryState.getTimestamp())) + for (IMutation mutation : getMutations(new PreparedBatchVariables(options.getValues()), true, null, queryState.getTimestamp())) mutation.apply(); return null; } http://git-wip-us.apache.org/repos/asf/cassandra/blob/362e5480/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java index 448722e..b1e4561 100644 --- a/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java @@ -671,12 +671,12 @@ public abstract class ModificationStatement implements CQLStatement, MeasurableF return builder.build(); } - public ResultMessage executeInternal(QueryState queryState) throws RequestValidationException, RequestExecutionException + public ResultMessage executeInternal(QueryState queryState, QueryOptions options) throws RequestValidationException, RequestExecutionException { if (hasConditions()) throw new UnsupportedOperationException(); - for (IMutation mutation : getMutations(Collections.<ByteBuffer>emptyList(), true, null, queryState.getTimestamp())) + for (IMutation mutation : getMutations(options.getValues(), true, null, queryState.getTimestamp())) mutation.apply(); return null; } http://git-wip-us.apache.org/repos/asf/cassandra/blob/362e5480/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java b/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java index 337e8dc..94df854 100644 --- a/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/SchemaAlteringStatement.java @@ -73,7 +73,7 @@ public abstract class SchemaAlteringStatement extends CFStatement implements CQL return new ResultMessage.SchemaChange(changeType(), keyspace(), tableName); } - public ResultMessage executeInternal(QueryState state) + public ResultMessage executeInternal(QueryState state, QueryOptions options) { // executeInternal is for local query only, thus altering schema is not supported throw new UnsupportedOperationException(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/362e5480/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java index 6b4309f..92bc99c 100644 --- a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java @@ -194,18 +194,8 @@ public class SelectStatement implements CQLStatement, MeasurableForPreparedCache cl.validateForRead(keyspace()); int limit = getLimit(variables); - int limitForQuery = updateLimitForQuery(limit); long now = System.currentTimeMillis(); - Pageable command; - if (isKeyRange || usesSecondaryIndexing) - { - command = getRangeCommand(variables, limitForQuery, now); - } - else - { - List<ReadCommand> commands = getSliceCommands(variables, limitForQuery, now); - command = commands == null ? null : new Pageable.ReadCommands(commands); - } + Pageable command = getPageableCommand(options, limit, now); int pageSize = options.getPageSize(); // A count query will never be paged for the user, but we always page it internally to avoid OOM. @@ -237,6 +227,21 @@ public class SelectStatement implements CQLStatement, MeasurableForPreparedCache } } + private Pageable getPageableCommand(QueryOptions options, int limit, long now) throws RequestValidationException + { + int limitForQuery = updateLimitForQuery(limit); + if (isKeyRange || usesSecondaryIndexing) + return getRangeCommand(options.getValues(), limitForQuery, now); + + List<ReadCommand> commands = getSliceCommands(options.getValues(), limitForQuery, now); + return commands == null ? null : new Pageable.ReadCommands(commands); + } + + public Pageable getPageableCommand(QueryOptions options) throws RequestValidationException + { + return getPageableCommand(options, getLimit(options.getValues()), System.currentTimeMillis()); + } + private ResultMessage.Rows execute(Pageable command, ConsistencyLevel cl, List<ByteBuffer> variables, int limit, long now) throws RequestValidationException, RequestExecutionException { List<Row> rows; @@ -288,23 +293,17 @@ public class SelectStatement implements CQLStatement, MeasurableForPreparedCache return rows; } - public ResultMessage.Rows executeInternal(QueryState state) throws RequestExecutionException, RequestValidationException + public ResultMessage.Rows executeInternal(QueryState state, QueryOptions options) throws RequestExecutionException, RequestValidationException { List<ByteBuffer> variables = Collections.emptyList(); int limit = getLimit(variables); - int limitForQuery = updateLimitForQuery(limit); long now = System.currentTimeMillis(); - List<Row> rows; - if (isKeyRange || usesSecondaryIndexing) - { - RangeSliceCommand command = getRangeCommand(variables, limitForQuery, now); - rows = command == null ? Collections.<Row>emptyList() : command.executeLocally(); - } - else - { - List<ReadCommand> commands = getSliceCommands(variables, limitForQuery, now); - rows = commands == null ? Collections.<Row>emptyList() : readLocally(keyspace(), commands); - } + Pageable command = getPageableCommand(options, limit, now); + List<Row> rows = command == null + ? Collections.<Row>emptyList() + : (command instanceof Pageable.ReadCommands + ? readLocally(keyspace(), ((Pageable.ReadCommands)command).commands) + : ((RangeSliceCommand)command).executeLocally()); return processResults(rows, variables, limit, now); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/362e5480/src/java/org/apache/cassandra/cql3/statements/TruncateStatement.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/TruncateStatement.java b/src/java/org/apache/cassandra/cql3/statements/TruncateStatement.java index 30e57d5..ef1c4a4 100644 --- a/src/java/org/apache/cassandra/cql3/statements/TruncateStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/TruncateStatement.java @@ -77,7 +77,7 @@ public class TruncateStatement extends CFStatement implements CQLStatement return null; } - public ResultMessage executeInternal(QueryState state) + public ResultMessage executeInternal(QueryState state, QueryOptions options) { throw new UnsupportedOperationException(); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/362e5480/src/java/org/apache/cassandra/cql3/statements/UseStatement.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/UseStatement.java b/src/java/org/apache/cassandra/cql3/statements/UseStatement.java index ee70f9d..efda72d 100644 --- a/src/java/org/apache/cassandra/cql3/statements/UseStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/UseStatement.java @@ -59,7 +59,7 @@ public class UseStatement extends ParsedStatement implements CQLStatement return new ResultMessage.SetKeyspace(keyspace); } - public ResultMessage executeInternal(QueryState state) + public ResultMessage executeInternal(QueryState state, QueryOptions options) { // Internal queries are exclusively on the system keyspace and 'use' is thus useless throw new UnsupportedOperationException();