o
    voi.                     @  s$  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& eee'eee f 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-G d(d) d)e+Z.G d*d+ d+e+Z/G d,d- d-e+Z0G d.d/ d/e+Z1G d0d1 d1e)Z2G d2d3 d3e)Z3G d4d5 d5e+Z4ee*drd;d<Z5ee2dsd=d>Z6ee3dtd?d@Z7ee,dudAdBZ8ee-dvdCdDZ9ee.dwdEdFZ:ee/dxdGdHZ;ee0dydIdJZ<ee1dzdKdLZ=d{dQdRZ>d|dVdWZ?d}dXdYZ@d~d\d]ZAdd`daZBddcddZC	dddgdhZDddidjZE			dddpdqZFdS )    )annotationsN)Any)Optional)TYPE_CHECKING)Union)exc)Integer)types)compiles)Column)
DDLElement)ColumnElement)quoted_name)
TextClause)FetchedValue   )_columns_for_constraint)_find_columns)_fk_spec)_is_type_bound)_table_for_constraint)Computed)Identity)Compiled)DDLCompiler)
TypeEngine   )DefaultImplc                   @  s   e Zd ZdZ	ddd	d
ZdS )
AlterTablezRepresent an ALTER TABLE statement.

    Only the string name and optional schema name of the table
    is required, not a full Table object.

    N
table_namestrschema!Optional[Union[quoted_name, str]]returnNonec                 C  s   || _ || _d S N)r   r!   )selfr   r!    r'   D/home/ubuntu/.local/lib/python3.10/site-packages/alembic/ddl/base.py__init__2   s   
zAlterTable.__init__r%   )r   r    r!   r"   r#   r$   )__name__
__module____qualname____doc__r)   r'   r'   r'   r(   r   *   s    
r   c                      s"   e Zd Z	dd fd
dZ  ZS )RenameTableNold_table_namer    new_table_nameUnion[quoted_name, str]r!   r"   r#   r$   c                   s   t  j||d || _d S N)r!   )superr)   r0   )r&   r/   r0   r!   	__class__r'   r(   r)   <   s   
zRenameTable.__init__r%   )r/   r    r0   r1   r!   r"   r#   r$   r*   r+   r,   r)   __classcell__r'   r'   r4   r(   r.   ;   s    r.   c                      s*   e Zd Z					dd fddZ  ZS )AlterColumnNnamer    column_namer!   Optional[str]existing_typeOptional[TypeEngine]existing_nullableOptional[bool]existing_server_defaultOptional[_ServerDefaultType]existing_commentr#   r$   c                   sD   t  j||d || _|d urt|nd | _|| _|| _|| _d S r2   )	r3   r)   r:   sqltypesto_instancer<   r>   r@   rB   )r&   r9   r:   r!   r<   r>   r@   rB   r4   r'   r(   r)   G   s   


zAlterColumn.__init__)NNNNN)r9   r    r:   r    r!   r;   r<   r=   r>   r?   r@   rA   rB   r;   r#   r$   r6   r'   r'   r4   r(   r8   F   s    r8   c                         e Zd Zd
 fdd	Z  ZS )ColumnNullabler9   r    r:   nullableboolr#   r$   c                       t  j||fi | || _d S r%   )r3   r)   rG   )r&   r9   r:   rG   kwr4   r'   r(   r)   ^      
zColumnNullable.__init__)r9   r    r:   r    rG   rH   r#   r$   r6   r'   r'   r4   r(   rF   ]       rF   c                      rE   )
ColumnTyper9   r    r:   type_r   r#   r$   c                   s&   t  j||fi | t|| _d S r%   )r3   r)   rC   rD   rN   )r&   r9   r:   rN   rJ   r4   r'   r(   r)   f   s   zColumnType.__init__)r9   r    r:   r    rN   r   r#   r$   r6   r'   r'   r4   r(   rM   e   rL   rM   c                      s   e Zd Zd	 fddZ  ZS )

ColumnNamer9   r    r:   newnamer#   r$   c                   rI   r%   )r3   r)   rP   )r&   r9   r:   rP   rJ   r4   r'   r(   r)   n   rK   zColumnName.__init__)r9   r    r:   r    rP   r    r#   r$   r6   r'   r'   r4   r(   rO   m   rL   rO   c                      rE   )ColumnDefaultr9   r    r:   defaultrA   r#   r$   c                   rI   r%   r3   r)   rR   r&   r9   r:   rR   rJ   r4   r'   r(   r)   v   s   
zColumnDefault.__init__)r9   r    r:   r    rR   rA   r#   r$   r6   r'   r'   r4   r(   rQ   u   rL   rQ   c                      rE   )ComputedColumnDefaultr9   r    r:   rR   Optional[Computed]r#   r$   c                   rI   r%   rS   rT   r4   r'   r(   r)      rK   zComputedColumnDefault.__init__)r9   r    r:   r    rR   rV   r#   r$   r6   r'   r'   r4   r(   rU      rL   rU   c                      s   e Zd Zd fd
dZ  ZS )IdentityColumnDefaultr9   r    r:   rR   Optional[Identity]implr   r#   r$   c                   s&   t  j||fi | || _|| _d S r%   )r3   r)   rR   rY   )r&   r9   r:   rR   rY   rJ   r4   r'   r(   r)      s   
zIdentityColumnDefault.__init__)
r9   r    r:   r    rR   rX   rY   r   r#   r$   r6   r'   r'   r4   r(   rW      rL   rW   c                      s(   e Zd Z				dd fddZ  ZS )	AddColumnNr9   r    columnColumn[Any]r!   r"   if_not_existsr?   inline_referencesinline_primary_keyr#   r$   c                   s,   t  j||d || _|| _|| _|| _d S r2   )r3   r)   r[   r]   r^   r_   )r&   r9   r[   r!   r]   r^   r_   r4   r'   r(   r)      s
   	
zAddColumn.__init__)NNNN)r9   r    r[   r\   r!   r"   r]   r?   r^   r?   r_   r?   r#   r$   r6   r'   r'   r4   r(   rZ      s    rZ   c                      s$   e Zd Z		dd fddZ  ZS )
DropColumnNr9   r    r[   r\   r!   r;   	if_existsr?   r#   r$   c                   s    t  j||d || _|| _d S r2   )r3   r)   r[   ra   )r&   r9   r[   r!   ra   r4   r'   r(   r)      s   
zDropColumn.__init__)NN)
r9   r    r[   r\   r!   r;   ra   r?   r#   r$   r6   r'   r'   r4   r(   r`      s    r`   c                      rE   )ColumnCommentr9   r    r:   commentr;   r#   r$   c                   rI   r%   )r3   r)   rc   )r&   r9   r:   rc   rJ   r4   r'   r(   r)      rK   zColumnComment.__init__)r9   r    r:   r    rc   r;   r#   r$   r6   r'   r'   r4   r(   rb      rL   rb   elementcompilerr   r#   r    c                 K  s$   dt || j| jt|| j| jf S )Nz%s RENAME TO %s)alter_tabler   r!   format_table_namer0   rd   re   rJ   r'   r'   r(   visit_rename_table   s   ri   c                 K  s6   dt || j| jt|| jf| j| j| jd|f S )N%s %s)r]   r^   r_   )rf   r   r!   
add_columnr[   r]   r^   r_   rh   r'   r'   r(   visit_add_column   s   rl   c                 K  s0   dt || j| jt|| jjfd| ji|f S )Nrj   ra   )rf   r   r!   drop_columnr[   r9   ra   rh   r'   r'   r(   visit_drop_column   s   rn   c                 K  s0   dt || j| jt|| j| jrdf S df S )N%s %s %szDROP NOT NULLzSET NOT NULL)rf   r   r!   alter_columnr:   rG   rh   r'   r'   r(   visit_column_nullable   s   
rq   c                 K  s.   dt || j| jt|| jdt|| j f S )Nro   zTYPE %s)rf   r   r!   rp   r:   format_typerN   rh   r'   r'   r(   visit_column_type   s
   
rs   c                 K  s*   dt || j| jt|| jt|| jf S )Nz%s RENAME %s TO %s)rf   r   r!   format_column_namer:   rP   rh   r'   r'   r(   visit_column_name   s
   

ru   c                 K  s@   dt || j| jt|| j| jd urdt|| j f S df S )Nro   zSET DEFAULT %szDROP DEFAULT)rf   r   r!   rp   r:   rR   format_server_defaultrh   r'   r'   r(   visit_column_default   s   

rw   c                 K  
   t d)NztAdding or removing a "computed" construct, e.g. GENERATED ALWAYS AS, to or from an existing column is not supported.r   CompileErrorrh   r'   r'   r(   visit_computed_column     r{   c                 K  rx   )NzAdding, removing or modifying an "identity" construct, e.g. GENERATED AS IDENTITY, to or from an existing column is not supported in this dialect.ry   rh   r'   r'   r(   visit_identity_column  r|   r}   r9   r1   quotefunctools.partialc                   s4   t | tr	 | S d fdd| dD }|S )z#quote the elements of a dotted name.c                   s   g | ]} |qS r'   r'   ).0xr~   r'   r(   
<listcomp>(  s    z quote_dotted.<locals>.<listcomp>)
isinstancer   joinsplit)r9   r~   resultr'   r   r(   quote_dotted!  s   
r   r   r!   r"   c                 C  s0   t | jj}|rt||d || S ||S )Nr   )	functoolspartialpreparerr~   r   )re   r9   r!   r~   r'   r'   r(   rg   ,  s   rg   c                 C  s   | j |S r%   )r   r~   re   r9   r'   r'   r(   rt   8  s   rt   rR   rA   c                 C  s$   |  tdt|d}|d usJ |S )Nr   )server_default)get_column_default_stringr   r   )re   rR   default_strr'   r'   r(   rv   >  s
   rv   rN   r   c                 C  s   | j j|S r%   )dialecttype_compilerprocess)re   rN   r'   r'   r(   rr   K     rr   r;   c                 C  s   dt | || S )NzALTER TABLE %s)rg   )re   r9   r!   r'   r'   r(   rf   O  s   rf   ra   r?   c                 K  s   d|rdndt | |f S )NzDROP COLUMN %s%sz
IF EXISTS  rt   )re   r9   ra   rJ   r'   r'   r(   rm   W  s   
rm   c                 C  s   dt | | S )NzALTER COLUMN %sr   r   r'   r'   r(   rp   `  r   rp   r[   r\   r]   r^   r_   c                   s   d|rdnd j |fi |f }|r|jr|d7 }|rgt|jdkrgt|jd  }rg|jd urgt|jjdkrg|j}|j}	|	j	rSd j
|	j	 j
|	jf }
n j
|	j}
|d|
 j
|jf 7 }d	 fd
d|jD }|r||d	| 7 }|S )NzADD COLUMN %s%szIF NOT EXISTS r   z PRIMARY KEYr   r   z%s.%sz REFERENCES %s (%s) c                 3  s    | ]}  |V  qd S r%   )r   )r   
constraintre   r'   r(   	<genexpr>  s    

zadd_column.<locals>.<genexpr>)get_column_specificationprimary_keylenforeign_keyslistr   columnsr[   tabler!   r   quote_schemar~   r9   r   constraints)re   r[   r]   r^   r_   rJ   textfkref_col	ref_tabler   constr'   r   r(   rk   d  s>   


rk   )rd   r.   re   r   r#   r    )rd   rZ   re   r   r#   r    )rd   r`   re   r   r#   r    )rd   rF   re   r   r#   r    )rd   rM   re   r   r#   r    )rd   rO   re   r   r#   r    )rd   rQ   re   r   r#   r    )rd   rU   re   r   )rd   rW   re   r   )r9   r1   r~   r   r#   r1   )re   r   r9   r1   r!   r"   r#   r1   )re   r   r9   r"   r#   r1   )re   r   rR   rA   r#   r    )re   r   rN   r   r#   r    )re   r   r9   r    r!   r;   r#   r    r%   )re   r   r9   r    ra   r?   r#   r    )re   r   r9   r    r#   r    )NNN)re   r   r[   r\   r]   r?   r^   r?   r_   r?   r#   r    )G
__future__r   r   typingr   r   r   r   
sqlalchemyr   r   r	   rC   sqlalchemy.ext.compilerr
   sqlalchemy.schemar   r   sqlalchemy.sql.elementsr   r   r   sqlalchemy.sql.schemar   util.sqla_compatr   r   r   r   r   r   r   sqlalchemy.sql.compilerr   r   sqlalchemy.sql.type_apir   rY   r   r    _ServerDefaultTyper   r.   r8   rF   rM   rO   rQ   rU   rW   rZ   r`   rb   ri   rl   rn   rq   rs   ru   rw   r{   r}   r   rg   rt   rv   rr   rf   rm   rp   rk   r'   r'   r'   r(   <module>   s   		
	






	
	