
    ZiC                       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      	 	 	 	 	 	 d?d2       Z; e(e:d1      	 	 	 	 	 	 d@d3       Z< e(ed1      dAd4       Z=	 	 	 	 	 	 dBd5Z> e(ed1      	 	 	 	 	 	 dCd6       Z? e(ed1      	 	 	 	 	 	 dDd7       Z@ e(ed1      	 	 	 	 	 	 dEd8       ZA e(ed1      	 	 	 	 	 	 dFd9       ZB e(e!d1      	 	 	 	 	 	 dGd:       ZC	 	 	 	 	 	 	 	 	 	 	 	 dHd;ZD	 	 	 	 	 	 	 	 	 	 	 	 dHd<ZE	 	 	 	 	 	 	 	 	 	 dId=ZF e(ed1      	 	 	 	 	 	 	 	 dJd>       ZGy)K    )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            	      D    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ddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZddZ	 	 	 	 	 	 	 	 d fdZd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      M/home/portmadness/app/.venv/lib/python3.12/site-packages/alembic/ddl/mssql.pyr;   zMSSQLImpl.__init__D   s9    #$$#0044#T%9%9 
    c                    t        |   |g|i |}| j                  r'| j                  r| j	                  | j                         |S N)r:   _execas_sqlr>   static_output)r?   	constructargsrA   resultrB   s        rC   rG   zMSSQLImpl._execJ   sC    y64626;;4//t334rD   c                @    | j                  d| j                  z          y )NzBEGIN TRANSACTION)rI   command_terminator)r?   s    rC   
emit_beginzMSSQLImpl.emit_beginP   s    .1H1HHIrD   c                    t         |           | j                  r)| j                  r| j	                  | j                         y y y rF   )r:   emit_commitrH   r>   rI   )r?   rB   s    rC   rQ   zMSSQLImpl.emit_commitS   s8    ;;4//t334 0;rD   NF)nullableserver_defaultnametype_schemaexisting_typeexisting_server_defaultexisting_nullablec          	        |||}d }n9|7t        j                  d      |
	||
}|}d }n|t        j                  d       d}t        j                  ||	      st        j
                  ||	      rd}||d<   |	|d<   |dur'|du r#|	dus|| j                  t        ||d|             t        | $  ||f|||||
d| |dur|du r|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.FTrS   rX   sys.default_constraints)rR   rU   rV   rW   rY   )rV   rS   )rV   rT   )
r   CommandErrorwarnr    _server_default_is_identity_server_default_is_computedrG   _ExecDropConstraintr:   r   )r?   
table_namecolumn_namerR   rS   rT   rU   rV   rW   rX   rY   rA   used_defaultrB   s                rC   r   zMSSQLImpl.alter_columnX   s   &   !&&''> 
 *u/@(H "MEII/ 223
443
  L#1B ,CB()
 %'%'u48N JJ#-	 			
 '/		
 		
 &<5+@)$!#1	 %  G KT !  rD   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NullTyperG   r   )r?   indexrA   re   cols        rC   create_indexzMSSQLImpl.create_index   s     (($?E2{{&&&  	JC%++--'))&h6G6G*HI	J 	

;u++,rD   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)rH   rG   dialectidentifier_preparerformat_tabler:   bulk_insert)r?   rh   rowsrA   rB   s       rC   rt   zMSSQLImpl.bulk_insert   s     ;;JJ+,,22??FG Gt2r2JJ,,,22??FG
 Gt2r2rD   )rV   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_defaultFr[   mssql_drop_checkzsys.check_constraintsmssql_drop_foreign_keyrV   )poprG   r`   _ExecDropFKConstraintr:   drop_column)	r?   ra   columnrV   rA   drop_default
drop_checkdrop_fksrB   s	           rC   r|   zMSSQLImpl.drop_column   s     vv2E:JJ#(A6
 VV.6
JJ#(?
 662E:JJ,ZHIJDvDDrD   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        rC   compare_server_defaultz MSSQLImpl.compare_server_default   sP     %0(*$=)% &1 *,$>*& *-FFFrD   c                    t         |   ||      \  }}}|(|&|s$|j                  |j                  j                  rd}|||fS )NF)r:   _compare_identity_defaultr}   primary_key)r?   metadata_identityinspector_identitydiffignoredis_alterrB   s         rC   r   z#MSSQLImpl._compare_identity_default  s_    "''"C1#
gx
 %"."))5"))55 HWh&&rD   c                    |j                  di       j                         }|j                  d      s|j                  dd        |j                  d      s|j                  dd        |S )Ndialect_optionsre   mssql_clustered)r=   copyrz   )r?   reflected_objectkindoptionss       rC    adjust_reflected_dialect_optionsz*MSSQLImpl.adjust_reflected_dialect_options  s[     #&&'8"=BBD{{?+KK.{{,-KK)40rD   )returnNone)rJ   r   r   zOptional[CursorResult])ra   strrb   r   rR   Optional[bool]rS   z3Optional[Union[_ServerDefaultType, Literal[False]]]rT   Optional[str]rU   Optional[TypeEngine]rV   r   rW   r   rX   z/Union[_ServerDefaultType, Literal[False], None]rY   r   rA   r   r   r   )rm   r&   rA   r   r   r   )rh   zUnion[TableClause, Table]ru   z
List[dict]rA   r   r   r   )ra   r   r}   Column[Any]rV   r   r   r   )r   r+   r   r   r   zDict[str, Any])__name__
__module____qualname____dialect__transactional_ddlr>   r   type_synonymsidentity_attrs_ignorer;   rG   rO   rQ   r   ro   rt   r|   r   r   r   __classcell__)rB   s   @rC   r-   r-   5   s   KO--)Z1H0JJM'== A 
J5 $( "&* $.2 ,0!ee e
 !e
e e $e e ,e"
e  *!e" #e$ 
%eN	-3.36@3HK3	3* !%EE E
 E 
E6G,'$	 4	<?			rD   r-   c                  ,    e Zd ZdZ	 	 	 	 	 	 	 	 	 	 ddZy)r`   Fc                <    || _         || _        || _        || _        y rF   )tnamecolnamerU   rV   )r?   r   r   rU   rV   s        rC   r;   z_ExecDropConstraint.__init__,  s      

rD   N)
r   r   r   zUnion[Column[Any], str]rU   r   rV   r   r   r   r   r   r   inherit_cacher;   rf   rD   rC   r`   r`   )  s<    M

 )
 	

 
 

rD   r`   c                  (    e Zd ZdZ	 	 	 	 	 	 	 	 ddZy)r{   Fc                .    || _         || _        || _        y rF   )r   r   rV   )r?   r   r   rV   s       rC   r;   z_ExecDropFKConstraint.__init__<  s     
rD   N)r   r   r   r   rV   r   r   r   r   rf   rD   rC   r{   r{   9  s,    M#.8E	rD   r{   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)rV   r   r   rU   r   )elementcompilerrA   rV   r   r   rU   s          rC   _exec_drop_col_constraintr   D  s{    
 		%!FE7EG
 )(E6B&,fslJ	
 
 35J	
 
rD   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   )rV   r   r   r   )r   r   rA   rV   r   r   s         rC   _exec_drop_col_fk_constraintr   ]  se     %^^W]]GOO7EFG )(E6B&,fsl	J  35	J rD   c                x    t        || j                  | j                        dt        || j                  fi |S N )r   ra   rV   mssql_add_columnr}   r   r   rA   s      rC   visit_add_columnr   q  s7     	Hg00'..A7>>8R8 rD   c                .    d | j                   |fi |z  S )NzADD %s)get_column_specification)r   r}   rA   s      rC   r   r   y  s"     7h77E"EEErD   c                    t        || j                  | j                        dt        || j                        dt        || j                        d| j                  rdS dS )Nr   NULLzNOT NULL)r   ra   rV   r   rb   r   rW   rR   r   s      rC   visit_column_nullabler     sd    
 	Hg00'..AXw223Hg334""2	  )32	 rD   c                    t        || j                  | j                        dt        || j                        dt        || j                        S )Nz ADD DEFAULT z FOR )r   ra   rV   r   defaultr   rb   r   s      rC   visit_column_defaultr     sB     	Hg00'..Ah88W%8%89 rD   c           	         dt        || j                  | j                        dt        || j                        dt        || j
                        dS )NEXEC sp_rename 'r   ', z
, 'COLUMN')r   ra   rV   r   rb   newnamer   s      rC   visit_rename_columnr     sB    
 	(G$6$6G8W%8%898W__5 rD   c                    t        || j                  | j                        dt        || j                        dt        || j                        S r   )r   ra   rV   r   rb   r   rU   r   s      rC   visit_column_typer     sB    
 	Hg00'..AXw223Hgmm, rD   c                z    dt        || j                  | j                        dt        || j                  d       S )Nr   r   )r   ra   rV   new_table_namer   s      rC   visit_rename_tabler     s6    
 	(G$6$6G(G$:$:DA rD   c                T   |r|n| j                   j                  }|sJ dj                  | j                  j	                  |t        j                               | j                  j                  |      | j                  j                  |      | j                  j                  |            S )NzYexec sp_addextendedproperty 'MS_Description', {}, 'schema', {}, 'table', {}, 'column', {}
rq   default_schema_nameformatsql_compilerrender_literal_valuerk   r1   preparerquote_schemaquoter   rV   r   cnamecommentschema_names         rC   _add_column_commentr          #&(8(8(L(LK;	228&!!66**, **;7##E*##E*3

rD   c                T   |r|n| j                   j                  }|sJ dj                  | j                  j	                  |t        j                               | j                  j                  |      | j                  j                  |      | j                  j                  |            S )Nz\exec sp_updateextendedproperty 'MS_Description', {}, 'schema', {}, 'table', {}, 'column', {}r   r   s         rC   _update_column_commentr     r   rD   c                    |r|n| j                   j                  }|sJ dj                  | j                  j	                  |      | j                  j                  |      | j                  j                  |            S )NzVexec sp_dropextendedproperty 'MS_Description', 'schema', {}, 'table', {}, 'column', {})rq   r   r   r   r   r   )r   rV   r   r   r   s        rC   _drop_column_commentr     sq     #&(8(8(L(LK;	228&**;7##E*##E*3
rD   c                f   | j                   z| j                  7t        || j                  | j                  | j
                  | j                         S t        || j                  | j                  | j
                  | j                         S t        || j                  | j                  | j
                        S rF   )r   existing_commentr   rV   ra   rb   r   r   r   s      rC   visit_column_commentr     s     "##/)""##  '""##  $gnng&8&8':M:M
 	
rD   )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#   r   r   )r   r   r   r#   r   r   )r   r#   rV   r   r   r   r   r   r   r   r   r   )
r   r#   rV   r   r   r   r   r   r   r   )r   r   r   r#   rA   r   r   r   )H
__future__r   r   typingr   r   r   r   r   r	   
sqlalchemyr
   rk   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-   r`   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   rf   rD   rC   <module>r      s2   # 	        ( $ ) * 1          $ ' #      '<<5++52(*q qh*m  J  

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

)".; *& 
)W FF%0FF 
.'"'4 # 
-!		&3		 "	 
*g#0  
*g#0  
+w$1    	
  	,  	
  	,%2;>GJ 
-!

&3
;>

 "
rD   