5252import com .google .common .util .concurrent .ListenableFuture ;
5353import com .google .protobuf .Any ;
5454import com .google .protobuf .ByteString ;
55- import com .google .protobuf .Empty ;
5655import com .google .protobuf .FieldMask ;
5756import com .google .protobuf .InvalidProtocolBufferException ;
5857import com .google .protobuf .Message ;
59- import com .google .spanner .admin .database .v1 .CreateDatabaseMetadata ;
60- import com .google .spanner .admin .database .v1 .UpdateDatabaseDdlMetadata ;
6158import com .google .spanner .admin .instance .v1 .CreateInstanceMetadata ;
6259import com .google .spanner .admin .instance .v1 .UpdateInstanceMetadata ;
6360import com .google .spanner .v1 .BeginTransactionRequest ;
8481import java .util .List ;
8582import java .util .Map ;
8683import java .util .Random ;
87- import java .util .UUID ;
8884import java .util .concurrent .Callable ;
8985import java .util .concurrent .CountDownLatch ;
9086import java .util .concurrent .ExecutionException ;
@@ -391,7 +387,7 @@ private static <T extends Message> T unpack(Any response, Class<T> clazz)
391387 }
392388 }
393389
394- private abstract static class PageFetcher <S , T > implements NextPageFetcher <S > {
390+ abstract static class PageFetcher <S , T > implements NextPageFetcher <S > {
395391 private String nextPageToken ;
396392
397393 @ Override
@@ -412,159 +408,13 @@ public Paginated<T> call() {
412408 return new PageImpl <S >(this , nextPageToken , results );
413409 }
414410
415- abstract Paginated <T > getNextPage (@ Nullable String nextPageToken );
416-
417- abstract S fromProto (T proto );
418- }
419-
420- private static String randomOperationId () {
421- UUID uuid = UUID .randomUUID ();
422- return ("r" + uuid .toString ()).replace ("-" , "_" );
423- }
424-
425- static class DatabaseAdminClientImpl implements DatabaseAdminClient {
426-
427- private final String projectId ;
428- private final SpannerRpc rpc ;
429-
430- DatabaseAdminClientImpl (String projectId , SpannerRpc rpc ) {
431- this .projectId = projectId ;
432- this .rpc = rpc ;
411+ void setNextPageToken (String nextPageToken ) {
412+ this .nextPageToken = nextPageToken ;
433413 }
434414
435- @ Override
436- public OperationFuture <Database , CreateDatabaseMetadata > createDatabase (
437- String instanceId , String databaseId , Iterable <String > statements ) throws SpannerException {
438- // CreateDatabase() is not idempotent, so we're not retrying this request.
439- String instanceName = getInstanceName (instanceId );
440- String createStatement = "CREATE DATABASE `" + databaseId + "`" ;
441- OperationFuture <com .google .spanner .admin .database .v1 .Database , CreateDatabaseMetadata >
442- rawOperationFuture = rpc .createDatabase (instanceName , createStatement , statements );
443- return new OperationFutureImpl <Database , CreateDatabaseMetadata >(
444- rawOperationFuture .getPollingFuture (),
445- rawOperationFuture .getInitialFuture (),
446- new ApiFunction <OperationSnapshot , Database >() {
447- @ Override
448- public Database apply (OperationSnapshot snapshot ) {
449- return Database .fromProto (
450- ProtoOperationTransformers .ResponseTransformer .create (
451- com .google .spanner .admin .database .v1 .Database .class )
452- .apply (snapshot ),
453- DatabaseAdminClientImpl .this );
454- }
455- },
456- ProtoOperationTransformers .MetadataTransformer .create (CreateDatabaseMetadata .class ),
457- new ApiFunction <Exception , Database >() {
458- @ Override
459- public Database apply (Exception e ) {
460- throw SpannerExceptionFactory .newSpannerException (e );
461- }
462- });
463- }
464-
465- @ Override
466- public Database getDatabase (String instanceId , String databaseId ) throws SpannerException {
467- final String dbName = getDatabaseName (instanceId , databaseId );
468- Callable <Database > callable =
469- new Callable <Database >() {
470- @ Override
471- public Database call () throws Exception {
472- return Database .fromProto (rpc .getDatabase (dbName ), DatabaseAdminClientImpl .this );
473- }
474- };
475- return runWithRetries (callable );
476- }
477-
478- @ Override
479- public OperationFuture <Void , UpdateDatabaseDdlMetadata > updateDatabaseDdl (
480- final String instanceId ,
481- final String databaseId ,
482- final Iterable <String > statements ,
483- @ Nullable String operationId )
484- throws SpannerException {
485- final String dbName = getDatabaseName (instanceId , databaseId );
486- final String opId = operationId != null ? operationId : randomOperationId ();
487- OperationFuture <Empty , UpdateDatabaseDdlMetadata > rawOperationFuture =
488- rpc .updateDatabaseDdl (dbName , statements , opId );
489- return new OperationFutureImpl <Void , UpdateDatabaseDdlMetadata >(
490- rawOperationFuture .getPollingFuture (),
491- rawOperationFuture .getInitialFuture (),
492- new ApiFunction <OperationSnapshot , Void >() {
493- @ Override
494- public Void apply (OperationSnapshot snapshot ) {
495- ProtoOperationTransformers .ResponseTransformer .create (Empty .class ).apply (snapshot );
496- return null ;
497- }
498- },
499- ProtoOperationTransformers .MetadataTransformer .create (UpdateDatabaseDdlMetadata .class ),
500- new ApiFunction <Exception , Void >() {
501- @ Override
502- public Void apply (Exception e ) {
503- throw SpannerExceptionFactory .newSpannerException (e );
504- }
505- });
506- }
507-
508- @ Override
509- public void dropDatabase (String instanceId , String databaseId ) throws SpannerException {
510- final String dbName = getDatabaseName (instanceId , databaseId );
511- Callable <Void > callable =
512- new Callable <Void >() {
513- @ Override
514- public Void call () throws Exception {
515- rpc .dropDatabase (dbName );
516- return null ;
517- }
518- };
519- runWithRetries (callable );
520- }
521-
522- @ Override
523- public List <String > getDatabaseDdl (String instanceId , String databaseId ) {
524- final String dbName = getDatabaseName (instanceId , databaseId );
525- Callable <List <String >> callable =
526- new Callable <List <String >>() {
527- @ Override
528- public List <String > call () throws Exception {
529- return rpc .getDatabaseDdl (dbName );
530- }
531- };
532- return runWithRetries (callable );
533- }
534-
535- @ Override
536- public Page <Database > listDatabases (String instanceId , ListOption ... options ) {
537- final String instanceName = getInstanceName (instanceId );
538- final Options listOptions = Options .fromListOptions (options );
539- Preconditions .checkArgument (
540- !listOptions .hasFilter (), "Filter option is not support by" + "listDatabases" );
541- final int pageSize = listOptions .hasPageSize () ? listOptions .pageSize () : 0 ;
542- PageFetcher <Database , com .google .spanner .admin .database .v1 .Database > pageFetcher =
543- new PageFetcher <Database , com .google .spanner .admin .database .v1 .Database >() {
544- @ Override
545- public Paginated <com .google .spanner .admin .database .v1 .Database > getNextPage (
546- String nextPageToken ) {
547- return rpc .listDatabases (instanceName , pageSize , nextPageToken );
548- }
549-
550- @ Override
551- public Database fromProto (com .google .spanner .admin .database .v1 .Database proto ) {
552- return Database .fromProto (proto , DatabaseAdminClientImpl .this );
553- }
554- };
555- if (listOptions .hasPageToken ()) {
556- pageFetcher .nextPageToken = listOptions .pageToken ();
557- }
558- return pageFetcher .getNextPage ();
559- }
560-
561- private String getInstanceName (String instanceId ) {
562- return new InstanceId (projectId , instanceId ).getName ();
563- }
415+ abstract Paginated <T > getNextPage (@ Nullable String nextPageToken );
564416
565- private String getDatabaseName (String instanceId , String databaseId ) {
566- return new DatabaseId (new InstanceId (projectId , instanceId ), databaseId ).getName ();
567- }
417+ abstract S fromProto (T proto );
568418 }
569419
570420 static class InstanceAdminClientImpl implements InstanceAdminClient {
0 commit comments