[jira] [Commented] (CASSANDRA-5563) The CQL3 binary protocol does not allow a user to bind an empty buffer to signify the start of the token range

2013-05-13 Thread Aleksey Yeschenko (JIRA)

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

Aleksey Yeschenko commented on CASSANDRA-5563:
--

Steven is suggesting making token() function accept null (and native proto 
supports binding null) to make paging through rows possible in CQL3 using one 
single prepared query.

> The CQL3 binary protocol does not allow a user to bind an empty buffer to 
> signify the start of the token range
> --
>
> Key: CASSANDRA-5563
> URL: https://issues.apache.org/jira/browse/CASSANDRA-5563
> Project: Cassandra
>  Issue Type: Bug
>  Components: API
>Affects Versions: 1.2.0
>Reporter: Steven Lowenthal
>Assignee: Sylvain Lebresne
>Priority: Minor
> Fix For: 1.2.5
>
>
> Using CQL2 or CQL3 over thrift, one can issue a query which starts at the 
> beginning of the table by binding an empty buffer.  The same is true for CQL2 
> using calls like get_range_slice.   This is not allowed with the binary 
> protocol.  Here is working sample code for CQL3 over thrift:
> {code}
> CqlPreparedResult stmt = 
> _client.prepare_cql3_query(ByteBuffer.wrap("SELECT \" Sequence number\" from 
> \"nhanes52simple\" where TOKEN (\" Sequence number\") > TOKEN(?) limit 
> 15".getBytes()), Compression.NONE);
> // Bind empty buffer to get query to start at the beginning of 
> // the table
> ByteBuffer b = ByteBuffer.wrap(new byte[0]);
> bindVars.add(b);
> int cnt = 0;
> CqlResult result;
> do {
>   result =  _client.execute_prepared_cql3_query(stmt.itemId, bindVars, 
> ConsistencyLevel.ONE);
>   // Set up the next chunk, by setting the bind var to the last received 
> key
>   bindVars.set(0, ByteBuffer.wrap(result.getRows()
>   .get(result.getRows().size() - 
> 1).getColumns().get(0).getValue()));
>   // Count rows
>   cnt += result.getRows().size();
>   if (cnt > 100)
> Assert.fail("Running past the end of the table: cnt = " + cnt + ", 
> size() =  " + result.getRows().size());
> } while (result.getRows().size() >= CHUNK_SIZE);
> Assert.assertEquals("Wrong count", 100, cnt);
>   } 
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


[jira] [Commented] (CASSANDRA-5563) The CQL3 binary protocol does not allow a user to bind an empty buffer to signify the start of the token range

2013-05-13 Thread Steven Lowenthal (JIRA)

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

Steven Lowenthal commented on CASSANDRA-5563:
-

Code amended.   It does use token()

> The CQL3 binary protocol does not allow a user to bind an empty buffer to 
> signify the start of the token range
> --
>
> Key: CASSANDRA-5563
> URL: https://issues.apache.org/jira/browse/CASSANDRA-5563
> Project: Cassandra
>  Issue Type: Improvement
>  Components: API
>Affects Versions: 1.2.0
>Reporter: Steven Lowenthal
>Priority: Minor
> Fix For: 1.2.5
>
>
> Using CQL2 or CQL3 over thrift, one can issue a query which starts at the 
> beginning of the table by binding an empty buffer.  The same is true for CQL2 
> using calls like get_range_slice.   This is not allowed with the binary 
> protocol.  Here is working sample code for CQL3 over thrift:
> {code}
> CqlPreparedResult stmt = 
> _client.prepare_cql3_query(ByteBuffer.wrap("SELECT \" Sequence number\" from 
> \"nhanes52simple\" where TOKEN (\" Sequence number\") > TOKEN(?) limit 
> 15".getBytes()), Compression.NONE);
> // Bind empty buffer to get query to start at the beginning of 
> // the table
> ByteBuffer b = ByteBuffer.wrap(new byte[0]);
> bindVars.add(b);
> int cnt = 0;
> CqlResult result;
> do {
>   result =  _client.execute_prepared_cql3_query(stmt.itemId, bindVars, 
> ConsistencyLevel.ONE);
>   // Set up the next chunk, by setting the bind var to the last received 
> key
>   bindVars.set(0, ByteBuffer.wrap(result.getRows()
>   .get(result.getRows().size() - 
> 1).getColumns().get(0).getValue()));
>   // Count rows
>   cnt += result.getRows().size();
>   if (cnt > 100)
> Assert.fail("Running past the end of the table: cnt = " + cnt + ", 
> size() =  " + result.getRows().size());
> } while (result.getRows().size() >= CHUNK_SIZE);
> Assert.assertEquals("Wrong count", 100, cnt);
>   } 
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira