
    D6iG                    D   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  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(m)Z) d d l*m+Z+ dd!lm,Z,  G d" d#e      Z- G d$ d%e-      Z. G d& d'e      Z/ G d( d)e      Z0 G d* d+e0      Z1 e ed,d-       e ed,d-       e ed,d-       e ed,d-      d.                             Z2 e e/d,d-      	 	 	 	 	 	 d4d/       Z3 e e1d,d-      	 	 	 	 	 	 d5d0       Z4 e e0d,d-      	 	 	 	 	 	 d6d1       Z5	 	 	 	 	 	 	 	 	 	 	 	 	 	 d7d2Z6 e e	jJ                  d,d-      	 	 	 	 	 	 d8d3       Z7y)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                      e Zd ZdZdZej                  ddhddhfz   ZddgZ	 	 d	 	 	 	 	 	 	 	 	 d fd	Zd
dd
d
d
d
d
d
d
d
dd
d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ		 	 	 	 	 	 d fdZ
	 	 	 	 	 	 ddZd Zd Zd Z xZS )	MySQLImplmysqlFBOOLTINYINTJSONLONGTEXTzcharacter set ([\w\-_]+)zcollate ([\w\-_]+)c                L   |rt        |t        j                        s`t        |t        j                        r,|j                  t
        j                  t
        j                  fvst        |t        j                        rt        j                  |      }t        | 0  |f||d|S )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/azureuser/techstart-app/venv/lib/python3.12/site-packages/alembic/ddl/mysql.pyr7   zMySQLImpl.render_ddl_sql_expr6   s     tX66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               *   t        j                  ||	      st        j                  ||	      rt        |   ||f|||||
||	d| || j                  ||n||      rD| j                  t        |||||n|||n|
|
nd||n||dur|n|	||n||dur|n|	             y ||||durD| j                  t        |||||n|||n|
|
nd||n||dur|n|	||n||dur|n|	             y |dur| j                  t        ||||             y y )N)r>   rA   r	   rB   rD   r?   rC   TF)r	   newnamer>   rA   defaultrE   rG   r   )
r   _server_default_is_identity_server_default_is_computedr6   alter_column$_is_mysql_allowed_functional_default_execMySQLChangeColumnMySQLModifyColumnMySQLAlterDefault)r8   
table_namecolumn_namer>   r?   r@   rA   r	   rB   rC   rD   rE   rF   rG   rH   r:   r;   s                   r<   rN   zMySQLImpl.alter_columnO   s   * 223
443

 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!^F )r=   c                p    t        |t        j                        rt        |      ry t        |   |       y N)r.   r	   CheckConstraintr   r6   drop_constraint)r8   constr:   r;   s      r<   rY   zMySQLImpl.drop_constraint   s,    
 eV3349N&r=   c                R    |d uxr" |j                   t        j                  u xr |d uS rW   )_type_affinitysqltypesDateTime)r8   rA   r?   s      r<   rO   z.MySQLImpl._is_mysql_allowed_functional_default   s7      +$$(9(99+d*	
r=   c                |   |j                   j                  t        j                  u r |j                  r|j
                  s|s|dk(  ry|rF|j                   j                  t        j                  u r |t        j                  dd|      nd }||k7  S |rF|j                   j                  t        j                  u r t        j                  dd|      }|d| dk7  S |r|rt        j                  d|j                               }t        j                  d|j                               }|rI|sy|j                  d      |j                  d      k7  ry|j                  d	      }|j                  d	      }t        j                  d
d|j                               t        j                  d
d|j                               k7  S ||k7  S )Nz'0'Fz^'|'$ 'z(.*) (on update.*?)(?:\(\))?$Tr   r   z(.*?)(?:\(\))?$z\1)typer\   r]   Integerprimary_keyrE   resubStringmatchlowergroup)r8   inspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaultmetadata_defaultonupdate_insonupdate_mets           r<   compare_server_defaultz MySQLImpl.compare_server_default   s      //83C3CC ,,$22-*e3& %%448H8HH .9 x%?@ '
 .1J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  .1JJJr=   c                2   t               }t        |      D ]  }|j                  r|j                  D ]  }|j                  |j                  k(  r.|j                  |       |j                  |j                          f|j                  D ]I  }|j                  |j                  k(  s|j                  |       |j                  |j                          n |j                  |v s   t        |      D ]"  }|j                  |v s|j                  |       $ y rW   )setlistuniquecolumnsr@   removeaddforeign_keys)	r8   conn_unique_constraintsconn_indexesmetadata_unique_constraintsmetadata_indexesremovedidxcolfks	            r<   correct_for_autogen_constraintsz)MySQLImpl.correct_for_autogen_constraints  s     %% 	Czz
 {{ 88sxx' '',KK)** Bww#((*$++C0CHH-	
 88w&	. () 	-Cxx7" '',	-r=   c                   |D ci c]  }| j                  |      j                  |  }}|D ci c]  }| j                  |      j                  |  }}t        |      j	                  |      D ]  }||   }||   }|j
                  0|j
                  j                         dk(  r|j
                  d|_        |j                  V|j                  j                         dk(  st|j                  d|_         y c c}w c c}w )NrestrictRESTRICT) _create_reflected_constraint_sigunnamed_no_options_create_metadata_constraint_sigrt   intersectionondeleteri   onupdate)	r8   conn_fksmetadata_fksr   conn_fk_by_sigmetadata_fk_by_sigsigmdfkcnfks	            r<   correct_for_autogen_foreignkeysz)MySQLImpl.correct_for_autogen_foreignkeysB  s    
 11"5HH"L
 
 #
 004GGK
 

 ~&334FG 	+C%c*D!#&D
 )MM'')Z7MM) *)MM'')Z7MM) *#	+

s
   #C8#C=)FF)
r9   r    r,   boolr-   r   r:   r   returnstr) rT   r   rU   r   r>   Optional[bool]r?   /Optional[Union[_ServerDefault, Literal[False]]]r@   Optional[str]rA   Optional[TypeEngine]r	   r   rB   r   rC   Optional[_ServerDefault]rD   r   rE   r   rF   r   rG   $Optional[Union[str, Literal[False]]]rH   r   r:   r   r   None)rZ   r!   r:   r   r   r   )rA   r   r?   r   r   r   )__name__
__module____qualname____dialect__transactional_ddlr   type_synonymstype_arg_extractr7   rN   rY   rO   rr   r   r   __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l'' ' 
	'	
#	
 H	
 
		
AKF#-J+r=   r%   c                      e Zd ZdZy)MariaDBImplmariadbN)r   r   r   r    r=   r<   r   r   `  s    Kr=   r   c                  6     e Zd Z	 d	 	 	 	 	 	 	 	 	 d fdZ xZS )rS   c                L    t         t        |   ||       || _        || _        y )Nr   )r6   r   __init__rU   rK   )r8   r@   rU   rK   r	   r;   s        r<   r   zMySQLAlterDefault.__init__e  s(     	k4)$v)>&r=   rW   )
r@   r   rU   r   rK   r   r	   r   r   r   r   r   r   r   r   r   s   @r<   rS   rS   d  sB     !%		 	 *		
 	 
	 	r=   rS   c                  V     e Zd Z	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ xZS )rQ   c
                    t         t        |   ||       || _        || _        || _        || _        || _        |	| _        |t        j                  d      t        j                  |      | _        y )Nr   zDAll MySQL CHANGE/MODIFY COLUMN operations require the existing type.)r6   r   r   rU   r>   rJ   rK   rE   rG   r   CommandErrorr]   to_instancerA   )r8   r@   rU   r	   rJ   rA   r>   rK   rE   rG   r;   s             r<   r   zMySQLChangeColumn.__init__r  sv     	k4)$v)>& *=##- 
 ))%0
r=   )NNNNFNF)r@   r   rU   r   r	   r   rJ   r   rA   r   r>   r   rK   r   rE   r   rG   r   r   r   r   r   s   @r<   rQ   rQ   q  s    
 !%!%&*#'CH(,8=11 1 	1
 1 $1 !1 A1 &1 61 
1 1r=   rQ   c                      e Zd Zy)rR   N)r   r   r   r   r=   r<   rR   rR     s    r=   rR   r&   r   c                    t        d      )Nz9Individual alter column constructs not supported by MySQL)NotImplementedErrorelementcompilerr:   s      r<    _mysql_doesnt_support_individualr     s    
 C r=   c           	         t        || j                  | j                        dt        || j                        d| j
                  dt        || j
                        z  S dS )Nz ALTER COLUMN  zSET DEFAULT %szDROP DEFAULT)r   rT   r	   r   rU   rK   r   r   s      r<   _mysql_alter_defaultr     so    
 	Hg00'..A8W%8%89 * 4XwOO  	    	 r=   c                    t        || j                  | j                        dt        || j                        dt        || j                  | j                  | j                  | j                  | j                        S )Nz MODIFY r   r>   r?   rA   rE   rG   )r   rT   r	   r   rU   _mysql_colspecr>   rK   rA   rE   rG   r   s      r<   _mysql_modify_columnr     sf    
 	Hg00'..A8W%8%89%%"??--!//OO	
 r=   c                ,   t        || j                  | j                        dt        || j                        dt        || j
                        dt        || j                  | j                  | j                  | j                  | j                        S )Nz CHANGE r   r   )r   rT   r	   r   rU   rJ   r   r>   rK   rA   rE   rG   r   s      r<   _mysql_change_columnr     st    
 	Hg00'..A8W%8%898W__5%%"??--!//OO	
	 r=   c                   | j                   j                  j                  |      d|rdnd}|r|dz  }|dur||dt        | |      z  z  }|r4|d| j                  j                  |t        j                               z  z  }|S )Nr   NULLzNOT NULLz AUTO_INCREMENTFz DEFAULT %sz COMMENT %s)dialecttype_compilerprocessr   sql_compilerrender_literal_valuer]   rg   )r   r>   r?   rA   rE   rG   specs          r<   r   r     s     	&&..u5
*D !!U"~'A 5h OOO 5 5 J JX__&!
 
 	
 Kr=   c                <   | j                   }t        |t        j                  t        j                  t        j
                  f      r|rJ |j                  |       S t        |t        j                        r|j                  j                  rDd|j                  j                  |j                        d|j                  j                  |      S d|j                  j                  |j                        d|j                  j                  |      S t        d      )zVRedefine 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_constraintrX   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 &&!!..z/?/?@!!33J?  ' !!..z/?/?@!!33J? 
 "-
 	
r=   )r   rS   r   r   r   r   )r   rR   r   r   r   r   )r   rQ   r   r   r   r   )r   r   r>   r   r?   r   rA   r"   rE   r   rG   r   r   r   )r   r   r   r   r   r   )8
__future__r   re   typingr   r   r   r   
sqlalchemyr	   r
   r]   sqlalchemy.sqlr   r   r   baser   r   r   r   r   r   r   r   implr   r`   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   rS   rQ   rR   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=   