
    +h7                    z   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% ddl&m'Z' er6d 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.m0Z0 d d&l1m2Z2 d d'l3m4Z4 dd(lm5Z5  G d) d*e"      Z6 G d+ d,ee      Z7 G d- d.ee      Z8 e'e7d/      	 	 	 	 	 	 d9d0       Z9 e'e8d/      	 	 	 	 	 	 d:d1       Z: e'ed/      d;d2       Z;	 	 	 	 	 	 d<d3Z< e'ed/      	 	 	 	 	 	 d=d4       Z= e'ed/      	 	 	 	 	 	 d>d5       Z> e'ed/      	 	 	 	 	 	 d?d6       Z? e'ed/      	 	 	 	 	 	 d@d7       Z@ e'e d/      	 	 	 	 	 	 dAd8       ZAy)B    )annotationsN)Any)Dict)List)Optional)TYPE_CHECKING)Union)types)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)compiles)Literal)MSDDLCompiler)MSSQLCompiler)CursorResult)Index)Table)TableClause)
TypeEngine)_ServerDefaultc                  @    e Zd ZdZdZdZej                  ddhfz   Zej                  dz   Zd fdZ	d fdZ
dd	Zd fd
Z	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZddZ	 	 	 	 	 	 	 	 d fdZ	 d	 	 	 	 	 	 	 d fdZd Z fdZ	 	 	 	 	 	 ddZ xZS )	MSSQLImplmssqlTGOVARCHARNVARCHAR)minvaluemaxvalue
nominvalue
nomaxvaluecyclecachec                z    t        |   |i | | j                  j                  d| j                        | _        y )Nmssql_batch_separator)super__init__context_optsgetbatch_separator)selfargkw	__class__s      D/var/www/html/venv/lib/python3.12/site-packages/alembic/ddl/mssql.pyr9   zMSSQLImpl.__init__B   s9    #$$#0044#T%9%9 
    c                    t        |   |g|i |}| j                  r'| j                  r| j	                  | j                         |S N)r8   _execas_sqlr<   static_output)r=   	constructargsr?   resultr@   s        rA   rE   zMSSQLImpl._execH   sC    y64626;;4//t334rB   c                @    | j                  d| j                  z          y )NzBEGIN TRANSACTION)rG   command_terminator)r=   s    rA   
emit_beginzMSSQLImpl.emit_beginN   s    .1H1HHIrB   c                    t         |           | j                  r)| j                  r| j	                  | j                         y y y rD   )r8   emit_commitrF   r<   rG   )r=   r@   s    rA   rO   zMSSQLImpl.emit_commitQ   s8    ;;4//t334 0;rB   c           	        |||}d }n9|7t        j                  d      |
	||
}|}d }n|t        j                  d       d}t        j                  ||	      st        j
                  ||	      rd}||d<   |	|d<   t        |   ||f|||||
d| |dur<|du r8|	dus|| j                  t        ||d|             |t        |   ||||	       |t        |   ||||
       y y )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.FTserver_defaultexisting_server_default)nullabletype_schemaexisting_typeexisting_nullablesys.default_constraints)rU   rQ   )rU   name)
r   CommandErrorwarnr   _server_default_is_identity_server_default_is_computedr8   r   rE   _ExecDropConstraint)r=   
table_namecolumn_namerS   rQ   rY   rT   rU   rV   rR   rW   r?   used_defaultr@   s                rA   r   zMSSQLImpl.alter_columnV   s{       !&&''> 
 *u/@(H "MEII/ 223
443
  L#1B ,CB()		
 '/		
 		
 &<5+@&e3~7M

'"#1	 )$!#1	 %  G KT !  rB   c                <   |j                   j                  dd       xs d}|j                  J |D ]N  }||j                  j                  vs|j                  j	                  t        |t        j                               P | j                  t        |fi |       y )Nmssql_include )
kwargsr;   tablecappend_columnr   sqltypesNullTyperE   r   )r=   indexr?   rc   cols        rA   create_indexzMSSQLImpl.create_index   s     (($?E2{{&&&  	JC%++--'))&h6G6G*HI	J 	

;u++,rB   c                @   | j                   r| j                  d| j                  j                  j	                  |      z         t        |   ||fi | | j                  d| j                  j                  j	                  |      z         y t        |   ||fi | y )NzSET IDENTITY_INSERT %s ONzSET IDENTITY_INSERT %s OFF)rF   rE   dialectidentifier_preparerformat_tabler8   bulk_insert)r=   rf   rowsr?   r@   s       rA   rr   zMSSQLImpl.bulk_insert   s     ;;JJ+,,22??FG Gt2r2JJ,,,22??FG
 Gt2r2rB   c                P   |j                  dd      }|r| j                  t        ||d|             |j                  dd      }|r| j                  t        ||d|             |j                  dd      }|r| j                  t        |||             t	        |   ||fd|i| y )Nmssql_drop_defaultFrX   mssql_drop_checkzsys.check_constraintsmssql_drop_foreign_keyrU   )poprE   r^   _ExecDropFKConstraintr8   drop_column)	r=   r_   columnrU   r?   drop_default
drop_checkdrop_fksr@   s	           rA   rz   zMSSQLImpl.drop_column   s     vv2E:JJ#(A6
 VV.6
JJ#(?
 662E:JJ,ZHIJDvDDrB   c                p    |t        j                  dd|      }|t        j                  dd|      }||k7  S )Nz[\(\) \"\'] )resub)r=   inspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaults        rA   compare_server_defaultz MSSQLImpl.compare_server_default   sP     %0(*$=)% &1 *,$>*& *-FFFrB   c                    t         |   ||      \  }}}|(|&|s$|j                  |j                  j                  rd}|||fS )NF)r8   _compare_identity_defaultr{   primary_key)r=   metadata_identityinspector_identitydiffignoredis_alterr@   s         rA   r   z#MSSQLImpl._compare_identity_default   s_    "''"C1#
gx
 %"."))5"))55 HWh&&rB   c                    |j                  di       j                         }|j                  d      s|j                  dd        |j                  d      s|j                  dd        |S )Ndialect_optionsrc   mssql_clustered)r;   copyrx   )r=   reflected_objectkindoptionss       rA    adjust_reflected_dialect_optionsz*MSSQLImpl.adjust_reflected_dialect_options  s[     #&&'8"=BBD{{?+KK.{{,-KK)40rB   )returnNone)rH   r   r   zOptional[CursorResult])NFNNNNNN)r_   strr`   r   rS   Optional[bool]rQ   z/Optional[Union[_ServerDefault, Literal[False]]]rY   Optional[str]rT   Optional[TypeEngine]rU   r   rV   r   rR   zOptional[_ServerDefault]rW   r   r?   r   r   r   )rk   r%   r?   r   r   r   )rf   zUnion[TableClause, Table]rs   z
List[dict]r?   r   r   r   rD   )r_   r   r{   Column[Any]rU   r   r   r   )r   Dict[str, Any]r   r   r   r   )__name__
__module____qualname____dialect__transactional_ddlr<   r   type_synonymsidentity_attrs_ignorer9   rE   rM   rO   r   rm   rr   rz   r   r   r   __classcell__)r@   s   @rA   r+   r+   3   s   KO--)Z1H0JJM'== A 
J5 $( "&* $.2<@,0VV V !	V

V V $V V ,V ":V *V V 
Vp	-3.36@3HK3	3( !%	EE E 	E 
E4G,'$	 .	69			rB   r+   c                  ,    e Zd ZdZ	 	 	 	 	 	 	 	 	 	 ddZy)r^   Fc                <    || _         || _        || _        || _        y rD   )tnamecolnamerT   rU   )r=   r   r   rT   rU   s        rA   r9   z_ExecDropConstraint.__init__  s      

rB   N)
r   r   r   zUnion[Column[Any], str]rT   r   rU   r   r   r   r   r   r   inherit_cacher9   rd   rB   rA   r^   r^     s<    M

 )
 	

 
 

rB   r^   c                  (    e Zd ZdZ	 	 	 	 	 	 	 	 ddZy)ry   Fc                .    || _         || _        || _        y rD   )r   r   rU   )r=   r   r   rU   s       rA   r9   z_ExecDropFKConstraint.__init__*  s     
rB   N)r   r   r   r   rU   r   r   r   r   rd   rB   rA   ry   ry   '  s,    M#.8E	rB   ry   r,   c           	         | j                   | j                  | j                  | j                  f\  }}}}d|||t	        |||      |r	|dz   dz  S ddz  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).r   )typer   r   tname_quoted
schema_dot)rU   r   r   rT   r   )elementcompilerr?   rU   r   r   rT   s          rA   _exec_drop_col_constraintr   2  s{    
 		%!FE7EG
 )(E6B&,fslJ	
 
 35J	
 
rB   c                    | j                   | j                  | j                  }}}d||t        |||      |r	|dz   dz  S ddz  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)r   r   )r   r   r   r   )rU   r   r   r   )r   r   r?   rU   r   r   s         rA   _exec_drop_col_fk_constraintr   K  se     %^^W]]GOO7EFG )(E6B&,fsl	J  35	J rB   c                x    t        || j                  | j                        dt        || j                  fi |S N )r   r_   rU   mssql_add_columnr{   r   r   r?   s      rA   visit_add_columnr   _  s7     	Hg00'..A7>>8R8 rB   c                .    d | j                   |fi |z  S )NzADD %s)get_column_specification)r   r{   r?   s      rA   r   r   g  s"     7h77E"EEErB   c                    t        || j                  | j                        dt        || j                        dt        || j                        d| j                  rdS dS )Nr   NULLzNOT NULL)r   r_   rU   r   r`   r   rV   rS   r   s      rA   visit_column_nullabler   m  sd    
 	Hg00'..AXw223Hg334""2	  )32	 rB   c                    t        || j                  | j                        dt        || j                        dt        || j                        S )Nz ADD DEFAULT z FOR )r   r_   rU   r   defaultr   r`   r   s      rA   visit_column_defaultr   y  sB     	Hg00'..Ah88W%8%89 rB   c           	         dt        || j                  | j                        dt        || j                        dt        || j
                        dS )NEXEC sp_rename 'r   ', z
, 'COLUMN')r   r_   rU   r   r`   newnamer   s      rA   visit_rename_columnr     sB    
 	(G$6$6G8W%8%898W__5 rB   c                    t        || j                  | j                        dt        || j                        dt        || j                        S r   )r   r_   rU   r   r`   r   rT   r   s      rA   visit_column_typer     sB    
 	Hg00'..AXw223Hgmm, rB   c                z    dt        || j                  | j                        dt        || j                  d       S )Nr   r   )r   r_   rU   new_table_namer   s      rA   visit_rename_tabler     s6    
 	(G$6$6G(G$:$:DA rB   )r   r^   r   r#   r   r   )r   ry   r   r#   r   r   )r   r   r   r"   r   r   )r   r"   r{   r   r   r   )r   r   r   r"   r   r   )r   r   r   r"   r   r   )r   r   r   r"   r   r   )r   r   r   r"   r   r   )r   r   r   r"   r   r   )B
__future__r   r   typingr   r   r   r   r   r	   
sqlalchemyr
   ri   sqlalchemy.schemar   r   sqlalchemy.sql.baser   sqlalchemy.sql.elementsr   baser   r   r   r   r   r   r   r   r   r   r   r   implr   r   r   r   util.sqla_compatr    r!   sqlalchemy.dialects.mssql.baser"   r#   sqlalchemy.engine.cursorr$   sqlalchemy.sql.schemar%   r&   sqlalchemy.sql.selectabler'   sqlalchemy.sql.type_apir(   r)   r+   r^   ry   r   r   r   r   r   r   r   r   r   rd   rB   rA   <module>r      sJ   # 	        ( $ ) * 1         $ ' #      '<<5++52$a aH*m  J  

w' ,9 (0 

)".; *& 
)W FF%0FF 
.'"'4 # 
-!		&3		 "	 
*g#0  
*g#0  
+w$1  rB   