
    i                       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(dS )(    )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                  l     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 )0
SQLiteImplsqliteFbatch_opr   returnboolc                \   |j         D ]}|d         dk    r|d         d         }t          |j        t          j                  r't          |j        j        t          j                  r dS t          |j        t          j	        j
                  r|j        j        r dS |d         dvr dS dS )zReturn 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)selfr!   opcols       X/var/www/html/crypto-bot/backend/venv/lib/python3.11/site-packages/alembic/ddl/sqlite.pyrequires_recreate_in_batchz%SQLiteImpl.requires_recreate_in_batch.   s     . 	 	B!u$$eAh&(<    !3!79JKK   44s143C3LMM *4   44A<<<tt = 5    constr   c                    |j         t          d          |                     |           rt          j        d           d S d S )NNo 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.zSkipping 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r0   r6   s     r3   add_constraintzSQLiteImpl.add_constraintJ   sk     %%D  
 %% 	ID    	 	r5   c                2    |j         t          d          d S )Nr8   )r9   r:   r<   s     r3   drop_constraintzSQLiteImpl.drop_constraint[   s+    %%D   &%r5   inspector_columnColumn[Any]metadata_columnrendered_metadata_defaultOptional[str]rendered_inspector_defaultc                    |,t          j        dd|          }t          j        dd|          }|,t          j        dd|          }t          j        dd|          }||k    S )Nz
^\((.+)\)$z\1z^\"?'(.+)'\"?$)resub)r0   r@   rB   rC   rE   s        r3   compare_server_defaultz!SQLiteImpl.compare_server_defaultc   s     %0(*u&?) )% )+!5*C) )% &1)+u&@* *& *,!5*D* *& *-FFFr5   exprc                    |sdS t          j        d|          rdS t          j        d|          rdS t          j        d|          rdS dS )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)rG   match)r0   rJ   s     r3   -_guess_if_default_is_unparenthesized_sql_exprz8SQLiteImpl._guess_if_default_is_unparenthesized_sql_expr~   sa      		5XlD)) 	5Xi&& 	5Xk4(( 	54r5   	inspectorr   tabler   column_infoDict[str, Any]Nonec                z    |                      |                    dd                     rd|d         d|d<   d S d S )Ndefault())rM   get)r0   rN   rO   rP   s       r3   autogen_column_reflectz!SQLiteImpl.autogen_column_reflect   s`     ==OOIt,,
 
 	H 	H 0;9/E/E/E%GK	"""	H 	Hr5   r   is_server_defaultstrc                z     t                      j        |fd|i|}|r|                     |          rd|d}|S )NrY   rU   rV   )superrender_ddl_sql_exprrM   )r0   rJ   rY   kwstr_expr	__class__s        r3   r]   zSQLiteImpl.render_ddl_sql_expr   sm    
 /577.
 
$5
9;
 

 	,BB8LL	, 	, "*+Hr5   existingexisting_transfer"Dict[str, Union[TypeEngine, Cast]]new_typer   c                    |j         j        |j        ur0t          |t                    st	          |d         |          |d<   d S d S d S )NrJ   )type_type_affinityr)   r
   r	   )r0   ra   rb   rd   s       r3   cast_for_batch_migratez!SQLiteImpl.cast_for_batch_migrate   s`     M(0GGGx.. H )-!&)8) )f%%% HGGGr5   c                2    |                      ||           d S )N)_skip_functional_indexes)r0   conn_unique_constraintsconn_indexesmetadata_unique_constraintsmetadata_indexess        r3   correct_for_autogen_constraintsz*SQLiteImpl.correct_for_autogen_constraints   s!     	%%&6EEEEEr5   )r!   r   r"   r#   )r6   r   )
r@   rA   rB   rA   rC   rD   rE   rD   r"   r#   )rJ   rD   r"   r#   )rN   r   rO   r   rP   rQ   r"   rR   )F)rJ   r   rY   r#   r"   rZ   )ra   rA   rb   rc   rd   r   r"   rR   )__name__
__module____qualname____dialect__transactional_ddlr4   r=   r?   rI   rM   rX   r]   rh   ro   __classcell__)r`   s   @r3   r   r   &   s       K   8   "   G G G G6   *H H H H >C          F F F F F F Fr5   r   r    elementr   compilerr   r"   rZ   c                j    t          || j        | j                  dt          || j        d           S )Nz RENAME TO )r   
table_namer   r   new_table_name)rv   rw   r^   s      r3   visit_rename_tabler{      s=    
 	Hg0'.AAAA(G$:DAAA r5   )rv   r   rw   r   r"   rZ   ))
__future__r   rG   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   r{    r5   r3   <module>r      sL   # " " " " " 				                                                                   # # # # # #                   ' ' ' ' ' ' 
7666666333333,,,,,,555555,,,,,,000000++++++222222666666_F _F _F _F _F _F _F _FD 
+x     !   r5   