Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
/*
* Copyright 2017 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/*
* EDITING INSTRUCTIONS
* This file is referenced in DatabaseAdminClient's javadoc. Any change to this file should be reflected
* in DatabaseAdminClient's javadoc.
*/

package com.google.cloud.examples.spanner.snippets;

import com.google.api.gax.paging.Page;
import com.google.common.collect.Iterables;
import com.google.cloud.spanner.DatabaseAdminClient;
import com.google.cloud.spanner.Options;
import com.google.cloud.spanner.Database;
import com.google.cloud.spanner.Operation;
import com.google.spanner.admin.database.v1.CreateDatabaseMetadata;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
* This class contains snippets for {@link DatabaseAdminClient} interface.
*/
public class DatabaseAdminClientSnippets {

private final DatabaseAdminClient dbAdminClient;

public DatabaseAdminClientSnippets(DatabaseAdminClient dbAdminClient) {
this.dbAdminClient = dbAdminClient;
}

/**
* Example to create database.
*/
// [TARGET createDatabase(String, String, Iterable)]
// [VARIABLE my_instance_id]
// [VARIABLE my_database_id]
public Database createDatabase(String instanceId, String databaseId) {
// [START createDatabase]
Operation<Database, CreateDatabaseMetadata> op = dbAdminClient
.createDatabase(
instanceId,
databaseId,
Arrays.asList(
"CREATE TABLE Singers (\n"
+ " SingerId INT64 NOT NULL,\n"
+ " FirstName STRING(1024),\n"
+ " LastName STRING(1024),\n"
+ " SingerInfo BYTES(MAX)\n"
+ ") PRIMARY KEY (SingerId)",
"CREATE TABLE Albums (\n"
+ " SingerId INT64 NOT NULL,\n"
+ " AlbumId INT64 NOT NULL,\n"
+ " AlbumTitle STRING(MAX)\n"
+ ") PRIMARY KEY (SingerId, AlbumId),\n"
+ " INTERLEAVE IN PARENT Singers ON DELETE CASCADE"));
Database db = op.waitFor().getResult();
// [END createDatabase]
return db;
}

/**
* Example to getDatabase.
*/
// [TARGET getDatabase(String, String)]
// [VARIABLE my_instance_id]
// [VARIABLE my_database_id]
public Database getDatabase(String instanceId, String databaseId) {
// [START getDatabase]
Database db = dbAdminClient.getDatabase(instanceId, databaseId);
// [END getDatabase]
return db;
}

/**
* Example to update the database DDL.
*/
// [TARGET updateDatabaseDdl(String, String, Iterable, String)]
// [VARIABLE my_instance_id]
// [VARIABLE my_database_id]
public void updateDatabaseDdl(String instanceId, String databaseId) {
// [START updateDatabaseDdl]
dbAdminClient.updateDatabaseDdl(instanceId,
databaseId,
Arrays.asList("ALTER TABLE Albums ADD COLUMN MarketingBudget INT64"),
null).waitFor();
// [END updateDatabaseDdl]
}

/**
* Example to drop a Cloud Spanner database.
*/
// [TARGET dropDatabase(String, String)]
// [VARIABLE my_instance_id]
// [VARIABLE my_database_id]
public void dropDatabase(String instanceId, String databaseId) {
// [START dropDatabase]
dbAdminClient.dropDatabase(instanceId, databaseId);
// [END dropDatabase]
}

/**
* Example to get the schema of a Cloud Spanner database.
*/
// [TARGET getDatabaseDdl(String, String)]
// [VARIABLE my_instance_id]
// [VARIABLE my_database_id]
public List<String> getDatabaseDdl(String instanceId, String databaseId) {
// [START getDatabaseDdl]
List<String> statementsInDb = dbAdminClient.getDatabaseDdl(instanceId, databaseId);
// [END getDatabaseDdl]
return statementsInDb;
}

/**
* Example to get the list of Cloud Spanner database in the given instance.
*/
// [TARGET listDatabases(String, ListOption...)]
// [VARIABLE my_instance_id]
public List<Database> listDatabases(String instanceId) {
// [START listDatabases]
Page<Database> page = dbAdminClient.listDatabases(instanceId, Options.pageSize(1));
List<Database> dbs = new ArrayList<>();
while (page != null) {
Database db = Iterables.getOnlyElement(page.getValues());
dbs.add(db);
page = page.getNextPage();
}
// [END listDatabases]
return dbs;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,30 @@ public interface DatabaseAdminClient {
/**
* Creates a new database in a Cloud Spanner instance.
*
* <p>Example to create database.
* <pre> {@code
* String instanceId = my_instance_id;
* String databaseId = my_database_id;
* Operation<Database, CreateDatabaseMetadata> op = dbAdminClient
* .createDatabase(
* instanceId,
* databaseId,
* Arrays.asList(
* "CREATE TABLE Singers (\n"
* + " SingerId INT64 NOT NULL,\n"
* + " FirstName STRING(1024),\n"
* + " LastName STRING(1024),\n"
* + " SingerInfo BYTES(MAX)\n"
* + ") PRIMARY KEY (SingerId)",
* "CREATE TABLE Albums (\n"
* + " SingerId INT64 NOT NULL,\n"
* + " AlbumId INT64 NOT NULL,\n"
* + " AlbumTitle STRING(MAX)\n"
* + ") PRIMARY KEY (SingerId, AlbumId),\n"
* + " INTERLEAVE IN PARENT Singers ON DELETE CASCADE"));
* Database db = op.waitFor().getResult();
* }</pre>
*
* @param instanceId the id of the instance in which to create the database.
* @param databaseId the id of the database which will be created. It must conform to the regular
* expression [a-z][a-z0-9_\-]*[a-z0-9] and be between 2 and 30 characters in length
Expand All @@ -37,7 +61,17 @@ public interface DatabaseAdminClient {
Operation<Database, CreateDatabaseMetadata> createDatabase(
String instanceId, String databaseId, Iterable<String> statements) throws SpannerException;

/** Gets the current state of a Cloud Spanner database. */
/**
* Gets the current state of a Cloud Spanner database.
*
* <p>Example to getDatabase.
* <pre> {@code
* String instanceId = my_instance_id;
* String databaseId = my_database_id;
* Database db = dbAdminClient.getDatabase(instanceId, databaseId);
* }</pre>
*
*/
Database getDatabase(String instanceId, String databaseId) throws SpannerException;

/**
Expand All @@ -49,6 +83,16 @@ Operation<Database, CreateDatabaseMetadata> createDatabase(
* problem like a `NULL` value in a column to which `NOT NULL` would be added). If a statement
* fails, all subsequent statements in the batch are automatically cancelled.
*
* <p>Example to update the database DDL.
* <pre> {@code
* String instanceId = my_instance_id;
* String databaseId = my_database_id;
* dbAdminClient.updateDatabaseDdl(instanceId,
* databaseId,
* Arrays.asList("ALTER TABLE Albums ADD COLUMN MarketingBudget INT64"),
* null).waitFor();
* }</pre>
*
* @param operationId Operation id assigned to this operation. If null, system will autogenerate
* one. This must be unique within a database abd must be a valid identifier
* [a-zA-Z][a-zA-Z0-9_]*.
Expand All @@ -60,15 +104,48 @@ Operation<Void, UpdateDatabaseDdlMetadata> updateDatabaseDdl(
@Nullable String operationId)
throws SpannerException;

/** Drops a Cloud Spanner database. */
/**
* Drops a Cloud Spanner database.
*
* <p>Example to drop a Cloud Spanner database.
* <pre> {@code
* String instanceId = my_instance_id;
* String databaseId = my_database_id;
* dbAdminClient.dropDatabase(instanceId, databaseId);
* }</pre>
*
*/
void dropDatabase(String instanceId, String databaseId) throws SpannerException;

/**
* Returns the schema of a Cloud Spanner database as a list of formatted DDL statements. This
* method does not show pending schema updates.
*
* <p>Example to get the schema of a Cloud Spanner database.
* <pre> {@code
* String instanceId = my_instance_id;
* String databaseId = my_database_id;
* List<String> statementsInDb = dbAdminClient.getDatabaseDdl(instanceId, databaseId);
* }</pre>
*
*/
List<String> getDatabaseDdl(String instanceId, String databaseId);

/** Returns the list of Cloud Spanner database in the given instance. */
/**
* Returns the list of Cloud Spanner database in the given instance.
*
* <p>Example to get the list of Cloud Spanner database in the given instance.
* <pre> {@code
* String instanceId = my_instance_id;
* Page<Database> page = dbAdminClient.listDatabases(instanceId, Options.pageSize(1));
* List<Database> dbs = new ArrayList<>();
* while (page != null) {
* Database db = Iterables.getOnlyElement(page.getValues());
* dbs.add(db);
* page = page.getNextPage();
* }
* }</pre>
*
*/
Page<Database> listDatabases(String instanceId, ListOption... options);
}