
    ZeIiv                       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rrd 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*l1m2Z2 d d+l1m3Z3 d d,l1m4Z4 d d-l1m5Z5 d d.l6m7Z7 d d/l8m9Z9 dd0lm:Z: dd1l;m<Z< dd2l=m>Z> dd3l=m?Z?  ej@        eA          ZB G d4 d5eC          ZDi ZEd6eFd7<    G d8 d9eD:          ZG G d; d<e          ZHdEdDZIdS )F    )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)quoted_name)
Constraint)ForeignKeyConstraint)Index)UniqueConstraint)TableClause)
TypeEngine)_ServerDefault)AutogenContext)ApplyBatchImpl)BatchOperationsImplc                      e Zd Zd	dZdS )
ImplMeta	classnamestrbasesTuple[Type[DefaultImpl]]dict_Dict[str, Any]c                h    t                               | |||          }d|v r| t          |d         <   |S )N__dialect__)type__init___impls)clsr8   r:   r<   newtypes        U/var/www/html/MCyber-Diagnostic/venv/lib/python3.11/site-packages/alembic/ddl/impl.pyrA   zImplMeta.__init__B   s:     --Yu==E!!+.F5'(    N)r8   r9   r:   r;   r<   r=   )__name__
__module____qualname__rA    rF   rE   r7   r7   A   s(        	 	 	 	 	 	rF   r7   zDict[str, Type[DefaultImpl]]rB   c                  4   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<   ddZedd            Zdd"Zdd*Zdd-Zdd1Zedd2            Zd3d3 ej                    fdd=Z	 ddd@Zd3dd3d3d3d3dd3d3d3d3d3dAddTZd3d3dUddZZd3d3d[dd]Zdd_ZddaZ	 dddeZddfZddgZddjZ ddkZ!ddlZ"ddmZ#ddnZ$	 dddtZ%ddwZ&ddzZ'dd}Z(ddZ)d Z*ddZ+d Z,	 dddZ-ddZ.ddZ/d Z0ddZ1ddZ2ddZ3ddZ4d Z5ddZ6ddZ7ddZ8ddZ9ddZ:d Z;ddZ<d3S )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_ignoredialectr&   
connectionOptional[Connection]as_sqlbooltransactional_ddlOptional[bool]output_bufferOptional[TextIO]context_optsr=   returnNonec                    || _         || _        || _        |                    dd          | _        || _        i | _        || _        ||| _        | j        r| j        st          j
        d          d S d S )Nliteral_bindsFz3Can't use literal_binds setting without as_sql mode)rV   rW   rY   getrc   r]   memor_   r[   r!   CommandError)selfrV   rW   rY   r[   r]   r_   s          rE   rA   zDefaultImpl.__init__j   s     $)--ouEE*	((%6D" 	; 'I  	 	 rF   Type[DefaultImpl]c                &    t           |j                 S N)rB   name)rC   rV   s     rE   get_by_dialectzDefaultImpl.get_by_dialect   s    gl##rF   r   r9   c                    | j         J | j                             |dz              | j                                          d S )Nz

)r]   writeflush)rg   r   s     rE   static_outputzDefaultImpl.static_output   sG    !---  ///  """""rF   version_tableversion_table_schemaOptional[str]version_table_pkkwr   r   c          
         t          |t                      t          dt          d          d          |          }|r'|                    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rk   )r   r   r   r   append_constraintr   )rg   rq   rr   rt   ru   vts         rE   version_table_implzDefaultImpl.version_table_impl   s    & JJ=&**u==='	
 
 
  	  $!=(>(>(>     	rF   batch_opr5   c                    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.

        FrJ   )rg   r   s     rE   requires_recreate_in_batchz&DefaultImpl.requires_recreate_in_batch   s	     urF   
batch_implr4   tablec                    dS )zperform 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   )rg   r   r   s      rE   prep_table_for_batchz DefaultImpl.prep_table_for_batch         rF   c                    | j         S rj   )rW   rg   s    rE   bindzDefaultImpl.bind   s
    rF   N	constructUnion[Executable, str]execution_optionsOptional[Mapping[str, Any]]multiparams%Optional[Sequence[Mapping[str, Any]]]paramsMapping[str, Any]Optional[CursorResult]c                   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|}|                     t          |                              dd                                          | j        z              d S | j        }|J |r |j        d	i |}|r|t	          d          |r|                    ||          S |                    ||          S )
Nz&SQL parameters not allowed with as_sqlrc   T)compile_kwargsrV   	z    z2Can't send params and multiparams at the same timerJ   )
isinstancer9   r   rY   	TypeErrorrc   r   
DDLElementdictr   r)   compilerV   rp   replacestripcommand_terminatorrW   r   execute)rg   r   r   r   r   
compile_kwcompiledconns           rE   _execzDefaultImpl._exec   s    i%% 	(YI; "	7&&& HIII !  *6,+ +   "/41HIII


 <!)];;;;;(y(LLLLLHH%%dF3399;;)*   4?D###  C-t-BB0ABB +1H    7||I{;;;||Iv666rF   sqlOptional[dict[str, Any]]c                2    |                      ||           d S rj   )r   )rg   r   r   s      rE   r   zDefaultImpl.execute   s    
 	

3)*****rF   )ry   server_defaultrk   type_r   autoincrementcommentexisting_commentexisting_typeexisting_server_defaultexisting_nullableexisting_autoincrement
table_namecolumn_namery   r   /Optional[Union[_ServerDefault, Literal[False]]]rk   r   Optional[TypeEngine]r   r   r   $Optional[Union[str, Literal[False]]]r   r   r   Optional[_ServerDefault]r   r   c                  ||t          j        dd           |/|                     t          j        ||||||||
                     |dur{i }t          j        ||          rt          j        }n3t          j        ||          rt          j	        }| |d<   nt          j
        }|                      ||||f|||||
d|           |/|                     t          j        ||||||||
                     |	dur/|                     t          j        |||	|||||
                     |0|                     t          j        |||||||                     d S d S )NzBautoincrement and existing_autoincrement only make sense for MySQL   )
stacklevel)r   r   r   r   r   Fimpl)r   r   r   r   )r!   warnr   r   ColumnNullabler"   _server_default_is_computedComputedColumnDefault_server_default_is_identityIdentityColumnDefaultColumnDefault
ColumnTypeColumnComment
ColumnName)rg   r   r   ry   r   rk   r   r   r   r   r   r   r   r   r   ru   cls_s                    rE   alter_columnzDefaultImpl.alter_column   s5   * $(>(JI,   
 JJ#!"/,C&7%5	 	 	   &&B 6 7  
* 18 7  * 1!6

)JJ"
 ""/,C&7%5
 
 
 
   JJ!"/,C&7%5	 	 	   %JJ"!"/,C&7%5	 	 	   JJ!"/,C&7  
 
 
 
 
 rF   r   if_not_existscolumnColumn[Any]!Optional[Union[str, quoted_name]]r   c               \    |                      t          j        ||||                     d S )Nr   )r   r   	AddColumn)rg   r   r   r   r   s        rE   
add_columnzDefaultImpl.add_columnr  sD     	

N+	  	
 	
 	
 	
 	
rF   r   	if_existsr   c               \    |                      t          j        ||||                     d S )Nr   )r   r   
DropColumn)rg   r   r   r   r   ru   s         rE   drop_columnzDefaultImpl.drop_column  sA     	

OF6Y  	
 	
 	
 	
 	
rF   constc                    |j         |                     |           r)|                     t          j        |                     d S d S rj   )_create_ruler   r   AddConstraint)rg   r   s     rE   add_constraintzDefaultImpl.add_constraint  sI    %););D)A)A%JJv+E2233333 &%rF   r,   c                P    |                      t          j        |fi |           d S rj   )r   r   DropConstraint)rg   r   ru   s      rE   drop_constraintzDefaultImpl.drop_constraint  s-    

6(55"5566666rF   old_table_namenew_table_nameUnion[str, quoted_name]c                Z    |                      t          j        |||                     d S )Nr   )r   r   RenameTable)rg   r   r   r   s       rE   rename_tablezDefaultImpl.rename_table  s9     	

^^FKKK	
 	
 	
 	
 	
rF   c                   |j                             || j        d|            |                     t	          j        |fi |           |j                             || j        d|            |j        D ])}|                     t	          j        |                     *| j	        j
        o| j	        j         }|j        }|r|r|                     |           |j        D ]"}|j        }|r|r|                     |           #d S NF)
checkfirst_ddl_runner)dispatchbefore_createrW   r   r   CreateTableafter_createindexesCreateIndexrV   supports_commentsinline_commentsr   create_table_commentcolumnscreate_column_comment)rg   r   ru   indexwith_commentr   r   s          rE   create_tablezDefaultImpl.create_table  s>   $$4?u$ 	% 	
 	
 	
 	

6%e22r22333##4?u$ 	$ 	
 	
 	
 ] 	2 	2EJJv)%001111 L*O4<3O/O 	 - 	-| 	-%%e,,,m 	3 	3FnG 3< 3**6222	3 	3rF   c                    |j                             || j        d|            |                     t	          j        |fi |           |j                             || j        d|            d S r   )r   before_droprW   r   r   	DropTable
after_drop)rg   r   ru   s      rE   
drop_tablezDefaultImpl.drop_table  s    ""4?u$ 	# 	
 	
 	
 	

6#E00R00111!!4?u$ 	" 	
 	
 	
 	
 	
rF   r   r.   c                P    |                      t          j        |fi |           d S rj   )r   r   r   rg   r   ru   s      rE   create_indexzDefaultImpl.create_index  s-    

6%e22r2233333rF   c                T    |                      t          j        |                     d S rj   )r   r   SetTableCommentrg   r   s     rE   r   z DefaultImpl.create_table_comment  s%    

6)%0011111rF   c                T    |                      t          j        |                     d S rj   )r   r   DropTableCommentr   s     rE   drop_table_commentzDefaultImpl.drop_table_comment  s%    

6*51122222rF   c                T    |                      t          j        |                     d S rj   )r   r   SetColumnComment)rg   r   s     rE   r   z!DefaultImpl.create_column_comment  s%    

6*62233333rF   c                P    |                      t          j        |fi |           d S rj   )r   r   	DropIndexr   s      rE   
drop_indexzDefaultImpl.drop_index  s-    

6#E00R0011111rF   TUnion[TableClause, Table]rows
List[dict]multiinsertc           
        t          |t                    st          d          |r*t          |d         t                    st          d          | j        ri|D ]d}|                                                                                      j        di fd|	                                D                        ed S |r|r=|                                                                                     |           d S |D ]H}|                                                                                      j        di |           Gd S d S )NzList expectedr   zList of dictionaries expectedc           	         i | ]I\  }}|t          |t          j                  s't          j        ||j        |         j                   n|JS ))r   )r   r"   _literal_bindparamcr@   ).0kvr   s      rE   
<dictcomp>z+DefaultImpl.bulk_insert.<locals>.<dictcomp>  sx        !%1  (2$%{'E(" ("!' >$%q
!" !" !" !" &'  rF   )r   rJ   )
r   listr   r   rY   r   insertinlinevaluesitems)rg   r   r  r  rows    `   rE   bulk_insertzDefaultImpl.bulk_insert  s    $%% 	=O,,, 	=*T!Wd33 	=;<<<; 	J  

ELLNNVXX     ),		       (  J JJJu||~~4466DJIIIII# J J

#A5<<>>#8#8#:#:#A#H#HC#H#HIIIIJ JJ JrF   r   Paramsc                j   | j         j                            |j                                                  }t          j        d|          }g }d }|D ]/}t          j        d|          r|}|                    |           0t          |d         |dd          g i           }|rt          j        d|          D ]y}d|v rG|
                    d          \  }	}
|
                                |j        |	                                <   M|j                            |                                           z|S )Nz[\w\-_]+|\(.+?\)z^\(.*\)$r   r   z[^(),]+=)rV   type_compilerprocessr@   lowerrefindallmatchappendr  splitr   kwargsargs)rg   r   
definitiontokensterm_tokens
paren_termtokenr   termkeyvals              rE   _tokenize_column_typez!DefaultImpl._tokenize_column_type  s*   \/77DDJJLL
 J':JGG!#
 	* 	*ExU++ *"

""5))))AABBR@@ 	5
9j99 5 5$;;#zz#HC14FM#))++..K&&tzz||4444rF   inspector_paramsmetadata_paramsc                X   |j         |j         k    rdS d | j        D             }d                    |j         g|j        z             }d                    |j         g|j        z             }|D ]=}||h                    |          s!|j         |j         h                    |          r dS >dS )NTc                &    g | ]}d  |D             S )c                6    h | ]}|                                 S rJ   )r  )r  ts     rE   	<setcomp>z=DefaultImpl._column_types_match.<locals>.<listcomp>.<setcomp>&  s     ...1QWWYY...rF   rJ   )r  batchs     rE   
<listcomp>z3DefaultImpl._column_types_match.<locals>.<listcomp>&  s'    OOO5.....OOOrF    F)token0rQ   joinr&  issubset)rg   r.  r/  synonymsinspector_all_termsmetadata_all_termsr5  s          rE   _column_types_matchzDefaultImpl._column_types_match   s     "o&<<<4OOD<NOOO!hh$%(8(??
 
 !XX#$'==
 
  	 	E#%78AA%HH  '&M huoo tt	
 urF   inspected_paramsmeta_paramsc                t   t          |j                  t          |j                  k    r|j        |j        k    rdS t          |j                  t          |j                  k    r|j        |j        k    rdS d                    |j                                                  }d                    |j                                                  }| j        D ]_}t          j        ||          }t          j        ||          }|r1|r/|                    d          |                    d          k    r dS `dS )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
        Fr7  r   T)	lenr&  r$  r9  r  rR   r  searchgroup)rg   r?  r@  inspmetaregmimms           rE   _column_args_matchzDefaultImpl._column_args_match6  s'    "##s+;+B'C'CCC"&6&===5  !!S)9)>%?%??? $4$9995xx(/006688xx*++1133( 	 	C3%%B3%%B b RXXa[[BHHQKK77uutrF   inspector_columnmetadata_columnc                    |                      |          }|                      |          }|                     ||          sdS |                     ||          sdS dS )zReturns 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>  rJ  )rg   rK  rL  r.  r/  s        rE   compare_typezDefaultImpl.compare_typeW  sm      556FGG44_EE''(8/JJ 	4&&'7II 	4urF   c                    ||k    S rj   rJ   )rg   rK  rL  rendered_metadata_defaultrendered_inspector_defaults        rE   compare_server_defaultz"DefaultImpl.compare_server_defaultg  s     *-FFFrF   conn_uniquesSet[UniqueConstraint]conn_indexes
Set[Index]metadata_unique_constraintsmetadata_indexesc                    d S rj   rJ   )rg   rS  rU  rW  rX  s        rE   correct_for_autogen_constraintsz+DefaultImpl.correct_for_autogen_constraintsp  s	     	rF   c                b    |j         j        |j        urt          |d         |          |d<   d S d S )Nexpr)r@   _type_affinityr   )rg   existingexisting_transfernew_types       rE   cast_for_batch_migratez"DefaultImpl.cast_for_batch_migratey  sC    ='x/FFF(,!&)8) )f%%% GFrF   r\  r)   is_server_defaultc                ^    ddd}t          |                    | j        |                    S )zdRender a SQL expression that is typically a server default,
        index expression, etc.

        TF)rc   include_table)rV   r   )r9   r   rV   )rg   r\  rb  ru   r   s        rE   render_ddl_sql_exprzDefaultImpl.render_ddl_sql_expr  s8     (,eDD
LLjLII
 
 	
rF   	inspectorr(   r   c                    | j         S rj   )autogen_column_reflect)rg   rf  s     rE   _compat_autogen_column_reflectz*DefaultImpl._compat_autogen_column_reflect  s    **rF   conn_fksSet[ForeignKeyConstraint]metadata_fksc                    d S rj   rJ   )rg   rj  rl  s      rE   correct_for_autogen_foreignkeysz+DefaultImpl.correct_for_autogen_foreignkeys  s	    
 	rF   c                    dS )zA 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   )rg   rf  r   column_infos       rE   rh  z"DefaultImpl.autogen_column_reflect  r   rF   c                    dS )zA hook called when :meth:`.EnvironmentContext.run_migrations`
        is called.

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

        NrJ   r   s    rE   start_migrationszDefaultImpl.start_migrations  r   rF   c                @    |                      d| j        z              dS )zEmit 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rp   r   r   s    rE   
emit_beginzDefaultImpl.emit_begin  s&     	7T%<<=====rF   c                @    |                      d| j        z              dS )zEmit 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`.

        COMMITNru  r   s    rE   emit_commitzDefaultImpl.emit_commit  s&     	8d&==>>>>>rF   type_objr1   autogen_contextr3   Union[str, Literal[False]]c                    dS NFrJ   )rg   rz  r{  s      rE   render_typezDefaultImpl.render_type  s	     urF   c                   t          ||t          j                    dh          \  }}t          |dd           }t          |dd           }t	          |          t	          |          k    r|                    d           |                    | j                   ||t	          |          pt	          |          t	          |          k    fS )Nalways)skip)_compare_identity_optionsr   IdentitygetattrrZ   adddifference_updaterU   )rg   metadata_identityinspector_identitydiffignoredmeta_alwaysinspector_alwayss          rE   _compare_identity_defaultz%DefaultImpl._compare_identity_default  s     2O	
 
 
g /4@@"#5xFF%5 6 666HHXt9:::
 JJM$011T:L5M5MM
 	
rF   metadata_indexreflected_indexc                r    t          |j                  }t          |j                  }||k    rd| d| S d S )Nzunique=z to unique=)rZ   unique)rg   r  r  conn_uniquemeta_uniques        rE   _compare_index_uniquez!DefaultImpl._compare_index_unique  sJ     ?122>011+%%B[BB[BBB4rF   
constraint_autogen._Copts_constraint_sig[_autogen._C]c                *    t          j        d| |fi |S )NTr   from_constraintrg   r  r  s      rE   _create_metadata_constraint_sigz+DefaultImpl._create_metadata_constraint_sig  s!     .tT:NNNNNrF   c                *    t          j        d| |fi |S r~  r  r  s      rE    _create_reflected_constraint_sigz,DefaultImpl._create_reflected_constraint_sig  s!     .udJOO$OOOrF   r   c                $   g }|                      ||          }|r|                    |           |                     |          }|                     |          }t	          j        |          sJ t	          j        |          sJ ||fD ])}|j        r t                              d|j	                   *|j
        |j
        k    r%|                    d|j
         d|j
                    |rt          j        |          S t          j                    S )zCompare two indexes by comparing the signature generated by
        ``create_index_sig``.

        This method returns a ``ComparisonResult``.
        zGenerating approximate signature for index %s. The dialect implementation should either skip expression indexes or provide a custom implementation.expression  to )r  r!  r  r  r   is_index_sighas_expressionslogwarningr   column_namesr   	DifferentEqual)rg   r  r  msg
unique_msgm_sigr_sigsigs           rE   compare_indexeszDefaultImpl.compare_indexes  sB    //O
 

  	#JJz"""44^DD55oFF$U+++++$U+++++ %< 	 	C" : I   !333JJJe0JJe6HJJ    	,#-c222#)+++rF   metadata_constraintr/   reflected_constraintc                    |                      |          }|                     |          }|j        }|j        }||k    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  )r  r  unnamedr   r  r  )rg   r  r  metadata_tupreflected_tupmeta_sigconn_sigs          rE   compare_unique_constraintz%DefaultImpl.compare_unique_constraint  s     ;;
 
 == 
 
  ' (x#-6h66H66   $)+++rF   c           
        d |D             }t          |          D ]i}|j        |v rt          j        |          }|rGt	          j        d|j        d| j        dt          j         d           |                    |           jd S )Nc                    i | ]
}|j         |S rJ   r{   )r  r  s     rE   r  z8DefaultImpl._skip_functional_indexes.<locals>.<dictcomp>9  s    @@@a@@@rF   z@autogenerate skipping metadata-specified expression-based index z
; dialect z under SQLAlchemy z6 can't reflect these indexes so they can't be compared)	r  rk   r"   is_expression_indexr!   r   r?   sqlalchemy_versiondiscard)rg   rX  rU  conn_indexes_by_nameidxiexs         rE   _skip_functional_indexesz$DefaultImpl._skip_functional_indexes8  s    @@<@@@()) 	. 	.Cx///1#66C .	FxF F-1-=F F #."@F F F   !((---	. 	.rF   reflected_objectkindc                .    |                     di           S )Ndialect_options)rd   )rg   r  r  s      rE    adjust_reflected_dialect_optionsz,DefaultImpl.adjust_reflected_dialect_optionsI  s      ##$5r:::rF   )rV   r&   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r=   r`   ra   )rV   r&   r`   rh   )r   r9   r`   ra   )
rq   r9   rr   rs   rt   rZ   ru   r   r`   r   )r   r5   r`   rZ   )r   r4   r   r   r`   ra   )r`   rX   )
r   r   r   r   r   r   r   r   r`   r   rj   )r   r   r   r   r`   ra   ) r   r9   r   r9   ry   r\   r   r   rk   rs   r   r   r   rs   r   r\   r   r   r   rs   r   r   r   r   r   r\   r   r\   ru   r   r`   ra   )
r   r9   r   r   r   r   r   r\   r`   ra   )
r   r9   r   r   r   rs   r   r\   r`   ra   )r   r   r`   ra   )r   r,   ru   r   r`   ra   )r   r9   r   r   r   r   r`   ra   )r   r   ru   r   r`   ra   )r   r.   ru   r   r`   ra   )r   r   r`   ra   )r   r   r`   ra   )T)r   r  r  r  r  rZ   r`   ra   )r   r   r`   r  )r.  r  r/  r  r`   rZ   )r?  r  r@  r  r`   rZ   )rK  r   rL  r   r`   rZ   )
rS  rT  rU  rV  rW  rT  rX  rV  r`   ra   )F)r\  r)   rb  rZ   ru   r   r`   r9   )rf  r(   r`   r   )rj  rk  rl  rk  r`   ra   )r`   ra   )rz  r1   r{  r3   r`   r|  )r  r.   r  r.   r`   rs   )r  r  r  r   r`   r  )r  r.   r  r.   r`   r   )r  r/   r  r/   r`   r   )r  r=   r  r9   r`   r=   )=rG   rH   rI   __doc__r?   r[   r   rQ   __annotations__rR   rU   rA   classmethodrl   rp   r~   r   r   propertyr   r!   immutabledictr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r-  r>  rJ  rN  rR  rZ  ra  re  ri  rn  rh  rr  rv  ry  r  r  r  r  r  r  r  r  r  rJ   rF   rE   rL   rL   Q   s        
 
 K,5y+A*CMCCCC&(((((
 .BAAAA   4 $ $ $ [$# # # #
       D   	 	 	 	    X :>=A$6D$6$8$8+7 +7 +7 +7 +7` 7;+ + + + + $( "&* $(,8=*..2<@,015%q q q q q qp 59(,
 
 
 
 
 
, !%$(
 
 
 
 
 
4 4 4 47 7 7 7 59	
 
 
 
 
3 3 3 3.
 
 
 
4 4 4 42 2 2 23 3 3 34 4 4 42 2 2 2 !	$J $J $J $J $JL& & & &P   ,   B    G G G      >C
 
 
 
 
+ + + +        > > > >? ? ? ?   

 
 
8   O O O O
P P P P
), ), ), ),V, , , ,8. . ."; ; ; ; ; ;rF   rL   )	metaclassc                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )	r  r9   r8  z	List[str]r&  r$  zDict[str, str]r#  N)rG   rH   rI   r  rJ   rF   rE   r  r  O  s<         KKKOOOrF   r  metadata_io-Union[schema.Identity, schema.Sequence, None]inspector_io
default_io'Union[schema.Identity, schema.Sequence]r  Set[str]c           
        t          j        |           }t          j        |          }t                      t                      d	fd} |||t          j        |          t          |                              |                     t           j        rRt          |d          sJ  |t          | di           t          |di           |j        t          |di                      fS )
N	meta_dictr   	insp_dictdefault_dictattrsIterable[str]c                >   t          |                              
          D ]x}|                     |          }|                    |          }||k    rF|                    |          }||k    r	                    |           c                    |           yd S rj   )set
differencerd   r  )r  r  r  r  attr
meta_value
insp_valuedefault_valuer  ignored_attrr  s           rE   check_dictsz._compare_identity_options.<locals>.check_dictse  s     JJ))$// 	# 	#D"t,,J"t,,JZ'' , 0 0 6 6.. $$T****HHTNNN	# 	#rF   dialect_kwargs)r  r   r  r   r  r   r  r  )r"   _get_identity_options_dictr  unionidentity_has_dialect_kwargshasattrr  r  )	r  r  r  r  meta_dinsp_dr  r  r  s	      `   @@rE   r  r  V  s    3K@@F3LAAF55D55L# # # # # # # #  K.z::F&!!	   . 	
z#344444 	K!1266L"2B77%L"2B77		
 	
 	
 rF   )r  r  r  r  r  r  r  r  )J
__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+   sqlalchemy.sql.schemar,   r-   r.   r/   sqlalchemy.sql.selectabler0   sqlalchemy.sql.type_apir1   r2   autogenerate.apir3   operations.batchr4   r5   	getLoggerrG   r  r@   r7   rB   r  rL   r  r  rJ   rF   rE   <module>r     sT   # " " " " " "  				                                                                                                             + + + + + +                                     8 8 8 8 8 8 : : : : : :             7,,,,,,))))))555555666666,,,,,,))))))333333000000::::::++++++666666555555222222$$$$$$111111111111666666g!!
 
 
 
 
t 
 
 
 (* ) ) ) ){; {; {; {; {;H {; {; {; {;|    Z   0 0 0 0 0 0rF   