o
    ODiC                     @  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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& 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d	dd	d	d	d	d	d	d	d	dd	d
d3 fd$d%Zd4 fd(d)Z	d5d+d,Z
d-d. Zd/d0 Zd1d2 Z  ZS )6	MySQLImplmysqlFBOOLTINYINTJSONLONGTEXTzcharacter set ([\w\-_]+)zcollate ([\w\-_]+)N)nullableserver_defaultnametype_r   existing_typeexisting_server_defaultexisting_nullableautoincrementexisting_autoincrementcommentexisting_comment
table_namestrcolumn_namer%   Optional[bool]r&   /Optional[Union[_ServerDefault, Literal[False]]]r'   Optional[str]r(   Optional[TypeEngine]r   r)   r*   Optional[_ServerDefault]r+   r,   r-   r.   $Optional[Union[str, Literal[False]]]r/   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   r)   r+   r&   r*   TF)r   newnamer%   r(   defaultr,   r.   r   )
r   _server_default_is_identity_server_default_is_computedsuperalter_column$_is_mysql_allowed_functional_default_execMySQLChangeColumnMySQLModifyColumnMySQLAlterDefault)selfr0   r2   r%   r&   r'   r(   r   r)   r*   r+   r,   r-   r.   r/   r9   	__class__ J/var/www/Datamplify/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   r9   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|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)typerR   rS   Integerprimary_keyr,   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) r0   r1   r2   r1   r%   r3   r&   r4   r'   r5   r(   r6   r   r5   r)   r6   r*   r7   r+   r3   r,   r3   r-   r3   r.   r8   r/   r5   r9   r   r:   r;   )rL   r   r9   r   r:   r;   )r(   r6   r&   r4   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    v

C%r   c                   @  s   e Zd ZdZdS )MariaDBImplmariadbN)r   r   r   r   rJ   rJ   rJ   rK   r   C  s    r   c                      s"   e Zd Z	dd fddZ  ZS )rF   Nr'   r1   r2   r=   r7   r   r5   r:   r;   c                   s$   t t| j||d || _|| _d S )Nr   )r@   r   __init__r2   r=   )rG   r'   r2   r=   r   rH   rJ   rK   r   H  s   
zMySQLAlterDefault.__init__rM   )
r'   r1   r2   r1   r=   r7   r   r5   r:   r;   r   r   r   r   r   rJ   rJ   rH   rK   rF   G  s    rF   c                      s.   e Zd Z							dd fddZ  ZS )rD   NFr'   r1   r2   r   r5   r<   r(   r6   r%   r3   r=   r4   r,   r.   r8   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   r2   r%   r<   r=   r,   r.   r   CommandErrorrS   to_instancer(   )
rG   r'   r2   r   r<   r(   r%   r=   r,   r.   rH   rJ   rK   r   U  s   zMySQLChangeColumn.__init__)NNNNFNF)r'   r1   r2   r1   r   r5   r<   r5   r(   r6   r%   r3   r=   r4   r,   r3   r.   r8   r:   r;   r   rJ   rJ   rH   rK   rD   T  s    rD   c                   @  s   e Zd ZdS )rE   N)r   r   r   rJ   rJ   rJ   rK   rE   q  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_individualu  s   r   r   r   r   r:   r1   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   r0   r   r   r2   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(   r,   r.   )r   r0   r   r   r2   _mysql_colspecr%   r=   r(   r,   r.   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   r0   r   r   r2   r<   r   r%   r=   r(   r,   r.   r   rJ   rJ   rK   _mysql_change_column  s   

r   r%   r3   r&   r4   r(   r   r,   r.   r8   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(   r,   r.   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:   r1   )r   rE   r   r   r:   r1   )r   rD   r   r   r:   r1   )r   r   r%   r3   r&   r4   r(   r   r,   r3   r.   r8   r:   r1   )r   r   r   r   r:   r1   )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     







