
    -jim              	         % S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S S	KJ
r
  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ r   \
(       aN  S SK!J"r"  S SK!J#r#  S SK!J$r$  S SK%J&r&  S SK%J'r'  S S KJ(r(  S S!KJ)r)  SS"K*J+r+  SS#KJ,r,  SS$K-J.r.  SS%K/J0r0  SS&K/J1r1  SS'K2J3r3  \" S(\\\\4   S)9r4\Rj                  " \65      r7              S5S* jr8S+ r9\Rt                  " \Rv                  \Rx                  \Rz                  \R|                  \Rz                  \R|                  S,.5      r?S-\@S.'           S6S/ jrA        S7S0 jrB      S8S1 jrC              S9S2 jrD                S:S3 jrES;S4 jrFg)<    )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           
       ^ ^^^^-^.^/^0^1 T R                   nTS L m/US L m0T R                  R                  m.UbS  UR                   Vs1 s H&  n[	        U[
        R                  5      (       d  M$  UiM(     nn[        UR                  5      n	O[        5       n[        5       n	[        5       n
[        5       nSm1SnTGb"  [        5       n[        5       n [        U5      R                  TUS9nSm1U Vs/ s H%  nT R                  US   STUS.5      (       d  M#  UPM'     nnU H  nUR                  S5      (       d  M  SnM      [        U5      R!                  TUS9nU Vs/ s H%  nT R                  US   STUS.5      (       d  M#  UPM'     nnT0(       a  [        5       n
OU Vs1 s H  n[#        T.UT5      iM     n
nUU.4S	 jU 5        Vs1 s H
  nUc  M  UiM     nnU(       a  [%        U
UUU	T R&                  T.5        T.R)                  U
UUU	5        U Vs1 s H  nT.R+                  U5      iM     nnU	 Vs1 s H  nT.R+                  U5      iM     nnU
 Vs1 s H  nT.R-                  U5      iM     nnU Vs1 s H  nT.R-                  U5      iM     nnUR/                  U5       Vs0 s H6  nUR0                  (       d  M  [3        [4        UR7                  T 5      5      U_M8     nnU Vs0 s H  nUR8                  U_M     nnU Vs0 s H  nUR8                  U_M     nnUR/                  U5       Vs0 s H7  n[:        R<                  " UR8                  5      (       d  M*  UR8                  U_M9     nn[        U5      R?                  U5       Vs0 s H  nUUU   UU   4_M     nnU Vs0 s H  owR@                  U_M     nnU Vs0 s H  owR@                  U_M     nnU Vs0 s HB  n[:        RB                  " URD                  T R&                  5      (       a  M5  UR@                  U_MD     nn  SU U/U0UU14S
 jjn   SU U/U0UU1U4S jjn!      SU UU4S jjn"[G        [        U5      RI                  U5      5       H  n#UU#   n$[K        U$5      (       a  U$R@                  U;   a  M*  U#U;   aH  UU#   u  n%m-[M        U-4S jU 5       5      (       a$  U%R@                  U;  a  U!" U%5        U!" T-5        Mt  Mv  Mx  U!" U$5        M     [G        [        U5      R?                  U5      5       H  n&UU&   n'U&U;   a  UU&   u  n%m-[O        U'5      (       a  T-n$OU%n$OUU&   n$[Q        U$5      [Q        U'5      :w  a  U!" U$5        U " U'5        M[  U'RS                  U$5      n(U(RT                  (       a  U"" U$U'U(RV                  5        M  U(RX                  (       aB  [O        U$5      (       a  SOSn)[Z        R]                  SU)U$R8                  U(RV                  5        M  U(R^                  (       a  M   e   [G        [        U5      RI                  U5      5       H  n*UU*   n+U " U+5        M     U H  n,U,U;  d  M  U " UU,   5        M     [`        Rb                  $ s  snf s  snf ! [         a     GN][         a     GNif = fs  snf ! [         a     GN3f = fs  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf )NFr   Tnameunique_constraint
table_nameschema_nameduplicates_indexindexc              3  >   >#    U  H  n[        TUT5      v   M     g 7fN)_make_index).0ix
conn_tableimpls     b/home/james-whalen/.local/lib/python3.13/site-packages/alembic/autogenerate/compare/constraints.py	<genexpr>/_compare_indexes_and_uniques.<locals>.<genexpr>   s$      0B D"j110s   c                  > [        U 5      (       a  TR                  U R                  U R                  SSS 5      (       an  TR                  R                  [        R                  R                  U R                  5      5        [        R                  SU R                  U R                  5        g g [        U 5      (       a  T(       d  g T(       d  T(       a  g TR                  U R                  U R                  SSS 5      (       an  TR                  R                  [        R                  R                  U R                  5      5        [        R                  SU R                  U R                  5        g g  e)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_added/_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                  > [        U 5      (       a  U R                  (       a  T(       d  g TR                  U R                  U R                  SSS 5      (       ad  TR
                  R                  [
        R                  R                  U R                  5      5        [        R                  SU R                  T5        g g [        U 5      (       a  T(       d  T(       a  g TR                  U R                  U R                  SSS 5      (       ad  TR
                  R                  [
        R                  R                  U R                  5      5        [        R                  SU R                  T5        g g  e)Nr3   TzDetected removed index %r on %rr.   z+Detected removed unique constraint %r on %r)r   	is_uniquer?   r@   r-   r   rA   DropIndexOprC   rD   rE   r   DropConstraintOprH   )rI   rJ   rK   rL   rM   rN   tnames    r;   obj_removed1_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 5rQ   c                  > [        U 5      (       a  [        U5      (       d   eTR                  UR                  UR                  SSU R                  5      (       a  [        R                  SU R                  TU5        TR                  R                  [        R                  R                  U R                  5      5        TR                  R                  [        R                  R                  UR                  5      5        g g [        U 5      (       a  [        U5      (       d   eTR                  UR                  UR                  SSU R                  5      (       a  [        R                  SU R                  TU5        TR                  R                  [        R                  R                  U R                  5      5        TR                  R                  [        R                  R                  UR                  5      5        g g  e)Nr3   Fz#Detected changed index %r on %r: %sr.   z/Detected changed unique constraint %r on %r: %s)r   r?   r@   r-   rD   rE   r   rA   rT   rC   rB   r   rU   rH   rG   )oldnewmsgrJ   rM   rV   s      r;   obj_changed1_compare_indexes_and_uniques.<locals>.obj_changedF  s    $$$$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  5rQ   c              3  V   >#    U  H  nTR                   UR                   :g  v   M      g 7fr5   )unnamed)r7   meta_idxconn_idxs     r;   r<   r=   {  s)      $8 $$(8(88$8s   &)zunique constraintz5Cannot compare %s %r, assuming equal and skipping. %s)rI   N_constraint_sig[sa_schema.UniqueConstraint] | _constraint_sig[sa_schema.Index])rZ   rc   r[   rc   r\   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   rd   md_name_to_sql_namer-   r   constraint_name_stringintersectionr`   _constraint_is_namedr@   sorted
differencer   allr   typecompare_to_reflectedis_differentmessageis_skiprD   rE   is_equalr   CONTINUE)2rJ   rM   r   rV   r9   metadata_tablere   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_uniquesrO   rW   r]   removed_nameconn_objconn_uqexisting_namemetadata_obj
comparisonthing
added_namerI   uq_sigrb   r:   rK   rL   rN   s2   `` ``                                        @@@@@r;   _compare_indexes_and_uniquesr   5   s     ))I D(O"d*M,,11D ! %00'
0"i889 0 	$ '

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

B!@  
 2 1B//HHo--
 	

B1    $/$ $L#/# #J)/)/) ) )V s:99.IJl+h  $<<00 3L AGX $8   OO+BBG$H% C	 !' K*  N 3 @ @ LM%m4// 3M BGXL))#"!-0H>T,//!l# &::8DJ&&HlJ4F4FG##  ,H55G;N  KMM&&	 "*****S NV S0;;JGH
Z(# I +,,.v67 + "***k'
L& # 	 	 		2& # 		&

H'

 H@ M s   #Z,ZZ ."Z
Z
 Z1 "Z,Z,![	[[[6[[8[([ $[ +[%[*4)[/![/[4+[9[>#4\\
Z)	Z)(Z)1
Z?>Z?c                (   U Vs/ s H  n[         R                  " Xd5      U4PM     nnU VVs1 s H  u  pUc  M
  UiM     n	nnU VVs1 s H%  u  pUb  M
  UR                  U5      R                  iM'     n
nnU Vs1 s H,  nUR                  (       d  M  [         R                  " Xd5      iM.     nnU Vs0 s H"  ofR                  (       d  M  UR
                  U_M$     nnU  Vs0 s H&  nUR                  S   (       d  M  UR
                  U_M(     nnU HZ  nX;  a8  UR                  X   5      R                  U
;  a  U R                  X   5        M>  M@  X;  d  MG  UR                  X   5        M\     g s  snf s  snnf s  snnf s  snf s  snf s  snf )Nr2   )	r   _get_constraint_final_namerw   r`   uniquer-   rE   rx   discard)r   r   r   r   ru   r:   consmetadata_cons_namesr-   metadata_uq_namesunnamed_metadata_uqsmetadata_ix_namesconn_ix_namesuqs_dupe_indexesoverlaps                  r;   rt   rt     s   * 0/D 
	/	/	>E/    32d2   .-JD 	;,,T2::-   %$D;; 	>..t=$   2>M_TYY_MM ,+D99'( 			4+   $+55$-'+,
 (//0@0IJ, -  !78 $?
 Ns?   "E4	E9E9		E?E?<FF5F
F
$F F)ascdescnulls_first
nulls_last
nullsfirst	nullslastzMapping[str, Any]_IndexColumnSortingOpsc                   / nUR                  S5      n[        US   5       Hx  u  pVUc  SU;   d   eUS   U   n[        U5      nOUnUR                  U   nU(       a+  Xt;   a&  XG    H  n	U	[        ;   d  M  [        U	   " U5      nM      UR                  U5        Mz     [        R                  " US   /UQ7US   US.U R                  US5      D6n
SU;   a  US   U
R                  S'   U
$ )	Ncolumn_sortingrF   expressionsr-   r   )r   _tabler3   duplicates_constraint)
ro   	enumerater   r   r   rA   ri   r    adjust_reflected_dialect_optionsrE   )r:   paramsr9   exprssortingnumcol_namer-   itemoperatorr8   s              r;   r6   r6     s    35Ejj)*G"6.#9: F***-(-D:DD<<)Dt#M551(;DAD * 	T ; 
v
	
 h	

 
/
/
@
B &(+12I+J'(IrQ   c                    [         R                  " US    Vs/ s H  o2R                  U   PM     snSUS   0U R                  US5      D6nSU;   a  US   UR                  S'   U$ s  snf )NrF   r-   r.   r2   )ri   r   r   r   rE   )r:   r   r9   cnamer   s        r;   rs   rs   '  s     
	#	#+1.+A	B+A%,,u
+A	B
F^
 
/
/8K
L
B
 V#&,-?&@"#I 
Cs   A&c                   U S   nU S   (       a  U S   < SU< 3nU R                  S0 5      n[        R                  " U S    Vs/ s H  oAR                  U   PM     snU S    Vs/ s H  oR< SU< 3PM     snUR                  S5      UR                  S5      UR                  S	5      UR                  S
5      U S   S9nU S   nU S   n[        R
                  " X5      n	XR                  ;  a  [        R                  " UUR                  /[        U S   U S   5       V
Vs/ s H2  u  p[        R                  " XR                  U
   R                  5      PM4     snn
Q7Ub  UO[        R                  SS0S.6  OUR                  R                  U	   R                  R                  S5      (       a  UR                  R                  U	   n[        U S   U S   5       HR  u  pXR                  ;  d  M  UR                  [        R                  " XR                  U
   R                  5      5        MT     UR                  U5        U$ s  snf s  snf s  snn
f )Nreferred_tablereferred_schema.optionsconstrained_columnsreferred_columnsonupdateondelete
deferrable	initiallyr-   )r   r   r   r   r-   alembic_placeholderT)r   rE   )ro   ri   r   r   r   _get_table_keymetadatar#   zipr"   r   BLANK_SCHEMAtablesrE   append_columnappend_constraint)r   r9   rV   r   r   nr@   r   r   remote_table_keylocalremoteplaceholder_tables                r;   _make_foreign_keyr   5  sW    #$E !"34e<jjB'G***01F*GH*Ge	*GH'-.@'AB'A!E1	'ABZ(Z(;;|,++k*F^E ./O,-N"11 222	
 &)016:L3M&&ME   e)<)A)AB&	

 #.  ++ (.	
  
			#	#$4	5	:	:	>	>
 
 '//667GH ()62D+E
ME 000!//$$V\\%-@-E-EF	
   'La 	IB0s   I&I
"9Ic           
       ^ ^^
 Ub  Uc  [         R                  $ T R                  nUR                   Vs1 s H&  n[	        U[
        R                  5      (       d  M$  UiM(     nn[        U5      R                  X2S9 Vs/ s H$  nT R                  US   SX2S.5      (       d  M"  UPM&     n	nU	 V
s1 s H  n
[        X5      iM     nn
T R                  R                  nT R                  R                  R                  X5        U Vs1 s H  o|R                  U5      iM     nnU Vs1 s H  o|R                  U5      iM     nnU	(       aB  SU	S   ;   a9  U Vs0 s H  oR                   U_M     nnU Vs0 s H  oR                   U_M     nnO8U Vs0 s H  oR"                  U_M     nnU Vs0 s H  oR"                  U_M     nnU Vs0 s H  oR$                  c  M  UR$                  U_M      nnU Vs0 s H  oR$                  c  M  UR$                  U_M      nnU U
U4S jnU U4S jn['        U5      R)                  U5       HU  nUU   m
UU;  d  M  T
R$                  (       a)  T
R$                  U;   a  UT
R$                     R*                  OS nU" T
U5        MW     ['        U5      R)                  U5       HU  nUU   m
UU;  d  M  T
R$                  (       a)  T
R$                  U;   a  UT
R$                     R*                  OS nU" T
U5        MW     [         R                  $ s  snf s  snf s  sn
f s  snf s  snf s  snf s  snf s  snf s  snf s  snf s  snf )	Nr   r-   foreign_key_constraintr/   r   r   c                  > TR                  U R                  U R                  SSU5      (       a  TR                  R	                  [        R
                  R                  TR                  5      5        [        R                  SSR                  U R                  5      SR                  U R                  5      U R                  (       a  SU R                  -  OSU R                  5        g g )Nr   Fz1Detected added foreign key (%s)(%s) on table %s%s, %s. )r?   r@   r-   r   rA   CreateForeignKeyOprH   rD   rE   joinsource_columnstarget_columnssource_schemasource_table)rI   
compare_torJ   r@   modify_table_opss     r;   _add_fk&_compare_foreign_keys.<locals>._add_fk  s    --IIsxx!95*
 
   ''&&66u{{C HHC		#,,-		#,,--0->->)))B  
rQ   c                  > TR                  U R                  U R                  SSU5      (       a  TR                  R	                  [        R
                  R                  U R                  5      5        [        R                  SSR                  U R                  5      SR                  U R                  5      U R                  (       a  SU R                  -  OSU R                  5        g g )Nr   Tz3Detected removed foreign key (%s)(%s) on table %s%sr   r   r   )r?   r@   r-   r   rA   rU   rH   rD   rE   r   r   r   r   r   )rI   r   rJ   r   s     r;   
_remove_fk)_compare_foreign_keys.<locals>._remove_fk  s    --IIsxx!94
 
   ''$$44SYY? HHE		#,,-		#,,--0->->)))B  
rQ   )r   r   re   rg   rh   ri   r   r   get_foreign_keysrn   r   rf   r:   correct_for_autogen_foreignkeysrw   rx   r`   unnamed_no_optionsr-   rj   r   r@   )rJ   r   r   rV   r9   r   re   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  sr    ^3%...))I !,,,Bb)889 	,   !+<< = 


B ++vJ$ 8
	 	
  
 ;H:G%,-   ,,11D %%**JJ
 <H;GR,,R0<  
 =E<Db--b1H   mA&661=>A99a<>5EF5Eyy!|5EF =IILq//2LI-=
-=  !#-= 	 

 ,+avv		+   ,8N<a66		<N $ ?+667JK,11 ::%**0D"D %UZZ066 
 uj) L ,-88I	#I.O+ ::%**0@"@ !,22 
 E:& J "***[
 ?F J
 OsY   #LL=!L!"L!.L&L+$L0L50L:L?)MM	M	0MMc                   UR                   nUR                   nXl        XLa  [        R                  " UR                  UR                  5      (       a  [        R
                  " U5      (       d0  [        R                  " UR                  UR                  5      (       a'  [        R                  SUU5        [        R                  $ Xql	        [        R                  SU(       a  SOSUU5        [        R                  $ [        R                  $ )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_identityrD   rE   modify_nullabler   STOPr   )	rJ   alter_column_opr   rV   r   conn_colmetadata_colmetadata_col_nullableconn_col_nullables	            r;   _compare_nullabler    s     )11 ))(9%533++X-D-D  77EE77 //1H1H 
 HHE  "*** /D+HH//Z	 *...!***rQ   c                    U R                  [        SS5        U R                  [        SS5        U R                  [        SS5        g )Ntablerk   foreignkeyscolumnr  )add_autogenerate_comparatorr   r  r  )plugins    r;   setupr    sK    
&&$
 &&
 &&rQ   )rJ   r$   rM   r(   r   Optional[str]rV   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   )rJ   r$   r   r(   r   r   rV   r!  r9   r#   r   r#   r#  r   )rJ   r$   r  r'   r   r   rV   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   ri   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__rD   r   rt   immutabledictr   r   r   r   r   __annotations__r6   rs   r   r  r  r   rQ   r;   <module>r9     s]   #            *  % 6 ' 2    ( %  * J;F32,+2/'/0)T/1EuLMN !D+#D+D+ D+ #	D+
  D+ $D+ D+N<9~ -1,>,>~~!,, ** ++))	- ) 	
-;@@
8FK:):7<::z|+#|+$|+ |+ #	|+
 |+ |+ |+~)+#)+")+ )+ #	)+
 #)+ )+ )+ )+XrQ   