
    ZeIiF                       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,dS ).    )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                  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
	 d0d1 fd"Zd2d(Zd) Z xZS )3
SQLiteImplsqliteFbatch_opr    returnboolc                H   |j         D ]}|d         dk    r~|d         d         }t          |j        t          j                  r't          |j        j        t          j                  r dS t          |j        t                    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
   	persisted)selfr$   opcols       W/var/www/html/MCyber-Diagnostic/venv/lib/python3.11/site-packages/alembic/ddl/sqlite.pyrequires_recreate_in_batchz%SQLiteImpl.requires_recreate_in_batch1   s     . 	 	B!u$$eAh&(<    !3!79JKK   44s18<< *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)r1   r7   s     r4   add_constraintzSQLiteImpl.add_constraintM   sk     %%D  
 %% 	ID    	 	r6   kwr   c                2    |j         t          d          d S )Nr9   )r:   r;   )r1   r7   r>   s      r4   drop_constraintzSQLiteImpl.drop_constraint^   s+    %%D   &%r6   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)r1   rA   rC   rD   rF   s        r4   compare_server_defaultz!SQLiteImpl.compare_server_defaultf   s     %0(*u&?) )% )+!5*C) )% &1)+u&@* *& *,!5*D* *& *-FFFr6   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)rH   match)r1   rK   s     r4   -_guess_if_default_is_unparenthesized_sql_exprz8SQLiteImpl._guess_if_default_is_unparenthesized_sql_expr   sa      		5XlD)) 	5Xi&& 	5Xk4(( 	54r6   	inspectorr   tabler   column_infoDict[str, Any]Nonec                z    |                      |                    dd                     rd|d         d|d<   d S d S )Ndefault())rN   get)r1   rO   rP   rQ   s       r4   autogen_column_reflectz!SQLiteImpl.autogen_column_reflect   s`     ==OOIt,,
 
 	H 	H 0;9/E/E/E%GK	"""	H 	Hr6   r   is_server_defaultstrc                z     t                      j        |fd|i|}|r|                     |          rd|d}|S )NrZ   rV   rW   )superrender_ddl_sql_exprrN   )r1   rK   rZ   r>   str_expr	__class__s        r4   r^   zSQLiteImpl.render_ddl_sql_expr   sm    
 /577.
 
$5
9;
 

 	,BB8LL	, 	, "*+Hr6   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 )NrK   )type_type_affinityr,   r   r	   )r1   ra   rb   rd   s       r4   cast_for_batch_migratez!SQLiteImpl.cast_for_batch_migrate   s`     M(0GGGx.. H )-!&)8) )f%%% HGGGr6   c                2    |                      ||           d S )N)_skip_functional_indexes)r1   conn_unique_constraintsconn_indexesmetadata_unique_constraintsmetadata_indexess        r4   correct_for_autogen_constraintsz*SQLiteImpl.correct_for_autogen_constraints   s!     	%%&6EEEEEr6   )r$   r    r%   r&   )r7   r   )r7   r   r>   r   )
rA   rB   rC   rB   rD   rE   rF   rE   r%   r&   )rK   rE   r%   r&   )rO   r   rP   r   rQ   rR   r%   rS   )F)rK   r   rZ   r&   r%   r[   )ra   rB   rb   rc   rd   r   r%   rS   )__name__
__module____qualname____dialect__transactional_ddlr5   r=   r@   rJ   rN   rY   r^   rh   ro   __classcell__)r`   s   @r4   r"   r"   )   s       K   8   "   G G G G6   *H H H H >C          F F F F F F Fr6   r"   r#   elementr   compilerr   r%   r[   c                j    t          || j        | j                  dt          || j        d           S )Nz RENAME TO )r   
table_namer   r   new_table_namerv   rw   r>   s      r4   visit_rename_tabler|      s=    
 	Hg0'.AAAA(G$:DAAA r6   r   c                    t          || j        | j                  dt          || j                  dt          || j                  S )Nz RENAME COLUMN z TO )r   ry   r   r   column_namenewnamer{   s      r4   visit_column_namer      sP     	Hg0'.AAAA8W%899998W_555 r6   )rv   r   rw   r   r%   r[   )rv   r   rw   r   r%   r[   )-
__future__r   rH   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    r6   r4   <module>r      s   # " " " " " 				                                                                               $ $ $ $ $ $ # # # # # #                   ' ' ' ' ' ' 
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     !  
*h      r6   