Java源码示例:com.datastax.oss.driver.api.core.cql.ResultSet
示例1
@Override
public DynamoDBResponse deleteTable(DeleteTableRequest deleteTableRequest) {
logger.info("deleting JSON table");
String keyspace = keyspaceName;
String table = deleteTableRequest.getTableName();
String statement = String.format("DROP TABLE %s.\"%s\";\n", keyspace, table);
ResultSet result = session().execute(statement);
if (result.wasApplied()) {
logger.info("deleted table " + table);
cassandraManager.refreshSchema();
TableDescription newTableDesc = this.getTableDescription(table, null,null);
DeleteTableResult createResult = (new DeleteTableResult()).withTableDescription(newTableDesc);
return new DynamoDBResponse(createResult, 200);
}
return null;
}
示例2
@Override
public DynamoDBResponse createTable(CreateTableRequest createTableRequest) throws IOException {
logger.info("creating JSON table");
String columnPairs = createTableRequest.getAttributeDefinitions().stream().map(this::attributeToPairs).collect(Collectors.joining(", "));
columnPairs += ",json_blob text";
String keyspace = keyspaceName;
String table = createTableRequest.getTableName();
String primaryKey = getPrimaryKey(createTableRequest.getKeySchema());
String statement = String.format("CREATE TABLE IF NOT EXISTS %s.\"%s\" ( %s, PRIMARY KEY %s);\n", keyspace, table, columnPairs, primaryKey);
ResultSet result = session().execute(statement);
if (result.wasApplied()) {
logger.info("created {} as {}", table, statement);
cassandraManager.refreshSchema();
TableDescription newTableDesc = this.getTableDescription(table, createTableRequest.getAttributeDefinitions(), createTableRequest.getKeySchema());
CreateTableResult createResult = (new CreateTableResult()).withTableDescription(newTableDesc);
return new DynamoDBResponse(createResult, 200);
}
return null;
}
示例3
/**
* Find existing row by primary key lock.name
*
* @param name lock name
* @return optional lock row or empty
*/
Optional<Lock> find(String name) {
SimpleStatement selectStatement = QueryBuilder.selectFrom(table)
.column(LOCK_UNTIL)
.column(LOCKED_AT)
.column(LOCKED_BY)
.whereColumn(LOCK_NAME).isEqualTo(literal(name))
.build()
.setConsistencyLevel(consistencyLevel);
ResultSet resultSet = cqlSession.execute(selectStatement);
Row row = resultSet.one();
if (row != null) {
return Optional.of(new Lock(row.getInstant(LOCK_UNTIL), row.getInstant(LOCKED_AT), row.getString(LOCKED_BY)));
} else {
return Optional.empty();
}
}
示例4
private static void createTable(CqlSession session, String keyspace, String tableName) {
ResultSet execute = session.execute("select table_name from system_schema.tables where keyspace_name = '"+keyspace+"';");
List<Row> all = execute.all();
boolean found = false;
for(Row row : all) {
String table = row.getString("table_name");
if (table.equalsIgnoreCase(tableName)) {
found = true;
break;
}
}
if (!found) {
session.execute(String.format(createTableTemplate, tableName));
LOGGER.debug("Table {} has been created", tableName);
}
}
示例5
@Override
public List<ActorSystemEventListener> getAll(ShardKey shardKey, ActorSystemEvent event) {
ResultSet resultSet = executeWithRetry(cassandraSession, selectStatement.bind(clusterName, shardKey.toString(), event.name()).setPageSize(Integer.MAX_VALUE), logger);
List<ActorSystemEventListener> resultList = new LinkedList<>();
for (Row resultRow : resultSet) {
for (int i = 0; i < resultRow.getColumnDefinitions().size(); i++) {
ByteBuffer resultBuffer = resultRow.getByteBuffer(i);
try {
byte[] resultBytes = new byte[requireNonNull(resultBuffer).remaining()];
resultBuffer.get(resultBytes);
resultList.add(ActorSystemEventListenerDeserializer.get().deserialize(resultBytes));
} catch(NullPointerException | IOException e) {
logger.error("IOException while deserializing ActorSystemEventListener",e);
}
}
}
return resultList;
}
示例6
@Override
public List<ScheduledMessage> getAll(ShardKey shardKey) {
ResultSet resultSet = executeWithRetry(cassandraSession, selectStatement.bind(clusterName, shardKey.toString()).setPageSize(Integer.MAX_VALUE), logger);
List<ScheduledMessage> resultList = new LinkedList<>();
for (Row resultRow : resultSet) {
for (int i = 0; i < resultRow.getColumnDefinitions().size(); i++) {
ByteBuffer resultBuffer = resultRow.getByteBuffer(i);
try {
byte[] resultBytes = new byte[requireNonNull(resultBuffer).remaining()];
resultBuffer.get(resultBytes);
resultList.add(scheduledMessageDeserializer.deserialize(resultBytes));
} catch (NullPointerException | IOException e) {
logger.error("IOException while deserializing ScheduledMessage", e);
}
}
}
return resultList;
}
示例7
private Map<TokenRange, Long> describeSplits(String keyspace, String table, TokenRange tokenRange, int splitSize, int splitSizeMb, CqlSession session) {
String query = String.format("SELECT mean_partition_size, partitions_count " +
"FROM %s.%s " +
"WHERE keyspace_name = ? AND table_name = ? AND range_start = ? AND range_end = ?",
SchemaConstants.SYSTEM_KEYSPACE_NAME,
SystemKeyspace.SIZE_ESTIMATES);
ResultSet resultSet = session.execute(session.prepare(query).bind(keyspace, table, tokenRange.getStart().toString(), tokenRange.getEnd().toString()));
Row row = resultSet.one();
long meanPartitionSize = 0;
long partitionCount = 0;
int splitCount = 0;
if (row != null) {
meanPartitionSize = row.getLong("mean_partition_size");
partitionCount = row.getLong("partitions_count");
splitCount = splitSizeMb > 0
? (int) (meanPartitionSize * partitionCount / splitSizeMb / 1024 / 1024)
: (int) (partitionCount / splitSize);
}
// If we have no data on this split or the size estimate is 0,
// return the full split i.e., do not sub-split
// Assume smallest granularity of partition count available from CASSANDRA-7688
if (splitCount == 0) {
Map<TokenRange, Long> wrappedTokenRange = new HashMap<>();
wrappedTokenRange.put(tokenRange, (long) 128);
return wrappedTokenRange;
}
List<TokenRange> splitRanges = tokenRange.splitEvenly(splitCount);
Map<TokenRange, Long> rangesWithLength = new HashMap<>();
for (TokenRange range : splitRanges) {
rangesWithLength.put(range, partitionCount / splitCount);
}
return rangesWithLength;
}
示例8
public RowIterator() {
AbstractType type = partitioner.getTokenValidator();
ResultSet rs = session.execute(session.prepare(cqlQuery).bind(type.compose(type.fromString(split.getStartToken())), type.compose(type.fromString(split.getEndToken()))));
for (ColumnMetadata meta : session.getMetadata().getKeyspace(quote(keyspace)).get().getTable(quote(cfName)).get().getPartitionKey()) {
partitionBoundColumns.put(meta.getName().toString(), Boolean.TRUE);
}
rows = rs.iterator();
}
示例9
ResultSet executeOnSession(Statement statement) {
try {
this.semaphore.acquire();
return this.session.execute(statement);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new JanusGraphException("Interrupted while acquiring resource to execute query on Session.");
} finally {
this.semaphore.release();
}
}
示例10
CQLResultSetKeyIterator(SliceQuery sliceQuery, CQLColValGetter getter, ResultSet resultSet) {
this.sliceQuery = sliceQuery;
this.getter = getter;
this.iterator = Iterator.ofAll(resultSet.iterator())
.peek(row -> {
this.currentRow = row;
this.currentKey = StaticArrayBuffer.of(row.getByteBuffer(CQLKeyColumnValueStore.KEY_COLUMN_NAME));
});
}
示例11
@Override
public EntryList getSlice(KeySliceQuery query, StoreTransaction txh) {
ResultSet result = this.storeManager.executeOnSession(this.getSlice.bind()
.setByteBuffer(KEY_BINDING, query.getKey().asByteBuffer())
.setByteBuffer(SLICE_START_BINDING, query.getSliceStart().asByteBuffer())
.setByteBuffer(SLICE_END_BINDING, query.getSliceEnd().asByteBuffer())
.setInt(LIMIT_BINDING, query.getLimit())
.setConsistencyLevel(getTransaction(txh).getReadConsistencyLevel()));
return fromResultSet(result, this.getter);
}
示例12
private static EntryList fromResultSet(ResultSet resultSet, StaticArrayEntry.GetColVal<Tuple3<StaticBuffer, StaticBuffer, Row>, StaticBuffer> getter) {
Lazy<ArrayList<Row>> lazyList = Lazy.of(() -> Lists.newArrayList(resultSet));
// Use the Iterable overload of of ByteBuffer as it's able to allocate
// the byte array up front.
// To ensure that the Iterator instance is recreated, it is created
// within the closure otherwise
// the same iterator would be reused and would be exhausted.
return StaticArrayEntryList.ofStaticBuffer(() -> Iterator.ofAll(lazyList.get()).map(row -> Tuple.of(
StaticArrayBuffer.of(row.getByteBuffer(COLUMN_COLUMN_NAME)),
StaticArrayBuffer.of(row.getByteBuffer(VALUE_COLUMN_NAME)),
row)),
getter);
}
示例13
@Test
public void test() {
Marshaller marshaller = new JsonMarshaller();
CassandraAppender appender = new CassandraAppender();
Dictionary<String, Object> config = new Hashtable<>();
config.put(CassandraAppender.CASSANDRA_PORT_PROPERTY, CASSANDRA_HOST);
config.put(CassandraAppender.CASSANDRA_PORT_PROPERTY, CASSANDRA_PORT);
config.put(CassandraAppender.KEYSPACE_PROPERTY, KEYSPACE);
config.put(CassandraAppender.TABLE_PROPERTY, TABLE_NAME);
appender.marshaller = marshaller;
appender.activate(config);
Map<String, Object> properties = new HashMap<>();
properties.put(EventConstants.TIMESTAMP, TIMESTAMP);
Event event = new Event(TOPIC, properties);
appender.handleEvent(event);
appender.deactivate();
CqlSession session = getSession();
ResultSet execute = session.execute("SELECT * FROM "+ KEYSPACE+"."+TABLE_NAME+";");
List<Row> all = execute.all();
Assert.assertEquals(1, all.size());
assertThat(all, not(nullValue()));
assertThat(all.get(0).getInstant("timeStamp").toEpochMilli(), is(TIMESTAMP));
session.close();
}
示例14
@Override
public void activate() {
super.activate();
if (isRemembering() || isHashing()) {
CqlSession session = getCassandra().getSession();
List<DocKey> strandedDocs = new ArrayList<>();
PreparedStatement preparedQuery = getCassandra().getPreparedQuery(RESET_PROCESSING_Q);
BoundStatement statement = preparedQuery.bind(getName());
ResultSet procRs = session.execute(statement);
strandedDocs.addAll(procRs.all().stream()
.map((row) -> new DocKey(row.getString(0), row.getString(1))).collect(Collectors.toList()));
preparedQuery = getCassandra().getPreparedQuery(RESET_ERROR_Q);
statement = preparedQuery.bind(getName());
ResultSet errorRs = session.execute(statement);
strandedDocs.addAll(errorRs.all().stream()
.map((row) -> new DocKey(row.getString(0), row.getString(1))).collect(Collectors.toList()));
preparedQuery = getCassandra().getPreparedQuery(RESET_BATCHED_Q);
statement = preparedQuery.bind(getName());
ResultSet batchedRs = session.execute(statement);
strandedDocs.addAll(batchedRs.all().stream()
.map((row) -> new DocKey(row.getString(0), row.getString(1))).collect(Collectors.toList()));
preparedQuery = getCassandra().getPreparedQuery(RESET_DOCS_U);
// todo: batch
for (DocKey docId : strandedDocs) {
statement = preparedQuery.bind(docId.docid, docId.scanner);
session.execute(statement);
}
}
}
示例15
private ResultSet executeStatement(SimpleStatement statement, String keyspace) {
if (keyspace != null) {
statement.setKeyspace(CqlIdentifier.fromCql(keyspace));
}
return session.execute(statement);
}
示例16
private Row internalGet(final ShardKey shard,final String actorId) {
// log a warning when we exceed the readExecutionThreshold
final long startTime = currentTimeMillis();
try {
ResultSet resultSet = executeWithRetry(cassandraSession, selectStatement.bind(clusterName, shard.toString(), actorId), logger);
return resultSet.one();
} finally {
final long endTime = currentTimeMillis();
if((endTime - startTime) > readExecutionThresholdMillis) {
logger.warn("Cassandra read operation took {} msecs for actorId [{}] on shard [{}]", (endTime - startTime), actorId, shard);
}
}
}
示例17
@Override
public DynamoDBResponse query(QueryRequest payload)
{
logger.debug("query against JSON table");
ResultSet resultSet;
if (payload.getKeyConditionExpression() != null)
resultSet = queryByKeyExpression(payload);
else if (payload.getKeyConditions() != null)
resultSet = queryByKeyCondition(payload);
else
throw new UnsupportedOperationException("un-supported query type");
try
{
Collection<Map<String, AttributeValue>> items = new HashSet<Map<String, AttributeValue>>();
for (Row row : resultSet)
{
AttributeValue item;
ColumnDefinitions colDefs = row.getColumnDefinitions();
Map<String, AttributeValue> keysSet = new HashMap<>();
for (ColumnDefinition colDef : colDefs)
{
if (colDef.getName().asInternal().equals("json_blob"))
continue;
item = rowToAV(colDef, row);
keysSet.put(colDef.getName().asInternal(), item);
}
Map<String, AttributeValue> itemSet = blobToItemSet(row.getString("json_blob"));
itemSet.putAll(keysSet);
if (payload.getFilterExpression() != null){
if(!matchesFilterExpression(itemSet, payload)){
continue;
}
}
items.add(itemSet);
}
QueryResult queryResult = new QueryResult();
queryResult.setItems(items);
return new DynamoDBResponse(queryResult, 200);
} catch (Throwable e) {
logger.warn("Query error", e);
DynamoDBResponse ddbResponse = new DynamoDBResponse(null, 500);
String msg= String.format("query failed with error: %s", e.getMessage());
ddbResponse.setError(msg);
return ddbResponse;
}
}
示例18
@Override
public DynamoDBResponse deleteItem(DeleteItemRequest dir) {
logger.debug("delete item into JSON table");
String tableName = dir.getTableName();
TableDef tableDef = cassandraManager.getTableDef(tableName);
PreparedStatement deleteStatement = tableDef.getDeleteStatement();
AttributeDefinition partitionKeyAttr = tableDef.getPartitionKey();
Optional<AttributeDefinition> maybeCusteringKeyAttr = tableDef.getClusteringKey();
Map<String, AttributeValue> keys = dir.getKey();
Object partitionKeyValue = getAttributeObject(
ScalarAttributeType.fromValue(partitionKeyAttr.getAttributeType()),
keys.get(partitionKeyAttr.getAttributeName())
);
BoundStatement boundStatement;
if (maybeCusteringKeyAttr.isPresent())
{
Object clusteringKeyValue = getAttributeObject(
ScalarAttributeType.fromValue(maybeCusteringKeyAttr.get().getAttributeType()),
keys.get(maybeCusteringKeyAttr.get().getAttributeName())
);
boundStatement = deleteStatement.bind(partitionKeyValue, clusteringKeyValue);
}
else
{
boundStatement = deleteStatement.bind(partitionKeyValue);
}
ResultSet result = session().execute(boundStatement);
if (result.wasApplied()){
DeleteItemResult dres = new DeleteItemResult();
return new DynamoDBResponse(dres, 200);
}
else return null;
}
示例19
@Override
public DynamoDBResponse getItem(GetItemRequest getItemRequest) {
logger.debug("get item from JSON table");
String tableName = getItemRequest.getTableName();
TableDef tableDef = cassandraManager.getTableDef(tableName);
PreparedStatement selectStatement = tableDef.getQueryRowStatement();
AttributeDefinition partitionKeyDef = tableDef.getPartitionKey();
Optional<AttributeDefinition> clusteringKeyDef = tableDef.getClusteringKey();
Map<String, AttributeValue> keys = getItemRequest.getKey();
AttributeValue partitionKey = keys.get(partitionKeyDef.getAttributeName());
AttributeValue clusteringKey = clusteringKeyDef.isPresent() ?
keys.get(clusteringKeyDef.get().getAttributeName()) : null;
ScalarAttributeType partitionKeyType = ScalarAttributeType.valueOf(partitionKeyDef.getAttributeType());
ScalarAttributeType clusteringKeyType = clusteringKeyDef.isPresent() ?
ScalarAttributeType.valueOf(clusteringKeyDef.get().getAttributeType()) : null;
BoundStatement boundStatement = clusteringKey == null ?
selectStatement.bind(getAttributeObject(partitionKeyType, partitionKey)) :
selectStatement.bind(getAttributeObject(partitionKeyType, partitionKey),
getAttributeObject(clusteringKeyType, clusteringKey));
ResultSet result = session().execute(boundStatement);
GetItemResult gir = new GetItemResult();
Map<String, AttributeValue> item = new HashMap<>();
ColumnDefinitions colDefs = result.getColumnDefinitions();
Row row = result.one();
//Case that nothing is found
if (row == null)
return new DynamoDBResponse(null, 200);
Map<String, AttributeValue> keysSet = new HashMap<>();
for (ColumnDefinition colDef : colDefs)
{
if (colDef.getName().asInternal().equals("json_blob"))
continue;
keysSet.put(colDef.getName().asInternal(), rowToAV(colDef, row));
}
try
{
item = blobToItemSet(row.getString("json_blob"));
item.putAll(keysSet);
gir.withItem(item);
return new DynamoDBResponse(gir, 200);
} catch (IOException e) {
DynamoDBResponse ddbResponse = new DynamoDBResponse(gir, 500);
String msg = String.format("GetItem failed", getItemRequest.getTableName());
ddbResponse.setError(msg);
return ddbResponse;
}
}
示例20
private TableResponseContainer executeCql(String finalCql, String datacenter, String cassandraHost, int port, String keyspace, String username, String password) {
TableResponseContainer response = new TableResponseContainer();
RowSetResponseAspect rowSetAspect = new RowSetResponseAspect();
var builder = CqlSession.builder()
.withLocalDatacenter(datacenter)
.addContactPoint(InetSocketAddress.createUnresolved(cassandraHost, port));
if (StringUtils.isNotBlank(keyspace)) {
builder = builder.withKeyspace("\"" + keyspace + "\"");
}
if (StringUtils.isNotBlank(username)) {
builder = builder.withAuthCredentials(username, password == null ? "" : password);
}
long requestTimeInMs = 0;
try (CqlSession session = builder.build()) {
long startTime = System.currentTimeMillis();
ResultSet rs = session.execute(finalCql);
requestTimeInMs = System.currentTimeMillis() - startTime;
var columnNames = Streams.stream(rs.getColumnDefinitions())
.map(cd -> cd.getName().asCql(true))
.collect(Collectors.toList());
var rows = new LinkedList<List<String>>();
for (Row row : rs) {
List<String> rowValues = new LinkedList<>();
for(int c = 0; c < columnNames.size(); ++c){
var value = row.getObject(c);
rowValues.add(value != null ? value.toString() : "NULL");
}
rows.add(rowValues);
}
rowSetAspect.setColumnNames(columnNames);
rowSetAspect.setRows(rows);
}
response.getAspects().add(rowSetAspect);
response.getStatusInformations().complete(Map.of(
"Rows", ""+ rowSetAspect.getRows().size(),
"Time", requestTimeInMs + "ms"));
return response;
}
示例21
@Override
public ResultSet execute(String query) {
Objects.requireNonNull(query, "'query' must not be null");
return this.session.execute(query);
}
示例22
@Override
public ResultSet execute(String query, Object... values) {
Objects.requireNonNull(query, "'query' must not be null");
Objects.requireNonNull(values, "'values' must not be null");
return this.session.execute(SimpleStatement.newInstance(query, values));
}
示例23
/**
* What to do when a document has been recognized as required for indexing.
*
* @param doc The document to be processed
*/
public void docFound(Document doc) {
log.trace("{} found doc: {}", getName(), doc.getId());
String id = doc.getId();
Function<String, String> idFunction = getIdFunction();
String result = idFunction.apply(id);
String idField = doc.getIdField();
doc.removeAll(idField);
doc.put(idField, result);
id = doc.getId();
String status = null;
String md5 = null;
if (isRemembering()) {
PreparedStatement preparedQuery = getCassandra().getPreparedQuery(FTI_CHECK_Q);
CqlSession session = getCassandra().getSession();
ResultSet statusRs = session.execute(preparedQuery.bind(id, getName()));
if (statusRs.getAvailableWithoutFetching() > 0) {
if (statusRs.getAvailableWithoutFetching() > 1 || !statusRs.isFullyFetched()) {
log.error("FATAL: duplicate primary keys in cassandra table??");
throw new RuntimeException("VERY BAD: duplicate primary keys in FTI table?");
} else {
Row next = statusRs.all().iterator().next();
status = next.getString(0);
log.trace("Found '{}' with status {}", id, status);
if (isHashing()) {
md5 = next.getString(1);
}
}
}
}
// written with negated and's so I can defer doc.getHash() until we are sure we
// need to check the hash.
if (isRemembering() && // easier to read, let jvm optimize this check out
status != null && // A status was found so we have seen this before
Status.valueOf(status) != Status.DIRTY && // not marked dirty
!heuristicDirty(doc) // not dirty by subclass logic
) {
if (!isHashing()) {
log.trace("{} ignoring previously seen document {}", getName(), id);
return;
}
if (md5 != null) {
String hash = doc.getHash();
if (md5.equals(hash)) {
log.trace("{} ignoring document with previously seen content {}", getName(), id);
return;
}
}
}
sendToNext(doc);
}
示例24
/**
* Retrieve the Cassandra release version.
*
* @param session must not be {@literal null}.
* @return the release {@link Version}.
*/
public static Version getReleaseVersion(CqlSession session) {
Assert.notNull(session, "Session must not be null");
ResultSet resultSet = session.execute("SELECT release_version FROM system.local;");
Row row = resultSet.one();
return Version.parse(row.getString(0));
}
示例25
public List<Video> selectAll(String keyspace) {
Select select = QueryBuilder.selectFrom(TABLE_NAME).all();
ResultSet resultSet = executeStatement(select.build(), keyspace);
List<Video> result = new ArrayList<>();
resultSet.forEach(x -> result.add(
new Video(x.getUuid("video_id"), x.getString("title"), x.getInstant("creation_date"))
));
return result;
}