
    Zim              	      |   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
rNd 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   )      Z4 ejj                  e6      Z7	 	 	 	 	 	 	 	 	 	 	 	 	 	 d5d*Z8d+ Z9 ejt                  ejv                  ejx                  ejz                  ej|                  ejz                  ej|                  d,      Z?d-e@d.<   	 	 	 	 	 	 	 	 d6d/ZA	 	 	 	 	 	 	 	 d7d0ZB	 	 	 	 	 	 d8d1ZC	 	 	 	 	 	 	 	 	 	 	 	 	 	 d9d2ZD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d:d3ZEd;d4ZFy)<    )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)boundc           
        -./01  j                   }d u /|d u 0 j                  j                  .|I|j                  D ch c]  }t	        |t
        j                        r|  }}t        |j                        }	nt               }t               }	t               }
t               }d1d}t               }t               }	 t        |      j                  |      }d1|D cg c]  } j                  |d   d|d      r| }}|D ]  }|j                  d      sd} 	 	 t        |      j!                  |      }|D cg c]  } j                  |d   d|d      r| }}0rt               }
n|D ch c]  }t#        .|       }
}.fd	|D        D ch c]  }|| }}|rt%        |
|||	 j&                  .       .j)                  |
|||	       |D ch c]  }.j+                  |       }}|	D ch c]  }.j+                  |       }}|
D ch c]  }.j-                  |       }}|D ch c]  }.j-                  |       }}|j/                  |      D ci c].  }|j0                  r t3        t4        |j7                               |0 }}|D ci c]  }|j8                  | }}|D ci c]  }|j8                  | }}|j/                  |      D ci c].  }t;        j<                  |j8                        r|j8                  |0 }}t        |      j?                  |      D ci c]  }|||   ||   f }}|D ci c]  }|j@                  | }}|D ci c]  }|j@                  | }}|D ci c]9  }t;        jB                  |jD                   j&                        s|j@                  |; }}	 	 d /01fd
} 	 	 d /01fd}!	 	 	 	 	 	 d fd}"tG        t        |      jI                  |            D ]j  }#||#   }$tK        |$      r|$j@                  |v r"|#|v r=||#   \  }%-tM        -fd|D              sC|%j@                  |vsR |!|%        |!-       c |!|$       l tG        t        |      j?                  |            D ]  }&||&   }'|&|v r||&   \  }%-tO        |'      r-}$n|%}$n||&   }$tQ        |$      tQ        |'      k7  r |!|$        | |'       R|'jS                  |$      }(|(jT                  r |"|$|'|(jV                         |(jX                  r<tO        |$      rdnd})tZ        j]                  d|)|$j8                  |(jV                         |(j^                  rJ  tG        t        |      jI                  |            D ]  }*||*   }+ | |+        |D ]  },|,|vs | ||,           t`        jb                  S c c}w c c}w # t        $ r Y t        $ r Y w xY wc c}w # t        $ r Y w xY wc c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )NFr   Tnameunique_constraint
table_nameschema_nameduplicates_indexindexc              3  8   K   | ]  }t        |        y wN)_make_index).0ix
conn_tableimpls     d/home/portmadness/app/.venv/lib/python3.12/site-packages/alembic/autogenerate/compare/constraints.py	<genexpr>z/_compare_indexes_and_uniques.<locals>.<genexpr>   s"       D"j1s   c                   t        |       rj                  | j                  | j                  ddd       rnj                  j                  t        j                  j                  | j                               t        j                  d| j                  | j                         y y t        |       rsy sry j                  | j                  | j                  ddd       rnj                  j                  t        j                  j                  | j                               t        j                  d| j                  | j                         y y J )Nr3   FzDetected added index %r on '%s'r.   z+Detected added unique constraint %r on '%s')r   run_object_filtersconstr-   r   appendCreateIndexOp
from_indexloginfocolumn_namesr   AddConstraintOpfrom_constraint)objautogen_contextis_create_tableis_drop_table
modify_opssupports_unique_constraintss    r;   	obj_addedz/_compare_indexes_and_uniques.<locals>.obj_added   s    11		388WeT %%c&7&7&B&B399&MN5HH$$	 s^. -11		388%8% %%''77		B AHH$$ 5    c                   t        |       r| j                  rsy j                  | j                  | j                  ddd       rdj
                  j                  t
        j                  j                  | j                               t        j                  d| j                         y y t        |       rsry j                  | j                  | j                  ddd       rdj
                  j                  t
        j                  j                  | j                               t        j                  d| j                         y y J )Nr3   TzDetected removed index %r on %rr.   z+Detected removed unique constraint %r on %r)r   	is_uniquer>   r?   r-   r   r@   DropIndexOprB   rC   rD   r   DropConstraintOprG   )rH   rI   rJ   rK   rL   rM   tnames    r;   obj_removedz1_compare_indexes_and_uniques.<locals>.obj_removed!  s    }}%@ 11		388WdD %%coo&@&@&KL:CHHeL	
 s^- 11		388%8$ %%((88C AHH 5rO   c                   t        |       rt        |      sJ j                  |j                  |j                  dd| j                        rt        j                  d| j                  |       j                  j                  t        j                  j                  | j                               j                  j                  t        j                  j                  |j                               y y t        |       rt        |      sJ j                  |j                  |j                  dd| j                        rt        j                  d| j                  |       j                  j                  t        j                  j                  | j                               j                  j                  t        j                  j                  |j                               y y J )Nr3   Fz#Detected changed index %r on %r: %sr.   z/Detected changed unique constraint %r on %r: %s)r   r>   r?   r-   rC   rD   r   r@   rR   rB   rA   r   rS   rG   rF   )oldnewmsgrI   rL   rT   s      r;   obj_changedz1_compare_indexes_and_uniques.<locals>.obj_changedF  sk    $$$11		388WeSYY 9388UC %%coo&@&@&KL%%c&7&7&B&B399&MN s^S>!>11		388%8% EHH	 %%((88C %%''77		B  5rO   c              3  P   K   | ]  }j                   |j                   k7    y wr5   )unnamed)r7   meta_idxconn_idxs     r;   r<   z/_compare_indexes_and_uniques.<locals>.<genexpr>{  s*        $$(8(88s   #&zunique constraintz5Cannot compare %s %r, assuming equal and skipping. %s)rH   N_constraint_sig[sa_schema.UniqueConstraint] | _constraint_sig[sa_schema.Index])rW   r_   rX   r_   rY   str)2	inspectormigration_contextr:   constraints
isinstance	sa_schemar   setindexes	frozensetr   get_unique_constraintsrun_name_filtersgetNotImplementedError	TypeErrorget_indexes_make_unique_constraint_correct_for_uq_duplicates_uixdialectcorrect_for_autogen_constraints_create_metadata_constraint_sig _create_reflected_constraint_sigunionis_namedr   r`   md_name_to_sql_namer-   r   constraint_name_stringintersectionr\   _constraint_is_namedr?   sorted
differencer   allr   typecompare_to_reflectedis_differentmessageis_skiprC   rD   is_equalr   CONTINUE)2rI   rL   r   rT   r9   metadata_tablera   uqmetadata_unique_constraintsmetadata_indexesconn_uniquesconn_indexes+unique_constraints_duplicate_unique_indexesconn_uniques_reflectedconn_indexes_reflectedr8   uq_defr3   metadata_unique_constraints_sigmetadata_indexes_sigconn_unique_constraintsconn_indexes_sigcmetadata_namesconn_uniques_by_nameconn_indexes_by_name
conn_namesr-   doubled_constraintsconn_uniques_by_sigmetadata_uniques_by_sigunnamed_metadata_uniquesrN   rU   rZ   removed_nameconn_objconn_uqexisting_namemetadata_obj
comparisonthing
added_namerH   uq_sigr^   r:   rJ   rK   rM   s2   `` ``                                        @@@@@r;   _compare_indexes_and_uniquesr   5   s     ))I D(O"d*M,,11D ! %00'
"i889 '
# '

 ~556&)e#51:L&/kL"'27/K 	 >G[	G%3&$$U6$: # +/' 1&"33vJ'#(@ &" & - G66,-BF?G	%3I%>%J%Jf &K &" 1&"33vJ#(@ &" & 5L 5 (fjAL 0
   
 
 3&'##	
 	((#	 .' 	,,R0'# ' <L57,,R0 
 =I68--b1 
 =I68--b1  1667KL:: 	S!''891<N  0GG!AFFAIGG/?@!AFFAI@@ )../?@--aff5 	
	J  ,-:: 
 	#D)+?+EFF  5LLb2::r>LL!@

B 
 2 //HHo--
 	

B    $/$ $L#/# #J)/)/) )V s:99.IJ "l+h  $<<00 3L AGX $8  OO+BBG$H%!'"*  N 3 @ @ LM )+%m4// 3M BGXL)#"!-0H>T,//!l# &::8DJ&&HlJ4F4FG##  ,H5G;N  KMM&&	 "****S)+V S0;;JGH 
Z(# + 8,,.v678 "***k'
L& # 	 	 		2& # 		&

H'

 H@ M s   #WW $"W%W; "W6:XXX=XX9X$&3X)X.9X3"3X83X=Y%Y?>Y	W3'W32W3;	XXc                   |D cg c]  }t        j                  ||      |f }}|D ch c]
  \  }}|	| }	}}|D ch c]"  \  }}||j                  |      j                  $ }
}}|D ch c]$  }|j                  rt        j                  ||      & }}|D ci c]  }|j                  s|j
                  | }}| D ci c]  }|j                  d   r|j
                  |  }}|D ]U  }||	vr6|j                  ||         j                  |
vs(| j                  ||          =||vsB|j                  ||          W y c c}w c c}}w c c}}w c c}w c c}w c c}w )Nr2   )	r   _get_constraint_final_namers   r\   uniquer-   rD   rt   discard)r   r   r   r   rq   r:   consmetadata_cons_namesr-   metadata_uq_namesunnamed_metadata_uqsmetadata_ix_namesconn_ix_namesuqs_dupe_indexesoverlaps                  r;   rp   rp     s   * 0 
	/	/g	>E   3td6F  .D$< 	,,T2::  %;; 	..tW=  2>MTYY_MMM ,99'( 			4  $ 
9++55$W-'+,
 (//0@0IJ--  w!78
9?
 Ns-   E
EE'E0)EE1E#E!)ascdescnulls_first
nulls_last
nullsfirst	nullslastzMapping[str, Any]_IndexColumnSortingOpsc                   g }|j                  d      }t        |d         D ]j  \  }}|d|v sJ |d   |   }t        |      }n|}|j                  |   }|r%||v r!||   D ]  }	|	t        v st	        |	   |      } |j                  |       l t        j                  |d   g||d   |d| j                  |d      }
d|v r|d   |
j                  d<   |
S )	Ncolumn_sortingrE   expressionsr-   r   )r   _tabler3   duplicates_constraint)
rk   	enumerater   r   r   r@   re   r    adjust_reflected_dialect_optionsrD   )r:   paramsr9   exprssortingnumcol_namer-   itemoperatorr8   s              r;   r6   r6     s$    35Ejj)*G"6.#9: X F***-(-D:DD<<)Dtw#DM B551(;DADB 	T 
v
	
 h	

 
/
/
@
B &(+12I+J'(IrO   c                    t        j                  |d   D cg c]  }|j                  |    c}d|d   i| j                  |d      }d|v r|d   |j                  d<   |S c c}w )NrE   r-   r.   r2   )re   r   r   r   rD   )r:   r   r9   cnamer   s        r;   ro   ro   '  s~     
	#	#+1.+A	B%*,,u
	B
F^
 
/
/8K
L
B
 V#&,-?&@"#I 
Cs   A!c                ~   | d   }| d   r
| d   d|}| j                  di       }t        j                  | d   D cg c]  }|j                  |    c}| d   D cg c]	  }|d| c}|j                  d      |j                  d      |j                  d	      |j                  d
      | d         }| d   }| d   }t	        j
                  ||      }	|	|j                  vrt        j                  ||j                  gt        | d   | d         D 
cg c]2  \  }
}t        j                  ||j                  |
   j                        4 c}}
||nt        j                  ddid n|j                  j                  |	   j                  j                  d      r~|j                  j                  |	   }t        | d   | d         D ]P  \  }
}||j                  vs|j                  t        j                  ||j                  |
   j                               R |j                  |       |S c c}w c c}w c c}}
w )Nreferred_tablereferred_schema.optionsconstrained_columnsreferred_columnsonupdateondelete
deferrable	initiallyr-   )r   r   r   r   r-   alembic_placeholderT)r   rD   )rk   re   r   r   r   _get_table_keymetadatar#   zipr"   r~   BLANK_SCHEMAtablesrD   append_columnappend_constraint)r   r9   rT   r   r   nr?   r   r   remote_table_keylocalremoteplaceholder_tables                r;   _make_foreign_keyr   5  sS    #$E !"34e<jjB'G***01F*GHe	H'-.@'AB!E1	BZ(Z(;;|,++k*F^E ./O,-N"11 z222	
 &)016:L3M&!E6   e)<)A)AB	

 #.  ++ (.	
  
			#	#$4	5	:	:	>	>
 '//667GH ()62D+E
 	ME6 .000!//$$VZ\\%-@-E-EF		   'La 	IB0s   H/H4
7H9c           
        
 ||t         j                  S  j                  }|j                  D ch c]  }t	        |t
        j                        r|  }}t        |      j                  ||      D cg c]  } j                  |d   d||d      r| }	}|	D 
ch c]  }
t        |
|       }}
 j                  j                  } j                  j                  j                  ||       |D ch c]  }|j                  |       }}|D ch c]  }|j                  |       }}|	r<d|	d   v r5|D ci c]  }|j                   | }}|D ci c]  }|j                   | }}n4|D ci c]  }|j"                  | }}|D ci c]  }|j"                  | }}|D ci c]  }|j$                  |j$                  | }}|D ci c]  }|j$                  |j$                  | }} 
fd} fd}t'        |      j)                  |      D ]J  }||   
||vs
j$                  r'
j$                  |v r|
j$                     j*                  nd } |
|       L t'        |      j)                  |      D ]J  }||   
||vs
j$                  r'
j$                  |v r|
j$                     j*                  nd } |
|       L t         j                  S c c}w c c}w c c}
w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )	Nr   r-   foreign_key_constraintr/   r   r   c                   j                  | j                  | j                  dd|      rj                  j	                  t        j
                  j                  j                               t        j                  ddj                  | j                        dj                  | j                        | j                  rd| j                  z  nd| j                         y y )Nr   Fz1Detected added foreign key (%s)(%s) on table %s%s, %s. )r>   r?   r-   r   r@   CreateForeignKeyOprG   rC   rD   joinsource_columnstarget_columnssource_schemasource_table)rH   
compare_torI   r?   modify_table_opss     r;   _add_fkz&_compare_foreign_keys.<locals>._add_fk  s    --IIsxx!95*
   ''&&66u{{C HHC		#,,-		#,,--0->->)))B  
rO   c                   j                  | j                  | j                  dd|      rj                  j	                  t        j
                  j                  | j                               t        j                  ddj                  | j                        dj                  | j                        | j                  rd| j                  z  nd| j                         y y )Nr   Tz3Detected removed foreign key (%s)(%s) on table %s%sr   r   r   )r>   r?   r-   r   r@   rS   rG   rC   rD   r   r   r   r   r   )rH   r   rI   r   s     r;   
_remove_fkz)_compare_foreign_keys.<locals>._remove_fk  s    --IIsxx!94
   ''$$44SYY? HHE		#,,-		#,,--0->->)))B  
rO   )r   r   ra   rc   rd   re   r   r   get_foreign_keysrj   r   rb   r:   correct_for_autogen_foreignkeysrs   rt   r\   unnamed_no_optionsr-   rf   r|   r?   )rI   r   r   rT   r9   r   ra   fkmetadata_fksconn_fks_listr?   conn_fksr:   metadata_fks_sigconn_fks_sigr   conn_fks_by_sigmetadata_fks_by_sigmetadata_fks_by_nameconn_fks_by_namer   r   removed_sigr   	added_sigs   ``        `              r;   _compare_foreign_keysr  r  sx    ^3%...))I !,,b)889 	L  !+<<& = 

 ++vJ$ 8
	 	
M 
 ;H16%,H  ,,11D %%**JJ,
 <H57,,R0 
 =E68--b1L  mA&661=>A199a<>>5EFqyy!|FF =IIq1//2II-=
()A  !#
 

 ,qvv/A	  ,8Na166;M	NN $ ?+667JK *,11 ::%**0D"D %UZZ066 
 uj)* ,-88I '	#I.O+ ::%**0@"@ !,22 
 E:&' "***[
 ?F J
 OsM   #K5"KK2K$K)7K.K3,K8K= L2LLLc                   |j                   }|j                   }||_        ||urt        j                  |j                  |j                        rt        j
                  |      s*t        j                  |j                  |j                        r't        j                  d||       t        j                  S ||_	        t        j                  d|rd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_identityrC   rD   modify_nullabler   STOPr   )	rI   alter_column_opr   rT   r   conn_colmetadata_colmetadata_col_nullableconn_col_nullables	            r;   _compare_nullabler    s     )11 ))(9O% 5533++X-D-D 77E77 //1H1H
 HHE  "*** /DO+HH//Z	 *...!***rO   c                    | j                  t        dd       | j                  t        dd       | j                  t        dd       y )Ntablerg   foreignkeyscolumnr  )add_autogenerate_comparatorr   r  r  )plugins    r;   setupr    sK    
&&$
 &&
 &&rO   )rI   r$   rL   r(   r   Optional[str]rT   Union[quoted_name, str]r9   Optional[Table]r   r  returnr   )r:   r&   r   r   r9   r#   r  zOptional[Index])r:   r&   r   r   r9   r#   r  r   )r   r   r9   r#   r  r   )rI   r$   r   r(   r   r  rT   r  r9   r#   r   r#   r  r   )rI   r$   r  r'   r   r  rT   r  r   r  r  Column[Any]r  r  r  r   )r  r)   r  None)G
__future__r   loggingtypingr   r   r   r   r   r	   r
   r   r   
sqlalchemyr   re   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__rC   r   rp   immutabledictr   r   r   r   r   __annotations__r6   ro   r   r  r  r   rO   r;   <module>r3     sa   #            *  % 6 ' 2    ( %  * J;F32,+2/'/0)T/1EuLMN g!D+#D+D+ D+ #	D+
  D+ $D+ D+N<9~ -?D,>,>~~!,, ** ++))	- ) 	
-;@@
8FK:):7<::z|+#|+$|+ |+ #	|+
 |+ |+ |+~)+#)+")+ )+ #	)+
 #)+ )+ )+ )+XrO   