
    -jiC                    B   S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S S	K
Jr  S S
KJr  S SKJr  S SKJr  S SKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   SSKJ!r!  SSK"J#r#  SSK$J%r%  SSK%J&r&  SS K'J(r(  \(       a<  S S!KJ)r)  S S"K*J+r+  S S#K*J,r,  S S$K-J.r.  S S%K/J0r0  S S&K/J1r1  S S'K2J3r3  S S(K4J5r5  SS)KJ6r6  SS*K"J7r7   " S+ S,\#5      r8 " S- S.\\5      r9 " S/ S0\\5      r:\(" \9S15            S?S2 j5       r;\(" \:S15            S@S3 j5       r<\(" \S15      SAS4 j5       r=      SBS5 jr>\(" \S15            SCS6 j5       r?\(" \S15            SDS7 j5       r@\(" \S15            SES8 j5       rA\(" \S15            SFS9 j5       rB\(" \!S15            SGS: j5       rC            SHS; jrD            SHS< jrE          SIS= jrF\(" \S15              SJS> j5       rGg)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            	      p  ^  \ rS rSrSrSrSr\R                  SS14-   r\R                  S-   r	SU 4S jjr
SU 4S	 jjrSS
 jrSU 4S jjrSSSSSSSSS.                       SU 4S jjjrSS jr        SU 4S jjrSS.       SU 4S jjjrS rU 4S jr      SS jrSrU =r$ )	MSSQLImpl5   mssqlTGOVARCHARNVARCHAR)minvaluemaxvalue
nominvalue
nomaxvaluecyclecachec                |   > [         TU ]  " U0 UD6  U R                  R                  SU R                  5      U l        g )Nmssql_batch_separator)super__init__context_optsgetbatch_separator)selfargkw	__class__s      K/home/james-whalen/.local/lib/python3.13/site-packages/alembic/ddl/mssql.pyr<   MSSQLImpl.__init__D   s9    #$$#0044#T%9%9 
    c                   > [         TU ]  " U/UQ70 UD6nU R                  (       a,  U R                  (       a  U R	                  U R                  5        U$ N)r;   _execas_sqlr?   static_output)r@   	constructargsrB   resultrC   s        rD   rI   MSSQLImpl._execJ   sC    y64626;;4//t334rF   c                @    U R                  SU R                  -   5        g )NzBEGIN TRANSACTION)rK   command_terminator)r@   s    rD   
emit_beginMSSQLImpl.emit_beginP   s    .1H1HHIrF   c                   > [         TU ]  5         U R                  (       a.  U R                  (       a  U R	                  U R                  5        g g g rH   )r;   emit_commitrJ   r?   rK   )r@   rC   s    rD   rU   MSSQLImpl.emit_commitS   s8    ;;4//t334 0;rF   NF)nullableserver_defaultnametype_schemaexisting_typeexisting_server_defaultexisting_nullablec          	       > Ub"  Ub  UnS nO@Uc  [         R                  " S5      eO&U
b
  Ub  U
nUnS nOUb  [         R                  " S5        Sn[        R                  " XI5      (       d  [        R
                  " XI5      (       a
  SnXKS'   XS'   USLa*  USL a%  U	SLd  Uc  U R                  [        UUSU5      5        [        TU ]$  " UU4UUUUU
S.UD6  USLa  USL a  Ub  [        TU ]%  UUUUS	9  Ub  [        TU ]%  XXuS
9  g g )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.FTrX   r]   sys.default_constraints)rW   rZ   r[   r\   r^   )r[   rX   )r[   rY   )
r   CommandErrorwarnr    _server_default_is_identity_server_default_is_computedrI   _ExecDropConstraintr;   r   )r@   
table_namecolumn_namerW   rX   rY   rZ   r[   r\   r]   r^   rB   used_defaultrC   s                rD   r   MSSQLImpl.alter_columnX   s   &   !&&''>  ' *u/@(H "MEII/ 22
 
44
 
  L#1 ,C()
 %'%'u48N JJ#-	 			
 '/		
 		
 &<5+@)$!#1	 %  G  !  rF   c                P   UR                   R                  SS 5      =(       d    SnUR                  c   eU HQ  nXAR                  R                  ;  d  M  UR                  R	                  [        U[        R                  5      5        MS     U R                  [        U40 UD65        g )Nmssql_include )
kwargsr>   tablecappend_columnr   sqltypesNullTyperI   r   )r@   indexrB   rk   cols        rD   create_indexMSSQLImpl.create_index   s~     (($?E2{{&&& C++--'))&h6G6G*HI ! 	

;u++,rF   c                J  > U R                   (       a  U R                  SU R                  R                  R	                  U5      -  5        [
        TU ]  " X40 UD6  U R                  SU R                  R                  R	                  U5      -  5        g [
        TU ]  " X40 UD6  g )NzSET IDENTITY_INSERT %s ONzSET IDENTITY_INSERT %s OFF)rJ   rI   dialectidentifier_preparerformat_tabler;   bulk_insert)r@   rn   rowsrB   rC   s       rD   r{   MSSQLImpl.bulk_insert   s     ;;JJ+,,22??FG G2r2JJ,,,22??FG
 G2r2rF   )r[   c               h  > UR                  SS5      nU(       a  U R                  [        XSU5      5        UR                  SS5      nU(       a  U R                  [        XSU5      5        UR                  SS5      nU(       a  U R                  [        XU5      5        [        TU ]  " X4SU0UD6  g )Nmssql_drop_defaultFr`   mssql_drop_checkzsys.check_constraintsmssql_drop_foreign_keyr[   )poprI   re   _ExecDropFKConstraintr;   drop_column)	r@   rf   columnr[   rB   drop_default
drop_checkdrop_fksrC   s	           rD   r   MSSQLImpl.drop_column   s     vv2E:JJ#(A6
 VV.6
JJ#(?
 662E:JJ,ZHIJDvDDrF   c                v    Ub  [         R                  " SSU5      nUb  [         R                  " SSU5      nXC:g  $ )Nz[\(\) \"\'] )resub)r@   inspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaults        rD   compare_server_default MSSQLImpl.compare_server_default   sM     %0(*$=)% &1 *,$>*& *FFrF   c                   > [         TU ]  X5      u  p4nUc4  Ub1  U(       d*  UR                  b  UR                  R                  (       a  SnX4U4$ )NF)r;   _compare_identity_defaultr   primary_key)r@   metadata_identityinspector_identitydiffignoredis_alterrC   s         rD   r   #MSSQLImpl._compare_identity_default  sX    "''"C#
x
 %"."))5"))55 Hh&&rF   c                    UR                  S0 5      R                  5       nUR                  S5      (       d  UR                  SS 5        UR                  S5      (       d  UR                  SS 5        U$ )Ndialect_optionsrk   mssql_clustered)r>   copyr   )r@   reflected_objectkindoptionss       rD    adjust_reflected_dialect_options*MSSQLImpl.adjust_reflected_dialect_options  sa     #&&'8"=BBD{{?++KK.{{,--KK)40rF   )r?   )returnNone)rL   r   r   zOptional[CursorResult])rf   strrg   r   rW   Optional[bool]rX   z3Optional[Union[_ServerDefaultType, Literal[False]]]rY   Optional[str]rZ   Optional[TypeEngine]r[   r   r\   r   r]   z/Union[_ServerDefaultType, Literal[False], None]r^   r   rB   r   r   r   )rs   r&   rB   r   r   r   )rn   zUnion[TableClause, Table]r|   z
List[dict]rB   r   r   r   )rf   r   r   Column[Any]r[   r   r   r   )r   r+   r   r   r   zDict[str, Any])__name__
__module____qualname____firstlineno____dialect__transactional_ddlr?   r   type_synonymsidentity_attrs_ignorer<   rI   rR   rU   r   ru   r{   r   r   r   r   __static_attributes____classcell__)rC   s   @rD   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 eN	-3.36@3HK3	3* !%EE E
 E 
E E6G,'$	 4	<?			 	rF   r-   c                  6    \ rS rSrSr          SS jrSrg)re   i)  Fc                4    Xl         X l        X0l        X@l        g rH   )tnamecolnamerZ   r[   )r@   r   r   rZ   r[   s        rD   r<   _ExecDropConstraint.__init__,  s     

rF   )r   r[   r   rZ   N)
r   r   r   zUnion[Column[Any], str]rZ   r   r[   r   r   r   r   r   r   r   inherit_cacher<   r   rl   rF   rD   re   re   )  s<    M

 )
 	

 
 

rF   re   c                  2    \ rS rSrSr        SS jrSrg)r   i9  Fc                (    Xl         X l        X0l        g rH   )r   r   r[   )r@   r   r   r[   s       rD   r<   _ExecDropFKConstraint.__init__<  s     
rF   )r   r[   r   N)r   r   r   r   r[   r   r   r   r   rl   rF   rD   r   r   9  s,    M#.8E	rF   r   r/   c           	         U R                   U R                  U R                  U R                  4u  p4pVSUUU[	        XU5      U(       a	  US-   S.-  $ S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)r[   r   r   rZ   r   )elementcompilerrB   r[   r   r   rZ   s          rD   _exec_drop_col_constraintr   D  su    
 		%!F7G
 )(6B&,fslJ	
 
 35J	
 
rF   c                    U R                   U R                  U R                  pTnSUU[        XU5      U(       a	  US-   S.-  $ S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   )r[   r   r   r   )r   r   rB   r[   r   r   s         rD   _exec_drop_col_fk_constraintr   ]  sa     %^^W]]GOO7FG )(6B&,fsl	J  35	J rF   c                x    [        XR                  U R                  5      < S[        XR                  40 UD6< 3$ N )r   rf   r[   mssql_add_columnr   r   r   rB   s      rD   visit_add_columnr   q  s3     	H00'..A>>8R8 rF   c                .    SU R                   " U40 UD6-  $ )NzADD %s)get_column_specification)r   r   rB   s      rD   r   r   y  s     h77E"EEErF   c                    [        XR                  U R                  5      < S[        XR                  5      < S[        XR                  5      < SU R                  (       a  S< 3$ S< 3$ )Nr   NULLzNOT NULL)r   rf   r[   r   rg   r   r\   rW   r   s      rD   visit_column_nullabler     s^    
 	H00'..AX223H334""2	  )32	 rF   c                    [        XR                  U R                  5      < S[        XR                  5      < S[        XR                  5      < 3$ )Nz ADD DEFAULT z FOR )r   rf   r[   r   defaultr   rg   r   s      rD   visit_column_defaultr     s<     	H00'..Ah88%8%89 rF   c           	         S[        XR                  U R                  5      < S[        XR                  5      < S[        XR
                  5      < S3$ )NEXEC sp_rename 'r   ', z
, 'COLUMN')r   rf   r[   r   rg   newnamer   s      rD   visit_rename_columnr     s<    
 	($6$6G8%8%898__5 rF   c                    [        XR                  U R                  5      < S[        XR                  5      < S[        XR                  5      < 3$ r   )r   rf   r[   r   rg   r   rZ   r   s      rD   visit_column_typer     s<    
 	H00'..AX223Hmm, rF   c                z    S[        XR                  U R                  5      < S[        XR                  S 5      < 3$ )Nr   r   )r   rf   r[   new_table_namer   s      rD   visit_rename_tabler     s2    
 	($6$6G($:$:DA rF   c                j   U(       a  UOU R                   R                  nU(       d   eSR                  U R                  R	                  U[
        R                  " 5       5      U R                  R                  U5      U R                  R                  U5      U R                  R                  U5      5      $ )NzYexec sp_addextendedproperty 'MS_Description', {}, 'schema', {}, 'table', {}, 'column', {}
rx   default_schema_nameformatsql_compilerrender_literal_valuerq   r2   preparerquote_schemaquoter   r[   r   cnamecommentschema_names         rD   _add_column_commentr          #&(8(8(L(LK;	228&!!66**, **;7##E*##E*3

rF   c                j   U(       a  UOU R                   R                  nU(       d   eSR                  U R                  R	                  U[
        R                  " 5       5      U R                  R                  U5      U R                  R                  U5      U R                  R                  U5      5      $ )Nz\exec sp_updateextendedproperty 'MS_Description', {}, 'schema', {}, 'table', {}, 'column', {}r   r   s         rD   _update_column_commentr     r   rF   c                   U(       a  UOU R                   R                  nU(       d   eSR                  U R                  R	                  U5      U R                  R                  U5      U R                  R                  U5      5      $ )NzVexec sp_dropextendedproperty 'MS_Description', 'schema', {}, 'table', {}, 'column', {})rx   r   r   r   r   r   )r   r[   r   r   r   s        rD   _drop_column_commentr     sq     #&(8(8(L(LK;	228&**;7##E*##E*3
rF   c                h   U R                   b{  U R                  b7  [        UU R                  U R                  U R
                  U R                   5      $ [        UU R                  U R                  U R
                  U R                   5      $ [        XR                  U R                  U R
                  5      $ rH   )r   existing_commentr   r[   rf   rg   r   r   r   s      rD   visit_column_commentr     s     "##/)""##  '""##  $nng&8&8':M:M
 	
rF   )r   re   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   r   r   r   r   r   r   r   r   )
r   r#   r[   r   r   r   r   r   r   r   )r   r   r   r#   rB   r   r   r   )H
__future__r   r   typingr   r   r   r   r   r	   
sqlalchemyr
   rq   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-   re   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rl   rF   rD   <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
;>

 "
rF   