Ë
    …V.jóu  ã                  óô  — U 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 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rxd 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 d d,l2m4Z4 d d-l2m5Z5 d d.l2m6Z6 d d/l7m8Z8 d d0l9m:Z: dd1lm;Z; dd2l<m=Z= dd3l>m?Z? dd4l>m@Z@  ej‚                  eB«      ZC G d5„ d6eD«      ZEi ZFd7eGd8<    G d9„ d:eE¬;«      ZH G d<„ d=e«      ZI	 	 	 	 	 	 	 	 d?d>„ZJy)@é    )ÚannotationsN)ÚAny)ÚCallable)ÚDict)ÚIterable)ÚList)ÚMapping)Ú
NamedTuple)ÚOptional)ÚSequence)ÚSet)ÚTuple)ÚType)ÚTYPE_CHECKING)ÚUnion)Úcast)ÚColumn)ÚMetaData)ÚPrimaryKeyConstraint©Úschema)ÚString)ÚTable)Útexté   )Ú_autogen)Úbase)Ú_constraint_sig)ÚComparisonResulté   )Úutil)Úsqla_compat)ÚLiteral)ÚTextIO)Ú
Connection)ÚDialect)ÚCursorResult)Ú	Inspector)ÚClauseElement)Ú
Executable)ÚColumnElement)Úquoted_name)Ú
Constraint)ÚForeignKeyConstraint)ÚIndex)ÚUniqueConstraint)ÚTableClause)Ú
TypeEngine)Ú_ServerDefault)ÚAutogenContext)ÚApplyBatchImpl)ÚBatchOperationsImplc                  ó    — e Zd Z	 	 	 	 	 	 dd„Zy)ÚImplMetac                óV   — t         j                  | |||«      }d|v r| t        |d   <   |S )NÚ__dialect__)ÚtypeÚ__init__Ú_impls)ÚclsÚ	classnameÚbasesÚdict_Únewtypes        úRC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\alembic/ddl/impl.pyr<   zImplMeta.__init__C   s4   € ô —-‘-  Y°°uÓ=ˆØ˜EÑ!Ø+.ŒF�5˜Ñ'Ñ(Øˆó    N)r?   Ústrr@   zTuple[Type[DefaultImpl]]rA   úDict[str, Any])Ú__name__Ú
__module__Ú__qualname__r<   © rD   rC   r8   r8   B   s#   „ ð	àð	ð (ð	ð ô		rD   r8   zDict[str, Type[DefaultImpl]]r=   c                  óœ  — e Zd ZU dZdZdZdZddhfZded<   d	Z	d
ed<   dZ
ded<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 d>d„Zed?d„«       Zd@d„Z	 	 	 	 	 	 	 	 	 	 dAd„Z	 	 	 	 dBd„Z	 	 	 	 	 	 dCd„ZedDd„«       Zdd ej*                  «       f	 	 	 	 	 	 	 	 	 dEd„Z	 dF	 	 	 	 	 dGd„Z	 	 	 	 	 	 	 	 	 	 	 	 dH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dId„Z	 dF	 	 	 	 	 	 	 dJd„Z	 dF	 	 	 	 	 	 	 dKd„ZdLd„ZdMd„Z	 dF	 	 	 	 	 	 	 dNd„ZdOd„ZdOd „ZdPd!„Z dQd"„Z!dQd#„Z"dRd$„Z#dPd%„Z$	 dS	 	 	 	 	 	 	 dTd&„Z%dUd'„Z&	 	 	 	 	 	 dVd(„Z'	 	 	 	 	 	 dWd)„Z(	 	 	 	 	 	 dXd*„Z)d+„ Z*	 	 	 	 	 	 	 	 	 	 dYd,„Z+d-„ Z,	 dZ	 	 	 	 	 	 	 d[d.„Z-d\d/„Z.	 	 	 	 	 	 d]d0„Z/d1„ Z0d^d2„Z1d^d3„Z2d^d4„Z3	 	 	 	 	 	 d_d5„Z4d6„ Z5	 	 	 	 	 	 d`d7„Z6	 	 	 	 	 	 dad8„Z7	 	 	 	 	 	 dad9„Z8	 	 	 	 	 	 dbd:„Z9	 	 	 	 	 	 dcd;„Z:d<„ Z;	 	 	 	 	 	 ddd=„Z<y)eÚDefaultImplaš  Provide the entrypoint for major migration operations,
    including database-specific behavioral variances.

    While individual SQL/DDL constructs already provide
    for database-specific implementations, variances here
    allow for entirely different sequences of operations
    to take place for a particular migration, such as
    SQL Server's special 'IDENTITY INSERT' step for
    bulk inserts.

    ÚdefaultFÚ;ÚNUMERICÚDECIMALzTuple[Set[str], ...]Útype_synonymsrJ   zSequence[str]Útype_arg_extract)ÚorderÚon_nullzTuple[str, ...]Úidentity_attrs_ignorec                óô   — || _         || _        || _        |j                  dd«      | _        || _        i | _        || _        |�|| _        | j                  r"| j                  st        j                  d«      ‚y y )NÚliteral_bindsFz3Can't use literal_binds setting without as_sql mode)ÚdialectÚ
connectionÚas_sqlÚgetrW   Úoutput_bufferÚmemoÚcontext_optsÚtransactional_ddlr!   ÚCommandError)ÚselfrX   rY   rZ   r_   r\   r^   s          rC   r<   zDefaultImpl.__init__k   sƒ   € ð ˆŒØ$ˆŒØˆŒØ)×-Ñ-¨o¸uÓEˆÔà*ˆÔØˆŒ	Ø(ˆÔØÐ(Ø%6ˆDÔ"à×ÒØ—;’;Ü×'Ñ'ØIóð ð ð rD   c                ó(   — t         |j                     S ©N)r=   Úname)r>   rX   s     rC   Úget_by_dialectzDefaultImpl.get_by_dialect…   s   € ä�g—l‘lÑ#Ð#rD   c                ó�   — | j                   €J ‚| j                   j                  |dz   «       | j                   j                  «        y )Nz

)r\   ÚwriteÚflush)ra   r   s     rC   Ústatic_outputzDefaultImpl.static_output‰   s>   € Ø×!Ñ!Ð-Ð-Ð-Ø×Ñ× Ñ  ¨¡Ô/Ø×Ñ× Ñ Õ"rD   c          
     ó    — t        |t        «       t        dt        d«      d¬«      |¬«      }|r|j	                  t        d|› d�¬«      «       |S )a»  Generate a :class:`.Table` object which will be used as the
        structure for the Alembic version table.

        Third party dialects may override this hook to provide an alternate
        structure for this :class:`.Table`; requirements are only that it
        be named based on the ``version_table`` parameter and contains
        at least a single string-holding column named ``version_num``.

        .. versionadded:: 1.14

        Úversion_numé    F)Únullabler   Ú_pkc)rd   )r   r   r   r   Úappend_constraintr   )ra   Úversion_tableÚversion_table_schemaÚversion_table_pkÚkwÚvts         rC   Úversion_table_implzDefaultImpl.version_table_implŽ   sW   € ô& ØÜ‹JÜ�=¤&¨£*°uÔ=Ø'ô	
ˆñ Ø× Ñ Ü$Ø!¨=¨/¸Ð(>ôôð ˆ	rD   c                 ó   — y)zÿReturn True if the given :class:`.BatchOperationsImpl`
        would need the table to be recreated and copied in order to
        proceed.

        Normally, only returns True on SQLite when operations other
        than add_column are present.

        FrJ   )ra   Úbatch_ops     rC   Úrequires_recreate_in_batchz&DefaultImpl.requires_recreate_in_batch°   s   € ð rD   c                 ó   — y)zèperform any operations needed on a table before a new
        one is created to replace it in batch mode.

        the PG dialect uses this to drop constraints on the table
        before the new one uses those same names.

        NrJ   )ra   Ú
batch_implÚtables      rC   Úprep_table_for_batchz DefaultImpl.prep_table_for_batch½   ó   � rD   c                ó   — | j                   S rc   )rY   ©ra   s    rC   ÚbindzDefaultImpl.bindÈ   s   € à�‰ÐrD   Nc                ó†  — t        |t        «      rt        |«      }| j                  rÂ|€|rt	        d«      ‚| j
                  r)t        |t        j                  «      st        ddi¬«      }ni }t        rt        |t        «      sJ ‚ |j                  d	d| j                  i|¤Ž}| j                  t        |«      j                  dd«      j                  «       | j                   z   «       y | j"                  }|€J ‚|r |j$                  d	i |¤Ž}|r|�t	        d«      ‚|r|j'                  ||«      S |j'                  ||«      S )
Nz&SQL parameters not allowed with as_sqlrW   T)Úcompile_kwargsrX   Ú	z    z2Can't send params and multiparams at the same timerJ   )Ú
isinstancerE   r   rZ   Ú	TypeErrorrW   r   Ú
DDLElementÚdictr   r)   ÚcompilerX   ri   ÚreplaceÚstripÚcommand_terminatorrY   Úexecution_optionsÚexecute)ra   Ú	constructrŒ   ÚmultiparamsÚparamsÚ
compile_kwÚcompiledÚconns           rC   Ú_execzDefaultImpl._execÌ   sA  € ô �i¤Ô%Ü˜Y›ˆIØ�;Š;ØÐ&©&ÜÐ HÓIÐIð ×!Ò!¬*Øœ6×,Ñ,ô+ô "°/À4Ð1HÔI‘
à�
åÜ! )¬]Ô;Ð;Ð;Ø(�y×(Ñ(ÑL°·±ÐLÀÑLˆHØ×ÑÜ�H“×%Ñ% d¨FÓ3×9Ñ9Ó;Ø×)Ñ)ñ*ôð à—?‘?ˆDØÐ#Ð#Ð#Ù Ø-�t×-Ñ-ÑBÐ0AÑB�á˜+Ð1ÜØHóð ñ Ø—|‘| I¨{Ó;Ð;à—|‘| I¨vÓ6Ð6rD   c                ó(   — | j                  ||«       y rc   )r”   )ra   ÚsqlrŒ   s      rC   r�   zDefaultImpl.executeù   s   € ð
 	�
‰
�3Ð)Õ*rD   c                óÀ  — |€|�t        j                  dd¬«       |�,| j                  t        j                  ||||||||
¬«      «       |dur…i }t        j                  ||«      rt        j                  }n<t        j                  ||«      rt        j                  }| |d<   nt        j                  }| j                   ||||f|||||
dœ|¤Ž«       |�,| j                  t        j                  ||||||||
¬«      «       |	dur,| j                  t        j                  |||	|||||
¬«      «       |�,| j                  t        j                  |||||||¬«      «       y y )NzBautoincrement and existing_autoincrement only make sense for MySQLé   )Ú
stacklevel)r   Úexisting_typeÚexisting_server_defaultÚexisting_nullableÚexisting_commentFÚimpl)r   rš   r›   rœ   )r!   Úwarnr”   r   ÚColumnNullabler"   Ú_server_default_is_computedÚComputedColumnDefaultÚ_server_default_is_identityÚIdentityColumnDefaultÚColumnDefaultÚ
ColumnTypeÚColumnCommentÚ
ColumnName)ra   Ú
table_nameÚcolumn_namerm   Úserver_defaultrd   Útype_r   ÚautoincrementÚcommentr�   rš   r›   rœ   Úexisting_autoincrementrs   Úcls_s                    rC   Úalter_columnzDefaultImpl.alter_column   s°  € ð$ Ð$Ð(>Ð(JÜ�I‰Ið,àõð
 ÐØ�J‰JÜ×#Ñ#ØØØØ!Ø"/Ø,CØ&7Ø%5ô	ôð  Ñ&ØˆBô ×6Ñ6ØÐ 7ôô ×1Ñ1‘Ü×8Ñ8ØÐ 7ôô ×1Ñ1�Ø!��6’
ä×)Ñ)�Ø�J‰JÙØØØ"ð
ð "Ø"/Ø,CØ&7Ø%5ñ
ð ñ
ôð ÐØ�J‰JÜ—‘ØØØØ!Ø"/Ø,CØ&7Ø%5ô	ôð ˜%ÑØ�J‰JÜ×"Ñ"ØØØØ!Ø"/Ø,CØ&7Ø%5ô	ôð ÐØ�J‰JÜ—‘ØØØØ!Ø"/Ø,CØ&7ôõ
ð rD   c                óR   — | j                  t        j                  |||¬«      «       y ©Nr   )r”   r   Ú	AddColumn)ra   r©   Úcolumnr   s       rC   Ú
add_columnzDefaultImpl.add_columnp  s   € ð 	�
‰
”4—>‘> *¨f¸VÔDÕErD   c                óR   — | j                  t        j                  |||¬«      «       y r³   )r”   r   Ú
DropColumn)ra   r©   rµ   r   rs   s        rC   Údrop_columnzDefaultImpl.drop_columnx  s   € ð 	�
‰
”4—?‘? :¨v¸fÔEÕFrD   c                óˆ   — |j                   �|j                  | «      r%| j                  t        j                  |«      «       y y rc   )Ú_create_ruler”   r   ÚAddConstraint©ra   Úconsts     rC   Úadd_constraintzDefaultImpl.add_constraint�  s8   € Ø×ÑÐ%¨×);Ñ);¸DÔ)AØ�J‰J”v×+Ñ+¨EÓ2Õ3ð *BrD   c                óL   — | j                  t        j                  |«      «       y rc   )r”   r   ÚDropConstraintr½   s     rC   Údrop_constraintzDefaultImpl.drop_constraint…  s   € Ø�
‰
”6×(Ñ(¨Ó/Õ0rD   c                óR   — | j                  t        j                  |||¬«      «       y r³   )r”   r   ÚRenameTable)ra   Úold_table_nameÚnew_table_namer   s       rC   Úrename_tablezDefaultImpl.rename_tableˆ  s"   € ð 	�
‰
Ü×Ñ˜^¨^ÀFÔKõ	
rD   c                ód  — |j                   j                  || j                  d| ¬«       | j                  t	        j
                  |fi |¤Ž«       |j                   j                  || j                  d| ¬«       |j                  D ]&  }| j                  t	        j                  |«      «       Œ( | j                  j                  xr | j                  j                   }|j                  }|r|r| j                  |«       |j                  D ]%  }|j                  }|sŒ|sŒ| j                  |«       Œ' y ©NF)Ú
checkfirstÚ_ddl_runner)ÚdispatchÚbefore_createrY   r”   r   ÚCreateTableÚafter_createÚindexesÚCreateIndexrX   Úsupports_commentsÚinline_commentsr®   Úcreate_table_commentÚcolumnsÚcreate_column_comment)ra   r{   rs   ÚindexÚwith_commentr®   rµ   s          rC   Úcreate_tablezDefaultImpl.create_table’  sý   € Ø�‰×$Ñ$Ø�4—?‘?¨uÀ$ð 	%ô 	
ð 	�
‰
”6×%Ñ% eÑ2¨rÑ2Ô3Ø�‰×#Ñ#Ø�4—?‘?¨uÀ$ð 	$ô 	
ð —]”]ˆEØ�J‰J”v×)Ñ)¨%Ó0Õ1ð #ð �L‰L×*Ñ*ÒO°4·<±<×3OÑ3OÐ/Oð 	ð —-‘-ˆÙ‘|Ø×%Ñ% eÔ,à—m”mˆFØ—n‘nˆGÚš<Ø×*Ñ*¨6Õ2ñ $rD   c                óò   — |j                   j                  || j                  d| ¬«       | j                  t	        j
                  |fi |¤Ž«       |j                   j                  || j                  d| ¬«       y rÉ   )rÌ   Úbefore_droprY   r”   r   Ú	DropTableÚ
after_drop)ra   r{   rs   s      rC   Ú
drop_tablezDefaultImpl.drop_table©  sh   € Ø�‰×"Ñ"Ø�4—?‘?¨uÀ$ð 	#ô 	
ð 	�
‰
”6×#Ñ# EÑ0¨RÑ0Ô1Ø�‰×!Ñ!Ø�4—?‘?¨uÀ$ð 	"õ 	
rD   c                óN   — | j                  t        j                  |fi |¤Ž«       y rc   )r”   r   rÑ   ©ra   r×   rs   s      rC   Úcreate_indexzDefaultImpl.create_index²  s   € Ø�
‰
”6×%Ñ% eÑ2¨rÑ2Õ3rD   c                óL   — | j                  t        j                  |«      «       y rc   )r”   r   ÚSetTableComment©ra   r{   s     rC   rÔ   z DefaultImpl.create_table_commentµ  s   € Ø�
‰
”6×)Ñ)¨%Ó0Õ1rD   c                óL   — | j                  t        j                  |«      «       y rc   )r”   r   ÚDropTableCommenträ   s     rC   Údrop_table_commentzDefaultImpl.drop_table_comment¸  s   € Ø�
‰
”6×*Ñ*¨5Ó1Õ2rD   c                óL   — | j                  t        j                  |«      «       y rc   )r”   r   ÚSetColumnComment)ra   rµ   s     rC   rÖ   z!DefaultImpl.create_column_comment»  s   € Ø�
‰
”6×*Ñ*¨6Ó2Õ3rD   c                óN   — | j                  t        j                  |fi |¤Ž«       y rc   )r”   r   Ú	DropIndexrà   s      rC   Ú
drop_indexzDefaultImpl.drop_index¾  s   € Ø�
‰
”6×#Ñ# EÑ0¨RÑ0Õ1rD   c                óº  — t        |t        «      st        d«      ‚|rt        |d   t        «      st        d«      ‚| j                  r§|D ]¡  }| j                   t        j                  |«      j                  di |j                  «       D ��ci c]Q  \  }}|t        |t        j                  «      s/t        j                  |||j                  |   j                  ¬«      n|“ŒS c}}¤Ž«       Œ£ y |re|r'| j                  t        j                  |«      |¬«       y |D ]6  }| j                   t        j                  |«      j                  di |¤Ž«       Œ8 y y c c}}w )NzList expectedr   zList of dictionaries expected)r¬   )r�   rJ   )r„   Úlistr…   r‡   rZ   r”   r"   Ú_insert_inlineÚvaluesÚitemsÚ_literal_bindparamÚcr;   )ra   r{   ÚrowsÚmultiinsertÚrowÚkÚvs          rC   Úbulk_insertzDefaultImpl.bulk_insertÁ  sH  € ô ˜$¤Ô%Ü˜OÓ,Ð,Ùœ* T¨!¡W¬dÔ3ÜÐ;Ó<Ð<Ø�;Š;Û�Ø—
‘
Ø<”K×.Ñ.¨uÓ5×<Ñ<ñ ð ),¯	©	¬ôñ )4¡  1ð ô (2Ø$%¤{×'EÑ'Eô("ô !,× >Ñ >Ø$% q°·±¸±
·±õ!"ð &'ñ'ð )4òñõñ ñ$ ÙØ—J‘JÜ#×2Ñ2°5Ó9Àtð õ ó  $˜ØŸ
™
ØDœK×6Ñ6°uÓ=×DÑDÑKÀsÑKõñ  $ð ùós   ÂAEc                óR  — | j                   j                  j                  |j                  «      j	                  «       }t        j                  d|«      }g }d }|D ],  }t        j                  d|«      r|}Œ|j                  |«       Œ. t        |d   |dd  g i «      }|rˆt        j                  d|«      D ]o  }d|v r@|j                  d«      \  }	}
|
j                  «       |j                  |	j                  «       <   ŒG|j                  j                  |j                  «       «       Œq |S )Nz[\w\-_]+|\(.+?\)z^\(.*\)$r   r   z[^(),]+Ú=)rX   Útype_compilerÚprocessr;   ÚlowerÚreÚfindallÚmatchÚappendÚParamsÚsplitrŠ   ÚkwargsÚargs)ra   rµ   Ú
definitionÚtokensÚterm_tokensÚ
paren_termÚtokenr�   ÚtermÚkeyÚvals              rC   Ú_tokenize_column_typez!DefaultImpl._tokenize_column_typeé  sö   € à—\‘\×/Ñ/×7Ñ7¸¿¹ÓD×JÑJÓLˆ
ô ŸJ™JÐ':¸JÓGˆà!#ˆØˆ
ãˆEÜ�x‰x˜ UÔ+Ø"‘
à×"Ñ" 5Õ)ð	 ô ˜ A™¨°A°B¨¸¸RÓ@ˆáäŸ
™
 9¨jÖ9�Ø˜$‘;Ø#Ÿz™z¨#›‘H�C˜Ø14·±³�F—M‘M #§)¡)£+Ò.à—K‘K×&Ñ& t§z¡z£|Õ4ð :ð ˆrD   c           	     óæ  — |j                   |j                   k(  ry| j                  D ��cg c]   }|D �ch c]  }|j                  «       ’Œ c}‘Œ" }}}dj                  |j                   g|j                  z   «      }dj                  |j                   g|j                  z   «      }|D ]>  }||hj                  |«      s(|j                   |j                   hj                  |«      sŒ> y yc c}w c c}}w )NTÚ F)Útoken0rQ   rþ   Újoinr  Úissubset)ra   Úinspector_paramsÚmetadata_paramsÚbatchÚtÚsynonymsÚinspector_all_termsÚmetadata_all_termss           rC   Ú_column_types_matchzDefaultImpl._column_types_match  sö   € ð ×"Ñ" o×&<Ñ&<Ò<Øà<@×<NÒ<NÔOÑ<N°5©Ó.© 1�Q—W‘W•Y¨Ó.Ð<NˆÑOØ!Ÿh™hØ×$Ñ$Ð%Ð(8×(?Ñ(?Ñ?ó
Ðð !ŸX™XØ×#Ñ#Ð$ ×'=Ñ'=Ñ=ó
Ðó ˆEØ#Ð%7Ð8×AÑAÀ%ÔHØ ×'Ñ'Ø×&Ñ&ðM÷ ‰h�u‹oñMñ ð ð ùò /ùÓOs   ª	C-³C(Á
C-Ã(C-c                óŒ  — t        |j                  «      t        |j                  «      k(  r|j                  |j                  k7  ryt        |j                  «      t        |j                  «      k(  r|j                  |j                  k7  rydj                  |j                  «      j	                  «       }dj                  |j                  «      j	                  «       }| j
                  D ]Y  }t        j                  ||«      }t        j                  ||«      }|sŒ2|sŒ5|j                  d«      |j                  d«      k7  sŒY y y)a  We want to compare column parameters. However, we only want
        to compare parameters that are set. If they both have `collation`,
        we want to make sure they are the same. However, if only one
        specifies it, dont flag it for being less specific
        Fr  r   T)	Úlenr  r  r  rþ   rR   rÿ   ÚsearchÚgroup)ra   Úinspected_paramsÚmeta_paramsÚinspÚmetaÚregÚmiÚmms           rC   Ú_column_args_matchzDefaultImpl._column_args_match'  s  € ô �×"Ñ"Ó#¤sÐ+;×+BÑ+BÓ'CÒCØ×"Ñ"Ð&6×&=Ñ&=Ò=àô �× Ñ Ó!¤SÐ)9×)>Ñ)>Ó%?Ò?Ø× Ñ Ð$4×$9Ñ$9Ò9àà�x‰xÐ(×/Ñ/Ó0×6Ñ6Ó8ˆØ�x‰x˜×*Ñ*Ó+×1Ñ1Ó3ˆà×(Ô(ˆCÜ—‘˜3 Ó%ˆBÜ—‘˜3 Ó%ˆBâ’b˜RŸX™X a›[¨B¯H©H°Q«KÓ7Ùð )ð rD   c                ó”   — | j                  |«      }| j                  |«      }| j                  ||«      sy| j                  ||«      syy)z²Returns True if there ARE differences between the types of the two
        columns. Takes impl.type_synonyms into account between retrospected
        and metadata types
        TF)r  r  r(  )ra   Úinspector_columnÚmetadata_columnr  r  s        rC   Úcompare_typezDefaultImpl.compare_typeH  sQ   € ð  ×5Ñ5Ð6FÓGÐØ×4Ñ4°_ÓEˆà×'Ñ'Ð(8¸/ÔJØØ×&Ñ&Ð'7¸ÔIØØrD   c                ó   — ||k7  S rc   rJ   )ra   r*  r+  Úrendered_metadata_defaultÚrendered_inspector_defaults        rC   Úcompare_server_defaultz"DefaultImpl.compare_server_defaultX  s   € ð *Ð-FÑFÐFrD   c                 ó   — y rc   rJ   )ra   Úconn_uniquesÚconn_indexesÚmetadata_unique_constraintsÚmetadata_indexess        rC   Úcorrect_for_autogen_constraintsz+DefaultImpl.correct_for_autogen_constraintsa  s   € ð 	rD   c                ón   — |j                   j                  |j                  urt        |d   |«      |d<   y y )NÚexpr)r;   Ú_type_affinityr   )ra   ÚexistingÚexisting_transferÚnew_types       rC   Úcast_for_batch_migratez"DefaultImpl.cast_for_batch_migratej  s:   € Ø�=‰=×'Ñ'¨x×/FÑ/FÑFÜ(,Ø! &Ñ)¨8ó)Ð˜fÒ%ð GrD   c                óX   — dddœ}t        |j                  | j                  |¬«      «      S )zdRender a SQL expression that is typically a server default,
        index expression, etc.

        TF)rW   Úinclude_table)rX   r‚   )rE   rˆ   rX   )ra   r8  Úis_server_defaultrs   r‘   s        rC   Úrender_ddl_sql_exprzDefaultImpl.render_ddl_sql_exprp  s/   € ð (,¸eÑDˆ
äØ�L‰L §¡¸jˆLÓIó
ð 	
rD   c                ó   — | j                   S rc   )Úautogen_column_reflect)ra   Ú	inspectors     rC   Ú_compat_autogen_column_reflectz*DefaultImpl._compat_autogen_column_reflect~  s   € Ø×*Ñ*Ð*rD   c                 ó   — y rc   rJ   )ra   Úconn_fksÚmetadata_fkss      rC   Úcorrect_for_autogen_foreignkeysz+DefaultImpl.correct_for_autogen_foreignkeys�  s   € ð
 	rD   c                 ó   — y)zåA hook that is attached to the 'column_reflect' event for when
        a Table is reflected from the database during the autogenerate
        process.

        Dialects can elect to modify the information gathered here.

        NrJ   )ra   rD  r{   Úcolumn_infos       rC   rC  z"DefaultImpl.autogen_column_reflectˆ  r}   rD   c                 ó   — y)zœA hook called when :meth:`.EnvironmentContext.run_migrations`
        is called.

        Implementations can set up per-migration-run state here.

        NrJ   r   s    rC   Ústart_migrationszDefaultImpl.start_migrations‘  r}   rD   c                ó@   — | j                  d| j                  z   «       y)zâEmit the string ``BEGIN``, or the backend-specific
        equivalent, on the current connection context.

        This is used in offline mode and typically
        via :meth:`.EnvironmentContext.begin_transaction`.

        ÚBEGINN©ri   r‹   r   s    rC   Ú
emit_beginzDefaultImpl.emit_begin™  s   € ð 	×Ñ˜7 T×%<Ñ%<Ñ<Õ=rD   c                ó@   — | j                  d| j                  z   «       y)zãEmit the string ``COMMIT``, or the backend-specific
        equivalent, on the current connection context.

        This is used in offline mode and typically
        via :meth:`.EnvironmentContext.begin_transaction`.

        ÚCOMMITNrP  r   s    rC   Úemit_commitzDefaultImpl.emit_commit£  s   € ð 	×Ñ˜8 d×&=Ñ&=Ñ=Õ>rD   c                 ó   — y©NFrJ   )ra   Útype_objÚautogen_contexts      rC   Úrender_typezDefaultImpl.render_type­  s   € ð rD   c                óT  — t        ||t        j                  «       dh¬«      \  }}t        |dd «      }t        |dd «      }t	        |«      t	        |«      k7  r|j                  d«       |j                  | j                  «       ||t	        |«      xs t	        |«      t	        |«      k7  fS )NÚalways)Úskip)Ú_compare_identity_optionsr"   ÚIdentityÚgetattrÚboolÚaddÚdifference_updaterU   )ra   Úmetadata_identityÚinspector_identityÚdiffÚignoredÚmeta_alwaysÚinspector_alwayss          rC   Ú_compare_identity_defaultz%DefaultImpl._compare_identity_default²  s¬   € ô 2ØØÜ× Ñ Ó"Ø�ô	
‰ˆˆgô Ð/°¸4Ó@ˆÜ"Ð#5°xÀÓFÐä�Ó¤Ð%5Ó 6Ò6Ø�H‰H�XÔà×Ñ˜t×9Ñ9Ô:ð
 àä�‹JÒMœ$Ð0Ó1´TÐ:LÓ5MÑMð
ð 	
rD   c                ór   — t        |j                  «      }t        |j                  «      }||k7  rd|› d|› �S y )Nzunique=z to unique=)r`  Úunique)ra   Úmetadata_indexÚreflected_indexÚconn_uniqueÚmeta_uniques        rC   Ú_compare_index_uniquez!DefaultImpl._compare_index_uniqueÎ  sB   € ô ˜?×1Ñ1Ó2ˆÜ˜>×0Ñ0Ó1ˆØ˜+Ò%Ø˜[˜M¨°[°MÐBÐBàrD   c                ó2   — t        j                  d| |fi |¤ŽS )NT©r   Úfrom_constraint©ra   Ú
constraintÚoptss      rC   Ú_create_metadata_constraint_sigz+DefaultImpl._create_metadata_constraint_sigØ  s   € ô ×.Ñ.¨t°T¸:ÑNÈÑNÐNrD   c                ó2   — t        j                  d| |fi |¤ŽS rV  rr  rt  s      rC   Ú _create_reflected_constraint_sigz,DefaultImpl._create_reflected_constraint_sigÝ  s   € ô ×.Ñ.¨u°d¸JÑOÈ$ÑOÐOrD   c                ó:  — g }| j                  ||«      }|r|j                  |«       | j                  |«      }| j                  |«      }t	        j
                  |«      sJ ‚t	        j
                  |«      sJ ‚||fD ]/  }|j                  sŒt        j                  d|j                  «       Œ1 |j                  |j                  k7  r+|j                  d|j                  › d|j                  › �«       |rt        j                  |«      S t        j                  «       S )z—Compare two indexes by comparing the signature generated by
        ``create_index_sig``.

        This method returns a ``ComparisonResult``.
        z“Generating approximate signature for index %s. The dialect implementation should either skip expression indexes or provide a custom implementation.úexpression ú to )rp  r  rw  ry  r   Úis_index_sigÚhas_expressionsÚlogÚwarningr¾   Úcolumn_namesr   Ú	DifferentÚEqual)ra   rl  rm  ÚmsgÚ
unique_msgÚm_sigÚr_sigÚsigs           rC   Úcompare_indexeszDefaultImpl.compare_indexesâ  s  € ð ˆØ×/Ñ/Ø˜Oó
ˆ
ñ Ø�J‰J�zÔ"Ø×4Ñ4°^ÓDˆØ×5Ñ5°oÓFˆä×$Ñ$ UÔ+Ð+Ð+Ü×$Ñ$ UÔ+Ð+Ð+ð ˜%“<ˆCØ×"Ó"Ü—‘ð:ð —I‘Iõð  ð ×Ñ ×!3Ñ!3Ò3Ø�J‰JØ˜e×0Ñ0Ð1°°e×6HÑ6HÐ5IÐJôñ Ü#×-Ñ-¨cÓ2Ð2ä#×)Ñ)Ó+Ð+rD   c                óÞ   — | j                  |«      }| j                  |«      }|j                  }|j                  }||k7  rt        j                  d|› d|› �«      S t        j
                  «       S )a  Compare two unique constraints by comparing the two signatures.

        The arguments are two tuples that contain the unique constraint and
        the signatures generated by ``create_unique_constraint_sig``.

        This method returns a ``ComparisonResult``.
        r{  r|  )rw  ry  Úunnamedr   r‚  rƒ  )ra   Úmetadata_constraintÚreflected_constraintÚmetadata_tupÚreflected_tupÚmeta_sigÚconn_sigs          rC   Úcompare_unique_constraintz%DefaultImpl.compare_unique_constraint  s€   € ð ×;Ñ;Øó
ˆð ×=Ñ=Ø ó
ˆð  ×'Ñ'ˆØ ×(Ñ(ˆØ�xÒÜ#×-Ñ-Ø˜h˜Z t¨H¨:Ð6óð ô $×)Ñ)Ó+Ð+rD   c           
     óT  — |D �ci c]  }|j                   |“Œ }}t        |«      D ]{  }|j                   |v rŒt        j                  |«      }|sŒ*t	        j
                  d|j                   ›d| j                  ›dt        j                  › d�«       |j                  |«       Œ} y c c}w )Nz@autogenerate skipping metadata-specified expression-based index z
; dialect z under SQLAlchemy z6 can't reflect these indexes so they can't be compared)	rd   rî   r"   Úis_expression_indexr!   rŸ   r:   Úsqlalchemy_versionÚdiscard)ra   r5  r3  ró   Úconn_indexes_by_nameÚidxÚiexs          rC   Ú_skip_functional_indexesz$DefaultImpl._skip_functional_indexes)  s®   € Ù3?Ó@±<¨a §¡¨¡	°<ÐÐ@äÐ(Ö)ˆCØ�x‰xÐ/Ñ/ØÜ×1Ñ1°#Ó6ˆCÚÜ—	‘	ð.à—x‘x�l *¨T×-=Ñ-=Ð,@ð A"Ü"-×"@Ñ"@Ð!Að BFðFôð !×(Ñ(¨Õ-ñ *ùò  As   …B%c                ó&   — |j                  di «      S )NÚdialect_options)r[   )ra   Úreflected_objectÚkinds      rC   Ú adjust_reflected_dialect_optionsz,DefaultImpl.adjust_reflected_dialect_options:  s   € ð  ×#Ñ#Ð$5°rÓ:Ð:rD   )rX   r&   rY   úOptional[Connection]rZ   r`  r_   úOptional[bool]r\   zOptional[TextIO]r^   rF   ÚreturnÚNone)rX   r&   r¢  zType[DefaultImpl])r   rE   r¢  r£  )
rp   rE   rq   úOptional[str]rr   r`  rs   r   r¢  r   )rw   r6   r¢  r`  )rz   r5   r{   r   r¢  r£  )r¢  r   )
rŽ   úUnion[Executable, str]rŒ   zOptional[Mapping[str, Any]]r�   z%Optional[Sequence[Mapping[str, Any]]]r�   úMapping[str, Any]r¢  zOptional[CursorResult]rc   )r–   r¥  rŒ   zOptional[dict[str, Any]]r¢  r£  )NFNNNNFNNNNN) r©   rE   rª   rE   rm   r¡  r«   z%Union[_ServerDefault, Literal[False]]rd   r¤  r¬   úOptional[TypeEngine]r   r¤  r­   r¡  r®   z$Optional[Union[str, Literal[False]]]r�   r¤  rš   r§  r›   zOptional[_ServerDefault]rœ   r¡  r¯   r¡  rs   r   r¢  r£  )r©   rE   rµ   úColumn[Any]r   ú!Optional[Union[str, quoted_name]]r¢  r£  )r©   rE   rµ   r¨  r   r¤  r¢  r£  )r¾   r   r¢  r£  )r¾   r-   r¢  r£  )rÅ   rE   rÆ   zUnion[str, quoted_name]r   r©  r¢  r£  )r{   r   rs   r   r¢  r£  )r×   r/   rs   r   r¢  r£  )r{   r   r¢  r£  )rµ   zColumnElement[Any]r¢  r£  )T)r{   zUnion[TableClause, Table]rô   z
List[dict]rõ   r`  r¢  r£  )rµ   r   r¢  r  )r  r  r  r  r¢  r`  )r!  r  r"  r  r¢  r`  )r*  r¨  r+  r   r¢  r`  )
r2  úSet[UniqueConstraint]r3  ú
Set[Index]r4  rª  r5  r«  r¢  r£  )F)r8  r)   r@  r`  rs   r   r¢  rE   )rD  r(   r¢  r   )rG  úSet[ForeignKeyConstraint]rH  r¬  r¢  r£  )r¢  r£  )rW  r2   rX  r4   r¢  zUnion[str, Literal[False]])rl  r/   rm  r/   r¢  r¤  )ru  z_autogen._Crv  r   r¢  z_constraint_sig[_autogen._C])rl  r/   rm  r/   r¢  r   )rŒ  r0   r�  r0   r¢  r   )r�  rF   rž  rE   r¢  rF   )=rG   rH   rI   Ú__doc__r:   r_   r‹   rQ   Ú__annotations__rR   rU   r<   Úclassmethodre   ri   ru   rx   r|   Úpropertyr€   r!   Úimmutabledictr”   r�   r±   r¶   r¹   r¿   rÂ   rÇ   rÙ   rÞ   rá   rÔ   rç   rÖ   rì   rù   r  r  r(  r,  r0  r6  r=  rA  rE  rI  rC  rM  rQ  rT  rY  ri  rp  rw  ry  r‰  r’  rš  rŸ  rJ   rD   rC   rL   rL   R   sT  … ñ
ð €KàÐØÐØ,5°yÐ+AÐ*C€MÐ'ÓCØ&(Ð�mÓ(ð
 .BÐ˜?ÓAðàðð )ðð ð	ð
 *ðð (ðð %ðð 
óð4 ò$ó ð$ó#ð
 ð ð ð ,ð	 ð
 ð ð ð ð 
ó ðDØ+ðà	óð	Ø(ð	Ø16ð	à	ó	ð òó ðð :>Ø=AØ$6 D×$6Ñ$6Ó$8ð+7à)ð+7ð 7ð+7ð ;ð	+7ð
 "ð+7ð 
 ó+7ð` 7;ð+à#ð+ð 4ð+ð 
ó	+ð $(Ø@EØ"Ø&*Ø $Ø(,Ø8=Ø*.Ø.2Ø<@Ø,0Ø15ðnàðnð ðnð !ð	nð
 >ðnð ðnð $ðnð ðnð &ðnð 6ðnð (ðnð ,ðnð ":ðnð *ðnð !/ðnð  ð!nð" 
ó#nðh 59ð	FàðFð ðFð 2ð	Fð
 
óFð !%ð	GàðGð ðGð ð	Gð 
óGó4ó1ð 59ð	
àð
ð 0ð
ð 2ð	
ð
 
ó
ó3ó.
ó4ó2ó3ó4ó2ð !ð	&à(ð&ð ð&ð ð	&ð
 
ó&óP&ðPØ &ðØ9?ðà	óð,Ø &ðØ5;ðà	óðBØ +ðØ>Dðà	óò Gðà+ðð !ðð &;ð	ð
 %ðð 
óòð >Cð
Ø!ð
Ø6:ð
ØJMð
à	ó
ó+ðà+ðð 0ðð 
ó	òóó>ó?ðØ"ðØ5Cðà	#óò

ð8Ø#ðØ6;ðà	óðOØ%ðOØ/2ðOà	%óOð
PØ%ðPØ/2ðPà	%óPð
),àð),ð ð),ð 
ó	),ðV,à-ð,ð /ð,ð 
ó	,ò8.ð";Ø .ð;Ø69ð;à	ô;rD   rL   )Ú	metaclassc                  ó6   — e Zd ZU ded<   ded<   ded<   ded<   y)	r  rE   r  z	List[str]r  r  zDict[str, str]r  N)rG   rH   rI   r®  rJ   rD   rC   r  r  @  s   … ØƒKØÓØ
ƒOØÔrD   r  c           
     ó¤  ‡‡‡— t        j                  | «      }t        j                  |«      }t        «       Št        «       Š	 	 	 	 	 	 	 	 dˆˆˆfd„} |||t        j                  |«      t        |«      j                  |«      «       t         j                  r6 |t        | di «      t        |di «      |j                  t        |di «      «       ‰‰fS )Nc                ó  •— t        |«      j                  ‰
«      D ]c  }| j                  |«      }|j                  |«      }||k7  sŒ+|j                  |«      }||k(  r‰	j                  |«       ŒS‰j                  |«       Œe y rc   )ÚsetÚ
differencer[   ra  )Ú	meta_dictÚ	insp_dictÚdefault_dictÚattrsÚattrÚ
meta_valueÚ
insp_valueÚdefault_valuere  Úignored_attrr\  s           €€€rC   Úcheck_dictsz._compare_identity_options.<locals>.check_dictsV  ss   ø€ ô ˜“J×)Ñ)¨$Ö/ˆDØ"Ÿ™ tÓ,ˆJØ"Ÿ™ tÓ,ˆJØ˜ZÓ'Ø ,× 0Ñ 0°Ó 6�Ø Ò.Ø ×$Ñ$ TÕ*à—H‘H˜T•Nñ 0rD   Údialect_kwargs)r¸  r¦  r¹  r¦  rº  r¦  r»  zIterable[str])r"   Ú_get_identity_options_dictr¶  ÚunionÚidentity_has_dialect_kwargsr_  rÂ  )	Úmetadata_ioÚinspector_ioÚ
default_ior\  Úmeta_dÚinsp_drÁ  re  rÀ  s	      `   @@rC   r]  r]  G  sÞ   ú€ ô ×3Ñ3°KÓ@€FÜ×3Ñ3°LÓA€Fä‹5€DÜ“5€Lð#Ø$ð#à$ð#ð (ð#ð ÷	#ñ  ØØÜ×.Ñ.¨zÓ:ÜˆF‹×Ñ˜&Ó!ô	ô ×.Ò.ñ 	Ü�KÐ!1°2Ó6Ü�LÐ"2°BÓ7Ø×%Ñ%Ü�LÐ"2°BÓ7ô		
ð �ÐÐrD   )rÆ  ú-Union[schema.Identity, schema.Sequence, None]rÇ  rË  rÈ  z'Union[schema.Identity, schema.Sequence]r\  zSet[str])KÚ
__future__r   Úloggingrÿ   Útypingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   Ú
sqlalchemyr   r   r   r   r   r   r   r   Ú r   r   r   r   r!   r"   r#   r$   Úsqlalchemy.enginer%   r&   Úsqlalchemy.engine.cursorr'   Úsqlalchemy.engine.reflectionr(   Úsqlalchemy.sqlr)   r*   Úsqlalchemy.sql.elementsr+   r,   Úsqlalchemy.sql.schemar-   r.   r/   r0   Úsqlalchemy.sql.selectabler1   Úsqlalchemy.sql.type_apir2   r3   Úautogenerate.apir4   Úoperations.batchr5   r6   Ú	getLoggerrG   r  r;   r8   r=   r®  rL   r  r]  rJ   rD   rC   Ú<module>rÜ     s  ðö #ã Û 	Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý Ý  Ý å Ý Ý Ý +Ý Ý Ý Ý å Ý Ý 8Ý :Ý Ý áÝÝå,Ý)Ý5Ý6Ý,Ý)Ý5Ý3Ý0Ý:Ý+Ý6Ý5Ý2å$Ý1Ý1Ý6à€g×Ñ˜Ó!€ô
ˆtô 
ð (*€Ð$Ó )ôk;˜Hõ k;ô\ˆZô ð/Ø>ð/à?ð/ð 8ð/ð ô	/rD   