[ 
https://issues.apache.org/jira/browse/CASSANDRA-6875?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13986889#comment-13986889
 ] 

Tyler Hobbs commented on CASSANDRA-6875:
----------------------------------------

After thinking more closely about splitting up SelectStatement into two 
subclasses for single-column and multi-column restrictions, I'm not 100% 
convinced that's the best path.

For example, suppose you have a query like {{SELECT * FROM foo WHERE key=0 AND 
c1 > 0 AND (c1, c2) < (2, 3)}}.  We could a) require it to be written like 
{{(c1) > (0) AND (c1, c2) < (2, 3)}}, or b) accept that syntax and correctly 
reduce the expressions to a single multi-column slice restriction.  I'm not 
sure that option (b) would be clearer than keeping the restrictions separate.

I can also imagine us supporting something like {{SELECT ... WHERE key=0 AND 
c1=0 AND (c2, c3) > (1, 2)}} in the future.  Of course, we could also require 
this to be written differently ({{(c1, c2, c3) > (0, 1, 2) AND (c1) <= (0)}} or 
reduce it to a single multi-column slice restriction.  I'm just pointing out 
that this may become less clear than simply improving the bounds-building code 
(which I agree is needed).



> CQL3: select multiple CQL rows in a single partition using IN
> -------------------------------------------------------------
>
>                 Key: CASSANDRA-6875
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-6875
>             Project: Cassandra
>          Issue Type: Bug
>          Components: API
>            Reporter: Nicolas Favre-Felix
>            Assignee: Tyler Hobbs
>            Priority: Minor
>             Fix For: 2.0.8
>
>
> In the spirit of CASSANDRA-4851 and to bring CQL to parity with Thrift, it is 
> important to support reading several distinct CQL rows from a given partition 
> using a distinct set of "coordinates" for these rows within the partition.
> CASSANDRA-4851 introduced a range scan over the multi-dimensional space of 
> clustering keys. We also need to support a "multi-get" of CQL rows, 
> potentially using the "IN" keyword to define a set of clustering keys to 
> fetch at once.
> (reusing the same example\:)
> Consider the following table:
> {code}
> CREATE TABLE test (
>   k int,
>   c1 int,
>   c2 int,
>   PRIMARY KEY (k, c1, c2)
> );
> {code}
> with the following data:
> {code}
>  k | c1 | c2
> ---+----+----
>  0 |  0 |  0
>  0 |  0 |  1
>  0 |  1 |  0
>  0 |  1 |  1
> {code}
> We can fetch a single row or a range of rows, but not a set of them:
> {code}
> > SELECT * FROM test WHERE k = 0 AND (c1, c2) IN ((0, 0), (1,1)) ;
> Bad Request: line 1:54 missing EOF at ','
> {code}
> Supporting this syntax would return:
> {code}
>  k | c1 | c2
> ---+----+----
>  0 |  0 |  0
>  0 |  1 |  1
> {code}
> Being able to fetch these two CQL rows in a single read is important to 
> maintain partition-level isolation.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to