/** * Creates a {@code DatabaseId} from the name of the database. * * @param name the database name of the form {@code * projects/PROJECT_ID/instances/INSTANCE_ID/databases/DATABASE_ID} * @throws IllegalArgumentException if {@code name} does not conform to the expected pattern */ static DatabaseId of(String name) { Map<String, String> parts = NAME_TEMPLATE.match(name); Preconditions.checkArgument( parts != null, "Name should conform to pattern %s: %s", NAME_TEMPLATE, name); return of(parts.get("project"), parts.get("instance"), parts.get("database")); }
project = spanner.getOptions().getProjectId(); dbClient = spanner.getDatabaseClient(DatabaseId.of(project, instance, database)); } catch (Exception e) { LOGGER.log(Level.SEVERE, "init()", e);
static Database fromProto( com.google.spanner.admin.database.v1.Database proto, DatabaseAdminClient client) { checkArgument(!proto.getName().isEmpty(), "Missing expected 'name' field"); return new Database(DatabaseId.of(proto.getName()), fromProtoState(proto.getState()), client); }
DatabaseClient getDatabaseClient() { // [START get_db_client] SpannerOptions options = SpannerOptions.newBuilder().build(); Spanner spanner = options.getService(); final String project = "test-project"; final String instance = "test-instance"; final String database = "example-db"; DatabaseId db = DatabaseId.of(project, instance, database); DatabaseClient dbClient = spanner.getDatabaseClient(db); // [END get_db_client] return dbClient; }
BatchClient getBatchClient() { // [START get_batch_client] SpannerOptions options = SpannerOptions.newBuilder().build(); Spanner spanner = options.getService(); final String project = "test-project"; final String instance = "test-instance"; final String database = "example-db"; DatabaseId db = DatabaseId.of(project, instance, database); BatchClient batchClient = spanner.getBatchClient(db); // [END get_batch_client] return batchClient; } }
@Before public void setUp() { initMocks(this); DatabaseId db = DatabaseId.of(DB_NAME); SpannerImpl spanner = new SpannerImpl(gapicRpc, 1, spannerOptions); client = new BatchClientImpl(db, spanner); }
@Test public void basics() { String name = "projects/test-project/instances/test-instance/databases/database-1"; DatabaseId db = DatabaseId.of(name); assertThat(db.getName()).isEqualTo(name); assertThat(db.getInstanceId().getInstance()).isEqualTo("test-instance"); assertThat(db.getDatabase()).isEqualTo("database-1"); assertThat(DatabaseId.of("test-project", "test-instance", "database-1")).isEqualTo(db); assertThat(DatabaseId.of(name)).isEqualTo(db); assertThat(DatabaseId.of(name).hashCode()).isEqualTo(db.hashCode()); assertThat(db.toString()).isEqualTo(name); }
@Test public void badName() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage("projects"); // Expect conforming pattern in output. DatabaseId.of("bad name"); } }
@Before public void setUp() { MockitoAnnotations.initMocks(this); SpannerImpl spanner = new SpannerImpl(rpc, 1, spannerOptions); String dbName = "projects/p1/instances/i1/databases/d1"; String sessionName = dbName + "/sessions/s1"; DatabaseId db = DatabaseId.of(dbName); Session sessionProto = Session.newBuilder().setName(sessionName).build(); Mockito.when( rpc.createSession( Mockito.eq(dbName), Mockito.anyMapOf(String.class, String.class), optionsCaptor.capture())) .thenReturn(sessionProto); session = spanner.createSession(db); // We expect the same options, "options", on all calls on "session". options = optionsCaptor.getValue(); Mockito.reset(rpc); }
spanner.getDatabaseClient(DatabaseId.of(options.getProjectId(), instanceId, databaseId));
@Test public void getDbclientAgainGivesSame() { Map<String, String> labels = new HashMap<>(); labels.put("env", "dev"); Mockito.when(spannerOptions.getSessionLabels()).thenReturn(labels); String dbName = "projects/p1/instances/i1/databases/d1"; DatabaseId db = DatabaseId.of(dbName); Mockito.when(spannerOptions.getTransportOptions()) .thenReturn(GrpcTransportOptions.newBuilder().build()); Mockito.when(spannerOptions.getSessionPoolOptions()) .thenReturn(SessionPoolOptions.newBuilder().build()); DatabaseClient databaseClient = impl.getDatabaseClient(db); // Get db client again DatabaseClient databaseClient1 = impl.getDatabaseClient(db); assertThat(databaseClient1).isSameAs(databaseClient); }
@Test public void createAndCloseSession() { Map<String, String> labels = new HashMap<>(); labels.put("env", "dev"); Mockito.when(spannerOptions.getSessionLabels()).thenReturn(labels); String dbName = "projects/p1/instances/i1/databases/d1"; String sessionName = dbName + "/sessions/s1"; DatabaseId db = DatabaseId.of(dbName); com.google.spanner.v1.Session sessionProto = com.google.spanner.v1.Session.newBuilder() .setName(sessionName) .putAllLabels(labels) .build(); Mockito.when(rpc.createSession(Mockito.eq(dbName), Mockito.eq(labels), options.capture())) .thenReturn(sessionProto); Session session = impl.createSession(db); assertThat(session.getName()).isEqualTo(sessionName); session.close(); // The same channelHint is passed for deleteSession (contained in "options"). Mockito.verify(rpc).deleteSession(sessionName, options.getValue()); }
@Test public void getDbclientAfterCloseThrows() { SpannerImpl imp = new SpannerImpl(rpc, 1, spannerOptions); Map<String, String> labels = new HashMap<>(); labels.put("env", "dev"); Mockito.when(spannerOptions.getSessionLabels()).thenReturn(labels); String dbName = "projects/p1/instances/i1/databases/d1"; DatabaseId db = DatabaseId.of(dbName); Mockito.when(spannerOptions.getTransportOptions()) .thenReturn(GrpcTransportOptions.newBuilder().build()); Mockito.when(spannerOptions.getSessionPoolOptions()) .thenReturn(SessionPoolOptions.newBuilder().build()); imp.close(); try { imp.getDatabaseClient(db); fail("Expected exception"); } catch (IllegalStateException e) { assertThat(e.getMessage()).contains("Cloud Spanner client has been closed"); } }
@Test public void invalidDatabase() { RemoteSpannerHelper helper = env.getTestHelper(); DatabaseClient invalidClient = helper.getClient().getDatabaseClient(DatabaseId.of(helper.getInstanceId(), "invalid")); expectedException.expect(isSpannerException(ErrorCode.NOT_FOUND)); invalidClient .singleUse(TimestampBound.strong()) .readRow(TABLE_NAME, Key.of("k99"), ALL_COLUMNS); }
DatabaseId.of(options.getProjectId(), instanceId, databaseId));
try { DatabaseClient dbClient = spanner.getDatabaseClient(DatabaseId.of( options.getProjectId(), instanceId, databaseId));
try { String command = args[0]; DatabaseId db = DatabaseId.of(options.getProjectId(), args[1], args[2]);
try { DatabaseClient dbClient = spanner.getDatabaseClient(DatabaseId.of( options.getProjectId(), instanceId, databaseId));
@Bean @ConditionalOnMissingBean public DatabaseId databaseId() { return DatabaseId.of(this.projectId, this.instanceId, this.databaseName); }
private long countNumberOfRecords() { ResultSet resultSet = spanner .getDatabaseClient(DatabaseId.of(project, options.getInstanceId(), databaseName)) .singleUse() .executeQuery(Statement.of("SELECT COUNT(*) FROM " + options.getTable())); assertThat(resultSet.next(), is(true)); long result = resultSet.getLong(0); assertThat(resultSet.next(), is(false)); return result; }