Ë
    þZ¦i(*  ã                  ó  — d dl m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 erd dlmZ d dlmZ ddlmZ ddlmZ ddlmZ  ej@                  e!«      Z"	 	 	 	 	 	 dd„Z#d d„Z$	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d!d„Z%d"d„Z&	 d#	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d$d„Z'	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d%d„Z(	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d%d„Z)	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d&d„Z*d'd„Z+y)(é    )ÚannotationsN)ÚNoneType)ÚAny)Úcast)ÚOptional)ÚSequence)ÚTYPE_CHECKING)ÚUnion)Úschema)ÚDefaultClauseé   )Úutil)ÚDispatchPriority)ÚPriorityDispatchResult)Úsqla_compat)Úquoted_name)ÚColumn)ÚAutogenContext)ÚAlterColumnOp)ÚPluginc                ó  — t        | t        j                  «      rYt        | j                  t        «      r| j                  } n2t	        | j                  j                  |j                  ddi¬«      «      } t        | t        «      r| S y )NÚliteral_bindsT©ÚdialectÚcompile_kwargs)Ú
isinstanceÚ	sa_schemar   ÚargÚstrÚcompiler   )Úmetadata_defaultÚautogen_contexts     úh/home/portmadness/app/.venv/lib/python3.12/site-packages/alembic/autogenerate/compare/server_defaults.pyÚ"_render_server_default_for_comparer$       s}   € ô Ð"¤I×$;Ñ$;Ô<ÜÐ&×*Ñ*¬CÔ0Ø/×3Ñ3Ñä"Ø ×$Ñ$×,Ñ,Ø+×3Ñ3Ø$3°TÐ#:ð -ó ó Ðô Ð"¤CÔ(ØÐàó    c                óL   — t        j                  dd| «      j                  «       S )zÏwe want to warn if a computed sql expression has changed.  however
    we don't want false positives and the warning is not that critical.
    so filter out most forms of variability from the SQL text.

    z[ \(\)'\"`\[\]\t\r\n]Ú )ÚreÚsubÚlower)Úsqltexts    r#   Ú_normalize_computed_defaultr,   3   s!   € ô 6‰6Ð*¨B°Ó8×>Ñ>Ó@Ð@r%   c                ó  — |j                   }|j                   }|€|€t        j                  S t        j                  |«      r1t        j                  |«      st        ||«       t        j                  S t        j                  |«      st        j                  S t        t        t        j                  |j                   «      j                  j                  | j                  ddi¬«      «      }	t        |	«      }	t        |j                   t        j                  «      rHt        |j                   j                  j                  | j                  ddi¬«      «      }
t        |
«      }
nd}
|	|
k7  rt        ||«       t        j                  S )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<   =   sh  € ð $×2Ñ2ÐØ×.Ñ.ÐØÐÐ$4Ð$<Ü%×.Ñ.Ð.ä×.Ñ.Øôä×5Ñ5Ð6FÔGÜ$ U¨EÔ2Ü%×*Ñ*Ð*ä×2Ñ2Ð3CÔDÜ%×.Ñ.Ð.ä #ÜŒY×Ñ ×!<Ñ!<Ó=×EÑE×MÑMØ#×+Ñ+Ø+¨TÐ2ð 	Nó 	
ó!Ðô !<Ø!ó!Ðô (×)Ñ)¬9×+=Ñ+=Ô>Ü #Ø×#Ñ#×+Ñ+×3Ñ3Ø'×/Ñ/Ø /°Ð6ð 4ó ó!
Ðô !<Ø!ó!
Ñð !#Ðà Ð$9Ò9Ü$ U¨EÔ2ä!×&Ñ&Ð&r%   c                ó<   — t        j                  d| ›d|›d«       y )NzComputed default on ú.z cannot be modified)r   Úwarn)r5   r6   s     r#   r1   r1   w   s   € Ü‡I‚IÂÂuÐMÕNr%   c                óŠ  — |j                   }|j                   }	|	€|t        j                  ||	«      st        j                  S t        |j                   t        j                  t        j                  t        f«      sJ ‚t        |j                   t        j                  t        j                  t        f«      sJ ‚| j                  j                  }
|
j                  |j                   |j                   «      \  }}}|r:||_        |r1t        j                  d||t!        |«      «       t        j"                  S t        j                  S )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   {   s1  € ð  $×2Ñ2ÐØ×.Ñ.ÐàÐ ØÐ$Ü×6Ñ6ØÐ.ô
ô &×.Ñ.Ð.äØ×#Ñ#Ü	×	Ñ	œY×/Ñ/´Ð:ôð ð ô Ø×ÑÜ	×	Ñ	œY×/Ñ/´Ð:ôð ð ð
 ×,Ñ,×1Ñ1€DØ×6Ñ6Ø×#Ñ# X×%<Ñ%<óÑ€Dˆ!ˆXñ Ø0@ˆÔ-ÙÜH‰Hð1àØÜt“ôô *×.Ñ.Ð.ä!×*Ñ*Ð*r%   c                ól  — |j                   }|j                   }|€|€t        j                  S ||_        | j                  }	|	j
                  du rt        j                  S t        |	j
                  «      st        j                  S t        || «      }
|r$t        t        |«      j                  j                  nd }|	j                  |	||||j                   |
«      }|r9||_        t        j                  d|	j
                  ||«       t        j                  S |du rt        j                  S t        j                  S )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   ´   s7  € ð $×2Ñ2ÐØ×.Ñ.ÐØÐÐ$4Ð$<Ü%×.Ñ.Ð.à.>€OÔ+à'×9Ñ9Ðà×5Ñ5¸Ñ>Ü%×*Ñ*Ð*äÐ%×BÑBÔCÜ%×.Ñ.Ð.ä BØ˜/ó!Ðñ 1AŒŒSÐ"Ó#×'Ñ'×,Ò,Àdð ð  ×<Ñ<ØØØØØ×#Ñ#Ø!ó€Gñ Ø0@ˆÔ-Ü‰ð/à×:Ñ:ØØô	
ô &×*Ñ*Ð*Ø	EÑ	ô &×*Ñ*Ð*ä!×*Ñ*Ð*r%   c                ó2  — |j                   }|j                   }|€|€t        j                  S ||_        t	        |t
        t        f«      rt	        |t
        t        f«      st        j                  S | j                  }	t        || «      }
|r$t        t        |«      j                  j                  nd}|	j                  j                  |||
|«      }|r9||_        t         j#                  d|	j                  ||«       t        j$                  S t        j                  S )zÖuse 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Ð$<Ü%×.Ñ.Ð.ð
 /?€OÔ+äØœ=¬(Ð3ôäÐ(¬=¼(Ð*CÔDÜ%×.Ñ.Ð.à'×9Ñ9Ðä BØ˜/ó!Ðñ 1AŒŒSÐ"Ó#×'Ñ'×,Ò,Àdð ð  ×$Ñ$×;Ñ;ØØØ!Øó	€Gñ Ø0@ˆÔ-Ü‰ØGØ×"Ñ"ØØô		
ô &×*Ñ*Ð*Ü!×*Ñ*Ð*r%   c                ó$  — |j                   j                  |u rd|j                  d<   t        j
                  S |j                  du rd|j                  d<   t        j
                  S |j                  du rd|j                  d<   t        j
                  S )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                ó*  — | j                  t        ddt        j                  ¬«       | j                  t        dd«       | j                  t
        dd«       | j                  t        dd«       | j                  t        ddt        j                  ¬«       y )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Ý/Ý)à€g×Ñ˜Ó!€ðØ#ðØ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%   