You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by xe...@apache.org on 2011/11/03 20:00:01 UTC
svn commit: r1197270 - in /cassandra/trunk: ./
src/java/org/apache/cassandra/cql/
Author: xedin
Date: Thu Nov 3 19:00:00 2011
New Revision: 1197270
URL: http://svn.apache.org/viewvc?rev=1197270&view=rev
Log:
recognize that "SELECT first ... *" isn't really "SELECT *"
patch by Pavel Yaskevich; reviewed by Jonathan Ellis for CASSANDRA-3445
Modified:
cassandra/trunk/CHANGES.txt
cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g
cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java
cassandra/trunk/src/java/org/apache/cassandra/cql/SelectExpression.java
cassandra/trunk/src/java/org/apache/cassandra/cql/SelectStatement.java
Modified: cassandra/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1197270&r1=1197269&r2=1197270&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Thu Nov 3 19:00:00 2011
@@ -2,7 +2,7 @@
* off-heap cache to use sun.misc.Unsafe instead of JNA (CASSANDRA-3271)
* EACH_QUORUM is only supported for writes (CASSANDRA-3272)
* replace compactionlock use in schema migration by checking CFS.isInvalidD
-
+ * recognize that "SELECT first ... *" isn't really "SELECT *" (CASSANDRA-3445)
1.0.2
* "defragment" rows for name-based queries under STCS (CASSANDRA-2503)
Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g?rev=1197270&r1=1197269&r2=1197270&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/Cql.g Thu Nov 3 19:00:00 2011
@@ -169,13 +169,14 @@ selectExpression returns [SelectExpressi
: {
int count = 10000;
boolean reversed = false;
+ boolean hasFirstSet = false;
}
- ( K_FIRST cols=INTEGER { count = Integer.parseInt($cols.text); } )?
+ ( K_FIRST { hasFirstSet = true; } cols=INTEGER { count = Integer.parseInt($cols.text); } )?
( K_REVERSED { reversed = true; } )?
- ( first=term { $expr = new SelectExpression(first, count, reversed); }
+ ( first=term { $expr = new SelectExpression(first, count, reversed, hasFirstSet); }
(',' next=term { $expr.and(next); })*
- | start=term RANGEOP finish=term { $expr = new SelectExpression(start, finish, count, reversed, false); }
- | '\*' { $expr = new SelectExpression(new Term(), new Term(), count, reversed, true); }
+ | start=term RANGEOP finish=term { $expr = new SelectExpression(start, finish, count, reversed, false, hasFirstSet); }
+ | '\*' { $expr = new SelectExpression(new Term(), new Term(), count, reversed, true, hasFirstSet); }
)
;
Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java?rev=1197270&r1=1197269&r2=1197270&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java Thu Nov 3 19:00:00 2011
@@ -587,7 +587,7 @@ public class QueryProcessor
List<Column> thriftColumns = new ArrayList<Column>();
if (select.isColumnRange())
{
- if (select.isWildcard())
+ if (select.isFullWildcard())
{
// prepend key
thriftColumns.add(new Column(metadata.getKeyName()).setValue(row.key.key).setTimestamp(-1));
Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/SelectExpression.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/SelectExpression.java?rev=1197270&r1=1197269&r2=1197270&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/SelectExpression.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/SelectExpression.java Thu Nov 3 19:00:00 2011
@@ -37,6 +37,7 @@ public class SelectExpression
private int numColumns = MAX_COLUMNS_DEFAULT;
private boolean reverseColumns = false;
+ private boolean hasFirstSet;
private final boolean wildcard;
private Term start, finish;
private List<Term> columns;
@@ -48,14 +49,17 @@ public class SelectExpression
* @param finish the finishing column name
* @param count the number of columns to limit the results to
* @param reverse true to reverse column order
+ * @param wildcard determines weather this statement is wildcard
+ * @param firstSet determines weather "FIRST" keyword was set
*/
- public SelectExpression(Term start, Term finish, int count, boolean reverse, boolean wildcard)
+ public SelectExpression(Term start, Term finish, int count, boolean reverse, boolean wildcard, boolean firstSet)
{
this.start = start;
this.finish = finish;
numColumns = count;
reverseColumns = reverse;
this.wildcard = wildcard;
+ hasFirstSet = firstSet;
}
/**
@@ -64,14 +68,16 @@ public class SelectExpression
* @param first the first (possibly only) column name to select on.
* @param count the number of columns to limit the results on
* @param reverse true to reverse column order
+ * @param firstSet determines weather "FIRST" keyword was set
*/
- public SelectExpression(Term first, int count, boolean reverse)
+ public SelectExpression(Term first, int count, boolean reverse, boolean firstSet)
{
wildcard = false;
columns = new ArrayList<Term>();
columns.add(first);
numColumns = count;
reverseColumns = reverse;
+ hasFirstSet = firstSet;
}
/**
@@ -114,6 +120,14 @@ public class SelectExpression
numColumns = limit;
}
+ /**
+ * @return weather expression includes "FIRST" keyword
+ */
+ public boolean hasFirstSet()
+ {
+ return hasFirstSet;
+ }
+
public Term getStart()
{
return start;
Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/SelectStatement.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/SelectStatement.java?rev=1197270&r1=1197269&r2=1197270&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/SelectStatement.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/SelectStatement.java Thu Nov 3 19:00:00 2011
@@ -90,7 +90,11 @@ public class SelectStatement
{
return expression.isWildcard();
}
-
+ public boolean isFullWildcard()
+ {
+ return expression.isWildcard() && !expression.hasFirstSet();
+ }
+
public List<Term> getColumnNames()
{
return expression.getColumns();