
    OjC                       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& dd l'm(Z( er<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&l/m1Z1 d d'l2m3Z3 d d(l4m5Z5 dd)lm6Z6 dd*l"m7Z7  G d+ d,e#          Z8 G d- d.ee          Z9 G d/ d0ee          Z: e(e9d1          dUd7            Z; e(e:d1          dVd8            Z< e(ed1          dWd;            Z=dXd>Z> e(ed1          dYd@            Z? e(ed1          dZdB            Z@ e(ed1          d[dD            ZA e(ed1          d\dF            ZB e(e!d1          d]dH            ZCd^dNZDd^dOZEd_dPZF e(ed1          d`dT            ZGdS )a    )annotationsN)Any)Dict)List)Optional)TYPE_CHECKING)Union)types)Column)CreateIndex)
Executable)ClauseElement   )	AddColumn)alter_column)alter_table)ColumnComment)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)_ServerDefaultType)_ReflectedConstraintc            	           e Zd ZdZdZdZej        ddhfz   Zej        dz   Zd8 fd	Z	d9 fdZ
d8dZd8 fdZdddddddddd: fd$Zd;d'Zd< fd,Zdd-d= fd0Zd1 Z fd2Zd>d7Z xZS )?	MSSQLImplmssqlTGOVARCHARNVARCHAR)minvaluemaxvalue
nominvalue
nomaxvaluecyclecachereturnNonec                     t                      j        |i | | j                            d| j                  | _        d S )Nmssql_batch_separator)super__init__context_optsgetbatch_separator)selfargkw	__class__s      e/lsinfo/ai/hellotax_ai/training_center/backend/venv/lib/python3.11/site-packages/alembic/ddl/mssql.pyr=   zMSSQLImpl.__init__D   sH    #$$$$#044#T%9 
  
    	constructr   Optional[CursorResult]c                     t                      j        |g|R i |}| j        r!| j        r|                     | j                   |S N)r<   _execas_sqlr@   static_output)rA   rG   argsrC   resultrD   s        rE   rK   zMSSQLImpl._execJ   sX    y64666266; 	54/ 	5t3444rF   c                @    |                      d| j        z              d S )NzBEGIN TRANSACTION)rM   command_terminator)rA   s    rE   
emit_beginzMSSQLImpl.emit_beginP   s%    .1HHIIIIIrF   c                    t                                                       | j        r#| j        r|                     | j                   d S d S d S rJ   )r<   emit_commitrL   r@   rM   )rA   rD   s    rE   rT   zMSSQLImpl.emit_commitS   s^    ; 	54/ 	5t344444	5 	5 	5 	5rF   NF)nullableserver_defaultnametype_schemaexisting_typeexisting_server_defaultexisting_nullable
table_namestrcolumn_namerU   Optional[bool]rV   3Optional[Union[_ServerDefaultType, Literal[False]]]rW   Optional[str]rX   Optional[TypeEngine]rY   rZ   r[   /Union[_ServerDefaultType, Literal[False], None]r\   rC   c          	     R   |||}d }n8|t          j        d          n!|
	||
}|}d }n|t          j        d           d}t          j        ||	          st          j        ||	          rd}||d<   |	|d<   |dur/|du r+|	dus|%|                     t          ||d|                      t                      j	        ||f|||||
d| |dur+|du r'|%t                      	                    ||||	           |'t                      	                    ||||
           d S 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.FTrV   r[   sys.default_constraints)rU   rX   rY   rZ   r\   )rY   rV   )rY   rW   )
r   CommandErrorwarnr    _server_default_is_identity_server_default_is_computedrK   _ExecDropConstraintr<   r   )rA   r]   r_   rU   rV   rW   rX   rY   rZ   r[   r\   rC   used_defaultrD   s                rE   r   zMSSQLImpl.alter_columnX   s   &   !&&'>   ' *u/@(H "MEEI/   23
 
 	D43
 
	D
  L#1B ,CB()
 %''%%'u448N JJ#-	    			
 '/		
 		
 		
 		
 		
 &&<5+@+@)$$!#1	 %    GG  KT !      rF   indexr&   c                   |j                             dd           pd}|j        J |D ]B}||j        j        vr2|j                            t          |t          j                             C|                     t          |fi |           d S )Nmssql_include )
kwargsr?   tablecappend_columnr   sqltypesNullTyperK   r   )rA   rm   rC   ro   cols        rE   create_indexzMSSQLImpl.create_index   s     (($??E2{&&&  	J 	JC%+-''))&h6G*H*HIII

;u++++,,,,,rF   rr   Union[TableClause, Table]rows
List[dict]c                Z   | j         r|                     d| j        j                            |          z              t                      j        ||fi | |                     d| j        j                            |          z             d S  t                      j        ||fi | d S )NzSET IDENTITY_INSERT %s ONzSET IDENTITY_INSERT %s OFF)rL   rK   dialectidentifier_preparerformat_tabler<   bulk_insert)rA   rr   rz   rC   rD   s       rE   r   zMSSQLImpl.bulk_insert   s     ; 	3JJ+,2??FFG    EGGt22r222JJ,,2??FFG    
  EGGt22r22222rF   )rY   columnColumn[Any]c                  |                     dd          }|r%|                     t          ||d|                     |                     dd          }|r%|                     t          ||d|                     |                     dd          }|r$|                     t          |||                      t	                      j        ||fd|i| d S )Nmssql_drop_defaultFrf   mssql_drop_checkzsys.check_constraintsmssql_drop_foreign_keyrY   )poprK   rk   _ExecDropFKConstraintr<   drop_column)	rA   r]   r   rY   rC   drop_default
drop_checkdrop_fksrD   s	           rE   r   zMSSQLImpl.drop_column   s    vv2E:: 	JJ#(A6   
 VV.66
 	JJ#(?   
 662E:: 	JJJ,ZHHIIIJDDvDDDDDDrF   c                n    |t          j        dd|          }|t          j        dd|          }||k    S )Nz[\(\) \"\'] )resub)rA   inspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaults        rE   compare_server_defaultz MSSQLImpl.compare_server_default   sV     %0(*$=) )% &1 *,$>* *& *-FFFrF   c                    t                                          ||          \  }}}|||s|j        |j        j        rd}|||fS )NF)r<   _compare_identity_defaultr   primary_key)rA   metadata_identityinspector_identitydiffignoredis_alterrD   s         rE   r   z#MSSQLImpl._compare_identity_default  sj    "'''"C"C1#
 #
gx
 %". /")5")5 6
 HWh&&rF   reflected_objectr+   kindDict[str, Any]c                   |                     di                                           }|                     d          s|                    dd            |                     d          s|                    dd            |S )Ndialect_optionsro   mssql_clustered)r?   copyr   )rA   r   r   optionss       rE    adjust_reflected_dialect_optionsz*MSSQLImpl.adjust_reflected_dialect_options  s}     #&&'8"==BBDD{{?++ 	/KK...{{,-- 	1KK)4000rF   )r8   r9   )rG   r   r8   rH   )r]   r^   r_   r^   rU   r`   rV   ra   rW   rb   rX   rc   rY   rb   rZ   rc   r[   rd   r\   r`   rC   r   r8   r9   )rm   r&   rC   r   r8   r9   )rr   ry   rz   r{   rC   r   r8   r9   )r]   r^   r   r   rY   rb   r8   r9   )r   r+   r   r^   r8   r   )__name__
__module____qualname____dialect__transactional_ddlr@   r   type_synonymsidentity_attrs_ignorer=   rK   rR   rT   r   rx   r   r   r   r   r   __classcell__)rD   s   @rE   r-   r-   5   s       KO-)Z1H0JJM'= A 
 
 
 
 
 
     J J J J5 5 5 5 5 5 $( "&* $.2 ,0!e e e e e e e eN	- 	- 	- 	-3 3 3 3 3 3* !%E E E E E E E E6G G G,' ' ' ' '$	 	 	 	 	 	 	 	rF   r-   c                      e Zd ZdZddZdS )rk   Ftnamer^   colnameUnion[Column[Any], str]rX   rY   rb   r8   r9   c                >    || _         || _        || _        || _        d S rJ   )r   r   rX   rY   )rA   r   r   rX   rY   s        rE   r=   z_ExecDropConstraint.__init__,  s$     

rF   N)
r   r^   r   r   rX   r^   rY   rb   r8   r9   r   r   r   inherit_cacher=   rp   rF   rE   rk   rk   )  s-        M
 
 
 
 
 
rF   rk   c                      e Zd ZdZdd
ZdS )r   Fr   r^   r   r   rY   rb   r8   r9   c                0    || _         || _        || _        d S rJ   )r   r   rY   )rA   r   r   rY   s       rE   r=   z_ExecDropFKConstraint.__init__<  s     
rF   N)r   r^   r   r   rY   rb   r8   r9   r   rp   rF   rE   r   r   9  s-        M     rF   r   r.   elementcompilerr$   r8   r^   c           	         | j         | j        | j        | j        f\  }}}}d|||t	          |||          |r|dz   n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)rY   r   r   rX   r   )r   r   rC   rY   r   r   rX   s          rE   _exec_drop_col_constraintr   D  sn    
 		%!FE7EG
 )(E6BB&,4fsll"J J	
 
rF   c                l    | j         | j        | j        }}}d||t          |||          |r|dz   n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   )rY   r   r   r   )r   r   rC   rY   r   r   s         rE   _exec_drop_col_fk_constraintr   ]  sZ     %^W]GO7EFG )(E6BB&,4fsll"	J J rF   r   r#   c                d    t          || j        | j                  dt          || j        fi |S N )r   r]   rY   mssql_add_columnr   r   r   rC   s      rE   visit_add_columnr   q  sB     	Hg0'.AAAA7>88R888 rF   r   r   c                $    d | j         |fi |z  S )NzADD %s)get_column_specification)r   r   rC   s      rE   r   r   y  s%     7h7EE"EEEErF   r   c                    t          || j        | j                  dt          || j                  dt          || j                  d| j        rdndS )Nr   NULLzNOT NULL)r   r]   rY   r   r_   r   rZ   rU   r   s      rE   visit_column_nullabler     sf    
 	Hg0'.AAAAXw23333Hg34444"2
2	 rF   r   c                    t          || j        | j                  dt          || j                  dt          || j                  S )Nz ADD DEFAULT z FOR )r   r]   rY   r   defaultr   r_   r   s      rE   visit_column_defaultr     sP     	Hg0'.AAAAh88888W%8999 rF   r   c           	         dt          || j        | j                  dt          || j                  dt          || j                  dS )NEXEC sp_rename 'r   ', z
, 'COLUMN')r   r]   rY   r   r_   newnamer   s      rE   visit_rename_columnr     sU     
 	(G$6GGGG8W%899998W_5555 rF   r   c                    t          || j        | j                  dt          || j                  dt          || j                  S r   )r   r]   rY   r   r_   r   rX   r   s      rE   visit_column_typer     sP    
 	Hg0'.AAAAXw23333Hgm,,, rF   r   c                l    dt          || j        | j                  dt          || j        d           S )Nr   r   )r   r]   rY   new_table_namer   s      rE   visit_rename_tabler     s?     
 	(G$6GGGG(G$:DAAA rF   rY   rb   r   cnamecommentc                >   |r|n| j         j        }|sJ d                    | j                            |t          j                              | j                            |          | j        	                    |          | j        	                    |                    S )NzYexec sp_addextendedproperty 'MS_Description', {}, 'schema', {}, 'table', {}, 'column', {}
r}   default_schema_nameformatsql_compilerrender_literal_valueru   r1   preparerquote_schemaquoter   rY   r   r   r   schema_names         rE   _add_column_commentr          #L&&(8(LK;	228&!66*,,  **;77##E**##E**3
 3

rF   c                >   |r|n| j         j        }|sJ d                    | j                            |t          j                              | j                            |          | j        	                    |          | j        	                    |                    S )Nz\exec sp_updateextendedproperty 'MS_Description', {}, 'schema', {}, 'table', {}, 'column', {}r   r   s         rE   _update_column_commentr     r   rF   c                    |r|n| j         j        }|sJ d                    | j                            |          | j                            |          | j                            |                    S )NzVexec sp_dropextendedproperty 'MS_Description', 'schema', {}, 'table', {}, 'column', {})r}   r   r   r   r   r   )r   rY   r   r   r   s        rE   _drop_column_commentr     sx     #L&&(8(LK;	228&**;77##E**##E**3
 3
rF   r   rC   r   c                    | j         U| j        't          || j        | j        | j        | j                   S t          || j        | j        | j        | j                   S t          || j        | j        | j                  S rJ   )r   existing_commentr   rY   r]   r_   r   r   r   s      rE   visit_column_commentr     s     "#/)"#   '"#   $gng&8':M
 
 	
rF   )r   rk   r   r$   r8   r^   )r   r   r   r$   r8   r^   )r   r   r   r#   r8   r^   )r   r#   r   r   r8   r^   )r   r   r   r#   r8   r^   )r   r   r   r#   r8   r^   )r   r   r   r#   r8   r^   )r   r   r   r#   r8   r^   )r   r   r   r#   r8   r^   )r   r#   rY   rb   r   r^   r   r^   r   r^   r8   r^   )
r   r#   rY   rb   r   r^   r   r^   r8   r^   )r   r   r   r#   rC   r   r8   r^   )H
__future__r   r   typingr   r   r   r   r   r	   
sqlalchemyr
   ru   sqlalchemy.schemar   r   sqlalchemy.sql.baser   sqlalchemy.sql.elementsr   baser   r   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-   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rp   rF   rE   <module>r      sV   # " " " " " 				                                           ( ( ( ( ( ( $ $ $ $ $ $ ) ) ) ) ) ) * * * * * * 1 1 1 1 1 1                                                       $ $ $ $ $ $ ' ' ' ' ' ' # # # # # #                               ' ' ' ' ' ' +<<<<<<<<<<<<555555++++++++++++555555222222((((((******q q q q q q q qh    *m        J    

w''   ('0 

))   *)& 
)W   F F F F 
.'""   #" 
-!!	 	 	 "!	 
*g    
*g    
+w       ,   ,    
-!!
 
 
 "!
 
 
rF   