
    -ji(*                    8   S SK Jr  S SK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  \(       a  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  \R@                  " \!5      r"      SS jr#S S jr$                S!S jr%S"S jr& S#                 S$S jjr'                S%S jr(                S%S jr)                S&S jr*S'S jr+g)(    )annotationsN)NoneType)Any)cast)Optional)Sequence)TYPE_CHECKING)Union)schema)DefaultClause   )util)DispatchPriority)PriorityDispatchResult)sqla_compat)quoted_name)Column)AutogenContext)AlterColumnOp)Pluginc                &   [        U [        R                  5      (       a[  [        U R                  [        5      (       a  U R                  n O/[	        U R                  R                  UR                  SS0S95      n [        U [        5      (       a  U $ g )Nliteral_bindsTdialectcompile_kwargs)
isinstance	sa_schemar   argstrcompiler   )metadata_defaultautogen_contexts     f/home/james-whalen/.local/lib/python3.13/site-packages/alembic/autogenerate/compare/server_defaults.py"_render_server_default_for_comparer$       s     "I$;$;<<&**C00/33" $$,,+33$3T#: -   "C((    c                N    [         R                  " SSU 5      R                  5       $ )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] )resublower)sqltexts    r#   _normalize_computed_defaultr,   3   s!     66*B8>>@@r%   c                .   UR                   nUR                   nUc  Uc  [        R                  $ [        R                  " U5      (       a6  [        R                  " U5      (       d  [        X45        [        R                  $ [        R                  " U5      (       d  [        R                  $ [        [        [        R                  UR                   5      R                  R                  U R                  SS0S95      n	[        U	5      n	[        UR                   [        R                  5      (       aE  [        UR                   R                  R                  U R                  SS0S95      n
[        U
5      n
OSn
X:w  a  [        X45        [        R                  $ )Nr   Tr   r'   )server_defaultr   CONTINUEr   _server_default_is_computed_warn_computed_not_supportedSTOPr   r   r   Computedr+   r    r   r,   r   )r"   alter_column_opr   tnamecnameconn_colmetadata_colr!   conn_col_defaultrendered_metadata_defaultrendered_conn_defaults              r#   _compare_computed_defaultr<   =   so    $22..$4$<%..... 556FGG$U2%***223CDD%... #Y!<!<=EEMM#+++T2 	N 	
! !<!! ())9+=+=>> ###++33'// /6 4 !
 !<!!
 !# 9$U2!&&&r%   c                B    [         R                  " SU < SU< S35        g )NzComputed default on .z cannot be modified)r   warn)r5   r6   s     r#   r1   r1   w   s    IIuMNr%   c                   UR                   nUR                   n	U	c  Ub  [        R                  " X5      (       d  [        R                  $ [        UR                   [        R                  [        R                  [        45      (       d   e[        UR                   [        R                  [        R                  [        45      (       d   eU R                  R                  n
U
R                  UR                   UR                   5      u  pnU(       a>  Xl        U(       a1  [        R                  SUU[!        U5      5        [        R"                  $ [        R                  $ )NzIDetected server default on column '%s.%s': identity options attributes %s)r.   r   _server_default_is_identityr   r/   r   r   Identityr   r   migration_contextimpl_compare_identity_defaultmodify_server_defaultloginfosortedr2   )r"   r4   r   r5   r6   r7   r8   skipr!   r9   rD   diff_is_alters                 r#   rE   rE   {   s9     $22.. $66
 
 &...##			Y//:    			Y//:   
 ,,11D66##X%<%<DX 0@-HH1t *...!***r%   c                   UR                   nUR                   nUc  Uc  [        R                  $ Xl        U R                  n	U	R
                  SL a  [        R                  $ [        U	R
                  5      (       d  [        R                  $ [        Xp5      n
U(       a$  [        [        U5      R                  R                  OS nU	R                  U	UUUUR                   U
5      nU(       a8  Xql        [        R                  SU	R
                  UU5        [        R                  $ USL a  [        R                  $ [        R                  $ )NFzBUser defined function %s detected server default on column '%s.%s')r.   r   r/   existing_server_defaultrC   _user_compare_server_defaultr2   callabler$   r   r   r   textrF   rG   rH   r"   r4   r   r5   r6   r7   r8   r!   r9   rC   r:   r;   is_diffs                r#   rP   rP      s4    $22..$4$<%....>+'9955>%***%BBCC%... B! 1AS"#'',,d   <<##!G 0@-/::	
 &***	E	 &***!***r%   c                X   UR                   nUR                   nUc  Uc  [        R                  $ Xl        [	        U[
        [        45      (       a  [	        U[
        [        45      (       d  [        R                  $ U R                  n	[        Xp5      n
U(       a$  [        [        U5      R                  R                  OSnU	R                  R                  UUU
U5      nU(       a8  Xql        [         R#                  SU	R                  UU5        [        R$                  $ [        R                  $ )zuse dialect.impl.compare_server_default.

This would in theory not be needed.  however we dont know if any
third party libraries haven't made their own alembic dialect and
implemented this method.

Nz9Dialect impl %s detected server default on column '%s.%s')r.   r   r/   rO   r   r   r   rC   r$   r   r   r   rR   rD   compare_server_defaultrF   rG   rH   r2   rS   s                r#   $_dialect_impl_compare_server_defaultrW      s     $22..$4$<%...
 /?+=(3 (=(*CDD%...'99 B! 1AS"#'',,d   $$;;!	G 0@-G""		
 &***!***r%   c                *   UR                   R                  UL a  SUR                  S'   [        R
                  $ UR                  SL a  SUR                  S'   [        R
                  $ UR                  SL a  SUR                  S'   [        R
                  $ )NTautoincrementF)table_autoincrement_columnkwrY   r   r/   )r"   r4   r   r5   r6   r7   r8   s          r#   _setup_autoincrementr]   (  s     //<?.2?+ "*** 
	#	#t	+.2?+ "*** 
	#	#u	,.3?+!***r%   c                   U R                  [        SS[        R                  S9  U R                  [        SS5        U R                  [
        SS5        U R                  [        SS5        U R                  [        SS[        R                  S9  g )Ncolumnr.   )priority)	add_autogenerate_comparatorrP   r   FIRSTr<   rE   r]   rW   LAST)plugins    r#   setupre   ;  s    
&&$!''	 '  &&! &&! &&
 &&,!&&	 ' r%   )r!   zOptional[Any]r"   r   returnOptional[str])r+   r   rf   r   )r"   r   r4   r   r   rg   r5   r   r6   r   r7   Column[Any]r8   rh   rf   r   )r5   r   r6   r   rf   None))orderon_nulloracle_orderoracle_on_null)r"   r   r4   r   r   rg   r5   Union[quoted_name, str]r6   rn   r7   rh   r8   rh   rJ   zSequence[str]rf   r   )r"   r   r4   r   r   rg   r5   rn   r6   rn   r7   rh   r8   rh   rf   r   )r"   r   r4   r   r   rg   r5   rn   r6   r   r7   rh   r8   rh   rf   r   )rd   r   rf   ri   ),
__future__r   loggingr(   typesr   typingr   r   r   r   r	   r
   
sqlalchemyr   r   sqlalchemy.sql.schemar   r'   r   r   r   r   sqlalchemy.sql.elementsr   r   autogenerate.apir   operations.opsr   runtime.pluginsr   	getLogger__name__rG   r$   r,   r<   r1   rE   rP   rW   r]   re    r%   r#   <module>r|      s-   "  	         * /  $ * 3,2/)!#6D&A7'#7'"7' 7' 	7'
 7' 7' 7' 7'tO6+#6+"6+ 6+ #	6+
 #6+ 6+ 6+ 6+ 6+r7+#7+"7+ 7+ #	7+
 #7+ 7+ 7+ 7+t7+#7+"7+ 7+ #	7+
 #7+ 7+ 7+ 7+t+#+"+ + #	+
 + + + +&r%   