o
    8 hG                     @  sd  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rd 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# d#eZ-G d$d% d%e-Z.G d&d' d'eZ/G d(d) d)eZ0G d*d+ d+e0Z1e ed,d-e ed,d-e ed,d-e ed,d-d.d/ Z2e e/d,d-dId5d6Z3e e1d,d-dJd7d8Z4e e0d,d-dKd9d:Z5dLdDdEZ6e e	j%d,d-dMdGdHZ7dS )N    )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                      s   e Zd ZdZdZejddhddhf ZddgZ		d9d: fddZdddddddddddddd; fd+d,Z	d< fd/d0Z
d=d1d2Zd3d4 Zd5d6 Zd7d8 Z  ZS )>	MySQLImplmysqlFBOOLZTINYINTJSONZLONGTEXTzcharacter set ([\w\-_]+)zcollate ([\w\-_]+)exprr   is_server_defaultboolis_indexkwr   returnstrc                   s^   |r"t |tjst |tjr|jtjtjfvst |tj	r"t
|}t j|f||d|S )N)r(   r*   )
isinstancer
   BinaryExpressionUnaryExpressionmodifierr   desc_opasc_opr   FunctionElementGroupingsuperrender_ddl_sql_expr)selfr'   r(   r*   r+   	__class__ Y/var/www/html/figdemos/bartoux_crm/venv/lib/python3.10/site-packages/alembic/ddl/mysql.pyr7   6   s    



zMySQLImpl.render_ddl_sql_exprN)nullableserver_defaultnametype_r   existing_typeexisting_server_defaultexisting_nullableautoincrementexisting_autoincrementcommentexisting_comment
table_namecolumn_namer=   Optional[bool]r>   /Optional[Union[_ServerDefault, Literal[False]]]r?   Optional[str]r@   Optional[TypeEngine]r   rA   rB   Optional[_ServerDefault]rC   rD   rE   rF   $Optional[Union[str, Literal[False]]]rG   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   rA   rC   r>   rB   TF)r   newnamer=   r@   defaultrD   rF   r   )
r   _server_default_is_identity_server_default_is_computedr6   alter_column$_is_mysql_allowed_functional_default_execMySQLChangeColumnMySQLModifyColumnMySQLAlterDefault)r8   rH   rI   r=   r>   r?   r@   r   rA   rB   rC   rD   rE   rF   rG   r+   r9   r;   r<   rU   O   s   
 zMySQLImpl.alter_columnconstr    c                   s(   t |tjrt|rd S t | d S N)r.   r   CheckConstraintr   r6   drop_constraint)r8   r[   r+   r9   r;   r<   r^      s   zMySQLImpl.drop_constraintc                 C  s   |d uo|j tju o|d uS r\   )_type_affinitysqltypesDateTime)r8   r@   r>   r;   r;   r<   rV      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|rt	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)typer_   r`   Integerprimary_keyrD   resubStringmatchlowergroup)r8   inspector_columnmetadata_columnrendered_metadata_defaultrendered_inspector_defaultZmetadata_defaultZonupdate_insZonupdate_metr;   r;   r<   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 r\   )setlistuniquecolumnsr?   removeaddforeign_keys)	r8   Zconn_unique_constraintsconn_indexesmetadata_unique_constraintsmetadata_indexesremovedidxcolfkr;   r;   r<   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 r;   ) _create_reflected_constraint_sigunnamed_no_options.0r   r8   r;   r<   
<dictcomp>C      z=MySQLImpl.correct_for_autogen_foreignkeys.<locals>.<dictcomp>c                   r   r;   )_create_metadata_constraint_sigr   r   r   r;   r<   r   G  r   ZrestrictZRESTRICT)rr   intersectionondeleterk   onupdate)r8   conn_fksmetadata_fksZconn_fk_by_sigZmetadata_fk_by_sigsigZmdfkZcnfkr;   r   r<   correct_for_autogen_foreignkeysB  s&   





z)MySQLImpl.correct_for_autogen_foreignkeys)FF)
r'   r   r(   r)   r*   r)   r+   r   r,   r-   ) rH   r-   rI   r-   r=   rJ   r>   rK   r?   rL   r@   rM   r   rL   rA   rM   rB   rN   rC   rJ   rD   rJ   rE   rJ   rF   rO   rG   rL   r+   r   r,   rP   )r[   r    r+   r   r,   rP   )r@   rM   r>   rK   r,   r)   )__name__
__module____qualname____dialect__transactional_ddlr   type_synonymstype_arg_extractr7   rU   r^   rV   rq   r   r   __classcell__r;   r;   r9   r<   r#   ,   s:    v

C%r#   c                   @  s   e Zd ZdZdS )MariaDBImplmariadbN)r   r   r   r   r;   r;   r;   r<   r   `  s    r   c                      s"   e Zd Z	dd fddZ  ZS )rZ   Nr?   r-   rI   rR   rN   r   rL   r,   rP   c                   s$   t t| j||d || _|| _d S )Nr   )r6   r   __init__rI   rR   )r8   r?   rI   rR   r   r9   r;   r<   r   e  s   
zMySQLAlterDefault.__init__r\   )
r?   r-   rI   r-   rR   rN   r   rL   r,   rP   r   r   r   r   r   r;   r;   r9   r<   rZ   d  s    rZ   c                      s.   e Zd Z							dd fddZ  ZS )rX   NFr?   r-   rI   r   rL   rQ   r@   rM   r=   rJ   rR   rK   rD   rF   rO   r,   rP   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.)r6   r   r   rI   r=   rQ   rR   rD   rF   r   CommandErrorr`   to_instancer@   )
r8   r?   rI   r   rQ   r@   r=   rR   rD   rF   r9   r;   r<   r   r  s   zMySQLChangeColumn.__init__)NNNNFNF)r?   r-   rI   r-   r   rL   rQ   rL   r@   rM   r=   rJ   rR   rK   rD   rJ   rF   rO   r,   rP   r   r;   r;   r9   r<   rX   q  s    rX   c                   @  s   e Zd ZdS )rY   N)r   r   r   r;   r;   r;   r<   rY     s    rY   r$   r   c                 K  s   t d)Nz9Individual alter column constructs not supported by MySQL)NotImplementedErrorelementcompilerr+   r;   r;   r<    _mysql_doesnt_support_individual  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   rH   r   r   rI   rR   r   r   r;   r;   r<   _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@   rD   rF   )r   rH   r   r   rI   _mysql_colspecr=   rR   r@   rD   rF   r   r;   r;   r<   _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   rH   r   r   rI   rQ   r   r=   rR   r@   rD   rF   r   r;   r;   r<   _mysql_change_column  s   

r   r=   rJ   r>   rK   r@   r!   rD   rF   rO   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_valuer`   ri   )r   r=   r>   r@   rD   rF   specr;   r;   r<   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   r.   r   ForeignKeyConstraintPrimaryKeyConstraintUniqueConstraintvisit_drop_constraintr]   r   Z
is_mariadbpreparerformat_tabletableformat_constraintr   )r   r   r+   
constraintr;   r;   r<   _mysql_drop_constraint  s.   


r   )r   rZ   r   r   r,   r-   )r   rY   r   r   r,   r-   )r   rX   r   r   r,   r-   )r   r   r=   rJ   r>   rK   r@   r!   rD   rJ   rF   rO   r,   r-   )r   r   r   r   r,   r-   )8
__future__r   rg   typingr   r   r   r   
sqlalchemyr   r	   r`   sqlalchemy.sqlr
   r   r   baser   r   r   r   r   r   r   r   implr   rb   r   r   Zutil.sqla_compatr   r   r   Zsqlalchemy.dialects.mysql.baser   Zsqlalchemy.sql.ddlr   Zsqlalchemy.sql.elementsr   sqlalchemy.sql.schemar    sqlalchemy.sql.type_apir!   r"   r#   r   rZ   rX   rY   r   r   r   r   r   r   r;   r;   r;   r<   <module>   sj     6







