o
    ‹åg•C  ã                   @  s4  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 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& G dd„ deƒZ'G d d!„ d!e'ƒZ(G d"d#„ d#eƒZ)G d$d%„ d%eƒZ*G d&d'„ d'e*ƒZ+eed(d)ƒeed(d)ƒeed(d)ƒeed(d)ƒd*d+„ ƒƒƒƒZ,ee)d(d)ƒdEd1d2„ƒZ-ee+d(d)ƒdFd3d4„ƒZ.ee*d(d)ƒdGd5d6„ƒZ/dHd@dA„Z0ee	j!d(d)ƒdIdCdD„ƒZ1dS )Jé    )ÚannotationsN)ÚAny)ÚOptional)ÚTYPE_CHECKING)ÚUnion©Úschema)Útypesé   )Úalter_table)ÚAlterColumn)ÚColumnDefault)Ú
ColumnName)ÚColumnNullable)Ú
ColumnType)Úformat_column_name)Úformat_server_default)ÚDefaultImplé   )Úutil)Úsqla_compat)Ú_is_type_bound)Úcompiles)ÚLiteral)ÚMySQLDDLCompiler)ÚDropConstraint)Ú
Constraint)Ú
TypeEngine)Ú_ServerDefaultc                      sŽ   e Zd ZdZdZejddhddhf ZddgZ																						d2d3‡ fd#d$„Zd4‡ fd'd(„Z	d5d*d+„Z
d,d-„ Zd.d/„ Zd0d1„ Z‡  ZS )6Ú	MySQLImplÚmysqlFÚBOOLÚTINYINTÚJSONÚLONGTEXTzcharacter set ([\w\-_]+)zcollate ([\w\-_]+)NÚ
table_nameÚstrÚcolumn_nameÚnullableúOptional[bool]Úserver_defaultú%Union[_ServerDefault, Literal[False]]ÚnameúOptional[str]Útype_úOptional[TypeEngine]r   Úexisting_typeÚexisting_server_defaultúOptional[_ServerDefault]Úexisting_nullableÚautoincrementÚexisting_autoincrementÚcommentú$Optional[Union[str, Literal[False]]]Úexisting_commentÚkwr   ÚreturnÚNonec                   s”  t  ||	¡st  ||	¡rtƒ j||f|||||
||	dœ|¤Ž |d us/|  |d ur+|n||¡rk|  t||||d ur;|n||d urB|n|
d urH|
nd|d urO|n||durV|n|	|d ur]|n||durd|n|d�	¡ d S |d us{|d us{|d us{|dur·|  t||||d ur‡|n||d urŽ|n|
d ur”|
nd|d ur›|n||dur¢|n|	|d ur©|n||dur°|n|d�	¡ d S |durÈ|  t	||||d�¡ d S d S )N)r(   r.   r   r0   r3   r*   r1   TF)r   Únewnamer(   r.   Údefaultr4   r6   r   )
r   Ú_server_default_is_identityÚ_server_default_is_computedÚsuperÚalter_columnÚ$_is_mysql_allowed_functional_defaultÚ_execÚMySQLChangeColumnÚMySQLModifyColumnÚMySQLAlterDefault)Úselfr%   r'   r(   r*   r,   r.   r   r0   r1   r3   r4   r5   r6   r8   r9   ©Ú	__class__© úM/var/www/html/flaskapp/venv/lib/python3.10/site-packages/alembic/ddl/mysql.pyrA   2   sš   ÿÿþþ÷
öÿÿÿÿÿæÿ ÿÿÿÿæÿÿÿÿzMySQLImpl.alter_columnÚconstr   c                   s(   t |tjƒrt|ƒrd S tƒ  |¡ d S ©N)Ú
isinstancer   ÚCheckConstraintr   r@   Údrop_constraint)rG   rL   rH   rJ   rK   rP   ¥   s   zMySQLImpl.drop_constraintÚboolc                 C  s   |d uo|j tju o|d uS rM   )Ú_type_affinityÚsqltypesÚDateTime)rG   r.   r*   rJ   rJ   rK   rB   ®   s
   
ÿýz.MySQLImpl._is_mysql_allowed_functional_defaultc                 C  s  |j jtju r|jr|js|s|dkrdS |r/|j jtju r/|d ur)t dd|¡nd }||kS |rG|j jtju rGt dd|¡}|d|› d�kS |r‰|r‰t 	d| 
¡ ¡}t 	d| 
¡ ¡}|rw|sadS | d¡| d¡krmdS | d	¡}| d	¡}t d
d| 
¡ ¡t d
d| 
¡ ¡kS ||kS )Nz'0'Fz^'|'$Ú ú'z(.*) (on update.*?)(?:\(\))?$Tr   r
   z(.*?)(?:\(\))?$z\1)ÚtyperR   rS   ÚIntegerÚprimary_keyr4   ÚreÚsubÚStringÚmatchÚlowerÚgroup)rG   Úinspector_columnÚmetadata_columnÚrendered_metadata_defaultÚrendered_inspector_defaultÚmetadata_defaultÚonupdate_insÚonupdate_metrJ   rJ   rK   Úcompare_server_default¹   s\   ÿþýÿÿýÿþþ


ÿ
ÿþz MySQLImpl.compare_server_defaultc           	      C  s´   t ƒ }t|ƒD ]?}|jrq|jD ]5}|j|jkr%| |¡ | |j¡  n!|jD ]}|j|jkr=| |¡ | |j¡  nq(|j|v rE nqqt|ƒD ]}|j|v rW| |¡ qKd S rM   )ÚsetÚlistÚuniqueÚcolumnsr,   ÚremoveÚaddÚforeign_keys)	rG   Úconn_unique_constraintsÚconn_indexesÚmetadata_unique_constraintsÚmetadata_indexesÚremovedÚidxÚcolÚfkrJ   rJ   rK   Úcorrect_for_autogen_constraintsü   s0   	



ý
ÿ€

€þz)MySQLImpl.correct_for_autogen_constraintsc                   sœ   ‡ fdd„|D ƒ}‡ fdd„|D ƒ}t |ƒ |¡D ]2}|| }|| }|jd ur7|j ¡ dkr7|jd u r7d|_|jd urK|j ¡ dkrK|jd u rKd|_qd S )Nc                   ó   i | ]	}ˆ   |¡j|“qS rJ   )Ú _create_reflected_constraint_sigÚunnamed_no_options©Ú.0rv   ©rG   rJ   rK   Ú
<dictcomp>"  ó    ÿÿz=MySQLImpl.correct_for_autogen_foreignkeys.<locals>.<dictcomp>c                   rx   rJ   )Ú_create_metadata_constraint_sigrz   r{   r}   rJ   rK   r~   &  r   ÚrestrictÚRESTRICT)rh   ÚintersectionÚondeleter^   Úonupdate)rG   Úconn_fksÚmetadata_fksÚconn_fk_by_sigÚmetadata_fk_by_sigÚsigÚmdfkÚcnfkrJ   r}   rK   Úcorrect_for_autogen_foreignkeys!  s&   
þ
þ



€ïz)MySQLImpl.correct_for_autogen_foreignkeys)NFNNNNNNNNFN) r%   r&   r'   r&   r(   r)   r*   r+   r,   r-   r.   r/   r   r-   r0   r/   r1   r2   r3   r)   r4   r)   r5   r)   r6   r7   r8   r-   r9   r   r:   r;   )rL   r   r:   r;   )r.   r/   r*   r+   r:   rQ   )Ú__name__Ú
__module__Ú__qualname__Ú__dialect__Útransactional_ddlr   Útype_synonymsÚtype_arg_extractrA   rP   rB   rg   rw   r�   Ú__classcell__rJ   rJ   rH   rK   r   (   s4    þñs
	C%r   c                   @  s   e Zd ZdZdS )ÚMariaDBImplÚmariadbN)rŽ   r�   r�   r‘   rJ   rJ   rJ   rK   r–   ?  s    r–   c                      s"   e Zd Z	dd‡ fdd„Z‡  ZS )rF   Nr,   r&   r'   r=   r   r   r-   r:   r;   c                   s$   t t| ƒj||d� || _|| _d S )Nr   )r@   r   Ú__init__r'   r=   )rG   r,   r'   r=   r   rH   rJ   rK   r˜   D  s   
zMySQLAlterDefault.__init__rM   )
r,   r&   r'   r&   r=   r   r   r-   r:   r;   ©rŽ   r�   r�   r˜   r•   rJ   rJ   rH   rK   rF   C  s    ûrF   c                      s.   e Zd Z							dd‡ fdd„Z‡  ZS )rD   NFr,   r&   r'   r   r-   r<   r.   r/   r(   r)   r=   ú/Optional[Union[_ServerDefault, Literal[False]]]r4   r6   r7   r:   r;   c
           
        sZ   t t| ƒj||d� || _|| _|| _|| _|| _|	| _|d u r%t	 
d¡‚t |¡| _d S )Nr   zDAll MySQL CHANGE/MODIFY COLUMN operations require the existing type.)r@   r   r˜   r'   r(   r<   r=   r4   r6   r   ÚCommandErrorrS   Úto_instancer.   )
rG   r,   r'   r   r<   r.   r(   r=   r4   r6   rH   rJ   rK   r˜   Q  s   ÿzMySQLChangeColumn.__init__)NNNNFNF)r,   r&   r'   r&   r   r-   r<   r-   r.   r/   r(   r)   r=   rš   r4   r)   r6   r7   r:   r;   r™   rJ   rJ   rH   rK   rD   P  s    örD   c                   @  s   e Zd ZdS )rE   N)rŽ   r�   r�   rJ   rJ   rJ   rK   rE   m  s    rE   r    r—   c                 K  s   t dƒ‚)Nz9Individual alter column constructs not supported by MySQL)ÚNotImplementedError©ÚelementÚcompilerr9   rJ   rJ   rK   Ú _mysql_doesnt_support_individualq  s   ÿr¡   rŸ   r    r   r:   r&   c                 K  s@   dt || j| jƒt|| jƒ| jd urdt|| jƒ f S df S )Nz%s ALTER COLUMN %s %szSET DEFAULT %szDROP DEFAULT)r   r%   r   r   r'   r=   r   rž   rJ   rJ   rK   Ú_mysql_alter_default{  s   

ÿüúr¢   c                 K  s<   dt || j| jƒt|| jƒt|| j| j| j| j	| j
d�f S )Nz%s MODIFY %s %s©r(   r*   r.   r4   r6   )r   r%   r   r   r'   Ú_mysql_colspecr(   r=   r.   r4   r6   rž   rJ   rJ   rK   Ú_mysql_modify_columnŠ  s   
úýr¥   c                 K  sF   dt || j| jƒt|| jƒt|| jƒt|| j| j| j	| j
| jd�f S )Nz%s CHANGE %s %s %sr£   )r   r%   r   r   r'   r<   r¤   r(   r=   r.   r4   r6   rž   rJ   rJ   rK   Ú_mysql_change_columnœ  s   

úür¦   r(   r)   r*   rš   r.   r   r4   r6   r7   c                 C  sn   d| j j |¡|rdndf }|r|d7 }|dur&|d ur&|dt| |ƒ 7 }|r5|d| j |t ¡ ¡ 7 }|S )Nz%s %sÚNULLzNOT NULLz AUTO_INCREMENTFz DEFAULT %sz COMMENT %s)ÚdialectÚtype_compilerÚprocessr   Úsql_compilerÚrender_literal_valuerS   r\   )r    r(   r*   r.   r4   r6   ÚspecrJ   rJ   rK   r¤   ¯  s   
þ
ÿr¤   r   c                 K  s†   | j }t|tjtjtjfƒr|rJ ‚| | ¡S t|tjƒr?|jj	r0d|j
 |j¡|j
 |¡f S d|j
 |j¡|j
 |¡f S tdƒ‚)zVRedefine SQLAlchemy's drop constraint to
    raise errors for invalid constraint type.z!ALTER TABLE %s DROP CONSTRAINT %szALTER TABLE %s DROP CHECK %szFNo generic 'DROP CONSTRAINT' in MySQL - please specify constraint type)rŸ   rN   r   ÚForeignKeyConstraintÚPrimaryKeyConstraintÚUniqueConstraintÚvisit_drop_constraintrO   r¨   Ú
is_mariadbÚpreparerÚformat_tableÚtableÚformat_constraintr�   )rŸ   r    r9   Ú
constraintrJ   rJ   rK   Ú_mysql_drop_constraintÇ  s.   ýþ

þ
þÿr¸   )rŸ   rF   r    r   r:   r&   )rŸ   rE   r    r   r:   r&   )rŸ   rD   r    r   r:   r&   )r    r   r(   r)   r*   rš   r.   r   r4   r)   r6   r7   r:   r&   )rŸ   r   r    r   r:   r&   )2Ú
__future__r   rZ   Útypingr   r   r   r   Ú
sqlalchemyr   r	   rS   Úbaser   r   r   r   r   r   r   r   Úimplr   rU   r   r   Úutil.sqla_compatr   r   r   Úsqlalchemy.dialects.mysql.baser   Úsqlalchemy.sql.ddlr   Úsqlalchemy.sql.schemar   Úsqlalchemy.sql.type_apir   r   r   r–   rF   rD   rE   r¡   r¢   r¥   r¦   r¤   r¸   rJ   rJ   rJ   rK   Ú<module>   sb     







