a
    g	g45                     @  s  d dl mZ d dl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 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 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& erd 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%l0m1Z1 d d&l2m3Z3 dd'lm4Z4 G d(d) d)e#Z5G d*d+ d+eeZ6G d,d- d-eeZ7ee6d.d+d/d0d1d2d3Z8ee7d.d-d/d0d1d4d5Z9eed.d6d7d0d1d8d9Z:d7d:d0d;d<d=Z;eed.d>d7d0d1d?d@Z<eed.dAd7d0d1dBdCZ=eed.dDd7d0d1dEdFZ>eed.dGd7d0d1dHdIZ?ee!d.dJd7d0d1dKdLZ@dS )M    )annotationsN)Any)List)Optional)TYPE_CHECKING)Union)types)compiles)Column)CreateIndex)
Executable)ClauseElement   )	AddColumn)alter_column)alter_table)ColumnDefault)
ColumnName)ColumnNullable)
ColumnType)format_column_name)format_server_default)format_table_name)format_type)RenameTable)DefaultImpl   )util)sqla_compat)Literal)MSDDLCompiler)MSSQLCompiler)CursorResult)Index)Table)TableClause)
TypeEngine)_ServerDefaultc                      s   e Zd ZdZdZdZejddhf ZdZdd fd	d
Z	ddd fddZ
ddddZdd fddZd0ddddddddddddd fddZddd d!d"Zd#d$ddd% fd&d'Zd1dd(ddd) fd*d+Zd,d- Z fd.d/Z  ZS )2	MSSQLImplmssqlTZGOZVARCHARZNVARCHAR)	ZminvalueZmaxvalueZ
nominvalueZ
nomaxvaluecyclecacheorderZon_nullr,   None)returnc                   s(   t  j|i | | jd| j| _d S )NZmssql_batch_separator)super__init__Zcontext_optsgetbatch_separator)selfargkw	__class__ T/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/alembic/ddl/mssql.pyr0   A   s    zMSSQLImpl.__init__r   zOptional[CursorResult])	constructr.   c                   s6   t  j|g|R i |}| jr2| jr2| | j |S N)r/   _execas_sqlr2   static_output)r3   r:   argsr5   resultr6   r8   r9   r<   G   s    zMSSQLImpl._execc                 C  s   |  d| j  d S )NzBEGIN TRANSACTION)r>   Zcommand_terminatorr3   r8   r8   r9   
emit_beginM   s    zMSSQLImpl.emit_beginc                   s&   t    | jr"| jr"| | j d S r;   )r/   emit_commitr=   r2   r>   rA   r6   r8   r9   rC   P   s    
zMSSQLImpl.emit_commitNFstrzOptional[bool]z/Optional[Union[_ServerDefault, Literal[False]]]Optional[str]zOptional[TypeEngine]zOptional[_ServerDefault])
table_namecolumn_namenullableserver_defaultnametype_schemaexisting_typeexisting_server_defaultexisting_nullabler5   r.   c                   s(  |d ur.|d ur|}d }q^|d u r^t dn0|
d urL|d urL|
}|}d }n|d ur^t d d}t||	szt||	rd}||d< |	|d< t j||f|||||
d| |dur|du r|	dus|d u r| t	||d| |d urt j||||d	 |d ur$t j||||d
 d S )NzhMS-SQL ALTER COLUMN operations with NULL or NOT NULL require the existing_type or a new type_ be passed.zMS-SQL ALTER COLUMN operations that specify type_= should also specify a nullable= or existing_nullable= argument to avoid implicit conversion of NOT NULL columns to NULL.FTrI   rN   )rH   rK   rL   rM   rO   sys.default_constraints)rL   rI   )rL   rJ   )
r   CommandErrorwarnr   Z_server_default_is_identityZ_server_default_is_computedr/   r   r<   _ExecDropConstraint)r3   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   r5   Zused_defaultr6   r8   r9   r   U   sx    

zMSSQLImpl.alter_columnr#   )indexr.   c                 C  s\   |j dd pd}|jd us J |D ]$}||jjvr$|jt|tj q$| t	| d S )Nmssql_includer8   )
kwargsr1   tablecZappend_columnr
   sqltypesZNullTyper<   r   )r3   rT   rU   colr8   r8   r9   create_index   s    zMSSQLImpl.create_indexzUnion[TableClause, Table]z
List[dict])rW   rowsr5   r.   c                   sh   | j rN| d| jj|  t j||fi | | d| jj|  nt j||fi | d S )NzSET IDENTITY_INSERT %s ONzSET IDENTITY_INSERT %s OFF)r=   r<   dialectZidentifier_preparerZformat_tabler/   bulk_insert)r3   rW   r\   r5   r6   r8   r9   r^      s    zMSSQLImpl.bulk_insertr
   )rF   columnrL   r.   c                   s   | dd}|r$| t||d| | dd}|rH| t||d| | dd}|rj| t||| t j||fd|i| d S )NZmssql_drop_defaultFrP   Zmssql_drop_checkzsys.check_constraintsZmssql_drop_foreign_keyrL   )popr<   rS   _ExecDropFKConstraintr/   drop_column)r3   rF   r_   rL   r5   Zdrop_defaultZ
drop_checkZdrop_fksr6   r8   r9   rb      s$    zMSSQLImpl.drop_columnc                 C  s4   |d urt dd|}|d ur,t dd|}||kS )Nz[\(\) \"\'] )resub)r3   Zinspector_columnZmetadata_columnZrendered_metadata_defaultZrendered_inspector_defaultr8   r8   r9   compare_server_default   s    z MSSQLImpl.compare_server_defaultc                   sH   t  ||\}}}|d u r>|d ur>|s>|jd ur>|jjr>d}|||fS )NF)r/   _compare_identity_defaultr_   Zprimary_key)r3   Zmetadata_identityZinspector_identitydiffZignoredZis_alterr6   r8   r9   rg      s    
	z#MSSQLImpl._compare_identity_default)NFNNNNNN)N)__name__
__module____qualname__Z__dialect__Ztransactional_ddlr2   r   Ztype_synonymsZidentity_attrs_ignorer0   r<   rB   rC   r   r[   r^   rb   rf   rg   __classcell__r8   r8   r6   r9   r(   /   s0   	        *Y r(   c                   @  s&   e Zd ZdZddddddddZd	S )
rS   FrD   zUnion[Column, str]rE   r-   )tnamecolnamerK   rL   r.   c                 C  s   || _ || _|| _|| _d S r;   )rm   rn   rK   rL   )r3   rm   rn   rK   rL   r8   r8   r9   r0     s    z_ExecDropConstraint.__init__Nri   rj   rk   Zinherit_cacher0   r8   r8   r8   r9   rS     s   rS   c                   @  s$   e Zd ZdZdddddddZd	S )
ra   FrD   r
   rE   r-   )rm   rn   rL   r.   c                 C  s   || _ || _|| _d S r;   )rm   rn   rL   )r3   rm   rn   rL   r8   r8   r9   r0   !  s    z_ExecDropFKConstraint.__init__Nro   r8   r8   r8   r9   ra     s   ra   r)   r!   rD   )elementcompilerr.   c                 K  sD   | j | j| j| jf\}}}}d|||t||||r:|d ndd S )Na  declare @const_name varchar(256)
select @const_name = QUOTENAME([name]) from %(type)s
where parent_object_id = object_id('%(schema_dot)s%(tname)s')
and col_name(parent_object_id, parent_column_id) = '%(colname)s'
exec('alter table %(tname_quoted)s drop constraint ' + @const_name).rc   )typerm   rn   tname_quoted
schema_dot)rL   rm   rn   rK   r   )rp   rq   r5   rL   rm   rn   rK   r8   r8   r9   _exec_drop_col_constraint)  s    
rv   c                 K  s<   | j | j| j  }}}d||t||||r2|d ndd S )Nay  declare @const_name varchar(256)
select @const_name = QUOTENAME([name]) from
sys.foreign_keys fk join sys.foreign_key_columns fkc
on fk.object_id=fkc.constraint_object_id
where fkc.parent_object_id = object_id('%(schema_dot)s%(tname)s')
and col_name(fkc.parent_object_id, fkc.parent_column_id) = '%(colname)s'
exec('alter table %(tname_quoted)s drop constraint ' + @const_name)rr   rc   )rm   rn   rt   ru   )rL   rm   rn   r   )rp   rq   r5   rL   rm   rn   r8   r8   r9   _exec_drop_col_fk_constraintB  s    
rw   r   r    c                 K  s(   dt || j| jt|| jfi |f S )Nz%s %s)r   rF   rL   mssql_add_columnr_   rp   rq   r5   r8   r8   r9   visit_add_columnV  s    rz   r
   )rq   r_   r.   c                 K  s   d| j |fi | S )NzADD %s)Zget_column_specification)rq   r_   r5   r8   r8   r9   rx   ^  s    rx   r   c                 K  s6   dt || j| jt|| jt|| j| jr.dndf S )Nz%s %s %s %sZNULLzNOT NULL)r   rF   rL   r   rG   r   rM   rH   ry   r8   r8   r9   visit_column_nullableb  s    

r{   r   c                 K  s*   dt || j| jt|| jt|| jf S )Nz%s ADD DEFAULT %s FOR %s)r   rF   rL   r   defaultr   rG   ry   r8   r8   r9   visit_column_defaultn  s
    

r}   r   c                 K  s*   dt || j| jt|| jt|| jf S )Nz$EXEC sp_rename '%s.%s', %s, 'COLUMN')r   rF   rL   r   rG   Znewnamery   r8   r8   r9   visit_rename_column{  s
    

r~   r   c                 K  s*   dt || j| jt|| jt|| jf S )Nz%s %s %s)r   rF   rL   r   rG   r   rK   ry   r8   r8   r9   visit_column_type  s
    

r   r   c                 K  s"   dt || j| jt || jd f S )NzEXEC sp_rename '%s', %s)r   rF   rL   Znew_table_namery   r8   r8   r9   visit_rename_table  s    r   )A
__future__r   rd   typingr   r   r   r   r   Z
sqlalchemyr   rY   Zsqlalchemy.ext.compilerr	   Zsqlalchemy.schemar
   r   Zsqlalchemy.sql.baser   Zsqlalchemy.sql.elementsr   baser   r   r   r   r   r   r   r   r   r   r   r   implr   rc   r   r   r   Zsqlalchemy.dialects.mssql.baser    r!   Zsqlalchemy.engine.cursorr"   Zsqlalchemy.sql.schemar#   r$   Zsqlalchemy.sql.selectabler%   Zsqlalchemy.sql.type_apir&   r'   r(   rS   ra   rv   rw   rz   rx   r{   r}   r~   r   r   r8   r8   r8   r9   <module>   st    `

