
    Ziz                    .   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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/m0Z0 d d+l1m2Z2 d d,l1m3Z3 d d-l4m5Z5 d d.l6m7Z7 d d/l6m8Z8 d d0l6m9Z9 d d1l6m:Z: d d2l;m<Z< d d3l=m>Z> dd4lm?Z? dd5l@mAZA dd6lBmCZC dd7lBmDZD e+e-z  e,z  e.z  ZE ej                  eG      ZH G d8 d9eI      ZJi ZKd:eLd;<    G d< d=eJ>      ZM G d? d@e      ZN	 	 	 	 	 	 	 	 dBdAZOy)C    )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)ReflectedForeignKeyConstraint)ReflectedIndex)ReflectedPrimaryKeyConstraint)ReflectedUniqueConstraint)	Inspector)ClauseElement)
Executable)quoted_name)
Constraint)ForeignKeyConstraint)Index)UniqueConstraint)TableClause)
TypeEngine)_ServerDefaultType)AutogenContext)ApplyBatchImpl)BatchOperationsImplc                       e Zd Z	 	 	 	 	 	 ddZy)ImplMetac                V    t         j                  | |||      }d|v r| t        |d   <   |S )N__dialect__)type__init___impls)cls	classnamebasesdict_newtypes        L/home/portmadness/app/.venv/lib/python3.12/site-packages/alembic/ddl/impl.pyr?   zImplMeta.__init__L   s4     --Yu=E!+.F5'(    N)rB   strrC   zTuple[Type[DefaultImpl]]rD   Dict[str, Any])__name__
__module____qualname__r?    rG   rF   r;   r;   K   s#    		 (	 		rG   r;   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<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 dAdZedBd       ZdCdZ	 	 	 	 	 	 	 	 	 	 dDdZ	 	 	 	 dEdZ	 	 	 	 	 	 dFdZedGd       Zdd ej*                         f	 	 	 	 	 	 	 	 	 dHdZ	 dI	 	 	 	 	 dJdZddddddddddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dKdZddddd	 	 	 	 	 	 	 	 	 	 	 	 	 dLdZddd	 	 	 	 	 	 	 	 	 dMdZdNdZdOd Z	 dI	 	 	 	 	 	 	 dPd!ZdQd"ZdQd#ZdRd$Z dSd%Z!dSd&Z"dTd'Z#dRd(Z$	 dU	 	 	 	 	 	 	 dVd)Z%dWd*Z&	 	 	 	 	 	 dXd+Z'	 	 	 	 	 	 dYd,Z(	 	 	 	 	 	 dZd-Z)d. Z*	 	 	 	 	 	 	 	 	 	 d[d/Z+d0 Z,	 d\	 	 	 	 	 	 	 d]d1Z-d^d2Z.	 	 	 	 	 	 d_d3Z/d4 Z0d`d5Z1d`d6Z2d`d7Z3	 	 	 	 	 	 dad8Z4d9 Z5	 	 	 	 	 	 dbd:Z6	 	 	 	 	 	 dcd;Z7	 	 	 	 	 	 dcd<Z8	 	 	 	 	 	 ddd=Z9	 	 	 	 	 	 ded>Z:d? Z;	 	 	 	 	 	 dfd@Z<y)g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_synonymsrM   zSequence[str]type_arg_extract)orderon_nullzTuple[str, ...]identity_attrs_ignorec                    || _         || _        || _        |j                  dd      | _        || _        i | _        || _        ||| _        | j                  r"| j                  st        j                  d      y y )Nliteral_bindsFz3Can't use literal_binds setting without as_sql mode)dialect
connectionas_sqlgetrZ   output_buffermemocontext_optstransactional_ddlr!   CommandError)selfr[   r\   r]   rb   r_   ra   s          rF   r?   zDefaultImpl.__init__t   s     $)--ouE*	((%6D";;''I   rG   c                (    t         |j                     S N)r@   name)rA   r[   s     rF   get_by_dialectzDefaultImpl.get_by_dialect   s    gll##rG   c                    | j                   J | j                   j                  |dz          | j                   j                          y )Nz

)r_   writeflush)rd   r   s     rF   static_outputzDefaultImpl.static_output   s>    !!---  /  "rG   c          
         t        |t               t        dt        d      d      |      }|r|j	                  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)rg   )r   r   r   r   append_constraintr   )rd   version_tableversion_table_schemaversion_table_pkkwvts         rF   version_table_implzDefaultImpl.version_table_impl   sW    & J=&*u='	
   $!=/(> 	rG   c                     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.

        FrM   )rd   batch_ops     rF   requires_recreate_in_batchz&DefaultImpl.requires_recreate_in_batch   s     rG   c                     y)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.

        NrM   )rd   
batch_impltables      rF   prep_table_for_batchz DefaultImpl.prep_table_for_batch       rG   c                    | j                   S rf   )r\   rd   s    rF   bindzDefaultImpl.bind   s    rG   Nc                   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|}| j                  t        |      j                  dd      j                         | j                   z          y | j"                  }|J |r |j$                  d	i |}|r|t	        d      |r|j'                  ||      S |j'                  ||      S )
Nz&SQL parameters not allowed with as_sqlrZ   T)compile_kwargsr[   	z    z2Can't send params and multiparams at the same timerM   )
isinstancerH   r   r]   	TypeErrorrZ   r   
DDLElementdictr   r-   compiler[   rl   replacestripcommand_terminatorr\   execution_optionsexecute)rd   	constructr   multiparamsparams
compile_kwcompiledconns           rF   _execzDefaultImpl._exec   sA    i%YI;;&& HII !!*6,,+ "/41HI

!)];;;(y((LLLHH%%dF399;))* ??D### -t--B0AB+1H  ||I{;;||Iv66rG   c                (    | j                  ||       y rf   )r   )rd   sqlr   s      rF   r   zDefaultImpl.execute  s    
 	

3)*rG   )rp   server_defaultrg   type_r   autoincrementcommentexisting_commentexisting_typeexisting_server_defaultexisting_nullableexisting_autoincrementc                  ||t        j                  dd       |,| j                  t        j                  ||||||||
             |duri }t        j                  ||      rt        j                  }n<t        j                  ||      rt        j                  }| |d<   nt        j                  }| j                   ||||f|||||
d|       |,| j                  t        j                  ||||||||
             |	dur,| j                  t        j                  |||	|||||
             |,| j                  t        j                  |||||||             y y )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)rd   
table_namecolumn_namerp   r   rg   r   r   r   r   r   r   r   r   r   rv   cls_s                    rF   alter_columnzDefaultImpl.alter_column	  s   . $(>(JII,
 JJ##!"/,C&7%5	 &B 66 7 1188 7 11!6
))JJ"
 ""/,C&7%5
 
 JJ!"/,C&7%5	 %JJ""!"/,C&7%5	 JJ!"/,C&7
 rG   r   if_not_existsinline_referencesinline_primary_keyc          
     X    | j                  t        j                  ||||||             y )Nr   )r   r   	AddColumn)rd   r   columnr   r   r   r   s          rF   
add_columnzDefaultImpl.add_column~  s.     	

NN+"3#5		
rG   r   	if_existsc               T    | j                  t        j                  ||||             y )Nr   )r   r   
DropColumn)rd   r   r   r   r   rv   s         rF   drop_columnzDefaultImpl.drop_column  s%     	

OOF6Y	
rG   c                    |j                   |j                  |       rHt        j                  r|j                  dd       | j	                  t        j                  |fi |       y y )Nisolate_from_tableT)_create_ruler"   sqla_2_1
setdefaultr   r   AddConstraintrd   constrv   s      rF   add_constraintzDefaultImpl.add_constraint  sU    %););D)A##2D9JJv++E8R89	 *BrG   c                N    | j                  t        j                  |fi |       y rf   )r   r   DropConstraintr   s      rF   drop_constraintzDefaultImpl.drop_constraint  s    

6((5"56rG   c                R    | j                  t        j                  |||             y )Nr   )r   r   RenameTable)rd   old_table_namenew_table_namer   s       rF   rename_tablezDefaultImpl.rename_table  s"     	

^^FK	
rG   c                d   |j                   j                  || j                  d|        | j                  t	        j
                  |fi |       |j                   j                  || j                  d|        |j                  D ]&  }| j                  t	        j                  |             ( | j                  j                  xr | j                  j                   }|j                  }|r|r| j                  |       |j                  D ]%  }|j                  }|s|s| j                  |       ' y NF)
checkfirst_ddl_runner)dispatchbefore_creater\   r   r   CreateTableafter_createindexesCreateIndexr[   supports_commentsinline_commentsr   create_table_commentcolumnscreate_column_comment)rd   r~   rv   indexwith_commentr   r   s          rF   create_tablezDefaultImpl.create_table  s   $$4??u$ 	% 	
 	

6%%e2r23##4??u$ 	$ 	
 ]] 	2EJJv))%01	2 LL**O4<<3O3O/O 	 --|%%e,mm 	3FnnG<**62	3rG   c                    |j                   j                  || j                  d|        | j                  t	        j
                  |fi |       |j                   j                  || j                  d|        y r   )r   before_dropr\   r   r   	DropTable
after_drop)rd   r~   rv   s      rF   
drop_tablezDefaultImpl.drop_table  sh    ""4??u$ 	# 	
 	

6##E0R01!!4??u$ 	" 	
rG   c                N    | j                  t        j                  |fi |       y rf   )r   r   r   rd   r   rv   s      rF   create_indexzDefaultImpl.create_index  s    

6%%e2r23rG   c                L    | j                  t        j                  |             y rf   )r   r   SetTableCommentrd   r~   s     rF   r   z DefaultImpl.create_table_comment  s    

6))%01rG   c                L    | j                  t        j                  |             y rf   )r   r   DropTableCommentr   s     rF   drop_table_commentzDefaultImpl.drop_table_comment  s    

6**512rG   c                L    | j                  t        j                  |             y rf   )r   r   SetColumnComment)rd   r   s     rF   r   z!DefaultImpl.create_column_comment  s    

6**623rG   c                N    | j                  t        j                  |fi |       y rf   )r   r   	DropIndexr   s      rF   
drop_indexzDefaultImpl.drop_index  s    

6##E0R01rG   c                   t        |t              st        d      |rt        |d   t              st        d      | j                  r|D ]  }| j                   |j                         j                         j                  di |j                         D ci c]Q  \  }}|t        |t        j                        s/t        j                  |||j                  |   j                        n|S c}}        y |rw|r0| j                  |j                         j                         |       y |D ]?  }| j                   |j                         j                         j                  di |       A y y c c}}w )NzList expectedr   zList of dictionaries expected)r   )r   rM   )r   listr   r   r]   r   insertinlinevaluesitemsr"   _literal_bindparamcr>   )rd   r~   rowsmultiinsertrowkvs          rF   bulk_insertzDefaultImpl.bulk_insert  sN    $%O,,*T!Wd3;<<;; 

ELLNVXV ),		 !%1  (2$%{'E'E(" !, > >$%q
!" &''( JJu||~446DJI# J

#A5<<>#8#8#:#A#A#HC#HIJ	 s   AE2c                R   | j                   j                  j                  |j                        j	                         }t        j                  d|      }g }d }|D ],  }t        j                  d|      r|}|j                  |       . t        |d   |dd  g i       }|rt        j                  d|      D ]o  }d|v r@|j                  d      \  }	}
|
j                         |j                  |	j                         <   G|j                  j                  |j                                q |S )Nz[\w\-_]+|\(.+?\)z^\(.*\)$r   r   z[^(),]+=)r[   type_compilerprocessr>   lowerrefindallmatchappendParamssplitr   kwargsargs)rd   r   
definitiontokensterm_tokens
paren_termtokenr   termkeyvals              rF   _tokenize_column_typez!DefaultImpl._tokenize_column_type  s    \\//77DJJL
 JJ':JG!#
 	*ExxU+"
""5)		* AABR@

9j9 5$;#zz#HC14FMM#))+.KK&&tzz|45 rG   c           	        |j                   |j                   k(  ry| j                  D cg c]   }|D ch c]  }|j                          c}" }}}dj                  |j                   g|j                  z         }dj                  |j                   g|j                  z         }|D ]>  }||hj                  |      s(|j                   |j                   hj                  |      s> y yc c}w c c}}w )NT F)token0rT   r
  joinr  issubset)rd   inspector_paramsmetadata_paramsbatchtsynonymsinspector_all_termsmetadata_all_termss           rF   _column_types_matchzDefaultImpl._column_types_match3  s     ""o&<&<<<@<N<NO5.1QWWY.OO!hh$$%(8(?(??
 !XX##$'='==
  	E#%78AA%H ''&&M huoM 	  /Os   	C-C(
C-(C-c                   t        |j                        t        |j                        k(  r|j                  |j                  k7  ryt        |j                        t        |j                        k(  r|j                  |j                  k7  rydj                  |j                        j	                         }dj                  |j                        j	                         }| j
                  D ]Y  }t        j                  ||      }t        j                  ||      }|s2|s5|j                  d      |j                  d      k7  sY y y)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
  rU   r  searchgroup)rd   inspected_paramsmeta_paramsinspmetaregmimms           rF   _column_args_matchzDefaultImpl._column_args_matchI  s    ""#s+;+B+B'CC""&6&=&==   !S)9)>)>%??  $4$9$99xx(//0668xx**+113(( 	C3%B3%BbRXXa[BHHQK7	 rG   c                    | j                  |      }| j                  |      }| j                  ||      sy| j                  ||      syy)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(  r4  )rd   inspector_columnmetadata_columnr!  r"  s        rF   compare_typezDefaultImpl.compare_typej  sQ      556FG44_E''(8/J&&'7IrG   c                    ||k7  S rf   rM   )rd   r6  r7  rendered_metadata_defaultrendered_inspector_defaults        rF   compare_server_defaultz"DefaultImpl.compare_server_defaultz  s     *-FFFrG   c                     y rf   rM   )rd   conn_uniquesconn_indexesmetadata_unique_constraintsmetadata_indexess        rF   correct_for_autogen_constraintsz+DefaultImpl.correct_for_autogen_constraints  s     	rG   c                n    |j                   j                  |j                  urt        |d   |      |d<   y y )Nexpr)r>   _type_affinityr   )rd   existingexisting_transfernew_types       rF   cast_for_batch_migratez"DefaultImpl.cast_for_batch_migrate  s:    ==''x/F/FF(,!&)8)f% GrG   c                X    ddd}t        |j                  | j                  |            S )zdRender a SQL expression that is typically a server default,
        index expression, etc.

        TF)rZ   include_table)r[   r   )rH   r   r[   )rd   rD  is_server_defaultrv   r   s        rF   render_ddl_sql_exprzDefaultImpl.render_ddl_sql_expr  s/     (,eD
LLjLI
 	
rG   c                    | j                   S rf   )autogen_column_reflect)rd   	inspectors     rF   _compat_autogen_column_reflectz*DefaultImpl._compat_autogen_column_reflect  s    ***rG   c                     y rf   rM   )rd   conn_fksmetadata_fkss      rF   correct_for_autogen_foreignkeysz+DefaultImpl.correct_for_autogen_foreignkeys  s    
 	rG   c                     y)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.

        NrM   )rd   rP  r~   column_infos       rF   rO  z"DefaultImpl.autogen_column_reflect  r   rG   c                     y)zA hook called when :meth:`.EnvironmentContext.run_migrations`
        is called.

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

        NrM   r   s    rF   start_migrationszDefaultImpl.start_migrations  r   rG   c                @    | j                  d| j                  z          y)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rl   r   r   s    rF   
emit_beginzDefaultImpl.emit_begin  s     	7T%<%<<=rG   c                @    | j                  d| j                  z          y)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`.

        COMMITNr\  r   s    rF   emit_commitzDefaultImpl.emit_commit  s     	8d&=&==>rG   c                     yNFrM   )rd   type_objautogen_contexts      rF   render_typezDefaultImpl.render_type  s     rG   c                T   t        ||t        j                         dh      \  }}t        |dd       }t        |dd       }t	        |      t	        |      k7  r|j                  d       |j                  | j                         ||t	        |      xs t	        |      t	        |      k7  fS )Nalways)skip)_compare_identity_optionsr   Identitygetattrbooladddifference_updaterX   )rd   metadata_identityinspector_identitydiffignoredmeta_alwaysinspector_alwayss          rF   _compare_identity_defaultz%DefaultImpl._compare_identity_default  s     2OO	
g /4@"#5xF%5 66HHXt99:
 JM$01T:L5MM
 	
rG   c                r    t        |j                        }t        |j                        }||k7  rd| d| S y )Nzunique=z to unique=)rl  unique)rd   metadata_indexreflected_indexconn_uniquemeta_uniques        rF   _compare_index_uniquez!DefaultImpl._compare_index_unique  sB     ?112>001+%[M[MBBrG   c                2    t        j                  d| |fi |S )NTr   from_constraintrd   
constraintoptss      rF   _create_metadata_constraint_sigz+DefaultImpl._create_metadata_constraint_sig  s     ..tT:NNNrG   c                2    t        j                  d| |fi |S rb  r~  r  s      rF    _create_reflected_constraint_sigz,DefaultImpl._create_reflected_constraint_sig  s     ..udJO$OOrG   c                :   g }| j                  ||      }|r|j                  |       | j                  |      }| j                  |      }t	        j
                  |      sJ t	        j
                  |      sJ ||fD ]/  }|j                  st        j                  d|j                         1 |j                  |j                  k7  r+|j                  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)rd   rx  ry  msg
unique_msgm_sigr_sigsigs           rF   compare_indexeszDefaultImpl.compare_indexes  s    //O

 JJz"44^D55oF$$U+++$$U+++ %< 	C"": II	 !3!33JJe001e6H6H5IJ #--c22#))++rG   c                    | j                  |      }| j                  |      }|j                  }|j                  }||k7  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  )rd   metadata_constraintreflected_constraintmetadata_tupreflected_tupmeta_sigconn_sigs          rF   compare_unique_constraintz%DefaultImpl.compare_unique_constraint/  s     ;;
 == 
  '' ((x#--hZtH:6  $))++rG   c           
     T   |D ci c]  }|j                   | }}t        |      D ]{  }|j                   |v rt        j                  |      }|s*t	        j
                  d|j                   d| j                  dt        j                   d       |j                  |       } y c c}w )Nz@autogenerate skipping metadata-specified expression-based index z
; dialect z under SQLAlchemy z6 can't reflect these indexes so they can't be compared)	rg   r   r"   is_expression_indexr!   r   r=   sqlalchemy_versiondiscard)rd   rA  r?  r   conn_indexes_by_nameidxiexs          rF   _skip_functional_indexesz$DefaultImpl._skip_functional_indexesK  s    3?@a	@@() 	.Cxx//11#6C		.xxl*T-=-=,@ A""-"@"@!A BFF !((-	.  As   B%c                &    |j                  di       S )Ndialect_options)r^   )rd   reflected_objectkinds      rF    adjust_reflected_dialect_optionsz,DefaultImpl.adjust_reflected_dialect_options\  s      ##$5r::rG   )r[   r&   r\   Optional[Connection]r]   rl  rb   Optional[bool]r_   zOptional[TextIO]ra   rI   returnNone)r[   r&   r  zType[DefaultImpl])r   rH   r  r  )
rs   rH   rt   Optional[str]ru   rl  rv   r   r  r   )rz   r9   r  rl  )r}   r8   r~   r   r  r  )r  r  )
r   Union[Executable, str]r   zOptional[Mapping[str, Any]]r   z%Optional[Sequence[Mapping[str, Any]]]r   Mapping[str, Any]r  zOptional[CursorResult]rf   )r   r  r   zOptional[dict[str, Any]]r  r  ) r   rH   r   rH   rp   r  r   3Optional[Union[_ServerDefaultType, Literal[False]]]rg   r  r   Optional[TypeEngine]r   r  r   r  r   z$Optional[Union[str, Literal[False]]]r   r  r   r  r   r  r   r  r   r  rv   r   r  r  )r   rH   r   Column[Any]r   !Optional[Union[str, quoted_name]]r   r  r   r  r   r  r  r  )
r   rH   r   r  r   r  r   r  r  r  )r   r   rv   r   r  r  )r   r0   rv   r   r  r  )r   rH   r   zUnion[str, quoted_name]r   r  r  r  )r~   r   rv   r   r  r  )r   r2   rv   r   r  r  )r~   r   r  r  )r   r  r  r  )T)r~   zUnion[TableClause, Table]r   z
List[dict]r  rl  r  r  )r   r   r  r  )r!  r  r"  r  r  rl  )r-  r  r.  r  r  rl  )r6  r  r7  r   r  rl  )
r>  Set[UniqueConstraint]r?  
Set[Index]r@  r  rA  r  r  r  )F)rD  r-   rL  rl  rv   r   r  rH   )rP  r,   r  r   )rS  Set[ForeignKeyConstraint]rT  r  r  r  )r  r  )rc  r5   rd  r7   r  zUnion[str, Literal[False]])rx  r2   ry  r2   r  r  )r  z_autogen._Cr  r   r  z_constraint_sig[_autogen._C])rx  r2   ry  r2   r  r   )r  r3   r  r3   r  r   )r  _ReflectedConstraintr  rH   r  rI   )=rJ   rK   rL   __doc__r=   rb   r   rT   __annotations__rU   rX   r?   classmethodrh   rl   rx   r{   r   propertyr   r!   immutabledictr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r(  r4  r8  r<  rB  rI  rM  rQ  rU  rO  rY  r]  r`  re  ru  r|  r  r  r  r  r  r  rM   rG   rF   rO   rO   [   s   
 K,5y+A*CM'C&(m(
 .B?A ) 	
 * ( % 
4 $ $#
    ,	 
     
 D+		(	16			   :>=A$6D$6$6$8+7)+7 7+7 ;	+7
 "+7 
 +7` 7;+#+ 4+ 
	+ $( "&* $(,8=*..2 ,015)ss s
 !s
s s $s s &s 6s (s ,s "
!s& *'s( !/)s* +s, 
-st 59(,,0-1

 

 2
 &
 *
 +
 

4 !%$(

 

 
 "
 

:7 59	

 0
 2	

 

3.
42342 !	$J($J $J 	$J
 
$JL&P &9?	, &5;	B +>D	 G+ ! &;	
 % 
 >C
!
6:
JM
	
++ 0 
	>?"5C	#

8#6;	O%O/2O	%O
P%P/2P	%P
),), ), 
	),V,-, /, 
	,8."; 4;<?;	;rG   rO   )	metaclassc                  6    e Zd ZU ded<   ded<   ded<   ded<   y)	r  rH   r  z	List[str]r  r  zDict[str, str]r  N)rJ   rK   rL   r  rM   rG   rF   r  r  b  s    K
OrG   r  c           
        t        j                  |       }t        j                  |      }t               t               	 	 	 	 	 	 	 	 dfd} |||t        j                  |      t        |      j                  |             t         j                  rDt        |d      sJ  |t        | di       t        |di       |j                  t        |di              fS )Nc                   t        |      j                  
      D ]c  }| j                  |      }|j                  |      }||k7  s+|j                  |      }||k(  r	j                  |       Sj                  |       e y rf   )set
differencer^   rm  )	meta_dict	insp_dictdefault_dictattrsattr
meta_value
insp_valuedefault_valuerq  ignored_attrrh  s           rF   check_dictsz._compare_identity_options.<locals>.check_dictsx  sx     J))$/ 	#D"t,J"t,JZ' , 0 0 6. $$T*HHTN	#rG   dialect_kwargs)r  r  r  r  r  r  r  zIterable[str])r"   _get_identity_options_dictr  unionidentity_has_dialect_kwargshasattrrk  r  )	metadata_ioinspector_io
default_iorh  meta_dinsp_dr  rq  r  s	      `   @@rF   ri  ri  i  s     33K@F33LAF5D5L#$#$# (# 	#  ..z:F&!	 ..z#3444 	K!126L"2B7%%L"2B7		
 rG   )r  -Union[schema.Identity, schema.Sequence, None]r  r  r  z'Union[schema.Identity, schema.Sequence]rh  zSet[str])P
__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.interfacesr(   r)   r*   r+   sqlalchemy.engine.reflectionr,   sqlalchemy.sqlr-   r.   sqlalchemy.sql.elementsr/   sqlalchemy.sql.schemar0   r1   r2   r3   sqlalchemy.sql.selectabler4   sqlalchemy.sql.type_apir5   r6   autogenerate.apir7   operations.batchr8   r9   r  	getLoggerrJ   r  r>   r;   r@   r  rO   r  ri  rM   rG   rF   <module>r     sA   #  	                   +       8 :  ,)5J;JF6,)30:+652(116 	&
'	(
	 $	$  g!
t 
 (*$ )D;H D;NZ 0>0?0 80 	0rG   