
    EhG                    X   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   \(       a*  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#\5      r- " S$ S%\-5      r. " S& S'\5      r/ " S( S)\5      r0 " S* S+\05      r1\ " \S,S-5      \ " \S,S-5      \ " \S,S-5      \ " \S,S-5      S. 5       5       5       5       r2\ " \/S,S-5            S4S/ j5       r3\ " \1S,S-5            S5S0 j5       r4\ " \0S,S-5            S6S1 j5       r5              S7S2 jr6\ " \	RJ                  S,S-5            S8S3 j5       r7g)9    )annotationsN)Any)Optional)TYPE_CHECKING)Unionschema)types)elements)	functions)	operators   )alter_table)AlterColumn)ColumnDefault)
ColumnName)ColumnNullable)
ColumnType)format_column_name)format_server_default)DefaultImpl   )util)sqla_compat)_is_type_bound)compiles)Literal)MySQLDDLCompiler)DropConstraint)ClauseElement)
Constraint)
TypeEngine)_ServerDefaultc                  0  ^  \ rS rSrSrSr\R                  SS1SS14-   rSS	/r  S         SU 4S
 jjjr	SSSSSSSSSSSSS.                               SU 4S jjjr
      SU 4S jjr      SS jrS rS rS rSrU =r$ )	MySQLImpl,   mysqlFBOOLTINYINTJSONLONGTEXTzcharacter set ([\w\-_]+)zcollate ([\w\-_]+)c                z  > U(       a  [        U[        R                  5      (       dl  [        U[        R                  5      (       a.  UR                  [
        R                  [
        R                  4;  d  [        U[        R                  5      (       a  [        R                  " U5      n[        TU ]0  " U4X#S.UD6$ )N)is_server_defaultis_index)
isinstancer   BinaryExpressionUnaryExpressionmodifierr   desc_opasc_opr   FunctionElementGroupingsuperrender_ddl_sql_expr)selfexprr-   r.   kw	__class__s        T/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/alembic/ddl/mysql.pyr8   MySQLImpl.render_ddl_sql_expr6   s     tX66774!9!9::MM)*;*;Y=M=M)NN$	 9 9::$$T*Dw*
$5
LN
 	
    N)nullableserver_defaultnametype_r	   existing_typeexisting_server_defaultexisting_nullableautoincrementexisting_autoincrementcommentexisting_commentc               ^  > [         R                  " XI5      (       d  [         R                  " XI5      (       a  [        TU ]  " UU4UUUUU
UU	S.UD6  Uc  U R                  Ub  UOUU5      (       aH  U R                  [        UUUUb  UOUUb  UOU
b  U
OSUb  UOUUSLa  UOU	Ub  UOUUSLa  UOUS9	5        g Uc  Uc  Uc  USLaH  U R                  [        UUUUb  UOUUb  UOU
b  U
OSUb  UOUUSLa  UOU	Ub  UOUUSLa  UOUS9	5        g USLa  U R                  [        XXGS95        g g )N)r@   rC   r	   rD   rF   rA   rE   TF)r	   newnamer@   rC   defaultrG   rI   r   )
r   _server_default_is_identity_server_default_is_computedr7   alter_column$_is_mysql_allowed_functional_default_execMySQLChangeColumnMySQLModifyColumnMySQLAlterDefault)r9   
table_namecolumn_namer@   rA   rB   rC   r	   rD   rE   rF   rG   rH   rI   rJ   r;   r<   s                   r=   rP   MySQLImpl.alter_columnO   s   * 22
 
44
 

 G  "+"3-(?  tHH&EM> 
  
 JJ!!$($4D+ $/ !  1< .!% $)#4%- *6 '4 )4 &3 $+%#7=M5@   (e#JJ!!$($4D+ $/ !  1< .!% $)#4%- *6 '4 )4 &3 $+%#7=M5> 5(JJ!^ )r?   c                   > [        U[        R                  5      (       a  [        U5      (       a  g [        TU ]  U5        g N)r/   r	   CheckConstraintr   r7   drop_constraint)r9   constr;   r<   s      r=   r\   MySQLImpl.drop_constraint   s2    
 eV33449N9N&r?   c                f    US L=(       a'    UR                   [        R                  L =(       a    US L$ rZ   )_type_affinitysqltypesDateTime)r9   rC   rA   s      r=   rQ   .MySQLImpl._is_mysql_allowed_functional_default   s7      +$$(9(99+d*	
r?   c                   UR                   R                  [        R                  L a0  UR                  (       a  UR
                  (       d  U(       d  US:X  a  gU(       aH  UR                   R                  [        R                  L a!  Ub  [        R                  " SSU5      OS nXC:g  $ U(       aH  UR                   R                  [        R                  L a!  [        R                  " SSU5      nUSU S3:g  $ U(       a  U(       a  [        R                  " SUR                  5       5      n[        R                  " SUR                  5       5      nU(       aO  U(       d  gUR                  S5      UR                  S5      :w  a  gUR                  S	5      nUR                  S	5      n[        R                  " S
SUR                  5       5      [        R                  " S
SUR                  5       5      :g  $ XC:g  $ )Nz'0'Fz^'|'$ 'z(.*) (on update.*?)(?:\(\))?$Tr   r   z(.*?)(?:\(\))?$z\1)typer`   ra   Integerprimary_keyrG   resubStringmatchlowergroup)r9   inspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaultmetadata_defaultonupdate_insonupdate_mets           r=   compare_server_default MySQLImpl.compare_server_default   s      //83C3CC ,,$22-*e3& %%448H8HH .9 x%?@ '
 .JJ%$$33xF!vvh4MN-15E4Fa1HHH',E 880*002L 880)//1L
 #!''*l.@.@.CC-9-?-?-B*,8,>,>q,A)66"E+E+K+K+M"E+D+J+J+L  .JJr?   c                `   [        5       n[        U5       H  nUR                  (       a  M  UR                   H  nUR                  UR                  :X  a/  UR                  U5        UR                  UR                  5          Mn  UR                   HK  nUR                  UR                  :X  d  M  UR                  U5        UR                  UR                  5          O   UR                  U;   d  M    M     M     [        U5       H&  nUR                  U;   d  M  UR                  U5        M(     g rZ   )setlistuniquecolumnsrB   removeaddforeign_keys)	r9   conn_unique_constraintsconn_indexesmetadata_unique_constraintsmetadata_indexesremovedidxcolfks	            r=   correct_for_autogen_constraints)MySQLImpl.correct_for_autogen_constraints  s     %%Czz
 {{88sxx' '',KK)**Bww#((*$++C0CHH-	 +
 88w& # &. ()Cxx7" '', *r?   c                "   U Vs0 s H  nU R                  U5      R                  U_M!     nnU Vs0 s H  nU R                  U5      R                  U_M!     nn[        U5      R	                  U5       H  nXV   nXF   nUR
                  b2  UR
                  R                  5       S:X  a  UR
                  c  SUl        UR                  c  MY  UR                  R                  5       S:X  d  My  UR                  b  M  SUl        M     g s  snf s  snf )NrestrictRESTRICT) _create_reflected_constraint_sigunnamed_no_options_create_metadata_constraint_sigrz   intersectionondeletern   onupdate)	r9   conn_fksmetadata_fksr   conn_fk_by_sigmetadata_fk_by_sigsigmdfkcnfks	            r=   correct_for_autogen_foreignkeys)MySQLImpl.correct_for_autogen_foreignkeysB  s    
 11"5HH"L 	 
 #
" 004GGK" 	 

 ~&334FGC%*D!&D
 )MM'')Z7MM) *)MM'')Z7MM) *# H

s
   &D&D )FF)
r:   r    r-   boolr.   r   r;   r   returnstr) rV   r   rW   r   r@   Optional[bool]rA   /Optional[Union[_ServerDefault, Literal[False]]]rB   Optional[str]rC   Optional[TypeEngine]r	   r   rD   r   rE   Optional[_ServerDefault]rF   r   rG   r   rH   r   rI   $Optional[Union[str, Literal[False]]]rJ   r   r;   r   r   None)r]   r!   r;   r   r   r   )rC   r   rA   r   r   r   )__name__
__module____qualname____firstlineno____dialect__transactional_ddlr   type_synonymstype_arg_extractr8   rP   r\   rQ   rw   r   r   __static_attributes____classcell__r<   s   @r=   r%   r%   ,   s   K--		1 M 45JK
 #(	

  
 	

 
 

 
< $( "&* $.2<@,0(,158=*.%tt t
 !t
t t $t t ,t ":t *t &t  !/!t" 6#t$ (%t& 't( 
)t tl'' ' 
	'	
#	
 H	
 
		
AKF#-J+ +r?   r%   c                      \ rS rSrSrSrg)MariaDBImpli`  mariadbr   N)r   r   r   r   r   r   r   r?   r=   r   r   `  s    Kr?   r   c                  D   ^  \ rS rSr S         SU 4S jjjrSrU =r$ )rU   id  c                @   > [         [        U ]  XS9  X l        X0l        g )Nr   )r7   r   __init__rW   rM   )r9   rB   rW   rM   r	   r<   s        r=   r   MySQLAlterDefault.__init__e  s"     	k4)$)>&r?   )rW   rM   rZ   )
rB   r   rW   r   rM   r   r	   r   r   r   r   r   r   r   r   r   r   r   s   @r=   rU   rU   d  sB     !%		 	 *		
 	 
	 	r?   rU   c                  d   ^  \ rS rSr       S                   SU 4S jjjrSrU =r$ )rS   iq  c
                   > [         [        U ]  XS9  X l        X`l        X@l        Xpl        Xl        Xl        Uc  [        R                  " S5      e[        R                  " U5      U l        g )Nr   zDAll MySQL CHANGE/MODIFY COLUMN operations require the existing type.)r7   r   r   rW   r@   rL   rM   rG   rI   r   CommandErrorra   to_instancerC   )r9   rB   rW   r	   rL   rC   r@   rM   rG   rI   r<   s             r=   r   MySQLChangeColumn.__init__r  sh     	k4)$)>& *=##- 
 ))%0
r?   )rG   rW   rI   rM   rL   r@   rC   )NNNNFNF)rB   r   rW   r   r	   r   rL   r   rC   r   r@   r   rM   r   rG   r   rI   r   r   r   r   r   s   @r=   rS   rS   q  s    
 !%!%&*#'CH(,8=11 1 	1
 1 $1 !1 A1 &1 61 
1 1r?   rS   c                      \ rS rSrSrg)rT   i  r   N)r   r   r   r   r   r   r?   r=   rT   rT     s    r?   rT   r'   r   c                    [        S5      e)Nz9Individual alter column constructs not supported by MySQL)NotImplementedErrorelementcompilerr;   s      r=    _mysql_doesnt_support_individualr     s    
 C r?   c           	         [        XR                  U R                  5      < S[        XR                  5      < SU R
                  b  S[        XR
                  5      -  < 3$ S< 3$ )Nz ALTER COLUMN  zSET DEFAULT %szDROP DEFAULT)r   rV   r	   r   rW   rM   r   r   s      r=   _mysql_alter_defaultr     si    
 	H00'..A8%8%89 * 4XOO  	    	 r?   c                    [        XR                  U R                  5      < S[        XR                  5      < S[        UU R                  U R                  U R                  U R                  U R                  S9< 3$ )Nz MODIFY r   r@   rA   rC   rG   rI   )r   rV   r	   r   rW   _mysql_colspecr@   rM   rC   rG   rI   r   s      r=   _mysql_modify_columnr     sb    
 	H00'..A8%8%89%%"??--!//OO	
 r?   c                (   [        XR                  U R                  5      < S[        XR                  5      < S[        XR
                  5      < S[        UU R                  U R                  U R                  U R                  U R                  S9< 3$ )Nz CHANGE r   r   )r   rV   r	   r   rW   rL   r   r@   rM   rC   rG   rI   r   s      r=   _mysql_change_columnr     sn    
 	H00'..A8%8%898__5%%"??--!//OO	
	 r?   c                2   U R                   R                  R                  U5      < SU(       a  SOS< 3nU(       a  US-  nUSLa  Ub  US[        X5      -  -  nU(       a5  USU R                  R                  U[        R                  " 5       5      -  -  nU$ )Nr   NULLzNOT NULLz AUTO_INCREMENTFz DEFAULT %sz COMMENT %s)dialecttype_compilerprocessr   sql_compilerrender_literal_valuera   rl   )r   r@   rA   rC   rG   rI   specs          r=   r   r     s     	&&..u5
*D !!U"~'A 5h OOO 5 5 J JX__&!
 
 	
 Kr?   c                l   U R                   n[        U[        R                  [        R                  [        R
                  45      (       a  U(       a   eUR                  U 5      $ [        U[        R                  5      (       a  UR                  R                  (       aF  SUR                  R                  UR                  5      < SUR                  R                  U5      < 3$ SUR                  R                  UR                  5      < SUR                  R                  U5      < 3$ [        S5      e)zRRedefine SQLAlchemy's drop constraint to
raise errors for invalid constraint type.zALTER TABLE z DROP CONSTRAINT z DROP CHECK zFNo generic 'DROP CONSTRAINT' in MySQL - please specify constraint type)r   r/   r	   ForeignKeyConstraintPrimaryKeyConstraintUniqueConstraintvisit_drop_constraintr[   r   
is_mariadbpreparerformat_tabletableformat_constraintr   )r   r   r;   
constraints       r=   _mysql_drop_constraintr     s	    J''''##	
  v--g66	J 6 6	7	7 &&&!!..z/?/?@!!33J?  ' !!..z/?/?@!!33J? 
 "-
 	
r?   )r   rU   r   r   r   r   )r   rT   r   r   r   r   )r   rS   r   r   r   r   )r   r   r@   r   rA   r   rC   r"   rG   r   rI   r   r   r   )r   r   r   r   r   r   )8
__future__r   rj   typingr   r   r   r   
sqlalchemyr	   r
   ra   sqlalchemy.sqlr   r   r   baser   r   r   r   r   r   r   r   implr   re   r   r   util.sqla_compatr   r   r   sqlalchemy.dialects.mysql.baser   sqlalchemy.sql.ddlr   sqlalchemy.sql.elementsr    sqlalchemy.sql.schemar!   sqlalchemy.sql.type_apir"   r#   r%   r   rU   rS   rT   r   r   r   r   r   r   r   r?   r=   <module>r      s   # 	       ( # $ $        $ '    - '?1502$q+ q+h	) 
 
1 1:	) 	 
.'9-	*gy)	-),	*gy) * - * . 

Wi0*: 1 

Wi0*: 1" 

Wi0*: 1$ D 	
 " 2 	0 
&

)4#
#
'7#
#
 5#
r?   