
    +h5              	         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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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jv                  e<      Z=	 	 	 	 	 	 dKd+Z> e"j~                  d,-      Z@	 	 	 	 	 	 dLd.ZAe@j                  d/      	 	 	 	 	 	 	 	 dMd0       ZC	 	 	 	 	 	 	 	 	 	 	 	 dNd1ZD e"j                  ej                  ej                  ej                  ej                  ej                  ej                  d2      ZJd3eKd4<   	 	 	 	 	 	 	 	 dOd5ZL	 	 	 	 	 	 	 	 dPd6ZM	 	 	 	 	 	 dQd7ZNej                  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dRd8       ZP ed9eeeef   :      ZQe@j                  d;      	 	 	 	 	 	 	 	 	 	 	 	 	 	 dSd<       ZRd= ZSe@j                  d>      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dTd?       ZTe@j                  d>      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dUd@       ZUe@j                  d>      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dTdA       ZV	 	 	 	 	 	 dVdBZWdWdCZX	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dXdDZYdYdEZZdF Z[e@j                  d>      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dZdG       Z\e@j                  d>      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d[dH       Z]e@j                  d;      	 	 	 	 	 	 	 	 	 	 	 	 	 	 d\dI       Z^e@j                  d;      	 	 	 	 	 	 	 	 	 	 	 	 	 	 d]dJ       Z_y)^    )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_sigc                z    |j                   d   }|j                  d   }t        | |       |j                  |       y )N)upgrade_ops_listdowngrade_ops_list_produce_net_changesreverse_into)autogen_contextmigration_scriptupgrade_opsdowngrade_opss       O/var/www/html/venv/lib/python3.12/site-packages/alembic/autogenerate/compare.py_populate_migration_scriptr8   ;   s<     #33B7K$77;M+6]+    T)uselistc                   | j                   }|J | j                  j                  dd      }t        |      }|j                  j
                  }|rMt        |j                               }|j                  d       |j                  |       |j                  d        nd h}|D ch c]  }| j                  |di       s| }}| j                  J t        j                  d| j                  j                        | ||       y c c}w )Ninclude_schemasFinformation_schemar   )
connectionoptsgetr   dialectdefault_schema_namesetget_schema_namesdiscardaddrun_name_filterscomparatorsdispatchname)r3   r5   r>   r<   	inspectordefault_schemaschemasss           r7   r1   r1   H   s     !++J!!!%**../@%HO":.I'';;Ni0023,-'D& o>>q(BOG  ""...?#:#:#?#?@gs   $D=Dr   c                   
  j                   }t               } j                  j                  } j                  j                  }|D ]c  
t        |j                  
            }
|k(  r&|j                   j                  j                  g      }|j                   
fd|D               e t         j                  D cg c]  }|j                  |j                  f c}      j                  ||fg      }	t        ||	||        y c c}w )Nr   c              3  P   K   | ]  }j                  |d di      r|f  yw)tableschema_nameN)rG   ).0tnamer3   rR   s     r7   	<genexpr>z&_autogen_for_tables.<locals>.<genexpr>}   s8       
//w < %  
   #&)rK   rC   migration_contextversion_table_schemaversion_tableget_table_names
differenceupdater   sorted_tablesr   rJ   _compare_tables)r3   r5   rM   rK   conn_table_namesrX   rY   tablesrQ   metadata_table_namesrR   s   `         @r7   _autogen_for_tablesrb   g   s     ))I7:u 	))>>  $55CCM 
Y..k.BC..&& 22@@AF 	  
 
 	

 &1@1N1NO%,,

	#Oj'789   	Ps    Dc                \	   |j                   j                  j                  }t        |D cg c]  \  }}||k7  r|nd |f c}}      }t	        ||      D 	ci c],  \  }	\  }}|	|j
                  t        j                  ||         . }
}}	}|}|j                  |       D ]  \  }}|r|d|n|}|
||f   }|j                  ||ddd       s.|j                  j                  t        j                  j                  |             t        j                  d|       t        j                   |g |      }t#        j%                  d      ||||d |       |j'                         r|j                  j                  |        t        j(                         }| j                  |      D ]W  \  }}t        j                  ||      }||j*                  v }t        j,                  |||      }|sMt/        j0                  |d|j2                  j4                  j7                  |             |j9                  |d        |j                  ||ddd       st        j                   |g |      }t#        j%                  d      |||||d        |j'                         s|j                  j                  |       |j                  j                  t        j:                  j                  |             t        j                  d	|       Z | j=                  |      }t        j(                         }i }|D ]  \  }}t        j                  ||      }||j*                  v }t        j,                  |||      }|sMt/        j0                  |d|j2                  j4                  j7                  |             |j9                  |d        ||||f<    t?        |d
       D ]  \  }}|xs d }|r|d|n|}|
||f   }|j*                  |   }|j                  ||dd|      sCt        j                   |g |      }tA        |||||||      5  t#        j%                  d      ||||||       d d d        |j'                         r|j                  j                  |        y c c}}w c c}}}	w # 1 sw Y   ExY w)N.rQ   FzDetected added table %rr   column_reflect)include_columnsTzDetected removed table %rc                    | d   xs d| d   fS )Nr        )xs    r7   <lambda>z!_compare_tables.<locals>.<lambda>   s    1Q4:2qt:L r9   )key)!bindrA   rB   r   ziptable_key_to_table	sa_schema_get_table_keyr[   run_object_filtersr   appendCreateTableOp
from_tableloginfor*   rH   rI   is_emptyMetaDatar`   r%   r   listenrW   impl_compat_autogen_column_reflectreflect_tableDropTableOpintersectionsorted_compare_columns)r_   ra   rK   r5   r3   rL   r   rT   #metadata_table_names_no_dflt_schemano_dflt_schematname_to_tablerN   rJ   metadata_tablemodify_table_opsremoval_metadataexiststexisting_tablesexisting_metadataconn_column_info
conn_tables                         r7   r^   r^      s    ^^++??N +5 "6	
 /VT5A	
+' 03/1E0
	  ,NOVU 	::$$UF3
 	
N  ?(334DE 95'(!U#e'E
3--E7E4
 OO""!!,,^< HH.5"11%AF  )  $,,.&&'78+9. !))+$//0DE 85''q1)000OOE#3A>LL 1166.. ##At#<--atL"11%AF  )!11eQ $,,.&&'78OO""3??#=#=a#@AHH0$7588 '334HIO!**,# )5''q1*111OOE#4Q?LL 1166..y9 ##At#<'(!U$)  ?0LM 95I'(!U#e'E
3&--d3
--E7E:
  #11%AF!   $$W-#$"$ $,,.&&'78;9w	
x s   R
1R> R""R+	)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_sortingcolumn_namesexpressionsrJ   unique)r   _tableindexduplicates_constraint)
r@   	enumerater   cr   rt   rq   r    adjust_reflected_dialect_optionsrx   )r|   paramsr   exprssortingnumcol_namerJ   itemoperatorixs              r7   _make_indexr   (  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'(Ir9   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 )Nr   rJ   unique_constraintduplicates_index)rq   r   r   r   rx   )r|   r   r   cnameuqs        r7   _make_unique_constraintr   H  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         }|j	                  |       |S c c}w c c}w )Nreferred_tablereferred_schemard   optionsconstrained_columnsreferred_columnsonupdateondelete
deferrable	initiallyrJ   )r   r   r   r   rJ   )r@   rq   r   r   append_constraint)r   r   rT   r   r   nconsts          r7   _make_foreign_keyr   V  s     #$E !"34e<jjB'G***01F*GHe	H'-.@'AB!E1	BZ(Z(;;|,++k*F^E   'L 	IBs   C	C
c           
   #    K   | r| d|n|}t        d |j                  D              }|j                  D 	ci c]  }	|	j                  r|	j                  |	 }
}	|j                  D 	ci c]/  }	|j	                  |	j                  d|| d      r|	j                  |	1 }}	|j                  |      D ]o  }|j                  |
|   |ddd       s|j                  j                  t        j                  j                  | ||
|                t        j                  d||       q |j                  |      D ]  }|
|   }|j                  |   }|j                  ||dd|      s-t        j                  |||       }t        j!                  d      ||| ||||       |j#                         sv|j                  j                  |        d  t%        |      j                  |      D ]  }|j                  |j                  |   |ddd       s&|j                  j                  t        j&                  j                  | ||j                  |                t        j                  d	||        y c c}	w c c}	w w)
Nrd   c              3  N   K   | ]  }|j                   r|j                    y wN)systemrJ   )rS   r   s     r7   rU   z#_compare_columns.<locals>.<genexpr>x  s      $$s   %%column
table_namerR   FzDetected added column '%s.%s'r   TzDetected removed column '%s.%s')r   r   r   rJ   rG   r[   rs   r   rt   AddColumnOpfrom_column_and_tablenamerw   rx   r   r(   rH   rI   has_changesrC   DropColumnOp)r   rT   r   r   r   r3   rK   rJ   metadata_col_namesr   metadata_cols_by_nameconn_col_namesr   colnamemetadata_colconn_colalter_column_ops                    r7   r   r   m  s     )/fe$ED# $&(($  *++188	  ++FFHU6J
 	
	N  $..~> 	C--!%(%5$
   ''99E#8#?
 HH4dEB	C &22>B 9,W5<<(11'8UH
 ++E76JX&	
 &&(  ''8)9, 
^$//0BC 	E--LL$
   ''  ::E:<<#6
 HH6eD	E_s7   6I5I+
I+I5)4I0.I5CI5)A I5
A+I5_C)boundrQ   c           
         +,-./  j                   }d u -|d u . j                  j                  ,|I|j                  D ch c]  }t	        |t
        j                        r|  }}t        |j                        }	nt               }t               }	t               x}
}d/d}	 |j                  |      }
d/|
D cg c]  } j                  |d   d|d      r| }
}|
D ]  }|j                  d      sd} 	 	 |j                  |      }|D cg c]  } j                  |d   d|d      r| }}.r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].  }|j.                  r t1        t2        |j5                               |0 }}|D ci c]  }|j6                  | }}|D ci c]  }|j6                  | }}|j-                  |      D ci c].  }t9        j:                  |j6                        r|j6                  |0 }}t        |      j=                  |      D ci c]  }|||   ||   f }}|D ci c]  }|j>                  | }}|D ci c]  }|j>                  | }}|D ci c]9  }t9        j@                  |jB                   j$                        s|j>                  |; }}d -./fd
}d -./fd}	 	 	 	 	 	 d fd} tE        t        |      jG                  |            D ]j  }!||!   }"tI        |"      r|"j>                  |v r"|!|v r=||!   \  }#+tK        +fd|D              sC|#j>                  |vsR ||#        |+       c ||"       l tE        t        |      j=                  |            D ]  }$||$   }%|$|v r||$   \  }#+tM        |%      r+}"n|#}"n||$   }"tO        |"      tO        |%      k7  r ||"        ||%       R|%jQ                  |"      }&|&jR                  r | |"|%|&jT                         |&jV                  r<tM        |"      rdnd}'tX        j[                  d|'|"j6                  |&jT                         |&j\                  rJ  tE        t        |      jG                  |            D ]  }(||(   }) ||)        |D ]  }*|*|vs |||*           y 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   TrJ   r   r   r   r   c              3  8   K   | ]  }t        |        y wr   )r   )rS   r   r   r|   s     r7   rU   z/_compare_indexes_and_uniques.<locals>.<genexpr>  s      68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 )Nr   Fz!Detected added index '%r' on '%s'r   z+Detected added unique constraint %r on '%s')r   rs   r   rJ   r   rt   CreateIndexOp
from_indexrw   rx   r   r   AddConstraintOpfrom_constraint)objr3   is_create_tableis_drop_table
modify_opssupports_unique_constraintss    r7   	obj_addedz/_compare_indexes_and_uniques.<locals>.obj_addeds  s   11		388WeT %%c&7&7&B&B399&MN7HH$$	 s^. -11		388%8% %%''77		B AHH$$ 5r9   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 )Nr   TzDetected removed index %r on %rr   z+Detected removed unique constraint %r on %r)r   	is_uniquers   r   rJ   r   rt   DropIndexOpr   rw   rx   r   DropConstraintOpr   )r   r3   r   r   r   r   rT   s    r7   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 5r9   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 )Nr   Fz#Detected changed index %r on %r: %sr   z/Detected changed unique constraint %r on %r: %s)r   rs   r   rJ   rw   rx   r   rt   r   r   r   r   r   r   r   )oldnewmsgr3   r   rT   s      r7   obj_changedz1_compare_indexes_and_uniques.<locals>.obj_changed  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  5r9   c              3  P   K   | ]  }j                   |j                   k7    y wr   )unnamed)rS   meta_idxconn_idxs     r7   rU   z/_compare_indexes_and_uniques.<locals>.<genexpr>  s*        $$(8(88rV   zunique constraintz5Cannot compare %s %r, assuming equal and skipping. %s)r   r,   )r   r,   r   r,   r   str)/rK   rW   r|   constraints
isinstancerq   r   rC   indexes	frozensetget_unique_constraintsrG   r@   NotImplementedError	TypeErrorget_indexesr   _correct_for_uq_duplicates_uixrA   correct_for_autogen_constraints_create_metadata_constraint_sig _create_reflected_constraint_sigunionis_namedr   r   md_name_to_sql_namerJ   r   constraint_name_stringr   r   _constraint_is_namedr   r   r[   r   allr   typecompare_to_reflectedis_differentmessageis_skiprw   rx   is_equal)0r3   r   r   rT   r   r   rK   r   metadata_unique_constraintsmetadata_indexesconn_uniquesconn_indexes+unique_constraints_duplicate_unique_indexesr   uq_defr   metadata_unique_constraints_sigmetadata_indexes_sigconn_unique_constraintsconn_indexes_sigr   metadata_namesconn_uniques_by_nameconn_indexes_by_name
conn_namesrJ   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_sigr   r|   r   r   r   s0   `` ``                                      @@@@@r7   _compare_indexes_and_uniquesr!    sD     ))I D(O"d*M,,11D ! %00'
"i889 '
# '

 ~556&)e#5"++-L<"'27/	G$;;f < L +/' '"33vJ'#(@ L  # G66,-BF?G	$00f 1 L '"33vJ#(@ L  5L + (fjAL <H
  	 
 
 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     B @### #J 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&&	 "****E"+H S0;;JGH 
Z(# + 8,,.v678[
'
> # 	 	 		2 # 		&

F'

 H@ M s   #V&V ?"V V: "V5W
0W1WW-WW#83W(1W-W243W7W<X7X>X	V2&V21V2:	WW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 )Nr   )	r   _get_constraint_final_namer   r   r   rJ   rx   r   rE   )r  r	  r  r  rA   r|   consmetadata_cons_namesrJ   metadata_uq_namesunnamed_metadata_uqsmetadata_ix_namesconn_ix_namesuqs_dupe_indexesoverlaps                  r7   r   r     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!r   c                   |j                   }|j                   }||_        ||urt        j                  |j                  |j                        rt        j
                  |      s*t        j                  |j                  |j                        rt        j                  d||       y ||_	        t        j                  d|rdnd||       y y )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_identityrw   rx   modify_nullable)	r3   r   r   rT   r   r   r   metadata_col_nullableconn_col_nullables	            r7   _compare_nullabler7  Z  s     )11 ))(9O% 5533++X-D-D 77E77 //1H1H
 HHE /DO+HH//Z	' 6r9   c                    |j                   j                  |u rd|j                  d<   y |j                  du rd|j                  d<   y |j                  du rd|j                  d<   y y )NTautoincrementF)rQ   _autoincrement_columnkwr9  )r3   r   r   rT   r   r   r   s          r7   _setup_autoincrementr<    si     //<?.2?+		#	#t	+.2?+		#	#u	,.3?+ 
-r9   c                   |j                   }||_        |j                   }|j                  t        j                  u rt
        j                  d||       y |j                  t        j                  u rt
        j                  d||       y | j                  j                  ||      }	|	r!||_	        t
        j                  d||||       y y )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NullTyperw   rx   rW   _compare_typemodify_type)
r3   r   r   rT   r   r   r   	conn_typemetadata_typeisdiffs
             r7   rB  rB    s     I$-O! %%M8#4#44D	

 	##x'8'88K	

 	..<<,F &3#;	
 r9   c                   t        | t        j                        rYt        | j                  t              r| j                  } n2t	        | j                  j                  |j                  ddi            } t        | t              r| S y )Nliteral_bindsTrA   compile_kwargs)r   rq   DefaultClauseargr   compilerA   )metadata_defaultr3   s     r7   "_render_server_default_for_comparerO    s}     "I$;$;<&**C0/33" $$,,+33$3T#: -   "C(r9   c                L    t        j                  dd|       j                         S )zwe want to warn if a computed sql expression has changed.  however
    we don't want false positives and the warning is not that critical.
    so filter out most forms of variability from the SQL text.

    z[ \(\)'\"`\[\]\t\r\n]rh   )resublower)sqltexts    r7   _normalize_computed_defaultrU    s!     66*B8>>@@r9   c                   t        t        t        j                  |j                        j
                  j                  | j                  ddi            }t        |      }t        |j                  t        j                        rMt        |j                  j
                  j                  | j                  ddi            }|d}nt        |      }nd}||k7  rt        ||       y y )NrH  TrI  rh   )r   r   rq   Computedr1  rT  rM  rA   rU  r   _warn_computed_not_supported)	r3   r   r   rT   r   r   r   rendered_metadata_defaultrendered_conn_defaults	            r7   _compare_computed_defaultr[    s     !$Y!<!<=EEMM#+++T2 	N 	
! !<!! ())9+=+=> ###++33'// /6 4 !
 !($&!$?%%! !# $99$UE2 :r9   c                <    t        j                  d| d|d       y )NzComputed default on rd   z cannot be modified)r   warn)rT   r   s     r7   rX  rX  	  s    IIuMNr9   c                    | j                   j                  }|j                  |j                  |j                        \  }}	}
||
fS r   )rW   r|   _compare_identity_defaultr1  )r3   r   r   rT   r   r   r   r|   diffignored_attris_alters              r7   r_  r_    sI     ,,11D#'#A#A##X%<%<$ D, >r9   c           	     |   |j                   }|j                   }||yt        j                  |      rt        | ||||||      S t        j                  |      rt	        ||       yt        j
                  ||      rH||_        t        | ||||||      \  }	}
|
r*||_        |	r!t        j                  d||t        |	             y t        ||       }|r$t        t        |      j                  j                   nd }||_        | j"                  j%                  ||||      }|r||_        t        j                  d||       y )NFzIDetected server default on column '%s.%s': identity options attributes %sz)Detected server default on column '%s.%s')r1  r   r0  r[  rX  r3  existing_server_defaultr_  modify_server_defaultrw   rx   r   rO  r   r   rL  r   rW   _compare_server_default)r3   r   r   rT   r   r   r   rN  conn_col_defaultr`  rb  rY  rZ  is_diffs                 r7   rf  rf    ss    $22..$4$<../?@(
 	
 ../?@$UE2..* 3C/2
h 4DO154L8 ) %Go%
!
 5ED&'++00$ 	 3C/!33KK%!	
 4DO1HH@%Or9   c                    | j                   J | j                   j                  sy |j                  }|j                  }||y||_        ||k7  r||_        t
        j                  d||       y )NFzDetected column comment '%s.%s')rA   supports_commentscommentexisting_commentmodify_commentrw   rx   )	r3   r   r   rT   r   r   r   metadata_commentconn_col_comments	            r7   _compare_column_commentrp  j  s|     ""...""44#++''$4$<'7O$++)9&2E5Ar9   c           
        
 ||y  j                   }|j                  D ch c]  }t        |t        j                        r|  }}|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 ]>  }||   
||vs
j                  |v r|
j                     j$                  nd } |
|       @ t!        |      j#                  |      D ]>  }||   
||vs
j                  |v r|
j                     j$                  nd } |
|       @ y 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   rJ   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 )Nrr  Fz1Detected added foreign key (%s)(%s) on table %s%s, %s.rh   )rs   r   rJ   r   rt   CreateForeignKeyOpr   rw   rx   joinsource_columnstarget_columnssource_schemasource_table)r   
compare_tor3   r   r   s     r7   _add_fkz&_compare_foreign_keys.<locals>._add_fk  s    --IIsxx!95*
   ''&&66u{{C HHC		#,,-		#,,--0->->)))B  
r9   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 )Nrr  Tz3Detected removed foreign key (%s)(%s) on table %s%srt  ru  rh   )rs   r   rJ   r   rt   r   r   rw   rx   rw  rx  ry  rz  r{  )r   r|  r3   r   s     r7   
_remove_fkz)_compare_foreign_keys.<locals>._remove_fk  s    --IIsxx!94
   ''$$44SYY? HHE		#,,-		#,,--0->->)))B  
r9   )rK   r   r   rq   r   get_foreign_keysrG   r   rW   r|   correct_for_autogen_foreignkeysr   r   r   unnamed_no_optionsrJ   rC   r[   r   )r3   r   r   rT   r   r   rK   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   ``        `              r7   _compare_foreign_keysr    sJ    ^3))I !,,b)889 	L  ,,U6,B++vJ$ 8
 	M  # 	%,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 ::!55 %UZZ066 
 uj)* ,-88I '	#I.O+ ::!11 !,22 
 E:&'E ?F J
 OsM   #J"JJ J%8J*J/9J4J9.J>KK/KKc                   | j                   J | j                   j                  sy ||y |j                  |j                  y |j                  H|j                  <|j                  j	                  t        j
                  ||j                  |             y |j                  |j                  k7  rG|j                  j	                  t        j                  ||j                  |j                  |             y y )N)rl  r   )rA   rj  rk  r   rt   DropTableCommentOpCreateTableCommentOp)r3   r   r   rT   r   r   s         r7   _compare_table_commentr    s     ""...""44 ^3!n&<&<&D%**<*<*H##""
(:(:6	

 
		:#5#5	5##$$&&!+!3!3		
 
6r9   )r3   r&   r4   r)   returnNone)r3   r&   r5   r+   r  r  )r3   r&   r5   r+   rM   z$Union[Set[None], Set[Optional[str]]]r  r  )r_   rC   ra   rC   rK   r!   r5   r+   r3   r&   r  r  )r|   r'   r   Dict[str, Any]r   r%   r  zOptional[Index])r|   r'   r   r  r   r%   r  r   )r   r  r   r%   r  r   )r   Optional[str]rT   Union[quoted_name, str]r   r%   r   r%   r   r*   r3   r&   rK   r!   r  zIterator[None])r3   r&   r   r*   r   r  rT   r  r   Optional[Table]r   r  r  r  )r3   r&   r   r(   r   r  rT   r  r   r  r   Column[Any]r   r  r  r  )r3   r&   r   r(   r   r  rT   r  r   r"   r   r  r   r  r  r  )rN  zOptional[Any]r3   r&   r  r  )rT  r   r  r   )r3   r&   r   r(   r   r  rT   r   r   r   r   r  r   r  r  r  )rT   r   r   r   r  r  )r3   r&   r   r(   r   r  rT   r  r   r  r   r  r   r  r  zOptional[bool])r3   r&   r   r(   r   r  rT   r  r   r"   r   r  r   r  r  zOptional[Literal[False]])r3   r&   r   r*   r   r  rT   r  r   r%   r   r%   r  r  )r3   r&   r   r*   r   r  rT   r  r   r  r   r  r  r  )`
__future__r   
contextlibloggingrQ  typingr   r   r   r   r   r	   r
   r   r   r   r   
sqlalchemyr   r   r   rq   r   r   r@  sqlalchemy.sqlr   sqlalchemy.sql.schemar   r   r   sqlalchemy.utilr   rh   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__rw   r8   
DispatcherrH   r1   dispatch_forrb   r^   immutabledictr   r   r   r   r   __annotations__r   r   r   contextmanagerr   r   r!  r   r7  r<  rB  rO  rU  r[  rX  r_  rf  rp  r  r  rj   r9   r7   <module>r     s   #   	               *  ( % 6 ' 2 &  ' $  632,+7,4651. g!,#,7F,	, dood+#2<	> (#'#'' 2' 
	' $'TG9G9G9 G9 	G9
 $G9 
G9T -?D,>,>~~!,, ** ++))	- ) 	
-;@@
-;@(-. EEEE"EE EE 	EE
 %EE $EE EE EE EEP T/1EuLMN '"^8#^8^8 ^8 #	^8
  ^8 $^8 
^8 #^8B<9~ (#%#%"% % #	%
 #% % % 
% $%P (#4#4"4 4 #	4
 4 4 4 
4 $4" (#'
#'
"'
 '
 #	'

 #'
 '
 '
 
'
 $'
T#6D&A)3#)3")3 )3 	)3
 )3 )3 )3 
)3XO" (#H#H"H H #	H
 #H H H H $HV (##"  #	
     $6 '"x'#x'$x' x' #	x'
 x' x' 
x' #x'v '""
#"
$"
 "
 #	"

  "
 $"
 
"
 #"
r9   