a
    g	g%                     @  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 erFd 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ddd 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,Z0G d/d0 d0e,Z1G d1d2 d2e,Z2G d3d4 d4e*Z3G d5d6 d6e*Z4G d7d8 d8e,Z5ee+d$d9d:d;d<d=Z6ee3d4d9d:d;d>d?Z7ee4d6d9d:d;d@dAZ8ee-d(d9d:d;dBdCZ9ee.d*d9d:d;dDdEZ:ee/d,d9d:d;dFdGZ;ee0d.d9d:d;dHdIZ<ee1d0d9dJdKdLZ=ee2d2d9dJdMdNZ>dOdPdOdQdRdSZ?dTdOdUdOdVdWdXZ@d9dUdOdYdZd[ZAd9d\d:d]d^d_ZBd9d`d:dadbdcZCd9d:ddd:dVdedfZDd9d:d:dYdgdhZEd9d:d:dYdidjZFd9dkd:dldmdnZGdS )o    )annotationsN)Optional)TYPE_CHECKING)Union)exc)Integer)types)compiles)Column)
DDLElement)quoted_name   )_columns_for_constraint)_find_columns)_fk_spec)_is_type_bound)_table_for_constraint)Any)Compiled)DDLCompiler)
TextClause)Function)FetchedValue)
TypeEngine   )DefaultImpl)Computed)Identityr   r   zFunction[Any]c                   @  s$   e Zd ZdZd	dd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str!Optional[Union[quoted_name, str]]None)
table_nameschemareturnc                 C  s   || _ || _d S N)r"   r#   )selfr"   r#    r'   S/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/alembic/ddl/base.py__init__0   s    zAlterTable.__init__)N)__name__
__module____qualname____doc__r)   r'   r'   r'   r(   r   '   s   
 r   c                      s*   e Zd Zd	ddddd fddZ  ZS )
RenameTableNr   Union[quoted_name, str]r    r!   )old_table_namenew_table_namer#   r$   c                   s   t  j||d || _d S N)r#   )superr)   r1   )r&   r0   r1   r#   	__class__r'   r(   r)   :   s    zRenameTable.__init__)Nr*   r+   r,   r)   __classcell__r'   r'   r4   r(   r.   9   s    r.   c                
      s2   e Zd Zdddddddddd fd	d
Z  ZS )AlterColumnNr   Optional[str]zOptional[TypeEngine]zOptional[bool]Optional[_ServerDefault]r!   )namecolumn_namer#   existing_typeexisting_nullableexisting_server_defaultexisting_commentr$   c                   sD   t  j||d || _|d ur(t|nd | _|| _|| _|| _d S r2   )	r3   r)   r<   sqltypesto_instancer=   r>   r?   r@   )r&   r;   r<   r#   r=   r>   r?   r@   r4   r'   r(   r)   E   s    
zAlterColumn.__init__)NNNNNr6   r'   r'   r4   r(   r8   D   s        r8   c                      s(   e Zd Zddddd fddZ  ZS )ColumnNullabler   boolr!   )r;   r<   nullabler$   c                   s    t  j||fi | || _d S r%   )r3   r)   rE   )r&   r;   r<   rE   kwr4   r'   r(   r)   \   s    zColumnNullable.__init__r6   r'   r'   r4   r(   rC   [   s   rC   c                      s(   e Zd Zddddd fddZ  ZS )
ColumnTyper   r   r!   )r;   r<   type_r$   c                   s&   t  j||fi | t|| _d S r%   )r3   r)   rA   rB   rH   )r&   r;   r<   rH   rF   r4   r'   r(   r)   d   s    zColumnType.__init__r6   r'   r'   r4   r(   rG   c   s   rG   c                      s(   e Zd Zddddd fddZ  ZS )
ColumnNamer   r!   )r;   r<   newnamer$   c                   s    t  j||fi | || _d S r%   )r3   r)   rJ   )r&   r;   r<   rJ   rF   r4   r'   r(   r)   l   s    zColumnName.__init__r6   r'   r'   r4   r(   rI   k   s   rI   c                      s(   e Zd Zddddd fddZ  ZS )ColumnDefaultr   r:   r!   r;   r<   defaultr$   c                   s    t  j||fi | || _d S r%   r3   r)   rM   r&   r;   r<   rM   rF   r4   r'   r(   r)   t   s    zColumnDefault.__init__r6   r'   r'   r4   r(   rK   s   s   rK   c                      s(   e Zd Zddddd fddZ  ZS )ComputedColumnDefaultr   zOptional[Computed]r!   rL   c                   s    t  j||fi | || _d S r%   rN   rO   r4   r'   r(   r)      s    zComputedColumnDefault.__init__r6   r'   r'   r4   r(   rP      s   rP   c                      s*   e Zd Zdddddd fddZ  ZS )IdentityColumnDefaultr   zOptional[Identity]r   r!   )r;   r<   rM   implr$   c                   s&   t  j||fi | || _|| _d S r%   )r3   r)   rM   rR   )r&   r;   r<   rM   rR   rF   r4   r'   r(   r)      s    zIdentityColumnDefault.__init__r6   r'   r'   r4   r(   rQ      s   rQ   c                      s*   e Zd Zd	ddddd fddZ  ZS )
	AddColumnNr   r
   r    r!   r;   columnr#   r$   c                   s   t  j||d || _d S r2   r3   r)   rU   r&   r;   rU   r#   r4   r'   r(   r)      s    zAddColumn.__init__)Nr6   r'   r'   r4   r(   rS      s    rS   c                      s*   e Zd Zd	ddddd fddZ  ZS )

DropColumnNr   r
   r9   r!   rT   c                   s   t  j||d || _d S r2   rV   rW   r4   r'   r(   r)      s    zDropColumn.__init__)Nr6   r'   r'   r4   r(   rX      s    rX   c                      s(   e Zd Zddddd fddZ  ZS )ColumnCommentr   r9   r!   )r;   r<   commentr$   c                   s    t  j||fi | || _d S r%   )r3   r)   rZ   )r&   r;   r<   rZ   rF   r4   r'   r(   r)      s    zColumnComment.__init__r6   r'   r'   r4   r(   rY      s   rY   r   r   )elementcompilerr$   c                 K  s$   dt || j| jt|| j| jf S )Nz%s RENAME TO %s)alter_tabler"   r#   format_table_namer1   r[   r\   rF   r'   r'   r(   visit_rename_table   s    r`   c                 K  s(   dt || j| jt|| jfi |f S Nz%s %s)r]   r"   r#   
add_columnrU   r_   r'   r'   r(   visit_add_column   s    rc   c                 K  s*   dt || j| jt|| jjfi |f S ra   )r]   r"   r#   drop_columnrU   r;   r_   r'   r'   r(   visit_drop_column   s    re   c                 K  s,   dt || j| jt|| j| jr$dndf S )N%s %s %szDROP NOT NULLzSET NOT NULL)r]   r"   r#   alter_columnr<   rE   r_   r'   r'   r(   visit_column_nullable   s
    
rh   c                 K  s.   dt || j| jt|| jdt|| j f S )Nrf   zTYPE %s)r]   r"   r#   rg   r<   format_typerH   r_   r'   r'   r(   visit_column_type   s
    
rj   c                 K  s*   dt || j| jt|| jt|| jf S )Nz%s RENAME %s TO %s)r]   r"   r#   format_column_namer<   rJ   r_   r'   r'   r(   visit_column_name   s
    

rl   c                 K  s<   dt || j| jt|| j| jd ur4dt|| j ndf S )Nrf   zSET DEFAULT %szDROP DEFAULT)r]   r"   r#   rg   r<   rM   format_server_defaultr_   r'   r'   r(   visit_column_default   s    
rn   )r[   r\   c                 K  s   t dd S )NztAdding or removing a "computed" construct, e.g. GENERATED ALWAYS AS, to or from an existing column is not supported.r   CompileErrorr_   r'   r'   r(   visit_computed_column   s    rq   c                 K  s   t dd S )NzAdding, removing or modifying an "identity" construct, e.g. GENERATED AS IDENTITY, to or from an existing column is not supported in this dialect.ro   r_   r'   r'   r(   visit_identity_column   s    rr   r/   zfunctools.partial)r;   quoter$   c                   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rs   r'   r(   
<listcomp>      z quote_dotted.<locals>.<listcomp>)
isinstancer   joinsplit)r;   rs   resultr'   rw   r(   quote_dotted	  s    
r~   r   r    )r\   r;   r#   r$   c                 C  s4   t | jj}|r(t||d || S ||S d S )Nrt   )	functoolspartialpreparerrs   r~   )r\   r;   r#   rs   r'   r'   r(   r^     s    r^   )r\   r;   r$   c                 C  s   | j |S r%   )r   rs   r\   r;   r'   r'   r(   rk      s    rk   r:   )r\   rM   r$   c                 C  s   |  tdt|dS )Nrv   )Zserver_default)Zget_column_default_stringr
   r   )r\   rM   r'   r'   r(   rm   &  s    rm   r   )r\   rH   r$   c                 C  s   | j j|S r%   )dialectZtype_compilerprocess)r\   rH   r'   r'   r(   ri   /  s    ri   r9   c                 C  s   dt | || S )NzALTER TABLE %s)r^   )r\   r;   r#   r'   r'   r(   r]   3  s    r]   c                 K  s   dt | | S )NzDROP COLUMN %srk   )r\   r;   rF   r'   r'   r(   rd   ;  s    rd   c                 C  s   dt | | S )NzALTER COLUMN %sr   r   r'   r'   r(   rg   ?  s    rg   r
   )r\   rU   r$   c                   sD   d j |fi | }d fdd|jD }|r@|d| 7 }|S )NzADD COLUMN %s c                 3  s   | ]}  |V  qd S r%   )r   )ru   
constraintr\   r'   r(   	<genexpr>F  s   zadd_column.<locals>.<genexpr>)Zget_column_specificationr{   constraints)r\   rU   rF   textconstr'   r   r(   rb   C  s    rb   )H
__future__r   r   typingr   r   r   Z
sqlalchemyr   r   r   rA   Zsqlalchemy.ext.compilerr	   Zsqlalchemy.schemar
   r   Zsqlalchemy.sql.elementsr   Zutil.sqla_compatr   r   r   r   r   r   Zsqlalchemy.sql.compilerr   r   r   Zsqlalchemy.sql.functionsr   Zsqlalchemy.sql.schemar   Zsqlalchemy.sql.type_apir   rR   r   r   r   r   Z_ServerDefaultr   r.   r8   rC   rG   rI   rK   rP   rQ   rS   rX   rY   r`   rc   re   rh   rj   rl   rn   rq   rr   r~   r^   rk   rm   ri   r]   rd   rg   rb   r'   r'   r'   r(   <module>   s   	
	
	