Ë
    …V.j’  ã                  ó~  — d dl m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 er6d 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&  G d„ de«      Z' eed«      	 	 	 	 	 	 d!d „«       Z(y)"é    )ÚannotationsN)ÚAny)ÚDict)ÚOptional)ÚTYPE_CHECKING)ÚUnion)Úcast)ÚJSON)Úschema)Úsqlé   )Úalter_table)Úformat_table_name)ÚRenameTable)ÚDefaultImplé   )Úutil)Úcompiles)Ú	Inspector)ÚDDLCompiler)ÚCast)ÚClauseElement)ÚColumn)Ú
Constraint)ÚTable)Ú
TypeEngine)ÚBatchOperationsImplc                  óº   ‡ — e Zd ZdZdZ	 	 	 	 	 dd„Zdd„Zdd„Z	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 dd„Z		 	 	 	 	 	 	 	 dd„Z
	 d	 	 	 	 	 dˆ fd	„Z	 	 	 	 	 	 	 	 dd
„Zd„ Zˆ xZS )Ú
SQLiteImplÚsqliteFc                ó�  — |j                   D ]·  }|d   dk(  r¤|d   d   }t        |j                  t        j                  «      r0t        |j                  j
                  t        j                  «      r yt        |j                  t        j                  j                  «      sŒ–|j                  j                  sŒ­ y|d   dvsŒ· y 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.

        r   Ú
add_columnr   T)Úcreate_indexÚ
drop_indexF)ÚbatchÚ
isinstanceÚserver_defaultr   ÚDefaultClauseÚargr   r   r   Úsqla_compatÚComputedÚ	persisted)ÚselfÚbatch_opÚopÚcols       úTC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\alembic/ddl/sqlite.pyÚrequires_recreate_in_batchz%SQLiteImpl.requires_recreate_in_batch.   s¦   € ð —.”.ˆBØ�!‰u˜Ò$Ø˜‘e˜A‘h�ÜØ×&Ñ&¬×(<Ñ(<ôä  ×!3Ñ!3×!7Ñ!7¼×9JÑ9JÔKÙä˜s×1Ñ1´4×3CÑ3C×3LÑ3LÕMØ×*Ñ*×4Ó4áØ�A‘Ð<Ò<Ùð !ð ó    c                ó€   — |j                   €t        d«      ‚|j                  | «      rt        j                  d«       y y )Nú No support for ALTER of constraints in SQLite dialect. Please refer to the batch mode feature which allows for SQLite migrations using a copy-and-move strategy.z©Skipping unsupported ALTER for creation of implicit constraint. Please refer to the batch mode feature which allows for SQLite migrations using a copy-and-move strategy.)Ú_create_ruleÚNotImplementedErrorr   Úwarn©r-   Úconsts     r1   Úadd_constraintzSQLiteImpl.add_constraintJ   sJ   € ð ×ÑÐ%Ü%ðDóð ð
 ×Ñ Ô%Ü�I‰IðDõð &r3   c                ó2   — |j                   €t        d«      ‚y )Nr5   )r6   r7   r9   s     r1   Údrop_constraintzSQLiteImpl.drop_constraint[   s&   € Ø×ÑÐ%Ü%ðDóð ð &r3   c                óÌ   — |�.t        j                  dd|«      }t        j                  dd|«      }|�.t        j                  dd|«      }t        j                  dd|«      }||k7  S )Nz
^\((.+)\)$z\1z^\"?'(.+)'\"?$)ÚreÚsub)r-   Úinspector_columnÚmetadata_columnÚrendered_metadata_defaultÚrendered_inspector_defaults        r1   Úcompare_server_defaultz!SQLiteImpl.compare_server_defaultc   s€   € ð %Ð0Ü(*¯©Ø˜uÐ&?ó)Ð%ô )+¯©Ø! 5Ð*Có)Ð%ð &Ð1Ü)+¯©Ø˜uÐ&@ó*Ð&ô *,¯©Ø! 5Ð*Dó*Ð&ð *Ð-FÑFÐFr3   c                ó”   — |syt        j                  d|«      ryt        j                  d|«      ryt        j                  d|«      ryy)a  Determine if a server default is a SQL expression or a constant.

        There are too many assertions that expect server defaults to round-trip
        identically without parenthesis added so we will add parens only in
        very specific cases.

        Fz	^[0-9\.]$z^'.+'$z^\(.+\)$T)r?   Úmatch)r-   Úexprs     r1   Ú-_guess_if_default_is_unparenthesized_sql_exprz8SQLiteImpl._guess_if_default_is_unparenthesized_sql_expr~   s@   € ñ ØÜ�X‰X�l DÔ)ØÜ�X‰X�i Ô&ØÜ�X‰X�k 4Ô(Øàr3   c                ó`   — | j                  |j                  dd «      «      rd|d   ›d�|d<   y y )NÚdefaultÚ(Ú))rI   Úget)r-   Ú	inspectorÚtableÚcolumn_infos       r1   Úautogen_column_reflectz!SQLiteImpl.autogen_column_reflect“   s9   € ð ×=Ñ=Ø�O‰O˜I tÓ,õ
ð 0;¸9Ó/EÐ%GˆK˜	Ò"ð
r3   c                ó^   •— t        ‰| �  |fd|i|¤Ž}|r| j                  |«      rd|›d�}|S )NÚis_server_defaultrL   rM   )ÚsuperÚrender_ddl_sql_exprrI   )r-   rH   rT   ÚkwÚstr_exprÚ	__class__s        €r1   rV   zSQLiteImpl.render_ddl_sql_expr    sG   ø€ ô
 ‘7Ñ.Øñ
Ø$5ð
Ø9;ñ
ˆñ
 Ø×BÑBÀ8ÕLâ!)Ð+ˆHØˆr3   c                ó�   — |j                   j                  |j                  ur$t        |t        «      st	        |d   |«      |d<   y y y )NrH   )ÚtypeÚ_type_affinityr&   r
   r	   )r-   ÚexistingÚexisting_transferÚnew_types       r1   Úcast_for_batch_migratez!SQLiteImpl.cast_for_batch_migrate°   sK   € ð �M‰M×(Ñ(°×0GÑ0GÑGÜ˜x¬Ô.ä(,Ø! &Ñ)¨8ó)Ð˜fÒ%ð /ð Hr3   c                ó(   — | j                  ||«       y )N)Ú_skip_functional_indexes)r-   Úconn_unique_constraintsÚconn_indexesÚmetadata_unique_constraintsÚmetadata_indexess        r1   Úcorrect_for_autogen_constraintsz*SQLiteImpl.correct_for_autogen_constraints¾   s   € ð 	×%Ñ%Ð&6¸ÕEr3   )r.   r   ÚreturnÚbool)r:   r   )
rA   úColumn[Any]rB   rj   rC   úOptional[str]rD   rk   rh   ri   )rH   rk   rh   ri   )rO   r   rP   r   rQ   zDict[str, Any]rh   ÚNone)F)rH   r   rT   ri   rh   Ústr)r]   rj   r^   z"Dict[str, Union[TypeEngine, Cast]]r_   r   rh   rl   )Ú__name__Ú
__module__Ú__qualname__Ú__dialect__Útransactional_ddlr2   r;   r=   rE   rI   rR   rV   r`   rg   Ú__classcell__)rY   s   @r1   r   r   &   s  ø„ Ø€KàÐððØ+ðà	óó8ó"ðGà%ðGð %ðGð $1ð	Gð
 %2ðGð 
óGð6Ø!ðà	óð*HàðHð ðHð $ð	Hð
 
óHð >CðØ!ðØ6:ðà	õð àðð >ðð ð	ð
 
óöFr3   r   r    c                óx   — t        || j                  | j                  «      ›dt        || j                  d «      ›�S )Nz RENAME TO )r   Ú
table_namer   r   Únew_table_name)ÚelementÚcompilerrW   s      r1   Úvisit_rename_tablery   È   s6   € ô
 	�H˜g×0Ñ0°'·.±.ÕAÜ˜( G×$:Ñ$:¸DÔAðð r3   )rw   r   rx   r   rh   rm   ))Ú
__future__r   r?   Útypingr   r   r   r   r   Ú
sqlalchemyr	   r
   r   r   Úbaser   r   r   Úimplr   Ú r   Úutil.sqla_compatr   Úsqlalchemy.engine.reflectionr   Úsqlalchemy.sql.compilerr   Úsqlalchemy.sql.elementsr   r   Úsqlalchemy.sql.schemar   r   r   Úsqlalchemy.sql.type_apir   Úoperations.batchr   r   ry   © r3   r1   Ú<module>rˆ      sœ   ðõ #ã 	Ý Ý Ý Ý  Ý å Ý Ý Ý å Ý #Ý Ý Ý Ý 'áÝ6Ý3Ý,Ý5Ý,Ý0Ý+Ý2å6ô_F�ô _FñD 
ˆ+�xÓ ðØðØ$/ðàòó !ñr3   