
    +h;                       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 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+ eed"      d&d$       Z,y)'    )annotationsN)Any)Dict)Optional)TYPE_CHECKING)Union)cast)Computed)JSON)schema)sql   )alter_table)
ColumnName)format_column_name)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                h   |j                   D ]  }|d   dk(  r|d   d   }t        |j                  t        j                        r0t        |j                  j
                  t        j                        r yt        |j                  t              s|j                  j                  s y|d   dvs y y)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
   	persisted)selfbatch_opopcols       E/var/www/html/venv/lib/python3.12/site-packages/alembic/ddl/sqlite.pyrequires_recreate_in_batchz%SQLiteImpl.requires_recreate_in_batch1   s     .. 	B!u$eAh&&(<(< !3!3!7!79J9JKs118<**44A<<	     c                    |j                   t        d      |j                  |       rt        j                  d       y y )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r.   consts     r2   add_constraintzSQLiteImpl.add_constraintM   sJ     %%D 
 %IID &r4   c                2    |j                   t        d      y )Nr6   )r7   r8   r:   s     r2   drop_constraintzSQLiteImpl.drop_constraint^   s&    %%D  &r4   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        r2   compare_server_defaultz!SQLiteImpl.compare_server_defaultf   s     %0(*u&?)% )+!5*C)% &1)+u&@*& *,!5*D*& *-FFFr4   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     r2   -_guess_if_default_is_unparenthesized_sql_exprz8SQLiteImpl._guess_if_default_is_unparenthesized_sql_expr   s@     XXlD)XXi&XXk4(r4   c                `    | j                  |j                  dd             rd|d   d|d<   y y )Ndefault())rJ   get)r.   	inspectortablecolumn_infos       r2   autogen_column_reflectz!SQLiteImpl.autogen_column_reflect   s9     ==OOIt,
 0;9/E%GK	"
r4   c                ^    t        |   |fd|i|}|r| j                  |      rd|d}|S )Nis_server_defaultrM   rN   )superrender_ddl_sql_exprrJ   )r.   rI   rU   kwstr_expr	__class__s        r2   rW   zSQLiteImpl.render_ddl_sql_expr   sG    
 7.
$5
9;

 BB8L!)+Hr4   c                    |j                   j                  |j                  ur$t        |t              st	        |d   |      |d<   y y y )NrI   )type_type_affinityr)   r   r	   )r.   existingexisting_transfernew_types       r2   cast_for_batch_migratez!SQLiteImpl.cast_for_batch_migrate   sK     MM((0G0GGx.(,!&)8)f% / Hr4   c                (    | j                  ||       y )N)_skip_functional_indexes)r.   conn_unique_constraintsconn_indexesmetadata_unique_constraintsmetadata_indexess        r2   correct_for_autogen_constraintsz*SQLiteImpl.correct_for_autogen_constraints   s     	%%&6Er4   )r/   r    returnbool)r;   r   )
rB   Column[Any]rC   rk   rD   Optional[str]rE   rl   ri   rj   )rI   rl   ri   rj   )rP   r   rQ   r   rR   zDict[str, Any]ri   None)F)rI   r   rU   rj   ri   str)r^   rk   r_   z"Dict[str, Union[TypeEngine, Cast]]r`   r   ri   rm   )__name__
__module____qualname____dialect__transactional_ddlr3   r<   r>   rF   rJ   rS   rW   ra   rh   __classcell__)rZ   s   @r2   r"   r"   )   s   K+	8"G%G %G $1	G
 %2G 
G6!	*HH H $	H
 
H >C!6:	  > 	
 
Fr4   r"   r#   c                x    t        || j                  | j                        dt        || j                  d       S )Nz RENAME TO )r   
table_namer   r   new_table_nameelementcompilerrX   s      r2   visit_rename_tabler{      s6    
 	Hg00'..A(G$:$:DA r4   c                    t        || j                  | j                        dt        || j                        dt        || j
                        S )Nz RENAME COLUMN z TO )r   rv   r   r   column_namenewnamerx   s      r2   visit_column_namer      sB     	Hg00'..A8W%8%898W__5 r4   )ry   r   rz   r   ri   rn   )ry   r   rz   r   ri   rn   )-
__future__r   r@   typingr   r   r   r   r   
sqlalchemyr	   r
   r   r   r   baser   r   r   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{   r    r4   r2   <module>r      s    # 	              $ #    '63,5,0+26_F _FD 
+x $/ ! 
*h  r4   