
    !$                         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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.    )absolute_import)division)unicode_literals)
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_refr7   r0   r1   r3   s        r4   	SetPolicyr@   N   s    !!)T2&				4	0$==&.AA((*22&2A 	B 	C# 
	,	,	9	9#	>>r5   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?   r0   r1   r3   s       r4   DeleterF   Y   s_    !!)T2&				4	0$AA((* 	B 	,#		,	,	9	9#	>>r5   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)getIamPolicyRequestr8   )r	   r   r   4SpannerProjectsInstancesDatabasesGetIamPolicyRequestGetIamPolicyRequestGetPolicyOptionsr   r:   r(   r)   GetIamPolicyrE   s       r4   rN   rN   b   s    !!)T2&				4	0$AA22''88 ( : 3 ; ((* 	B 	,# 
	,	,	9	9#	>>r5   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)   GetrE   s       r4   rR   rR   o   s^    !!)T2&				4	0$88$$& 	9 	(#		,	,	0	0	55r5   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   rB   )r	   r   r   .SpannerProjectsInstancesDatabasesGetDdlRequestr(   r)   GetDdl
statementsrE   s       r4   rV   rV   x   sd    !!)T2&				4	0$;;((* 	< 	,#		,	,	3	3C	8	C	CCr5   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      -   $ )rT   r   r   rB   z;

zProto Bundle Descriptors:
)r	   r   r   rU   r(   r)   rV   include_proto_descriptorsrW   joinr   FileDescriptorSet
FromStringr   r   MessageToString)r?   argsr0   r1   r3   get_ddl_respddlsdescriptorss           r4   GetDdlWithDescriptorsrb      s    !!)T2&				4	0$;;((* 	< 	# 44;;C@,		'	'"""	l--	.	8$00;;##+ %&##K01r5   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+   r0   r1   r3   s       r4   Listrj      sl    !!)T2&				4	0$99&&( 	: 	*#		!	!))	%	
' 'r5   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   )rW   )r,   updateDatabaseDdlRequest)	r	   r   r   UpdateDatabaseDdlRequestr   1SpannerProjectsInstancesDatabasesUpdateDdlRequestr(   r)   	UpdateDdl)r?   r-   r.   r0   r1   update_ddl_reqr3   s          r4   ro   ro      s    !!)T2&				4	0$00C0@.&7#>>((*- 	? 	/# 
	,	,	6	6s	;;r5   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   )rt   )r   restoreDatabaseRequest)r	   r   r   RestoreDatabaseRequestr(   NameRestoreDatabaseEncryptionConfigr%   r&   r   /SpannerProjectsInstancesDatabasesRestoreRequestParentr)   Restore)r?   
backup_refencryption_typer   r0   r1   restore_db_requestr3   s           r4   r{   r{      s    !!)T2&				4	0$22$$&<3D3D3F 3 H*.*N*N&'')) +O +'
 *.*N*N& +O +' 	<<  "//1/ 	= 	1# 
	,	,	4	4S	99r5   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)rP   enableDropProtectionencryption_config)r   )rP   r   ,)r,   rP   
updateMask)r	   r   r   r
   NoFieldsSpecifiedErrorappendDatabaser(   r$   -SpannerProjectsInstancesDatabasesPatchRequestrZ   r)   Patch)r?   r   kms_keysr0   r1   database_objupdate_maskr3   s           r4   Updater      s>   !!)T2&				4	0$

'
'	H 
 #(8

'
'	7 
 ,+'/0==&&(3 ! L *+==&&(..8.D ! L 	::$$&+& 	; 	#
 
	,	,	2	23	77r5   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   )etagrP   
quorumType)r	   r   r   ChangeQuorumRequestr(   r)   Changequorum)r?   quorum_typer   r0   r1   r3   s         r4   ChangeQuorumr      sb    !!)T2&				4	0$  //1k 	! 	# 
	,	,	9	9#	>>r5   )NNN)N)NN)!__doc__
__future__r   r   r   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@   rF   rN   rR   rV   rb   rj   ro   r{   r   r   r   r5   r4   <module>r      s    # &  ' ' 3 0 , 0 3 L 3 *  #!9
 !9H??
?6D,
'
<:0$8N?r5   