o
    voim                  	   @  s\  U 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) dd"l*m+Z+ dd#lm,Z, dd$l-m.Z. dd%l/m0Z0 dd&l/m1Z1 dd'l2m3Z3 ed(eeeef d)Z4e5e6Z7d^d7d8Z8d9d: Z9e:ej;ej<ej=ej>ej=ej>d;Z?d<e@d=< d_dDdEZAd`dHdIZBdadLdMZCdbdOdPZDdcdWdXZEddd\d]ZFdS )e    )annotationsN)Any)cast)
Collection)Dict)Mapping)Optional)TYPE_CHECKING)TypeVar)Unionschema)text)
expression)ForeignKeyConstraint)Index)UniqueConstraint   )_InspectorConv   )util)is_index_sig)	is_uq_sig)ops)PriorityDispatchResult)sqla_compat)ReflectedForeignKeyConstraint)ReflectedIndex)ReflectedUniqueConstraint)quoted_name)
TextClause)Column)Table)AutogenContext)_constraint_sig)DefaultImpl)AlterColumnOp)ModifyTableOps)Plugin_C)boundautogen_contextr#   
modify_opsr'   r   Optional[str]tnameUnion[quoted_name, str]
conn_tableOptional[Table]metadata_tablereturnr   c           &        sf   j }d u |d u  jj|d ur!dd |jD }t|j}nt }t }t }	t }
d
d}d urt }t }zt|j	d}d
W n t	yQ   Y n  t
yY   Y nw  	fdd|D }|D ]	}|drpd}qgzt|j	d}W n	 t	y   Y nw  	fd	d|D }rt }	n
fd
d|D }	dd fdd|D D }
|rt|	|
|| j |	|
|| fdd|D }fdd|D }fdd|	D }fdd|
D } fdd||D }dd |D dd |D dd ||D }fddtD }dd |D }dd |D } fdd|D }d+ 
fdd}d+ 
fdd }d, fd%d&}tt||D ]?}|| }t|rn|j|v rnq[||v r|| \}tfd'd|D r|j|vr|| | q[|| q[tt||D ]e}|| } ||v r|| \}t| r}n|}n|| }t|t| kr|| ||  q| |}!|!jr||| |!j q|!jrt|rd(nd)}"td*|"|j|!j q|!j sJ qtt||D ]}#||# }$||$ q|D ]}%|%|vr.|||%  q!t!j"S )-Nc                 S     h | ]
}t |tjr|qS  )
isinstance	sa_schemar   .0uqr5   r5   \/home/ubuntu/.local/lib/python3.10/site-packages/alembic/autogenerate/compare/constraints.py	<setcomp>D       
z/_compare_indexes_and_uniques.<locals>.<setcomp>Fr   Tc              	     (   g | ]}  |d  ddr|qS )nameunique_constraint
table_nameschema_namerun_name_filtersr8   r+   r   r.   r5   r;   
<listcomp>j       z0_compare_indexes_and_uniques.<locals>.<listcomp>duplicates_indexc              	     r>   )r?   indexrA   rD   r9   ixrF   r5   r;   rG   }   rH   c                   s   h | ]}t | qS r5   )_make_unique_constraint)r9   uq_defr0   implr5   r;   r<      s    
c                 S  s   h | ]}|d ur|qS Nr5   )r9   rJ   r5   r5   r;   r<      s
    c                 3  s    | ]	}t | V  qd S rQ   )_make_indexrK   rO   r5   r;   	<genexpr>   
    

z/_compare_indexes_and_uniques.<locals>.<genexpr>c                      h | ]}  |qS r5   _create_metadata_constraint_sigr8   rP   r5   r;   r<      s    c                   rU   r5   rV   rK   rX   r5   r;   r<          
c                   rU   r5    _create_reflected_constraint_sigr8   rX   r5   r;   r<      rY   c                   rU   r5   rZ   rK   rX   r5   r;   r<      rY   c                   s$   i | ]}|j rtt| |qS r5   )is_namedr   strmd_name_to_sql_namer9   cr+   r5   r;   
<dictcomp>   s    z0_compare_indexes_and_uniques.<locals>.<dictcomp>c                 S     i | ]}|j |qS r5   r?   r_   r5   r5   r;   rb          c                 S  rc   r5   rd   r_   r5   r5   r;   rb      re   c                 S  s    i | ]}t |jr|j|qS r5   )r   constraint_name_stringr?   r_   r5   r5   r;   rb      s    
c                   s   i | ]}||  | fqS r5   r5   )r9   r?   )conn_indexes_by_nameconn_uniques_by_namer5   r;   rb      s    c                 S  rc   r5   unnamedr8   r5   r5   r;   rb      re   c                 S  rc   r5   ri   r8   r5   r5   r;   rb          c                   s$   i | ]}t |j js|j|qS r5   )r   _constraint_is_namedconstdialectrj   r8   ra   r5   r;   rb      s    objN_constraint_sig[sa_schema.UniqueConstraint] | _constraint_sig[sa_schema.Index]c                   s   t | r' | j| jddd r%jtj| j t	d| j| j
 d S d S t| rXs/d S s3r5d S  | j| jddd rVjtj| j t	d| j| j
 d S d S J )NrJ   FzDetected added index %r on '%s'r@   z+Detected added unique constraint %r on '%s')r   run_object_filtersrm   r?   r   appendCreateIndexOp
from_indexloginfocolumn_namesr   AddConstraintOpfrom_constraintro   )r+   is_create_tableis_drop_tabler,   supports_unique_constraintsr5   r;   	obj_added   s:   	z/_compare_indexes_and_uniques.<locals>.obj_addedc                   s   t | r-| jrsd S  | j| jddd r+jtj| j t	
d| j d S d S t| rYs5r7d S  | j| jddd rWjtj| j t	
d| j d S d S J )NrJ   TzDetected removed index %r on %rr@   z+Detected removed unique constraint %r on %r)r   	is_uniquerq   rm   r?   r   rr   DropIndexOprt   ru   rv   r   DropConstraintOpry   rz   )r+   r{   r|   r,   r}   r.   r5   r;   obj_removed!  s2   
z1_compare_indexes_and_uniques.<locals>.obj_removedoldnewmsgr]   c                   s   t | r9t |s
J  |j|jdd| jr7td| j| jtj	| j jtj
	|j d S d S t| rrt|sCJ  |j|jdd| jrptd| j| jtj| j jtj|j d S d S J )NrJ   Fz#Detected changed index %r on %r: %sr@   z/Detected changed unique constraint %r on %r: %s)r   rq   rm   r?   ru   rv   r   rr   r   rt   rs   r   r   ry   rx   )r   r   r   )r+   r,   r.   r5   r;   obj_changedF  s<   
z1_compare_indexes_and_uniques.<locals>.obj_changedc                 3  s    | ]	} j |j kV  qd S rQ   ri   )r9   meta_idx)conn_idxr5   r;   rS   {  rT   rJ   zunique constraintz5Cannot compare %s %r, assuming equal and skipping. %s)ro   rp   )r   rp   r   rp   r   r]   )#	inspectormigration_contextrP   constraintssetindexes	frozensetr   get_unique_constraintsNotImplementedError	TypeErrorgetget_indexes_correct_for_uq_duplicates_uixrn   correct_for_autogen_constraintsunionintersectionsorted
differencer   rj   allr   typecompare_to_reflectedis_differentmessageis_skipru   rv   r?   is_equalr   CONTINUE)&r+   r,   r   r.   r0   r2   r   metadata_unique_constraintsmetadata_indexesconn_uniquesconn_indexes+unique_constraints_duplicate_unique_indexesconn_uniques_reflectedconn_indexes_reflectedr:   metadata_unique_constraints_sigmetadata_indexes_sigconn_unique_constraintsconn_indexes_sigmetadata_names
conn_namesdoubled_constraintsconn_uniques_by_sigmetadata_uniques_by_sigunnamed_metadata_uniquesr~   r   r   removed_nameconn_objconn_uqexisting_namemetadata_obj
comparisonthing
added_namero   uq_sigr5   )r+   r   rg   r0   rh   rP   r{   r|   r,   r   r}   r.   r;   _compare_indexes_and_uniques5   s:  	






	
&%+



	
r   c                   s    fdd|D }dd |D }fdd|D } fdd|D }	dd |D }
d	d | D }|D ]#}||vrJ || j|vrI| ||  q2||	vrU||
|  q2d S )
Nc                   s   g | ]
}t | |fqS r5   )r   _get_constraint_final_namer9   consrn   r5   r;   rG     s    z2_correct_for_uq_duplicates_uix.<locals>.<listcomp>c                 S  s   h | ]
\}}|d ur|qS rQ   r5   r9   r?   r   r5   r5   r;   r<     s    z1_correct_for_uq_duplicates_uix.<locals>.<setcomp>c                   s$   h | ]\}}|d u r  |jqS rQ   )rW   rj   r   rX   r5   r;   r<     s
    
c                   s   h | ]}|j rt| qS r5   )uniquer   r   r   r   r5   r;   r<     s    
c                 S  s   i | ]	}|j r|j|qS r5   )r   r?   r   r5   r5   r;   rb     s    z2_correct_for_uq_duplicates_uix.<locals>.<dictcomp>c                 S  s   i | ]}|j d  r|j|qS )rI   )rv   r?   r   r5   r5   r;   rb     s    )r[   rj   discard)r   r   r   r   rn   rP   metadata_cons_namesmetadata_uq_namesunnamed_metadata_uqsmetadata_ix_namesconn_ix_namesuqs_dupe_indexesoverlapr5   )rn   rP   r;   r     s<   


r   )ascdescnulls_first
nulls_last
nullsfirst	nullslastzMapping[str, Any]_IndexColumnSortingOpsrP   r%   paramsr   r"   Optional[Index]c                 C  s   g }| d}t|d D ]<\}}|d u r&d|v sJ |d | }t|}n|}|j| }|rD||v rD|| D ]}	|	tv rCt|	 |}q7|| qtj|d g|R |d |d| |d}
d|v rl|d |
j	d< |
S )	Ncolumn_sortingrw   expressionsr?   r   )r   _tablerJ   duplicates_constraint)
r   	enumerater   r`   r   rr   r7   r    adjust_reflected_dialect_optionsrv   )rP   r   r0   exprssortingnumcol_namer?   itemoperatorrL   r5   r5   r;   rR     s8   



rR   r   r   c                   sL   t j fdd|d D d|d i| |d}d|v r$|d |jd< |S )Nc                      g | ]} j | qS r5   r`   r9   cnamer0   r5   r;   rG   +      z+_make_unique_constraint.<locals>.<listcomp>rw   r?   r@   rI   )r7   r   r   rv   )rP   r   r0   r:   r5   r   r;   rM   '  s   
rM   r   r   c           
   	     sf  | d | d rd| d f |  di }tj fdd| d D fdd| d	 D | d
| d| d| d| d d}| d }| d }t||}| jvr|tj| jg fddt| d | d	 D R |d urr|ntjddid n0 jj	| j
 dr jj	| }t| d | d	 D ]\}}	|	|jvr|t|	 j| j q | |S )Nreferred_tablereferred_schema%s.%soptionsc                   r   r5   r   r   r   r5   r;   rG   ?  r   z%_make_foreign_key.<locals>.<listcomp>constrained_columnsc                   s   g | ]}d  |f qS )r   r5   )r9   n)r.   r5   r;   rG   @  s    referred_columnsonupdateondelete
deferrable	initiallyr?   )r   r   r   r   r?   c                   s$   g | ]\}}t | j| jqS r5   )r7   r!   r`   r   )r9   localremoter   r5   r;   rG   X  s    alembic_placeholderT)r   rv   )r   r7   r   r   _get_table_keymetadatar"   zipBLANK_SCHEMAtablesrv   r`   append_columnr!   r   append_constraint)
r   r0   r   rm   r   r   remote_table_keyplaceholder_tabler   r   r5   )r0   r.   r;   _make_foreign_key5  s`   





r   modify_table_opsc                   s  d u s|d u rt jS  j}dd |jD } fddt|jdD }fdd|D }	 jj jj|	| fdd|D }
fdd|	D }|rfd	|d
 v rfdd |D }dd |
D }ndd |D }dd |
D }dd |
D }dd |D } fdd} fdd}t	|
|D ]}|| ||vrjrj|v r|j jnd }|| qt	|
|D ]}|| ||vrވjr׈j|v r|j jnd }|| qt jS )Nc                 S  r4   r5   )r6   r7   r   r9   fkr5   r5   r;   r<     r=   z(_compare_foreign_keys.<locals>.<setcomp>c              	     r>   )r?   foreign_key_constraintrA   rD   r   rF   r5   r;   rG     s    z)_compare_foreign_keys.<locals>.<listcomp>r   c                   s   h | ]}t | qS r5   )r   )r9   rm   r   r5   r;   r<     rY   c                   rU   r5   rV   r   rX   r5   r;   r<     rY   c                   rU   r5   rZ   r   rX   r5   r;   r<     rY   r   r   c                 S  rc   r5   ri   r_   r5   r5   r;   rb     re   z)_compare_foreign_keys.<locals>.<dictcomp>c                 S  rc   r5   ri   r_   r5   r5   r;   rb     re   c                 S  rc   r5   unnamed_no_optionsr_   r5   r5   r;   rb     re   c                 S  rc   r5   r  r_   r5   r5   r;   rb     rk   c                 S     i | ]}|j d ur|j |qS rQ   rd   r_   r5   r5   r;   rb     s    c                 S  r  rQ   rd   r_   r5   r5   r;   rb     s    c                   sh     | j| jdd|r2jtjj tdd	| j
d	| j| jr+d| j nd| j d S d S )Nr  Fz1Detected added foreign key (%s)(%s) on table %s%s, %s. )rq   rm   r?   r   rr   CreateForeignKeyOpry   ru   rv   joinsource_columnstarget_columnssource_schemasource_tablero   
compare_to)r+   rm   r   r5   r;   _add_fk  s   

z&_compare_foreign_keys.<locals>._add_fkc                   sh     | j| jdd|r2jtj| j tdd	| j
d	| j| jr+d| j nd| j d S d S )Nr  Tz3Detected removed foreign key (%s)(%s) on table %s%sr  r  r  )rq   rm   r?   r   rr   r   ry   ru   rv   r	  r
  r  r  r  r  )r+   r   r5   r;   
_remove_fk  s   

z)_compare_foreign_keys.<locals>._remove_fk)r   r   r   r   r   get_foreign_keysr   rP   correct_for_autogen_foreignkeysr   r   r?   rm   )r+   r   r   r.   r0   r2   r   metadata_fksconn_fks_listconn_fksmetadata_fks_sigconn_fks_sigconn_fks_by_sigmetadata_fks_by_sigmetadata_fks_by_nameconn_fks_by_namer  r  removed_sigr  	added_sigr5   )r+   r0   rm   rP   r   r   r.   r;   _compare_foreign_keysr  sx   






r  alter_column_opr&   r   conn_colColumn[Any]metadata_colc           	      C  s   |j }|j }||_||ur>t|j|jrt|s"t|j|jr,td|| t
jS ||_	td|r6dnd|| t
jS t
jS )Nz3Ignoring nullable change on identity column '%s.%s'zDetected %s on column '%s.%s'NULLzNOT NULL)nullableexisting_nullabler   _server_default_is_computedserver_default_nullability_might_be_unset_server_default_is_identityru   rv   modify_nullabler   STOPr   )	r+   r   r   r.   r   r!  r#  metadata_col_nullableconn_col_nullabler5   r5   r;   _compare_nullable  s:   	
r/  pluginr(   Nonec                 C  s.   |  tdd |  tdd |  tdd d S )Ntabler   foreignkeyscolumnr%  )add_autogenerate_comparatorr   r  r/  )r0  r5   r5   r;   setup  s   r6  )r+   r#   r,   r'   r   r-   r.   r/   r0   r1   r2   r1   r3   r   )rP   r%   r   r   r0   r"   r3   r   )rP   r%   r   r   r0   r"   r3   r   )r   r   r0   r"   r3   r   )r+   r#   r   r'   r   r-   r.   r/   r0   r"   r2   r"   r3   r   )r+   r#   r   r&   r   r-   r.   r/   r   r/   r!  r"  r#  r"  r3   r   )r0  r(   r3   r1  )G
__future__r   loggingtypingr   r   r   r   r   r   r	   r
   r   
sqlalchemyr   r7   r   sqlalchemy.sqlr   sqlalchemy.sql.schemar   r   r   r   r   r  ddl._autogenr   r   
operationsr   r   r   sqlalchemy.engine.interfacesr   r   r   sqlalchemy.sql.elementsr   r    r!   r"   autogenerate.apir#   r$   ddl.implr%   operations.opsr&   r'   runtime.pluginsr(   r)   	getLogger__name__ru   r   r   immutabledictr   r   r   r   r   __annotations__rR   rM   r   r  r/  r6  r5   r5   r5   r;   <module>   sx   

   
?

 

=
,