/** * Executes the query in {@code context}. {@code statement.executeQuery(context)} is exactly * equivalent to {@code context.executeQuery(statement)}. * * @see ReadContext#executeQuery(Statement, Options.QueryOption...) */ public ResultSet executeQuery(ReadContext context, Options.QueryOption... options) { return context.executeQuery(this, options); }
@Override public ResultSet executeQuery(Statement statement, QueryOption... options) { return wrap(delegate.executeQuery(statement, options)); }
ResultSet executeQuery() { // [START read_context_execute_query] // Rows without an explicit value for MarketingBudget will have a MarketingBudget equal to // null. ReadContext readContext = dbClient.singleUse(); ResultSet resultSet = readContext.executeQuery( Statement.of("SELECT SingerId, AlbumId, MarketingBudget, LastUpdateTime FROM Albums")); // [END read_context_execute_query] return resultSet; }
private void mockKeepAlive(Session session) { ReadContext context = mock(ReadContext.class); ResultSet resultSet = mock(ResultSet.class); when(session.singleUse(any(TimestampBound.class))).thenReturn(context); when(context.executeQuery(any(Statement.class))).thenReturn(resultSet); }
private void keepAlive() { markUsed(); delegate .singleUse(TimestampBound.ofMaxStaleness(60, TimeUnit.SECONDS)) .executeQuery(Statement.newBuilder("SELECT 1").build()) .next(); }
private Status readUsingQuery( String table, String key, Set<String> fields, Map<String, ByteIterator> result) { Statement query; Iterable<String> columns = fields == null ? STANDARD_FIELDS : fields; if (fields == null || fields.size() == fieldCount) { query = Statement.newBuilder(standardQuery).bind("key").to(key).build(); } else { Joiner joiner = Joiner.on(','); query = Statement.newBuilder("SELECT ") .append(joiner.join(fields)) .append(" FROM ") .append(table) .append(" WHERE id=@key") .bind("key").to(key) .build(); } try (ResultSet resultSet = dbClient.singleUse(timestampBound).executeQuery(query)) { resultSet.next(); decodeStruct(columns, resultSet, result); if (resultSet.next()) { throw new Exception("Expected exactly one row for each read."); } return Status.OK; } catch (Exception e) { LOGGER.log(Level.INFO, "readUsingQuery()", e); return Status.ERROR; } }
final ResultSet mockResult = mock(ResultSet.class); when(session.singleUse(any(TimestampBound.class))).thenReturn(mockContext); when(mockContext.executeQuery(any(Statement.class))) .thenAnswer( new Answer<ResultSet>() {
spanner.getDatabaseClient(DatabaseId.of(options.getProjectId(), instanceId, databaseId)); try (ResultSet resultSet = dbClient.singleUse().executeQuery(Statement.of("SELECT 1"))) { System.out.println("\n\nResults:");
private Status scanUsingQuery( String table, String startKey, int recordCount, Set<String> fields, Vector<HashMap<String, ByteIterator>> result) { Iterable<String> columns = fields == null ? STANDARD_FIELDS : fields; Statement query; if (fields == null || fields.size() == fieldCount) { query = Statement.newBuilder(standardScan).bind("startKey").to(startKey).bind("count").to(recordCount).build(); } else { Joiner joiner = Joiner.on(','); query = Statement.newBuilder("SELECT ") .append(joiner.join(fields)) .append(" FROM ") .append(table) .append(" WHERE id>=@startKey LIMIT @count") .bind("startKey").to(startKey) .bind("count").to(recordCount) .build(); } try (ResultSet resultSet = dbClient.singleUse(timestampBound).executeQuery(query)) { while (resultSet.next()) { HashMap<String, ByteIterator> row = new HashMap<>(); decodeStruct(columns, resultSet, row); result.add(row); } return Status.OK; } catch (Exception e) { LOGGER.log(Level.INFO, "scanUsingQuery()", e); return Status.ERROR; } }
@Test public void query() { try (ResultSet resultSet = client .singleUse() .executeQuery( Statement.of( "SELECT Key, Data, Fingerprint, Size FROM " + TABLE_NAME + " ORDER BY Key"))) { validate(resultSet); } }
@Test public void queryWithSmallPrefetchChunks() { try (ResultSet resultSet = client .singleUse() .executeQuery( Statement.of( "SELECT Key, Data, Fingerprint, Size FROM " + TABLE_NAME + " ORDER BY Key"), Options.prefetchChunks(1))) { validate(resultSet); } }
@Override public Struct read(ReadContext ctx, String key) { ResultSet resultSet = ctx.executeQuery( Statement.newBuilder("SELECT V FROM T WHERE K = @key") .bind("key") .to(key) .build()); assertThat(resultSet.next()).isTrue(); Struct row = resultSet.getCurrentRowAsStruct(); assertThat(resultSet.next()).isFalse(); return row; } });
static void query(DatabaseClient dbClient) { // singleUse() can be used to execute a single read or query against Cloud Spanner. ResultSet resultSet = dbClient .singleUse() .executeQuery(Statement.of("SELECT SingerId, AlbumId, AlbumTitle FROM Albums")); while (resultSet.next()) { System.out.printf( "%d %d %s\n", resultSet.getLong(0), resultSet.getLong(1), resultSet.getString(2)); } } // [END spanner_query_data]
static void querySingersTable(DatabaseClient dbClient) { ResultSet resultSet = dbClient .singleUse() .executeQuery( Statement.of( "SELECT SingerId, FirstName, LastName FROM Singers")); while (resultSet.next()) { System.out.printf( "%s %s %s\n", resultSet.getLong("SingerId"), resultSet.getString("FirstName"), resultSet.getString("LastName")); } }
static void queryMarketingBudget(DatabaseClient dbClient) { // Rows without an explicit value for MarketingBudget will have a MarketingBudget equal to // null. ResultSet resultSet = dbClient .singleUse() .executeQuery(Statement.of("SELECT SingerId, AlbumId, MarketingBudget FROM Albums")); while (resultSet.next()) { System.out.printf( "%d %d %s\n", resultSet.getLong("SingerId"), resultSet.getLong("AlbumId"), // We check that the value is non null. ResultSet getters can only be used to retrieve // non null values. resultSet.isNull("MarketingBudget") ? "NULL" : resultSet.getLong("MarketingBudget")); } } // [END spanner_query_data_with_new_column]
static void queryMarketingBudgetWithTimestamp(DatabaseClient dbClient) { // Rows without an explicit value for MarketingBudget will have a MarketingBudget equal to // null. ResultSet resultSet = dbClient .singleUse() .executeQuery( Statement.of( "SELECT SingerId, AlbumId, MarketingBudget, LastUpdateTime FROM Albums" + " ORDER BY LastUpdateTime DESC")); while (resultSet.next()) { System.out.printf( "%d %d %s %s\n", resultSet.getLong("SingerId"), resultSet.getLong("AlbumId"), // We check that the value is non null. ResultSet getters can only be used to retrieve // non null values. resultSet.isNull("MarketingBudget") ? "NULL" : resultSet.getLong("MarketingBudget"), resultSet.isNull("LastUpdateTime") ? "NULL" : resultSet.getTimestamp("LastUpdateTime")); } } // [END spanner_query_data_with_timestamp_column]
static void queryPerformancesTable(DatabaseClient dbClient) { // Rows without an explicit value for Revenue will have a Revenue equal to // null. ResultSet resultSet = dbClient .singleUse() .executeQuery( Statement.of( "SELECT SingerId, VenueId, EventDate, Revenue, LastUpdateTime " + "FROM Performances ORDER BY LastUpdateTime DESC")); while (resultSet.next()) { System.out.printf( "%d %d %s %s %s\n", resultSet.getLong("SingerId"), resultSet.getLong("VenueId"), resultSet.getDate("EventDate"), // We check that the value is non null. ResultSet getters can only be used to retrieve // non null values. resultSet.isNull("Revenue") ? "NULL" : resultSet.getLong("Revenue"), resultSet.getTimestamp("LastUpdateTime")); } }
static void queryStructField(DatabaseClient dbClient) { Statement s = Statement.newBuilder("SELECT SingerId FROM Singers WHERE FirstName = @name.FirstName") .bind("name") .to( Struct.newBuilder() .set("FirstName") .to("Elena") .set("LastName") .to("Campbell") .build()) .build(); ResultSet resultSet = dbClient.singleUse().executeQuery(s); while (resultSet.next()) { System.out.printf("%d\n", resultSet.getLong("SingerId")); } } // [END spanner_field_access_on_struct_parameters]
static void queryUsingIndex(DatabaseClient dbClient) { Statement statement = Statement // We use FORCE_INDEX hint to specify which index to use. For more details see // https://cloud.google.com/spanner/docs/query-syntax#from-clause .newBuilder( "SELECT AlbumId, AlbumTitle, MarketingBudget\n" + "FROM Albums@{FORCE_INDEX=AlbumsByAlbumTitle}\n" + "WHERE AlbumTitle >= @StartTitle AND AlbumTitle < @EndTitle") // We use @BoundParameters to help speed up frequently executed queries. // For more details see https://cloud.google.com/spanner/docs/sql-best-practices .bind("StartTitle") .to("Aardvark") .bind("EndTitle") .to("Goo") .build(); ResultSet resultSet = dbClient.singleUse().executeQuery(statement); while (resultSet.next()) { System.out.printf( "%d %s %s\n", resultSet.getLong("AlbumId"), resultSet.getString("AlbumTitle"), resultSet.isNull("MarketingBudget") ? "NULL" : resultSet.getLong("MarketingBudget")); } } // [END spanner_query_data_with_index]
static void queryWithStruct(DatabaseClient dbClient) { // [START spanner_create_struct_with_data] Struct name = Struct.newBuilder().set("FirstName").to("Elena").set("LastName").to("Campbell").build(); // [END spanner_create_struct_with_data] // [START spanner_query_data_with_struct] Statement s = Statement.newBuilder( "SELECT SingerId FROM Singers " + "WHERE STRUCT<FirstName STRING, LastName STRING>(FirstName, LastName) " + "= @name") .bind("name") .to(name) .build(); ResultSet resultSet = dbClient.singleUse().executeQuery(s); while (resultSet.next()) { System.out.printf("%d\n", resultSet.getLong("SingerId")); } // [END spanner_query_data_with_struct] }