
    ijp                       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 erd 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-m0Z0 d d)l-m1Z1 d d*l-m2Z2 d d+l-m3Z3 d d,l4m5Z5 d d-l6m7Z7 dd.lm8Z8 dd/l9m:Z: dd0l;m<Z< dd1l;m=Z=  ej>        e?          Z@ G d2 d3eA          ZBi ZCd4eDd5<    G d6 d7eB8          ZE G d9 d:e          ZFdCdBZGdS )D    )annotationsN)Any)Callable)Dict)Iterable)List)Mapping)
NamedTuple)Optional)Sequence)Set)Tuple)Type)TYPE_CHECKING)Union)castschema)text   )_autogen)base)_constraint_sig)ComparisonResult   )util)sqla_compat)Literal)TextIO)
Connection)Dialect)CursorResult)	Inspector)ClauseElement)
Executable)ColumnElement)quoted_name)Column)
Constraint)ForeignKeyConstraint)Index)Table)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)clsr6   r8   r:   newtypes        V/var/www/html/crypto-bot/backend/venv/lib/python3.11/site-packages/alembic/ddl/impl.pyr?   zImplMeta.__init__@   s:     --Yu==E!!+.F5'(    N)r6   r7   r8   r9   r:   r;   )__name__
__module____qualname__r?    rD   rC   r5   r5   ?   s(        	 	 	 	 	 	rD   r5   zDict[str, Type[DefaultImpl]]r@   c                  "   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edd+            Zd,d	 ej                    fdd5Z	 ddd7Z	 	 	 	 	 	 	 	 	 	 	 	 dddMZ	 dddQZ	 dddRZddTZddVZ	 dddZZdd[Zdd\Zdd_Zdd`Z ddaZ!ddcZ"dddZ#	 dddjZ$ddmZ%ddpZ&ddsZ'ddvZ(dw Z)dd~Z*d Z+	 dddZ,ddZ-ddZ.d Z/ddZ0ddZ1ddZ2ddZ3d Z4ddZ5ddZ6ddZ7ddZ8ddZ9d Z:ddZ;d,S )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_synonymsrH   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)rT   rU   rW   getra   r[   memor]   rY   r   CommandError)selfrT   rU   rW   rY   r[   r]   s          rC   r?   zDefaultImpl.__init__i   s     $)--ouEE*	((%6D" 	; 'I  	 	 rD   Type[DefaultImpl]c                &    t           |j                 S N)r@   name)rA   rT   s     rC   get_by_dialectzDefaultImpl.get_by_dialect   s    gl##rD   r   r7   c                    | j         J | j                             |dz              | j                                          d S )Nz

)r[   writeflush)re   r   s     rC   static_outputzDefaultImpl.static_output   sG    !---  ///  """""rD   batch_opr3   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.

        FrH   )re   ro   s     rC   requires_recreate_in_batchz&DefaultImpl.requires_recreate_in_batch   s	     urD   
batch_implr2   tabler,   c                    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.

        NrH   )re   rr   rs   s      rC   prep_table_for_batchz DefaultImpl.prep_table_for_batch         rD   c                    | j         S rh   )rU   re   s    rC   bindzDefaultImpl.bind   s
    rD   N	constructUnion[Executable, str]execution_optionsOptional[dict[str, Any]]multiparamsSequence[dict]paramsOptional[CursorResult]c                   t          |t                    rt          |          }| j        r|s|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          |t&                    sJ ||fz  }|                    ||          S )	Nz+Execution arguments not allowed with as_sqlra   T)compile_kwargsrT   	z    rH   )
isinstancer7   r   rW   	Exceptionra   r   
DDLElementdictr   r$   compilerT   rn   replacestripcommand_terminatorrU   r|   tupleexecute)re   rz   r|   r~   r   
compile_kwcompiledconns           rC   _execzDefaultImpl._exec   s    i%% 	(YI; 	8 Of O MNNN !  *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 )!+u55555y(<<	;777rD   sqlc                2    |                      ||           d S rh   )r   )re   r   r|   s      rC   r   zDefaultImpl.execute   s    
 	

3)*****rD   
table_namecolumn_namenullableserver_default%Union[_ServerDefault, Literal[False]]ri   Optional[str]type_Optional[TypeEngine]r   autoincrementcomment$Optional[Union[str, Literal[False]]]existing_commentexisting_typeexisting_server_defaultOptional[_ServerDefault]existing_nullableexisting_autoincrementkwr   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)re   r   r   r   r   ri   r   r   r   r   r   r   r   r   r   r   cls_s                    rC   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  
 
 
 
 
 rD   columnColumn[Any]!Optional[Union[str, quoted_name]]c                Z    |                      t          j        |||                     d S Nr   )r   r   	AddColumn)re   r   r   r   s       rC   
add_columnzDefaultImpl.add_columnH  s-     	

4>*fVDDDEEEEErD   c                Z    |                      t          j        |||                     d S r   )r   r   
DropColumn)re   r   r   r   r   s        rC   drop_columnzDefaultImpl.drop_columnP  s-     	

4?:vfEEEFFFFFrD   constc                    |j         |                     |           r)|                     t          j        |                     d S d S rh   )_create_ruler   r   AddConstraintre   r   s     rC   add_constraintzDefaultImpl.add_constraintY  sI    %););D)A)A%JJv+E2233333 &%rD   r)   c                T    |                      t          j        |                     d S rh   )r   r   DropConstraintr   s     rC   drop_constraintzDefaultImpl.drop_constraint]  s%    

6(//00000rD   old_table_namenew_table_nameUnion[str, quoted_name]c                Z    |                      t          j        |||                     d S r   )r   r   RenameTable)re   r   r   r   s       rC   rename_tablezDefaultImpl.rename_table`  s9     	

^^FKKK	
 	
 	
 	
 	
rD   c                   |j                             || j        d|            |                     t	          j        |                     |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_createrU   r   r   CreateTableafter_createindexesCreateIndexrT   supports_commentsinline_commentsr   create_table_commentcolumnscreate_column_comment)re   rs   indexwith_commentr   r   s         rC   create_tablezDefaultImpl.create_tablej  s6   $$4?u$ 	% 	
 	
 	
 	

6%e,,---##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 	3rD   c                    |j                             || j        d|            |                     t	          j        |                     |j                             || j        d|            d S r   )r   before_droprU   r   r   	DropTable
after_dropre   rs   s     rC   
drop_tablezDefaultImpl.drop_table  s    ""4?u$ 	# 	
 	
 	
 	

6#E**+++!!4?u$ 	" 	
 	
 	
 	
 	
rD   r   r+   c                P    |                      t          j        |fi |           d S rh   )r   r   r   re   r   r   s      rC   create_indexzDefaultImpl.create_index  s-    

6%e22r2233333rD   c                T    |                      t          j        |                     d S rh   )r   r   SetTableCommentr   s     rC   r   z DefaultImpl.create_table_comment  s%    

6)%0011111rD   c                T    |                      t          j        |                     d S rh   )r   r   DropTableCommentr   s     rC   drop_table_commentzDefaultImpl.drop_table_comment  s%    

6*51122222rD   ColumnElement[Any]c                T    |                      t          j        |                     d S rh   )r   r   SetColumnComment)re   r   s     rC   r   z!DefaultImpl.create_column_comment  s%    

6*62233333rD   c                P    |                      t          j        |fi |           d S rh   )r   r   	DropIndexr   s      rC   
drop_indexzDefaultImpl.drop_index  s-    

6#E00R0011111rD   TUnion[TableClause, Table]rows
List[dict]multiinsertc           
     4   t          |t                    st          d          |r*t          |d         t                    st          d          | j        rW|D ]R}|                      t          j                  j        di fd|	                                D                        Sd S |rd|r+|                     t          j                  |           d S |D ]6}|                      t          j                  j        di |           5d 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vrs   s      rC   
<dictcomp>z+DefaultImpl.bulk_insert.<locals>.<dictcomp>  sx     	 	 	 !%1  $. !;#A$ $ #{= !1EGAJO        "#	 	 	rD   )r~   rH   )
r   list	TypeErrorr   rW   r   r   _insert_inlinevaluesitems)re   rs   r   r   rows    `   rC   bulk_insertzDefaultImpl.bulk_insert  s    $%% 	=O,,, 	=*T!Wd33 	=;<<<; 	  

<K.u55<  	 	 	 	 ),			 	 	        	 JJ#2599t        $  

DK6u==DKKsKK   	 	 rD   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[^(),]+=)rT   type_compilerprocessr>   lowerrefindallmatchappendr	  splitr   kwargsargs)re   r   
definitiontokensterm_tokens
paren_termtokenr   termkeyvals              rC   _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rD   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 rH   )r  )r   ts     rC   	<setcomp>z=DefaultImpl._column_types_match.<locals>.<listcomp>.<setcomp>  s     ...1QWWYY...rD   rH   )r   batchs     rC   
<listcomp>z3DefaultImpl._column_types_match.<locals>.<listcomp>  s'    OOO5.....OOOrD    F)token0rO   joinr  issubset)re   r  r   synonymsinspector_all_termsmetadata_all_termsr&  s          rC   _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	
 urD   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
        Fr(  r   T)	lenr  r  r*  r  rP   r  searchgroup)re   r0  r1  inspmetaregmimms           rC   _column_args_matchzDefaultImpl._column_args_match  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trD   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/  r;  )re   r<  r=  r  r   s        rC   compare_typezDefaultImpl.compare_type  sm      556FGG44_EE''(8/JJ 	4&&'7II 	4urD   c                    ||k    S rh   rH   )re   r<  r=  rendered_metadata_defaultrendered_inspector_defaults        rC   compare_server_defaultz"DefaultImpl.compare_server_default.  s     *-FFFrD   conn_uniquesSet[UniqueConstraint]conn_indexes
Set[Index]metadata_unique_constraintsmetadata_indexesc                    d S rh   rH   )re   rD  rF  rH  rI  s        rC   correct_for_autogen_constraintsz+DefaultImpl.correct_for_autogen_constraints7  s	     	rD   c                b    |j         j        |j        urt          |d         |          |d<   d S d S )Nexpr)r>   _type_affinityr   )re   existingexisting_transfernew_types       rC   cast_for_batch_migratez"DefaultImpl.cast_for_batch_migrate@  sC    ='x/FFF(,!&)8) )f%%% GFrD   rM  r$   is_server_defaultc                ^    ddd}t          |                    | j        |                    S )zdRender a SQL expression that is typically a server default,
        index expression, etc.

        TF)ra   include_table)rT   r   )r7   r   rT   )re   rM  rS  r   r   s        rC   render_ddl_sql_exprzDefaultImpl.render_ddl_sql_exprF  s8     (,eDD
LLjLII
 
 	
rD   	inspectorr#   r   c                    | j         S rh   )autogen_column_reflect)re   rW  s     rC   _compat_autogen_column_reflectz*DefaultImpl._compat_autogen_column_reflectT  s    **rD   conn_fksSet[ForeignKeyConstraint]metadata_fksc                    d S rh   rH   )re   r[  r]  s      rC   correct_for_autogen_foreignkeysz+DefaultImpl.correct_for_autogen_foreignkeysW  s	    
 	rD   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.

        NrH   )re   rW  rs   column_infos       rC   rY  z"DefaultImpl.autogen_column_reflect^  rv   rD   c                    dS )zA hook called when :meth:`.EnvironmentContext.run_migrations`
        is called.

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

        NrH   rx   s    rC   start_migrationszDefaultImpl.start_migrationsg  rv   rD   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rn   r   rx   s    rC   
emit_beginzDefaultImpl.emit_begino  s&     	7T%<<=====rD   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`.

        COMMITNrf  rx   s    rC   emit_commitzDefaultImpl.emit_commity  s&     	8d&==>>>>>rD   type_objr/   autogen_contextr1   Union[str, Literal[False]]c                    dS NFrH   )re   rk  rl  s      rC   render_typezDefaultImpl.render_type  s	     urD   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getattrrX   adddifference_updaterS   )re   metadata_identityinspector_identitydiffignoredmeta_alwaysinspector_alwayss          rC   _compare_identity_defaultz%DefaultImpl._compare_identity_default  s     2 ""	
 
 
g /4@@"#5xFF%5 6 666HHXt9:::
 JJM$011T:L5M5MM
 	
rD   metadata_indexreflected_indexc                r    t          |j                  }t          |j                  }||k    rd| d| S d S )Nzunique=z to unique=)rX   unique)re   r  r  conn_uniquemeta_uniques        rC   _compare_index_uniquez!DefaultImpl._compare_index_unique  sJ     ?122>011+%%B[BB[BBB4rD   
constraint_autogen._Copts_constraint_sig[_autogen._C]c                *    t          j        d| |fi |S )NTr   from_constraintre   r  r  s      rC   _create_metadata_constraint_sigz+DefaultImpl._create_metadata_constraint_sig  s!     .tT:NNNNNrD   c                *    t          j        d| |fi |S ro  r  r  s      rC    _create_reflected_constraint_sigz,DefaultImpl._create_reflected_constraint_sig  s!     .udJOO$OOOrD   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)re   r  r  msg
unique_msgm_sigr_sigsigs           rC   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#)+++rD   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  )re   r  r  metadata_tupreflected_tupmeta_sigconn_sigs          rC   compare_unique_constraintz%DefaultImpl.compare_unique_constraint  s     ;;
 
 == 
 
  ' (x#-6h66H66   $)+++rD   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 rH   )ri   )r   r   s     rC   r  z8DefaultImpl._skip_functional_indexes.<locals>.<dictcomp>   s    @@@a@@@rD   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  ri   r   is_expression_indexr   r   r=   sqlalchemy_versiondiscard)re   rI  rF  conn_indexes_by_nameidxiexs         rC   _skip_functional_indexesz$DefaultImpl._skip_functional_indexes  s    @@<@@@()) 	. 	.Cx///1#66C .	FxF F-1-=F F #."@F F F   !((---	. 	.rD   reflected_objectkindc                .    |                     di           S )Ndialect_options)rb   )re   r  r  s      rC    adjust_reflected_dialect_optionsz,DefaultImpl.adjust_reflected_dialect_options  s      ##$5r:::rD   )rT   r!   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r;   r^   r_   )rT   r!   r^   rf   )r   r7   r^   r_   )ro   r3   r^   rX   )rr   r2   rs   r,   r^   r_   )r^   rV   )
rz   r{   r|   r}   r~   r   r   r;   r^   r   rh   )r   r{   r|   r}   r^   r_   )NFNNNNFNNNNN) r   r7   r   r7   r   rZ   r   r   ri   r   r   r   r   r   r   rZ   r   r   r   r   r   r   r   r   r   rZ   r   rZ   r   r   r^   r_   )r   r7   r   r   r   r   r^   r_   )r   r7   r   r   r   r   r^   r_   )r   r   r^   r_   )r   r)   r^   r_   )r   r7   r   r   r   r   r^   r_   )rs   r,   r^   r_   )r   r+   r   r   r^   r_   )r   r   r^   r_   )T)rs   r   r   r   r   rX   r^   r_   )r   r(   r^   r	  )r  r	  r   r	  r^   rX   )r0  r	  r1  r	  r^   rX   )r<  r   r=  r(   r^   rX   )
rD  rE  rF  rG  rH  rE  rI  rG  r^   r_   )F)rM  r$   rS  rX   r   r   r^   r7   )rW  r#   r^   r   )r[  r\  r]  r\  r^   r_   )r^   r_   )rk  r/   rl  r1   r^   rm  )r  r+   r  r+   r^   r   )r  r  r  r   r^   r  )r  r+   r  r+   r^   r   )r  r-   r  r-   r^   r   )r  r;   r  r7   r^   r;   )<rE   rF   rG   __doc__r=   rY   r   rO   __annotations__rP   rS   r?   classmethodrj   rn   rq   ru   propertyry   r   immutabledictr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r/  r;  r?  rC  rK  rR  rV  rZ  r_  rY  rc  rg  rj  rp  r  r  r  r  r  r  r  r  rH   rD   rC   rJ   rJ   O   s        
 
 K,5y+A*CMCCCC&(((((
 .BAAAA   4 $ $ $ [$# # # #
   	 	 	 	    X 7;&(!3!3!5!5'8 '8 '8 '8 '8X 7;+ + + + + $(@E"&* $(,8=*..2<@,015n n n n nh 59	F F F F F !%	G G G G G4 4 4 41 1 1 1 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 !	$ $ $ $ $L& & & &P   ,   B    G G G      >C
 
 
 
 
+ + + +        > > > >? ? ? ?   

 
 
8   O O O O
P P P P
), ), ), ),V, , , ,8. . ."; ; ; ; ; ;rD   rJ   )	metaclassc                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )	r	  r7   r)  z	List[str]r  r  zDict[str, str]r  N)rE   rF   rG   r  rH   rD   rC   r	  r	    s<         KKKOOOrD   r	  metadata_io-Union[schema.Identity, schema.Sequence, None]inspector_io
default_io'Union[schema.Identity, schema.Sequence]rs  Set[str]c           
        t          j        |           }t          j        |          }t                      t                      d	fd} |||t          j        |          t          |                              |                     t           j        r@ |t          | di           t          |di           |j        t          |di                      fS )
N	meta_dictMapping[str, Any]	insp_dictdefault_dictattrsIterable[str]c                >   t          |                              
          D ]x}|                     |          }|                    |          }||k    rF|                    |          }||k    r	                    |           c                    |           yd S rh   )set
differencerb   rw  )r  r  r  r  attr
meta_value
insp_valuedefault_valuer{  ignored_attrrs  s           rC   check_dictsz._compare_identity_options.<locals>.check_dicts,  s     JJ))$// 	# 	#D"t,,J"t,,JZ'' , 0 0 6 6.. $$T****HHTNNN	# 	#rD   dialect_kwargs)r  r  r  r  r  r  r  r  )r   _get_identity_options_dictr  unionidentity_has_dialect_kwargsrv  r  )	r  r  r  rs  meta_dinsp_dr  r{  r  s	      `   @@rC   rt  rt    s    3K@@F3LAAF55D55L# # # # # # # #  K.z::F&!!	   . 
 	K!1266L"2B77%L"2B77		
 	
 	
 rD   )r  r  r  r  r  r  rs  r  )H
__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   sqlalchemy.enginer    r!   sqlalchemy.engine.cursorr"   sqlalchemy.engine.reflectionr#   sqlalchemy.sqlr$   r%   sqlalchemy.sql.elementsr&   r'   sqlalchemy.sql.schemar(   r)   r*   r+   r,   r-   sqlalchemy.sql.selectabler.   sqlalchemy.sql.type_apir/   r0   autogenerate.apir1   operations.batchr2   r3   	getLoggerrE   r  r>   r5   r@   r  rJ   r	  rt  rH   rD   rC   <module>r     s0   # " " " " " "  				                                                                                                                         8 8 8 8 8 8 : : : : : :             7,,,,,,))))))555555666666,,,,,,))))))555555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 
 
 
 (* ) ) ) )D; D; D; D; D;H D; D; D; D;N    Z   / / / / / /rD   