
    #                         S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJr  / S	QrS
rSr   SS\4S jjrS rS rS rS rS rS rS rSS jrSS jrSS jrSS jrg)zSpanner database API helper.    )
list_pager)descriptor_pb2)text_format)apis)errors)iam_util)CloudKmsKeyName)zroles/spanner.adminzroles/spanner.databaseAdminzroles/spanner.databaseReaderzroles/spanner.databaseUserzroles/spanner.viewerGOOGLE_STANDARD_SQL
POSTGRESQLNkms_keyc                    [         R                  " SS5      n[         R                  " SS5      nSR                  U5      US.nU(       a  X8S'   U(       au  UR	                  5       nU[
        :X  a8  SR                  U5      US'   UR                  R                  R                  US'   O#UR                  R                  R                  US'   U(       a'  UR                  UR                  UR                  S	9US
'   UR                  U R                  5       UR                  " S0 UD6S9n	UR                  R!                  U	5      $ )zCreate a new database.spannerv1zCREATE DATABASE `{}`)createStatementextraStatementsprotoDescriptorszCREATE DATABASE "{}"r   databaseDialect)
kmsKeyNamekmsKeyNamesencryptionConfig)parentcreateDatabaseRequest )r   GetClientInstanceGetMessagesModuleformatupperDATABASE_DIALECT_POSTGRESQLCreateDatabaseRequestDatabaseDialectValueValuesEnumr   r
   EncryptionConfigkms_key_namekms_key_names.SpannerProjectsInstancesDatabasesCreateRequestRelativeNameprojects_instances_databasesCreate)
instance_refdatabaseddlproto_descriptorsr   database_dialectclientmsgsreq_argsreqs
             /lib/googlecloudsdk/api_lib/spanner/databases.pyr'   r'   '   sB    !!)T2&				4	0$/66x@( #4 '--/66$:$A$A($Kh !#99XXcc 
  $99XXll 
#'#8#8''W5J5J $9 $H  	;;&&( 66BB 	< 	D# 
	,	,	3	3C	88    c                    [         R                  " SS5      n[         R                  " SS5      n[        R                  Ul        UR                  U R                  5       UR                  US9S9nUR                  R                  U5      $ )zDSaves the given policy on the database, overwriting whatever exists.r   r   )policy)resourcesetIamPolicyRequest)r   r   r   r   !MAX_LIBRARY_IAM_SUPPORTED_VERSIONversion4SpannerProjectsInstancesDatabasesSetIamPolicyRequestr%   SetIamPolicyRequestr&   SetIamPolicy)database_refr4   r-   r.   r0   s        r1   	SetPolicyr=   K   s    !!)T2&				4	0$==&.AA((*22&2A 	B 	C# 
	,	,	9	9#	>>r2   c                     [         R                  " SS5      n[         R                  " SS5      nUR                  U R	                  5       S9nUR
                  R                  U5      $ )zDelete a database.r   r   r)   )r   r   r   4SpannerProjectsInstancesDatabasesDropDatabaseRequestr%   r&   DropDatabaser<   r-   r.   r0   s       r1   DeleterC   V   s_    !!)T2&				4	0$AA((* 	B 	,#		,	,	9	9#	>>r2   c                     [         R                  " SS5      n[         R                  " SS5      nUR                  UR	                  UR                  [        R                  S9S9U R                  5       S9nUR                  R                  U5      $ )z"Gets the IAM policy on a database.r   r   )requestedPolicyVersion)options)getIamPolicyRequestr5   )r   r   r   4SpannerProjectsInstancesDatabasesGetIamPolicyRequestGetIamPolicyRequestGetPolicyOptionsr   r7   r%   r&   GetIamPolicyrB   s       r1   rK   rK   _   s    !!)T2&				4	0$AA22''88 ( : 3 ; ((* 	B 	,# 
	,	,	9	9#	>>r2   c                     [         R                  " SS5      n[         R                  " SS5      nUR                  U R	                  5       S9nUR
                  R                  U5      $ )zGet a database by name.r   r   )name)r   r   r   +SpannerProjectsInstancesDatabasesGetRequestr%   r&   GetrB   s       r1   rO   rO   l   s^    !!)T2&				4	0$88$$& 	9 	(#		,	,	0	0	55r2   c                     [         R                  " SS5      n[         R                  " SS5      nUR                  U R	                  5       S9nUR
                  R                  U5      R                  $ )!Get a database's DDL description.r   r   r?   )r   r   r   .SpannerProjectsInstancesDatabasesGetDdlRequestr%   r&   GetDdl
statementsrB   s       r1   rS   rS   u   sd    !!)T2&				4	0$;;((* 	< 	,#		,	,	3	3C	8	C	CCr2   c                    [         R                  " SS5      n[         R                  " SS5      nUR                  U R	                  5       S9nUR
                  R                  U5      nUR                  (       d  UR                  $ SR                  UR                  5      S-   n[        R                  R                  UR                  5      nUS-   [        R                  " U5      -   $ )rQ   r   r   r?   z;

zProto Bundle Descriptors:
)r   r   r   rR   r%   r&   rS   include_proto_descriptorsrT   joinr   FileDescriptorSet
FromStringr   r   MessageToString)r<   argsr-   r.   r0   get_ddl_respddlsdescriptorss           r1   GetDdlWithDescriptorsr_   ~   s    !!)T2&				4	0$;;((* 	< 	# 44;;C@,		'	'"""	l--	.	8$00;;##+ %&##K01r2   c                     [         R                  " SS5      n[         R                  " SS5      nUR                  U R	                  5       S9n[
        R                  " UR                  USSS9$ )zList databases in the instance.r   r   )r   	databasespageSize)fieldbatch_size_attribute)r   r   r   ,SpannerProjectsInstancesDatabasesListRequestr%   r   YieldFromListr&   )r(   r-   r.   r0   s       r1   Listrg      sl    !!)T2&				4	0$99&&( 	: 	*#		!	!))	%	
' 'r2   c                    [         R                  " SS5      n[         R                  " SS5      nUR                  US9nU(       a  X%l        UR                  U R                  5       US9nUR                  R                  U5      $ )z#Update a database via DDL commands.r   r   )rT   )r)   updateDatabaseDdlRequest)	r   r   r   UpdateDatabaseDdlRequestr   1SpannerProjectsInstancesDatabasesUpdateDdlRequestr%   r&   	UpdateDdl)r<   r*   r+   r-   r.   update_ddl_reqr0   s          r1   rl   rl      s    !!)T2&				4	0$00C0@.&7#>>((*- 	? 	/# 
	,	,	6	6s	;;r2   c                    [         R                  " SS5      n[         R                  " SS5      nUR                  UR	                  5       U R                  5       S9nU(       a+  UR                  UUR                  UR                  S9Ul	        OU(       a  UR                  US9Ul	        UR                  U R                  5       R	                  5       US9nUR                  R                  U5      $ )z!Restore a database from a backup.r   r   )backup
databaseId)encryptionTyper   r   )rq   )r   restoreDatabaseRequest)r   r   r   RestoreDatabaseRequestr%   NameRestoreDatabaseEncryptionConfigr"   r#   r   /SpannerProjectsInstancesDatabasesRestoreRequestParentr&   Restore)r<   
backup_refencryption_typer   r-   r.   restore_db_requestr0   s           r1   rx   rx      s    !!)T2&				4	0$22$$&<3D3D3F 3 H*.*N*N&'')) +O +'
 *.*N*N& +O +' 	<<  "//1/ 	= 	1# 
	,	,	4	4S	99r2   c                 \   [         R                  " SS5      n[         R                  " SS5      nU(       a  U(       a  [        R                  " S5      eUc  Uc  [        R                  " S5      eSn/ nUb0  UR                  S5        UR                  U R                  5       US9nO?Ub<  UR                  S5        UR                  U R                  5       UR                  US	9S
9nUR                  UU R                  5       SR                  U5      S9nUR                  R                  U5      $ )zUpdate a database.r   r   zMultiple updates requested. Both flag --[no-]enable-drop-protection and --kms-keys were specified. Please specify only one flag.Nz^No updates requested. Need to specify either flag --[no-]enable-drop-protection OR --kms-keys.enable_drop_protection)rM   enableDropProtectionencryption_config)r   )rM   r   ,)r)   rM   
updateMask)r   r   r   r   NoFieldsSpecifiedErrorappendDatabaser%   r!   -SpannerProjectsInstancesDatabasesPatchRequestrW   r&   Patch)r<   r}   kms_keysr-   r.   database_objupdate_maskr0   s           r1   Updater      s>   !!)T2&				4	0$

'
'	H 
 #(8

'
'	7 
 ,+'/0==&&(3 ! L *+==&&(..8.D ! L 	::$$&+& 	; 	#
 
	,	,	2	23	77r2   c                     [         R                  " SS5      n[         R                  " SS5      nUR                  X R	                  5       US9nUR
                  R                  U5      $ )zChangeQuorum a database.r   r   )etagrM   
quorumType)r   r   r   ChangeQuorumRequestr%   r&   Changequorum)r<   quorum_typer   r-   r.   r0   s         r1   ChangeQuorumr      sb    !!)T2&				4	0$  //1k 	! 	# 
	,	,	9	9#	>>r2   )NNN)N)NN)__doc__apitools.base.pyr   cloudsdk.google.protobufr   r   googlecloudsdk.api_lib.utilr   googlecloudsdk.command_lib.air   googlecloudsdk.command_lib.iamr   0googlecloudsdk.command_lib.spanner.resource_argsr	   KNOWN_ROLESDATABASE_DIALECT_GOOGLESQLr   r'   r=   rC   rK   rO   rS   r_   rg   rl   rx   r   r   r   r2   r1   <module>r      s    # ( 3 0 , 0 3 L 3 *  #!9
 !9H??
?6D,
'
<:0$8N?r2   