
    !$                         d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ dd	lmZ dd
lmZ ddlmZ g dZdZdZ	 	 	 ddefdZd Zd Zd Zd Zd Zd Zd ZddZddZddZddZ y) 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                 l   t        j                  dd      }t        j                  dd      }dj                  |      |d}|r||d<   |rt|j	                         }|t
        k(  r8dj                  |      |d<   |j                  j                  j                  |d<   n#|j                  j                  j                  |d<   |r*|j                  |j                  |j                  	      |d
<   |j                  | j                          |j                  di |      }	|j                  j!                  |	      S )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*   *   sF    !!)T2&				4	0$/66x@( #4H '--/66$:$A$A($Kh !#99XXcc 
  $99XXll 
#'#8#8''W5J5J $9 $H  	;;&&(6D66BB 	< 	D# 
	,	,	3	3C	88    c                    t        j                  dd      }t        j                  dd      }t        j                  |_        |j                  | j                         |j                  |            }|j                  j                  |      S )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                     t        j                  dd      }t        j                  dd      }|j                  | j	                               }|j
                  j                  |      S )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                 .   t        j                  dd      }t        j                  dd      }|j                  |j	                  |j                  t        j                              | j                               }|j                  j                  |      S )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                     t        j                  dd      }t        j                  dd      }|j                  | j	                               }|j
                  j                  |      S )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                     t        j                  dd      }t        j                  dd      }|j                  | j	                               }|j
                  j                  |      j                  S )!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                    t        j                  dd      }t        j                  dd      }|j                  | j	                               }|j
                  j                  |      }|j                  s|j                  S dj                  |j                        dz   }t        j                  j                  |j                        }|dz   t        j                  |      z   S )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                     t        j                  dd      }t        j                  dd      }|j                  | j	                               }t        j                  |j                  |dd      S )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                    t        j                  dd      }t        j                  dd      }|j                  |      }|r||_        |j                  | j                         |      }|j                  j                  |      S )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@.&7N#>>((*- 	? 	/# 
	,	,	6	6s	;;r5   c                    t        j                  dd      }t        j                  dd      }|j                  |j	                         | j                               }|r.|j                  ||j                  |j                        |_	        n|r|j                  |      |_	        |j                  | j                         j	                         |      }|j                  j                  |      S )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                 P   t        j                  dd      }t        j                  dd      }|r|rt        j                  d      ||t        j                  d      d}g }|3|j                  d       |j                  | j                         |      }nD|B|j                  d       |j                  | j                         |j                  |	      
      }|j                  || j                         dj                  |            }|j                  j                  |      S )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                     t        j                  dd      }t        j                  dd      }|j                  || j	                         |      }|j
                  j                  |      S )zChangeQuorum a database.r   r   )etagrP   
quorumType)r	   r   r   ChangeQuorumRequestr(   r)   Changequorum)r?   quorum_typer   r0   r1   r3   s         r4   ChangeQuorumr      sd    !!)T2&				4	0$  l//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   