o
    voi(*                     @  sd  d dl mZ d dl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 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 e e!Z"dAddZ#dBd d!Z$dCd+d,Z%dDd.d/Z&	0dEdFd4d5Z'dGd6d7Z(dGd8d9Z)dHd;d<Z*dId?d@Z+dS )J    )annotationsN)NoneType)Any)cast)Optional)Sequence)TYPE_CHECKING)Union)schema)DefaultClause   )util)DispatchPriority)PriorityDispatchResult)sqla_compat)quoted_name)Column)AutogenContext)AlterColumnOp)Pluginmetadata_defaultOptional[Any]autogen_contextr   returnOptional[str]c                 C  sL   t | tjrt | jtr| j} nt| jj|jddid} t | tr$| S d S )Nliteral_bindsTdialectcompile_kwargs)
isinstance	sa_schemar   argstrcompiler   )r   r    r$   `/home/ubuntu/.local/lib/python3.10/site-packages/alembic/autogenerate/compare/server_defaults.py"_render_server_default_for_compare    s   
r&   sqltextr"   c                 C  s   t dd|  S )zwe want to warn if a computed sql expression has changed.  however
    we don't want false positives and the warning is not that critical.
    so filter out most forms of variability from the SQL text.

    z[ \(\)'\"`\[\]\t\r\n] )resublower)r'   r$   r$   r%   _normalize_computed_default3   s   r,   alter_column_opr   r
   tnamecnameconn_colColumn[Any]metadata_colr   c                 C  s   |j }|j }|d u r|d u rtjS t|r#t|s#t|| tjS t|s+tjS ttt	j
|j jj| jddid}	t|	}	t|j t	j
r[t|j jj| jddid}
t|
}
nd}
|	|
krft|| tjS )Nr   Tr   r(   )server_defaultr   CONTINUEr   _server_default_is_computed_warn_computed_not_supportedSTOPr"   r   r    Computedr'   r#   r   r,   r   )r   r-   r
   r.   r/   r0   r2   r   conn_col_defaultrendered_metadata_defaultrendered_conn_defaultr$   r$   r%   _compare_computed_default=   sH   



r<   Nonec                 C  s   t d| |f  d S )Nz,Computed default on %s.%s cannot be modified)r   warn)r.   r/   r$   r$   r%   r6   w   s   r6   orderon_nulloracle_orderoracle_on_nullUnion[quoted_name, str]skipSequence[str]c                 C  s   |j }|j }	|	d u r|d u st||	stjS t|j tjtjt	fs$J t|j tjtjt	fs1J | j
j}
|
|j |j \}}}|rT||_|rTtd||t| tjS tjS )NzIDetected server default on column '%s.%s': identity options attributes %s)r3   r   _server_default_is_identityr   r4   r   r    Identityr   r   migration_contextimpl_compare_identity_defaultmodify_server_defaultloginfosortedr7   )r   r-   r
   r.   r/   r0   r2   rE   r   r9   rJ   diff_is_alterr$   r$   r%   rK   {   s@   
rK   c                 C  s   |j }|j }|d u r|d u rtjS ||_| j}	|	jdu rtjS t|	js'tjS t|| }
|r5t	t
|jjnd }|	|	||||j |
}|rS||_td|	j|| tjS |du rZtjS tjS )NFzBUser defined function %s detected server default on column '%s.%s')r3   r   r4   existing_server_defaultrI   _user_compare_server_defaultr7   callabler&   r   r   r!   textrL   rM   rN   r   r-   r
   r.   r/   r0   r2   r   r9   rI   r:   r;   is_diffr$   r$   r%   rT      sF   


rT   c                 C  s   |j }|j }|du r|du rtjS ||_t|ttfr"t|ttfs%tjS | j}	t|| }
|r6t	t
|jjnd}|	j|||
|}|rR||_td|	j|| tjS tjS )zuse dialect.impl.compare_server_default.

    This would in theory not be needed.  however we dont know if any
    third party libraries haven't made their own alembic dialect and
    implemented this method.

    Nz9Dialect impl %s detected server default on column '%s.%s')r3   r   r4   rS   r   r   r   rI   r&   r   r   r!   rV   rJ   compare_server_defaultrL   rM   rN   r7   rW   r$   r$   r%   $_dialect_impl_compare_server_default   sB   rZ   r   c                 C  sP   |j j|u rd|jd< tjS |jdu rd|jd< tjS |jdu r%d|jd< tjS )NTautoincrementF)table_autoincrement_columnkwr[   r   r4   )r   r-   r
   r.   r/   r0   r2   r$   r$   r%   _setup_autoincrement(  s   	




r_   pluginr   c                 C  sV   | j tddtjd |  tdd |  tdd |  tdd | j tddtjd d S )Ncolumnr3   )priority)	add_autogenerate_comparatorrT   r   FIRSTr<   rK   r_   rZ   LAST)r`   r$   r$   r%   setup;  s6   
rf   )r   r   r   r   r   r   )r'   r"   r   r"   )r   r   r-   r   r
   r   r.   r"   r/   r"   r0   r1   r2   r1   r   r   )r.   r"   r/   r"   r   r=   )r?   )r   r   r-   r   r
   r   r.   rD   r/   rD   r0   r1   r2   r1   rE   rF   r   r   )r   r   r-   r   r
   r   r.   rD   r/   rD   r0   r1   r2   r1   r   r   )r   r   r-   r   r
   r   r.   rD   r/   r   r0   r1   r2   r1   r   r   )r`   r   r   r=   ),
__future__r   loggingr)   typesr   typingr   r   r   r   r   r	   
sqlalchemyr
   r    sqlalchemy.sql.schemar   r(   r   r   r   r   sqlalchemy.sql.elementsr   r   autogenerate.apir   operations.opsr   runtime.pluginsr   	getLogger__name__rM   r&   r,   r<   r6   rK   rT   rZ   r_   rf   r$   r$   r$   r%   <module>   sB    





:
9
:
: