o
    ‹åg5­  ã                	   @  s’  U d dl mZ d dl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 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/ d d#lm0Z0 d d$l1m2Z2 d d%l3m4Z4 d d&l5m6Z6 d d'l5m7Z7 d d(l5m8Z8 d d)l5m9Z9 dd*l#m:Z: e ;e<¡Z=d�d1d2„Z>e"j?d3d4�Z@d�d7d8„ZAe@ Bd9¡d‘d<d=„ƒZCd’dCdD„ZDe" EejFejGejHejIejHejIdEœ¡ZJdFeKdG< d“dOdP„ZLd”dRdS„ZMd•dUdV„ZNejOd–d^d_„ƒZPed`eeeef da�ZQe@ Bdb¡d—dedf„ƒZRdgdh„ ZSe@ Bdi¡d˜dpdq„ƒZTe@ Bdi¡d™dsdt„ƒZUe@ Bdi¡d˜dudv„ƒZVdšdydz„ZWd›d}d~„ZXdœdd€„ZYd�d�d‚„ZZdƒd„„ Z[e@ Bdi¡džd†d‡„ƒZ\e@ Bdi¡dŸd‰dŠ„ƒZ]e@ Bdb¡d d‹dŒ„ƒZ^e@ Bdb¡d¡d�dŽ„ƒZ_dS )¢é    )ÚannotationsN)ÚAny)Úcast)ÚDict)ÚIterator)ÚMapping)ÚOptional)ÚSet)ÚTuple)ÚTYPE_CHECKING)ÚTypeVar)ÚUnion)Úevent)Úinspect©Úschema)Útext)Útypes)Ú
expression)ÚForeignKeyConstraint)ÚIndex)ÚUniqueConstraint)Ú
OrderedSeté   )Úutil)Úis_index_sig)Ú	is_uq_sig)Úops)Úsqla_compat)ÚLiteral)Ú	Inspector)Úquoted_name)Ú
TextClause)ÚColumn)ÚTable)ÚAutogenContext)ÚDefaultImpl)ÚAlterColumnOp)ÚMigrationScript)ÚModifyTableOps)Ú
UpgradeOps)Ú_constraint_sigÚautogen_contextr%   Úmigration_scriptr(   ÚreturnÚNonec                 C  s,   |j d }|jd }t| |ƒ | |¡ d S )Néÿÿÿÿ)Úupgrade_ops_listÚdowngrade_ops_listÚ_produce_net_changesÚreverse_into)r,   r-   Úupgrade_opsÚdowngrade_ops© r7   úX/var/www/html/flaskapp/venv/lib/python3.10/site-packages/alembic/autogenerate/compare.pyÚ_populate_migration_script;   s   


r9   T)Úuselistr5   r*   c                   s¢   ˆ j }|d us	J ‚ˆ j dd¡}t|ƒ}|jj}|r0t| ¡ ƒ}| d¡ | |¡ | 	d ¡ nd h}‡ fdd„|D ƒ}ˆ jd usCJ ‚t
 dˆ jj¡ˆ ||ƒ d S )NÚinclude_schemasFÚinformation_schemac                   s   h | ]}ˆ   |d i ¡r|’qS r   ©Úrun_name_filters)Ú.0Ús©r,   r7   r8   Ú	<setcomp>]   s
    ÿÿz'_produce_net_changes.<locals>.<setcomp>r   )Ú
connectionÚoptsÚgetr   ÚdialectÚdefault_schema_nameÚsetÚget_schema_namesÚdiscardÚaddÚcomparatorsÚdispatchÚname)r,   r5   rC   r;   Ú	inspectorÚdefault_schemaÚschemasr7   rA   r8   r3   H   s$   


ÿÿr3   r   rQ   ú$Union[Set[None], Set[Optional[str]]]c           	        sœ   ˆ j }tƒ }ˆ jj}ˆ jj}|D ]#‰t|jˆd�ƒ}ˆ|kr&| ˆ jjg¡}| ‡ ‡fdd„|D ƒ¡ qtdd„ ˆ j	D ƒƒ ||fg¡}t
||||ˆ ƒ d S )Nr   c                 3  s*   � | ]}ˆ   |d dˆi¡rˆ|fV  qdS )ÚtableÚschema_nameNr=   )r?   Útname©r,   rT   r7   r8   Ú	<genexpr>}   s   € 
ÿý
ÿz&_autogen_for_tables.<locals>.<genexpr>c                 S  s   g | ]}|j |jf‘qS r7   )r   rN   )r?   rS   r7   r7   r8   Ú
<listcomp>†   ó    z'_autogen_for_tables.<locals>.<listcomp>)rO   rH   Úmigration_contextÚversion_table_schemaÚversion_tableÚget_table_namesÚ
differenceÚupdater   Úsorted_tablesÚ_compare_tables)	r,   r5   rQ   rO   Úconn_table_namesr[   r\   ÚtablesÚmetadata_table_namesr7   rV   r8   Ú_autogen_for_tablesg   s4   ÿÿ
þÿþûre   rb   rH   rd   rO   r    c              	     s  |j jj‰t‡fdd„|D ƒƒ}‡ fdd„t||ƒD ƒ}|}| | ¡D ]K\}}|r/d||f n|}	|||f }
ˆ  |
|ddd ¡rn|j tj	 
|
¡¡ t d|	¡ tj|g |d	�}t d¡ˆ |||d |
ƒ | ¡ sn|j |¡ q#t ¡ }|  |¡D ]c\}}t ||¡}	|	|jv }tj|||d	�}|s¤t |d
ˆ jj |¡¡ |j|d d� ˆ  ||ddd ¡rÛtj|g |d	�}t d¡ˆ ||||d ƒ | ¡ sË|j |¡ |j tj 
|¡¡ t d|	¡ qx|  |¡}t ¡ }i }|D ]3\}}t ||¡}	|	|jv }tj|||d	�}|�st |d
ˆ jj |¡¡ |j|d d� ||||f< qét|dd„ d�D ]d\}}|�p-d }|�r7d||f n|}	|||f }
|j|	 }ˆ  |
|dd|¡�rˆtj|g |d	�}t||||
|ˆ |ƒ� t d¡ˆ |||||
ƒ W d   ƒ n	1 �sxw   Y  | ¡ �sˆ|j |¡ �q%d S )Nc                   s$   g | ]\}}|ˆ kr|nd |f‘qS ©Nr7   )r?   r   rU   )rP   r7   r8   rX   ¡   s    ÿÿz#_compare_tables.<locals>.<listcomp>c                   s(   i | ]\}\}}|ˆ j t ||¡ “qS r7   )Útable_key_to_tableÚ	sa_schemaÚ_get_table_key)r?   Úno_dflt_schemar   rU   rA   r7   r8   Ú
<dictcomp>ª   s    
ý
ÿÿz#_compare_tables.<locals>.<dictcomp>ú%s.%srS   FzDetected added table %rr   Úcolumn_reflect)Úinclude_columnsTzDetected removed table %rc                 S  s   | d pd| d fS )Nr   Ú é   r7   )Úxr7   r7   r8   Ú<lambda>ü   ó    z!_compare_tables.<locals>.<lambda>)Úkey) ÚbindrF   rG   r   Úzipr^   Úrun_object_filtersr   ÚappendÚCreateTableOpÚ
from_tableÚlogÚinfor)   rL   rM   Úis_emptyrh   ÚMetaDatari   rc   r$   r   ÚlistenrZ   ÚimplÚ_compat_autogen_column_reflectÚreflect_tableÚDropTableOpÚintersectionÚsortedÚ_compare_columns)rb   rd   rO   r5   r,   Ú#metadata_table_names_no_dflt_schemaÚtname_to_tabler@   rU   rN   Úmetadata_tableÚmodify_table_opsÚremoval_metadataÚexistsÚtÚexisting_tablesÚexisting_metadataÚconn_column_infoÚ
conn_tabler7   )r,   rP   r8   ra   ’   sÔ   

þÿ

ÿü
ÿ
ÿú€
ÿû	ÿ€

û


ÿù	ú÷
€ãra   )ÚascÚdescÚnulls_firstÚ
nulls_lastÚ
nullsfirstÚ	nullslastzMapping[str, Any]Ú_IndexColumnSortingOpsr€   r&   ÚparamsúDict[str, Any]r‘   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_sortingÚcolumn_namesÚexpressionsrN   Úunique)rŸ   Ú_tableÚindexÚduplicates_constraint)
rE   Ú	enumerater   Úcr˜   rx   rh   r   Ú adjust_reflected_dialect_optionsr|   )r€   r™   r‘   ÚexprsÚsortingÚnumÚcol_namerN   ÚitemÚoperatorÚixr7   r7   r8   Ú_make_index(  s8   


€ÿþü
û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 r7   ©r¤   ©r?   Úcname©r‘   r7   r8   rX   L  ó    z+_make_unique_constraint.<locals>.<listcomp>r�   rN   Úunique_constraintÚduplicates_index)rh   r   r¥   r|   )r€   r™   r‘   Úuqr7   r²   r8   Ú_make_unique_constraintH  s   ÿþ
ýr·   r   c              	     s’   | 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�}ˆ  |¡ |S )NÚreferred_tableÚreferred_schemarl   Úoptionsc                   r®   r7   r¯   r°   r²   r7   r8   rX   `  r³   z%_make_foreign_key.<locals>.<listcomp>Úconstrained_columnsc                   s   g | ]}d ˆ |f ‘qS )rl   r7   )r?   Ún)rU   r7   r8   rX   a  rY   Úreferred_columnsÚonupdateÚondeleteÚ
deferrableÚ	initiallyrN   )r¾   r¿   rÀ   rÁ   rN   )rE   rh   r   Úappend_constraint)r™   r‘   rº   Úconstr7   )r‘   rU   r8   Ú_make_foreign_keyV  s   ù

rÄ   úOptional[str]rU   úUnion[quoted_name, str]r‰   rŠ   r)   úIterator[None]c              	   #  sx  � ˆr	dˆˆf nˆ}t dd„ |jD ƒƒ}dd„ |jD ƒ}	‡ ‡‡fdd„|jD ƒ}
| |
¡D ]"}ˆ  |	| |ddd ¡rP|j tj ˆˆ|	| ¡¡ t 	d	||¡ q.| 
|
¡D ]4}|	| }|j| }ˆ  ||dd|¡skqVtjˆ|ˆd
�}t d¡ˆ |ˆˆ|||ƒ | ¡ rŠ|j |¡ qVd V  t|
ƒ |¡D ]$}ˆ  |j| |ddd ¡r¹|j tj ˆˆ|j| ¡¡ t 	d||¡ q•d S )Nrl   c                 s  s   � | ]	}|j s|jV  qd S rf   ©ÚsystemrN   ©r?   r¤   r7   r7   r8   rW   x  s   € ÿ
ÿz#_compare_columns.<locals>.<genexpr>c                 S  s   i | ]	}|j s|j|“qS r7   rÈ   rÊ   r7   r7   r8   rk   {  s
    ÿÿz$_compare_columns.<locals>.<dictcomp>c              	     s*   i | ]}ˆ   |jd ˆˆdœ¡r|j|“qS )Úcolumn©Ú
table_namerT   )r>   rN   rÊ   ©r,   r   rU   r7   r8   rk     s    ÿýÿrË   FzDetected added column '%s.%s'r   TzDetected removed column '%s.%s')r   r¤   r^   rw   r   rx   ÚAddColumnOpÚfrom_column_and_tablenamer{   r|   r„   r'   rL   rM   Úhas_changesrH   ÚDropColumnOp)r   rU   r‘   r‰   rŠ   r,   rO   rN   Úmetadata_col_namesÚmetadata_cols_by_nameÚconn_col_namesr±   ÚcolnameÚmetadata_colÚconn_colÚalter_column_opr7   rÎ   r8   r†   m  sn   €
ÿÿþÿ
ÿÿ€

ÿù
€ÿÿÿ€÷r†   Ú_C)ÚboundrS   Ú
modify_opsúOptional[Table]c           $        sN  ˆ j }ˆd u ‰|d u ‰ˆ jj‰|d ur!dd„ |jD ƒ}t|jƒ}ntƒ }tƒ }tƒ  }	}
d‰
d}ˆd ur¥z|jˆˆ	d�}	d‰
W n tyH   Y n  t	yP   Y nw ‡ ‡	‡fdd„|	D ƒ}	|	D ]	}| 
d¡rgd}q^z	|jˆˆ	d�}
W n	 tyz   Y nw ‡ ‡	‡fd	d„|
D ƒ}
ˆrŒtƒ }	n
‡‡fd
d„|	D ƒ}	dd„ ‡‡fdd„|
D ƒD ƒ}
|r±t|	|
||ˆ 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|ƒ�rc|j|v �rc�qP||v �rŠ|| \}‰t‡fd'd„|D ƒƒ�rˆ|j|v�rˆ||ƒ |ˆƒ �qP||ƒ �qPtt|ƒ |¡ƒD ]e}|| }||v �rµ|| \}‰t|ƒ�r²ˆ}n|}n|| }t|ƒt|ƒk�rÌ||ƒ ||ƒ �q™| |¡}|j�rÞ||||jƒ �q™|j�r÷t|ƒ�réd(nd)} t d*| |j|j¡ �q™|j�sýJ ‚�q™tt|ƒ |¡ƒD ]}!||! }"||"ƒ �q|D ]}#|#|v�r#|||# ƒ �qd S )-Nc                 S  ó   h | ]
}t |tjƒr|’qS r7   )Ú
isinstancerh   r   ©r?   r¶   r7   r7   r8   rB   É  ó    
ýÿz/_compare_indexes_and_uniques.<locals>.<setcomp>Fr   Tc              	     ó(   g | ]}ˆ   |d  dˆˆdœ¡r|‘qS )rN   r´   rÌ   r=   rà   rÎ   r7   r8   rX   è  ó    ýýÿz0_compare_indexes_and_uniques.<locals>.<listcomp>rµ   c              	     râ   )rN   r¡   rÌ   r=   ©r?   r¬   rÎ   r7   r8   rX   û  rã   c                   s   h | ]}t ˆ|ˆ ƒ’qS r7   )r·   )r?   Úuq_def©r‘   r€   r7   r8   rB     s    
ÿÿc                 S  s   h | ]}|d ur|’qS rf   r7   )r?   r¡   r7   r7   r8   rB     s
    üc                 3  s   � | ]	}t ˆ|ˆ ƒV  qd S rf   )r­   rä   ræ   r7   r8   rW     s   € 
ÿz/_compare_indexes_and_uniques.<locals>.<genexpr>c                   ó   h | ]}ˆ   |¡’qS r7   ©Ú_create_metadata_constraint_sigrà   ©r€   r7   r8   rB   3  ó    ÿÿc                   rç   r7   rè   rä   rê   r7   r8   rB   8  ó    
ÿc                   rç   r7   ©Ú _create_reflected_constraint_sigrà   rê   r7   r8   rB   <  rì   c                   rç   r7   rí   rä   rê   r7   r8   rB   @  rì   c                   s$   i | ]}|j rtt| ˆ ¡ƒ|“qS r7   )Úis_namedr   ÚstrÚmd_name_to_sql_namerÊ   rA   r7   r8   rk   E  s    ýÿz0_compare_indexes_and_uniques.<locals>.<dictcomp>c                 S  ó   i | ]}|j |“qS r7   ©rN   rÊ   r7   r7   r8   rk   N  rs   c                 S  rò   r7   ró   rÊ   r7   r7   r8   rk   O  rs   c                 S  s    i | ]}t  |j¡r|j|“qS r7   )r   Úconstraint_name_stringrN   rÊ   r7   r7   r8   rk   P  s    
ýÿc                   s   i | ]}|ˆ| ˆ | f“qS r7   r7   )r?   rN   )Úconn_indexes_by_nameÚconn_uniques_by_namer7   r8   rk   V  s    ÿÿc                 S  rò   r7   ©Úunnamedrà   r7   r7   r8   rk   _  rs   c                 S  rò   r7   r÷   rà   r7   r7   r8   rk   `  ó    ÿc                   s$   i | ]}t  |jˆ j¡s|j|“qS r7   )r   Ú_constraint_is_namedrÃ   rF   rø   rà   rA   r7   r8   rk   c  s    ÿýÿÚobjr+   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 ‚)Nr¡   Fz!Detected added index '%r' on '%s'r´   z+Detected added unique constraint %r on '%s')r   rw   rÃ   rN   r   rx   ÚCreateIndexOpÚ
from_indexr{   r|   r�   r   ÚAddConstraintOpÚfrom_constraint©rû   )r,   Úis_create_tableÚis_drop_tablerÜ   Úsupports_unique_constraintsr7   r8   Ú	obj_addeds  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 ‚)Nr¡   TzDetected removed index %r on %rr´   z+Detected removed unique constraint %r on %r)r   Ú	is_uniquerw   rÃ   rN   r   rx   ÚDropIndexOprý   r{   r|   r   ÚDropConstraintOprÿ   r   )r,   r  r  rÜ   r  rU   r7   r8   Ú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 ‚)Nr¡   Fz#Detected changed index %r on %r: %sr´   z/Detected changed unique constraint %r on %r: %s)r   rw   rÃ   rN   r{   r|   r   rx   r  rý   rü   r   r  rÿ   rþ   )r	  r
  r  )r,   rÜ   rU   r7   r8   Úobj_changed´  s<   ÿ
ÿùÿüÿÿôz1_compare_indexes_and_uniques.<locals>.obj_changedc                 3  s   � | ]	}ˆ j |j kV  qd S rf   r÷   )r?   Úmeta_idx)Úconn_idxr7   r8   rW   ã  s
   € 
ÿ
ÿr¡   zunique constraintz5Cannot compare %s %r, assuming equal and skipping. %s)rû   r+   )r	  r+   r
  r+   r  rð   ) rO   rZ   r€   ÚconstraintsrH   ÚindexesÚ	frozensetÚget_unique_constraintsÚNotImplementedErrorÚ	TypeErrorrE   Úget_indexesÚ_correct_for_uq_duplicates_uixrF   Úcorrect_for_autogen_constraintsÚunionr„   r…   r^   r   rø   Úallr   ÚtypeÚcompare_to_reflectedÚis_differentÚmessageÚis_skipr{   r|   rN   Úis_equal)$r,   rÜ   r   rU   r‘   r‰   rO   Úmetadata_unique_constraintsÚmetadata_indexesÚconn_uniquesÚconn_indexesÚ+unique_constraints_duplicate_unique_indexesr¶   Ú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_namerû   Úuq_sigr7   )r,   r  rõ   r‘   rö   r€   r  r  rÜ   r   r  rU   r8   Ú_compare_indexes_and_uniques¹  s.  	þ
ÿüþ	
€
ÿÿþþÿþúü
þ
ÿ
ÿ
ÿ
þ	þÿþ	ÿ
þ! %ÿ
þÿ€


ÿü
€þr8  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 r7   )r   Ú_get_constraint_final_name©r?   Úcons©rF   r7   r8   rX   .  s    ÿÿz2_correct_for_uq_duplicates_uix.<locals>.<listcomp>c                 S  s   h | ]
\}}|d ur|’qS rf   r7   ©r?   rN   r;  r7   r7   r8   rB   3  s    z1_correct_for_uq_duplicates_uix.<locals>.<setcomp>c                   s$   h | ]\}}|d u rˆ   |¡j’qS rf   )ré   rø   r=  rê   r7   r8   rB   7  s
    
þc                   s   h | ]}|j rt |ˆ ¡’qS r7   )rŸ   r   r9  r:  r<  r7   r8   rB   =  s    ý
ÿc                 S  s   i | ]	}|j r|j|“qS r7   )rŸ   rN   r:  r7   r7   r8   rk   E  s    z2_correct_for_uq_duplicates_uix.<locals>.<dictcomp>c                 S  s   i | ]}|j d  r|j|“qS )rµ   )r|   rN   r:  r7   r7   r8   rk   G  s    ýÿ)rî   rø   rJ   )r'  r#  r   r!  rF   r€   Úmetadata_cons_namesÚmetadata_uq_namesÚunnamed_metadata_uqsÚmetadata_ix_namesÚconn_ix_namesÚuqs_dupe_indexesÚoverlapr7   )rF   r€   r8   r    s<   
þÿ
þ
þþÿý€€ör  rË   rÙ   r'   r±   rØ   úColumn[Any]r×   c           	      C  s|   |j }|j }||_||ur<t |j|j¡rt |¡s"t |j|j¡r+t d||¡ d S ||_	t d|r5dnd||¡ d S d 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_identityr{   r|   Úmodify_nullable)	r,   rÙ   r   rU   r±   rØ   r×   Úmetadata_col_nullableÚconn_col_nullabler7   r7   r8   Ú_compare_nullableZ  s6   
ÿÿüÿúý
üírP  r!   c                 C  sN   |j j|u rd|jd< d S |jdu rd|jd< d S |jdu r%d|jd< d S d S )NTÚautoincrementF)rS   Ú_autoincrement_columnÚkwrQ  )r,   rÙ   r   rU   r±   rØ   r×   r7   r7   r8   Ú_setup_autoincrementƒ  s   


ÿrT  c           
      C  s€   |j }||_|j }|jtju rt d||¡ d S |jtju r't d||¡ d S | j ||¡}	|	r>||_	t d||||¡ d S d S )Nz3Couldn't determine database type for column '%s.%s'z:Column '%s.%s' has no type within the model; can't comparez-Detected type change from %r to %r on '%s.%s')
r  Úexisting_typeÚ_type_affinityÚsqltypesÚNullTyper{   r|   rZ   Ú_compare_typeÚmodify_type)
r,   rÙ   r   rU   r±   rØ   r×   Ú	conn_typeÚmetadata_typeÚisdiffr7   r7   r8   rY  •  s<   
ýýÿûþrY  Úmetadata_defaultúOptional[Any]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©rF   Úcompile_kwargs)rß   rh   ÚDefaultClauseÚargrð   ÚcompilerF   )r^  r,   r7   r7   r8   Ú"_render_server_default_for_compareÀ  s   þÿ
rf  Úsqltextrð   c                 C  s   t  dd| ¡ ¡ S )zÏwe 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]ro   )ÚreÚsubÚlower)rg  r7   r7   r8   Ú_normalize_computed_defaultÓ  s   rk  c           	      C  sŒ   t ttj|jƒjj| jddid�ƒ}t|ƒ}t	|jtjƒr7t |jjj| jddid�ƒ}|d u r2d}nt|ƒ}nd}||krDt
||ƒ d S d S )Nr`  Tra  ro   )rð   r   rh   ÚComputedrJ  rg  re  rF   rk  rß   Ú_warn_computed_not_supported)	r,   rÙ   r   rU   r±   rØ   r×   Úrendered_metadata_defaultÚrendered_conn_defaultr7   r7   r8   Ú_compare_computed_defaultÝ  s2   	þÿÿþÿÿÿrp  c                 C  s   t  d| |f ¡ d S )Nz,Computed default on %s.%s cannot be modified)r   Úwarn)rU   r±   r7   r7   r8   rm  	  s   rm  c                 C  s&   | j j}| |j|j¡\}}	}
||
fS rf   )rZ   r€   Ú_compare_identity_defaultrJ  )r,   rÙ   r   rU   r±   rØ   r×   r€   ÚdiffÚignored_attrÚis_alterr7   r7   r8   rr    s
   	
ÿrr  úOptional[bool]c                 C  sú   |j }|j }|d u r|d u rdS t |¡rt| ||||||ƒS t |¡r+t||ƒ dS t ||¡rS||_t| ||||||ƒ\}	}
|
rQ||_|	rQt	 
d||t|	ƒ¡ d S t|| ƒ}|ratt|ƒjjnd }||_| j ||||¡}|r{||_t	 
d||¡ d S )NFzIDetected server default on column '%s.%s': identity options attributes %sz)Detected server default on column '%s.%s')rJ  r   rI  rp  rm  rL  Úexisting_server_defaultrr  Úmodify_server_defaultr{   r|   r…   rf  r   r   rd  r   rZ   Ú_compare_server_default)r,   rÙ   r   rU   r±   rØ   r×   r^  Úconn_col_defaultrs  ru  rn  ro  Úis_diffr7   r7   r8   ry    sp   

ù
	
ÿù	ûìÿÿüry  úOptional[Literal[False]]c           	      C  s`   | j d usJ ‚| j jsd S |j}|j}|d u r|d u rdS ||_||kr.||_t d||¡ d S )NFzDetected column comment '%s.%s')rF   Úsupports_commentsÚcommentÚexisting_commentÚmodify_commentr{   r|   )	r,   rÙ   r   rU   r±   rØ   r×   Úmetadata_commentÚconn_col_commentr7   r7   r8   Ú_compare_column_commentj  s   
rƒ  c                   s°  ˆd u s|d u r
d S ˆ j }dd„ |jD ƒ}‡ ‡‡fdd„|jˆˆd�D ƒ}‡fdd„|D ƒ}	ˆ jj‰ˆ jj |	|¡ ‡fdd„|D ƒ}
‡fdd„|	D ƒ}|rcd	|d
 v rcd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|v rª|ˆj j	nd }|ˆ|ƒ q•t|ƒ |¡D ]}|| ‰||vrÕˆj|v rÎ|ˆj j	nd }|ˆ|ƒ q¹d S )Nc                 S  rÞ   r7   )rß   rh   r   ©r?   Úfkr7   r7   r8   rB   •  rá   z(_compare_foreign_keys.<locals>.<setcomp>c              	     râ   )rN   Úforeign_key_constraintrÌ   r=   r„  rÎ   r7   r8   rX   ›  rã   z)_compare_foreign_keys.<locals>.<listcomp>r   c                   s   h | ]}t |ˆ ƒ’qS r7   )rÄ   )r?   rÃ   r²   r7   r8   rB   ¥  rë   c                   rç   r7   rè   r„  rê   r7   r8   rB   ²  rì   c                   rç   r7   rí   r„  rê   r7   r8   rB   ¶  rì   rº   r   c                 S  rò   r7   r÷   rÊ   r7   r7   r8   rk   ½  rs   z)_compare_foreign_keys.<locals>.<dictcomp>c                 S  rò   r7   r÷   rÊ   r7   r7   r8   rk   ¾  rs   c                 S  rò   r7   ©Úunnamed_no_optionsrÊ   r7   r7   r8   rk   Á  rs   c                 S  rò   r7   r‡  rÊ   r7   r7   r8   rk   Â  rù   c                 S  ó   i | ]}|j d ur|j |“qS rf   ró   rÊ   r7   r7   r8   rk   Æ  s    c                 S  r‰  rf   ró   rÊ   r7   r7   r8   rk   É  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.ro   )rw   rÃ   rN   r   rx   ÚCreateForeignKeyOprÿ   r{   r|   ÚjoinÚsource_columnsÚtarget_columnsÚsource_schemaÚsource_table©rû   Ú
compare_to)r,   rÃ   rŠ   r7   r8   Ú_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‹  ro   )rw   rÃ   rN   r   rx   r  rÿ   r{   r|   r�  rŽ  r�  r�  r‘  r’  )r,   rŠ   r7   r8   Ú
_remove_fkÛ  s   ÿÿ

ûúz)_compare_foreign_keys.<locals>._remove_fk)
rO   r  Úget_foreign_keysrZ   r€   Úcorrect_for_autogen_foreignkeysrH   r^   rN   rÃ   )r,   rŠ   r   rU   r‘   r‰   rO   Ú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_sigr7   )r,   r‘   rÃ   r€   rŠ   r   rU   r8   Ú_compare_foreign_keys†  sl   þþ

þÿ
ÿ
ÿÿÿ
ÿý
€
ÿý
€ør£  c                 C  sª   | j d usJ ‚| j jsd S |d u s|d u rd S |jd u r#|jd u r#d S |jd u r<|jd ur<|j tj||j|d�¡ d S |j|jkrS|j tj||j|j|d�¡ d S d S )N)r  r   )rF   r}  r~  r   rx   ÚDropTableCommentOpÚCreateTableCommentOp)r,   rŠ   r   rU   r‘   r‰   r7   r7   r8   Ú_compare_table_comment  s.   	ÿÿüÿÿr¦  )r,   r%   r-   r(   r.   r/   )r,   r%   r5   r*   r.   r/   )r,   r%   r5   r*   rQ   rR   r.   r/   )rb   rH   rd   rH   rO   r    r5   r*   r,   r%   r.   r/   )r€   r&   r™   rš   r‘   r$   r.   r›   )r€   r&   r™   rš   r‘   r$   r.   r   )r™   rš   r‘   r$   r.   r   )r   rÅ   rU   rÆ   r‘   r$   r‰   r$   rŠ   r)   r,   r%   rO   r    r.   rÇ   )r,   r%   rÜ   r)   r   rÅ   rU   rÆ   r‘   rÝ   r‰   rÝ   r.   r/   )r,   r%   rÙ   r'   r   rÅ   rU   rÆ   r±   rÆ   rØ   rE  r×   rE  r.   r/   )r,   r%   rÙ   r'   r   rÅ   rU   rÆ   r±   r!   rØ   rE  r×   rE  r.   r/   )r^  r_  r,   r%   r.   rÅ   )rg  rð   r.   rð   )r,   r%   rÙ   r'   r   rÅ   rU   rð   r±   rð   rØ   rE  r×   rE  r.   r/   )rU   rð   r±   rð   r.   r/   )r,   r%   rÙ   r'   r   rÅ   rU   rÆ   r±   rÆ   rØ   rE  r×   rE  r.   rv  )r,   r%   rÙ   r'   r   rÅ   rU   rÆ   r±   r!   rØ   rE  r×   rE  r.   r|  )r,   r%   rŠ   r)   r   rÅ   rU   rÆ   r‘   r$   r‰   r$   r.   r/   )r,   r%   rŠ   r)   r   rÅ   rU   rÆ   r‘   rÝ   r‰   rÝ   r.   r/   )`Ú
__future__r   Ú
contextlibÚloggingrh  Útypingr   r   r   r   r   r   r	   r
   r   r   r   Ú
sqlalchemyr   r   r   rh   r   r   rW  Úsqlalchemy.sqlr   Úsqlalchemy.sql.schemar   r   r   Úsqlalchemy.utilr   ro   r   Úddl._autogenr   r   Ú
operationsr   r   r   Úsqlalchemy.engine.reflectionr    Úsqlalchemy.sql.elementsr!   r"   r#   r$   Úalembic.autogenerate.apir%   Úalembic.ddl.implr&   Úalembic.operations.opsr'   r(   r)   r*   r+   Ú	getLoggerÚ__name__r{   r9   Ú
DispatcherrL   r3   Údispatch_forre   ra   Úimmutabledictr’   r“   r–   r—   r˜   Ú__annotations__r­   r·   rÄ   Úcontextmanagerr†   rÚ   r8  r  rP  rT  rY  rf  rk  rp  rm  rr  ry  rƒ  r£  r¦  r7   r7   r7   r8   Ú<module>   s¶   




* úÿ

 
H  c?(
*



,K{