You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Jonathan Ellis (JIRA)" <ji...@apache.org> on 2013/05/13 21:31:15 UTC
[jira] [Updated] (CASSANDRA-5563) The CQL3 binary protocol does not
allow a user to bind an empty buffer to signify the start of the token
range
[ https://issues.apache.org/jira/browse/CASSANDRA-5563?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jonathan Ellis updated CASSANDRA-5563:
--------------------------------------
Description:
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}
// 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}
was:
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:
// 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);
}
Priority: Minor (was: Major)
Affects Version/s: (was: 1.2.3)
1.2.0
Fix Version/s: 1.2.5
You didn't include your statement. Is it using {{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}
> // 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