o
    ‹åg¯u  ã                   @  sº  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�r2d 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+l2m3Z3 d d,l2m4Z4 d d-l2m5Z5 d d.l2m6Z6 d d/l7m8Z8 d d0l9m:Z: dd1lm;Z; dd2l<m=Z= dd3l>m?Z? dd4l>m@Z@ e AeB¡ZCG d5d6„ d6eDƒZEi ZFd7eGd8< G d9d:„ d:eEd;�ZHG d<d=„ d=eƒZIdGdEdF„ZJdS )Hé    )Ú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)ÚColumnElement)Úquoted_name)Ú
Constraint)ÚForeignKeyConstraint)ÚIndex)ÚUniqueConstraint)ÚTableClause)Ú
TypeEngine)Ú_ServerDefault)ÚAutogenContext)ÚApplyBatchImpl)ÚBatchOperationsImplc                   @  s   e Zd Zd
dd„Zd	S )ÚImplMetaÚ	classnameÚstrÚbasesúTuple[Type[DefaultImpl]]Údict_úDict[str, Any]c                 C  s(   t  | |||¡}d|v r| t|d < |S )NÚ__dialect__)ÚtypeÚ__init__Ú_impls)Úclsr7   r9   r;   Únewtype© rC   úL/var/www/html/flaskapp/venv/lib/python3.10/site-packages/alembic/ddl/impl.pyr?   C   s   zImplMeta.__init__N)r7   r8   r9   r:   r;   r<   )Ú__name__Ú
__module__Ú__qualname__r?   rC   rC   rC   rD   r6   B   s    r6   zDict[str, Type[DefaultImpl]]r@   c                   @  s\  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< dÞdd„Zedßd d!„ƒZdàd$d%„Zdád-d.„Zdâd1d2„Zdãd6d7„Zedäd8d9„ƒZd:d:e ¡ fdådDdE„Z	:dædçdHdI„Z	:		:	:	:	:		:	:	:	:	:dèdéd\d]„Z	:dædêdadb„Z	:dædëdcdd„Zdìdfdg„Zdídidj„Z	:dædîdndo„Zdïdpdq„Zdïdrds„Zdðdvdw„Z dñdxdy„Z!dñdzd{„Z"dòd}d~„Z#dðdd€„Z$	�dódôd†d‡„Z%dõdŠd‹„Z&dödŽd�„Z'd÷d’d“„Z(død–d—„Z)d˜d™„ Z*dùd d¡„Z+d¢d£„ Z,	dúdûd§d¨„Z-düd¬d­„Z.dýd±d²„Z/d³d´„ Z0dþdµd¶„Z1dþd·d¸„Z2dþd¹dº„Z3dÿdÀdÁ„Z4dÂdÃ„ Z5�d dÆdÇ„Z6�ddÌdÍ„Z7�ddÎdÏ„Z8�ddÑdÒ„Z9�ddÖd×„Z:dØdÙ„ Z;�ddÜdÝ„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_synonymsrC   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                 C  s^   || _ || _|| _| dd¡| _|| _i | _|| _|d ur || _| jr+| js-t	 
d¡‚d S d S )NÚliteral_bindsFz3Can't use literal_binds setting without as_sql mode)rR   rS   rU   Úgetr^   rY   Úmemor[   rW   r    ÚCommandError)ÚselfrR   rS   rU   rW   rY   r[   rC   rC   rD   r?   k   s    	ÿþzDefaultImpl.__init__úType[DefaultImpl]c                 C  s
   t |j S ©N)r@   Úname)rA   rR   rC   rC   rD   Úget_by_dialect…   s   
zDefaultImpl.get_by_dialectr   r8   c                 C  s,   | j d usJ ‚| j  |d ¡ | j  ¡  d S )Nz

)rY   ÚwriteÚflush)rb   r   rC   rC   rD   Ústatic_output‰   s   zDefaultImpl.static_outputÚversion_tableÚversion_table_schemaúOptional[str]Úversion_table_pkÚkwr   r   c                K  s@   t |tƒ tdtdƒdd�|d�}|r| td|› 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©re   )r   r   r   r   Úappend_constraintr   )rb   rj   rk   rm   rn   ÚvtrC   rC   rD   Úversion_table_implŽ   s   ü
ÿÿzDefaultImpl.version_table_implÚbatch_opr5   c                 C  ó   dS )zÿReturn 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.

        FrC   )rb   rw   rC   rC   rD   Úrequires_recreate_in_batch°   s   z&DefaultImpl.requires_recreate_in_batchÚ
batch_implr4   Útablec                 C  rx   )zèperform 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.

        NrC   )rb   rz   r{   rC   rC   rD   Úprep_table_for_batch½   ó    z DefaultImpl.prep_table_for_batchc                 C  ó   | j S rd   )rS   ©rb   rC   rC   rD   ÚbindÈ   s   zDefaultImpl.bindNÚ	constructúUnion[Executable, str]Úexecution_optionsúOptional[Mapping[str, Any]]Úmultiparamsú%Optional[Sequence[Mapping[str, Any]]]ÚparamsúMapping[str, Any]úOptional[CursorResult]c                 C  sô   t |tƒr	t|ƒ}| jrO|d us|rtdƒ‚| jr't |tjƒs'tddid�}ni }t	r2t |t
ƒs2J ‚|jd	d| ji|¤Ž}|  t|ƒ dd¡ ¡ | j ¡ d S | j}|d usXJ ‚|rb|jd	i |¤Ž}|rl|d urltdƒ‚|rt| ||¡S | ||¡S )
Nz&SQL parameters not allowed with as_sqlr^   T)Úcompile_kwargsrR   ú	z    z2Can't send params and multiparams at the same timerC   )Ú
isinstancer8   r   rU   Ú	TypeErrorr^   r   Ú
DDLElementÚdictr   r(   ÚcompilerR   ri   ÚreplaceÚstripÚcommand_terminatorrS   rƒ   Úexecute)rb   r�   rƒ   r…   r‡   Ú
compile_kwÚcompiledÚconnrC   rC   rD   Ú_execÌ   s<   
ÿÿÿÿzDefaultImpl._execÚsqlúOptional[dict[str, Any]]c                 C  s   |   ||¡ d S rd   )r˜   )rb   r™   rƒ   rC   rC   rD   r”   ù   s   zDefaultImpl.executeÚ
table_nameÚcolumn_namerq   Úserver_defaultú%Union[_ServerDefault, Literal[False]]re   Útype_úOptional[TypeEngine]r   ÚautoincrementÚcommentú$Optional[Union[str, Literal[False]]]Úexisting_commentÚexisting_typeÚexisting_server_defaultúOptional[_ServerDefault]Úexisting_nullableÚexisting_autoincrementc                 K  s,  |d us|d urt jddd� |d ur#|  tj||||||||
d�¡ |durWi }t ||¡r3tj}nt ||¡rAtj	}| |d< ntj
}|  ||||f|||||
dœ|¤Ž¡ |d urk|  tj||||||||
d�¡ |	dur|  tj|||	|||||
d�¡ |d ur”|  tj|||||||d�¡ 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)rb   r›   rœ   rq   r�   re   rŸ   r   r¡   r¢   r¤   r¥   r¦   r¨   r©   rn   Úcls_rC   rC   rD   Úalter_column   s¨   ýøÿÿÿ
ýø	÷ÿøÿøÿùÿÿzDefaultImpl.alter_columnÚcolumnúColumn[Any]ú!Optional[Union[str, quoted_name]]c                 C  ó   |   tj|||d�¡ d S ©Nr   )r˜   r   Ú	AddColumn)rb   r›   r¹   r   rC   rC   rD   Ú
add_columnp  s   zDefaultImpl.add_columnc                 K  r¼   r½   )r˜   r   Ú
DropColumn)rb   r›   r¹   r   rn   rC   rC   rD   Údrop_columnx  s   zDefaultImpl.drop_columnÚconstc                 C  s,   |j d u s
|  | ¡r|  t |¡¡ d S d S rd   )Ú_create_ruler˜   r   ÚAddConstraint©rb   rÂ   rC   rC   rD   Úadd_constraint�  s   ÿzDefaultImpl.add_constraintr,   c                 C  ó   |   t |¡¡ d S rd   )r˜   r   ÚDropConstraintrÅ   rC   rC   rD   Údrop_constraint…  ó   zDefaultImpl.drop_constraintÚold_table_nameÚnew_table_nameúUnion[str, quoted_name]c                 C  r¼   r½   )r˜   r   ÚRenameTable)rb   rË   rÌ   r   rC   rC   rD   Úrename_tableˆ  s   ÿzDefaultImpl.rename_tablec                 K  s²   |j j|| jd| d� |  tj|fi |¤Ž¡ |j j|| jd| d� |jD ]
}|  t |¡¡ q%| j	j
o8| j	j }|j}|rE|rE|  |¡ |jD ]}|j}|rV|rV|  |¡ qHd S ©NF)Ú
checkfirstÚ_ddl_runner)ÚdispatchÚbefore_createrS   r˜   r   ÚCreateTableÚafter_createÚindexesÚCreateIndexrR   Úsupports_commentsÚinline_commentsr¢   Úcreate_table_commentÚcolumnsÚcreate_column_comment)rb   r{   rn   ÚindexÚwith_commentr¢   r¹   rC   rC   rD   Úcreate_table’  s(   
ÿ
ÿ
ÿ


€ýzDefaultImpl.create_tablec                 K  sH   |j j|| jd| d� |  tj|fi |¤Ž¡ |j j|| jd| d� d S rÐ   )rÓ   Úbefore_droprS   r˜   r   Ú	DropTableÚ
after_drop)rb   r{   rn   rC   rC   rD   Ú
drop_table©  s   
ÿ

ÿzDefaultImpl.drop_tablerÞ   r.   c                 K  ó   |   tj|fi |¤Ž¡ d S rd   )r˜   r   rØ   ©rb   rÞ   rn   rC   rC   rD   Úcreate_index²  ó   zDefaultImpl.create_indexc                 C  rÇ   rd   )r˜   r   ÚSetTableComment©rb   r{   rC   rC   rD   rÛ   µ  rÊ   z DefaultImpl.create_table_commentc                 C  rÇ   rd   )r˜   r   ÚDropTableCommentrê   rC   rC   rD   Údrop_table_comment¸  rÊ   zDefaultImpl.drop_table_commentúColumnElement[Any]c                 C  rÇ   rd   )r˜   r   ÚSetColumnComment)rb   r¹   rC   rC   rD   rÝ   »  rÊ   z!DefaultImpl.create_column_commentc                 K  rå   rd   )r˜   r   Ú	DropIndexræ   rC   rC   rD   Ú
drop_index¾  rè   zDefaultImpl.drop_indexTúUnion[TableClause, Table]Úrowsú
List[dict]Úmultiinsertc              	     sÂ   t |tƒs	tdƒ‚|rt |d tƒstdƒ‚| jr8|D ]}|  ˆ  ¡  ¡ jdi ‡ fdd„| 	¡ D ƒ¤Ž¡ qd S |r]|rI| jˆ  ¡  ¡ |d� d S |D ]}|  ˆ  ¡  ¡ jdi |¤Ž¡ qKd S d S )NzList expectedr   zList of dictionaries expectedc                   s:   i | ]\}}|t |tjƒstj||ˆ j| jd �n|“qS ))rŸ   )rŒ   r!   Ú_literal_bindparamÚcr>   )Ú.0ÚkÚv©r{   rC   rD   Ú
<dictcomp>Ñ  s    
÷ÿýÿøz+DefaultImpl.bulk_insert.<locals>.<dictcomp>)r…   rC   )
rŒ   Úlistr�   r�   rU   r˜   ÚinsertÚinlineÚvaluesÚitems)rb   r{   rò   rô   ÚrowrC   rú   rD   Úbulk_insertÁ  s0   
þ

öýÿÿ ûzDefaultImpl.bulk_insertr   ÚParamsc                 C  s¼   | j j |j¡ ¡ }t d|¡}g }d }|D ]}t d|¡r!|}q| |¡ qt	|d |dd … g i ƒ}|r\t d|¡D ]}d|v rS| 
d¡\}	}
|
 ¡ |j|	 ¡ < q<|j | ¡ ¡ q<|S )Nz[\w\-_]+|\(.+?\)z^\(.*\)$r   r   z[^(),]+ú=)rR   Útype_compilerÚprocessr>   ÚlowerÚreÚfindallÚmatchÚappendr  Úsplitr’   ÚkwargsÚargs)rb   r¹   Ú
definitionÚtokensÚterm_tokensÚ
paren_termÚtokenr‡   ÚtermÚkeyÚvalrC   rC   rD   Ú_tokenize_column_typeç  s    z!DefaultImpl._tokenize_column_typeÚinspector_paramsÚmetadata_paramsc                 C  s|   |j |j krdS dd„ | jD ƒ}d |j g|j ¡}d |j g|j ¡}|D ]}||h |¡s8|j |j h |¡r; dS q&dS )NTc                 S  s   g | ]	}d d„ |D ƒ‘qS )c                 S  s   h | ]}|  ¡ ’qS rC   )r  )r÷   ÚtrC   rC   rD   Ú	<setcomp>  ó    z=DefaultImpl._column_types_match.<locals>.<listcomp>.<setcomp>rC   )r÷   ÚbatchrC   rC   rD   Ú
<listcomp>  s    z3DefaultImpl._column_types_match.<locals>.<listcomp>ú F)Útoken0rM   Újoinr  Úissubset)rb   r  r  ÚsynonymsÚinspector_all_termsÚmetadata_all_termsr  rC   rC   rD   Ú_column_types_match  s&   ÿÿþýüzDefaultImpl._column_types_matchÚinspected_paramsÚmeta_paramsc                 C  s²   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 ||¡}t ||¡}|rV|rV| d¡| d¡krV dS q7d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  rN   r  ÚsearchÚgroup)rb   r'  r(  ÚinspÚmetaÚregÚmiÚmmrC   rC   rD   Ú_column_args_match%  s   

€zDefaultImpl._column_args_matchÚinspector_columnÚmetadata_columnc                 C  s8   |   |¡}|   |¡}|  ||¡sdS |  ||¡sdS dS )z²Returns 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&  r1  )rb   r2  r3  r  r  rC   rC   rD   Úcompare_typeF  s   

zDefaultImpl.compare_typec                 C  s   ||kS rd   rC   )rb   r2  r3  Úrendered_metadata_defaultÚrendered_inspector_defaultrC   rC   rD   Úcompare_server_defaultV  s   z"DefaultImpl.compare_server_defaultÚconn_uniquesúSet[UniqueConstraint]Úconn_indexesú
Set[Index]Úmetadata_unique_constraintsÚmetadata_indexesc                 C  ó   d S rd   rC   )rb   r8  r:  r<  r=  rC   rC   rD   Úcorrect_for_autogen_constraints_  s   z+DefaultImpl.correct_for_autogen_constraintsc                 C  s(   |j j|jurt|d |ƒ|d< d S d S )NÚexpr)r>   Ú_type_affinityr   )rb   ÚexistingÚexisting_transferÚnew_typerC   rC   rD   Úcast_for_batch_migrateh  s
   ÿÿz"DefaultImpl.cast_for_batch_migrater@  r(   Úis_server_defaultc                 K  s   dddœ}t |j| j|d�ƒS )zdRender a SQL expression that is typically a server default,
        index expression, etc.

        TF)r^   Úinclude_table)rR   rŠ   )r8   r�   rR   )rb   r@  rF  rn   r•   rC   rC   rD   Úrender_ddl_sql_exprn  s   
ÿzDefaultImpl.render_ddl_sql_exprÚ	inspectorr'   r   c                 C  r~   rd   )Úautogen_column_reflect)rb   rI  rC   rC   rD   Ú_compat_autogen_column_reflect|  s   z*DefaultImpl._compat_autogen_column_reflectÚconn_fksúSet[ForeignKeyConstraint]Úmetadata_fksc                 C  r>  rd   rC   )rb   rL  rN  rC   rC   rD   Úcorrect_for_autogen_foreignkeys  s   z+DefaultImpl.correct_for_autogen_foreignkeysc                 C  rx   )zåA 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.

        NrC   )rb   rI  r{   Úcolumn_inforC   rC   rD   rJ  †  r}   z"DefaultImpl.autogen_column_reflectc                 C  rx   )zœA hook called when :meth:`.EnvironmentContext.run_migrations`
        is called.

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

        NrC   r   rC   rC   rD   Ústart_migrations�  r}   zDefaultImpl.start_migrationsc                 C  ó   |   d| j ¡ dS )zâEmit 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©ri   r“   r   rC   rC   rD   Ú
emit_begin—  ó   zDefaultImpl.emit_beginc                 C  rR  )zãEmit 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`.

        ÚCOMMITNrT  r   rC   rC   rD   Úemit_commit¡  rV  zDefaultImpl.emit_commitÚtype_objr1   Úautogen_contextr3   úUnion[str, Literal[False]]c                 C  rx   ©NFrC   )rb   rY  rZ  rC   rC   rD   Úrender_type«  s   zDefaultImpl.render_typec                 C  sv   t ||t ¡ dhd�\}}t|dd ƒ}t|dd ƒ}t|ƒt|ƒkr&| d¡ | | j¡ ||t|ƒp9t|ƒt|ƒkfS )NÚalways)Úskip)Ú_compare_identity_optionsr   ÚIdentityÚgetattrrV   ÚaddÚdifference_updaterQ   )rb   Úmetadata_identityÚinspector_identityÚdiffÚignoredÚmeta_alwaysÚinspector_alwaysrC   rC   rD   Ú_compare_identity_default°  s   
ü
úz%DefaultImpl._compare_identity_defaultÚmetadata_indexÚreflected_indexc                 C  s0   t |jƒ}t |jƒ}||krd|› d|› �S d S )Nzunique=z to unique=)rV   Úunique)rb   rl  rm  Úconn_uniqueÚmeta_uniquerC   rC   rD   Ú_compare_index_uniqueÌ  s
   

z!DefaultImpl._compare_index_uniqueÚ
constraintú_autogen._CÚoptsú_constraint_sig[_autogen._C]c                 K  ó   t jd| |fi |¤ŽS )NT©r   Úfrom_constraint©rb   rr  rt  rC   rC   rD   Ú_create_metadata_constraint_sigÖ  ó   z+DefaultImpl._create_metadata_constraint_sigc                 K  rv  r\  rw  ry  rC   rC   rD   Ú _create_reflected_constraint_sigÛ  r{  z,DefaultImpl._create_reflected_constraint_sigr   c                 C  s¬   g }|   ||¡}|r| |¡ |  |¡}|  |¡}t |¡s J ‚t |¡s'J ‚||fD ]}|jr7t d|j	¡ q+|j
|j
krK| d|j
› d|j
› �¡ |rRt |¡S t ¡ S )z—Compare two indexes by comparing the signature generated by
        ``create_index_sig``.

        This method returns a ``ComparisonResult``.
        z“Generating approximate signature for index %s. The dialect implementation should either skip expression indexes or provide a custom implementation.úexpression ú to )rq  r  rz  r|  r   Úis_index_sigÚhas_expressionsÚlogÚwarningrÂ   Úcolumn_namesr   Ú	DifferentÚEqual)rb   rl  rm  ÚmsgÚ
unique_msgÚm_sigÚr_sigÚsigrC   rC   rD   Úcompare_indexesà  s0   
ÿ


û€ÿ
zDefaultImpl.compare_indexesÚmetadata_constraintr/   Úreflected_constraintc                 C  sF   |   |¡}|  |¡}|j}|j}||krt d|› d|› �¡S t ¡ 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~  )rz  r|  Úunnamedr   r„  r…  )rb   rŒ  r�  Úmetadata_tupÚreflected_tupÚmeta_sigÚconn_sigrC   rC   rD   Úcompare_unique_constraint  s   ÿÿÿz%DefaultImpl.compare_unique_constraintc              
   C  sh   dd„ |D ƒ}t |ƒD ]&}|j|v rqt |¡}|r1t d|j›d| j›dtj› d�¡ | |¡ qd S )Nc                 S  s   i | ]}|j |“qS rC   rs   )r÷   rö   rC   rC   rD   rû   (  r  z8DefaultImpl._skip_functional_indexes.<locals>.<dictcomp>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ü   re   r!   Úis_expression_indexr    r­   r=   Úsqlalchemy_versionÚdiscard)rb   r=  r:  Úconn_indexes_by_nameÚidxÚiexrC   rC   rD   Ú_skip_functional_indexes'  s$   

þþýÿ
€ôz$DefaultImpl._skip_functional_indexesÚreflected_objectÚkindc                 C  s   |  di ¡S )NÚdialect_options)r_   )rb   r›  rœ  rC   rC   rD   Ú adjust_reflected_dialect_options8  s   z,DefaultImpl.adjust_reflected_dialect_options)rR   r%   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r<   r\   r]   )rR   r%   r\   rc   )r   r8   r\   r]   )
rj   r8   rk   rl   rm   rV   rn   r   r\   r   )rw   r5   r\   rV   )rz   r4   r{   r   r\   r]   )r\   rT   )
r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   r\   r‰   rd   )r™   r‚   rƒ   rš   r\   r]   )NFNNNNFNNNNN) r›   r8   rœ   r8   rq   rX   r�   rž   re   rl   rŸ   r    r   rl   r¡   rX   r¢   r£   r¤   rl   r¥   r    r¦   r§   r¨   rX   r©   rX   rn   r   r\   r]   )r›   r8   r¹   rº   r   r»   r\   r]   )r›   r8   r¹   rº   r   rl   r\   r]   )rÂ   r   r\   r]   )rÂ   r,   r\   r]   )rË   r8   rÌ   rÍ   r   r»   r\   r]   )r{   r   rn   r   r\   r]   )rÞ   r.   rn   r   r\   r]   )r{   r   r\   r]   )r¹   rí   r\   r]   )T)r{   rñ   rò   ró   rô   rV   r\   r]   )r¹   r   r\   r  )r  r  r  r  r\   rV   )r'  r  r(  r  r\   rV   )r2  rº   r3  r   r\   rV   )
r8  r9  r:  r;  r<  r9  r=  r;  r\   r]   )F)r@  r(   rF  rV   rn   r   r\   r8   )rI  r'   r\   r   )rL  rM  rN  rM  r\   r]   )r\   r]   )rY  r1   rZ  r3   r\   r[  )rl  r.   rm  r.   r\   rl   )rr  rs  rt  r   r\   ru  )rl  r.   rm  r.   r\   r   )rŒ  r/   r�  r/   r\   r   )r›  r<   rœ  r8   r\   r<   )=rE   rF   rG   Ú__doc__r=   rW   r“   rM   Ú__annotations__rN   rQ   r?   Úclassmethodrf   ri   rv   ry   r|   Úpropertyr€   r    Úimmutabledictr˜   r”   r¸   r¿   rÁ   rÆ   rÉ   rÏ   rà   rä   rç   rÛ   rì   rÝ   rð   r  r  r&  r1  r4  r7  r?  rE  rH  rK  rO  rJ  rQ  rU  rX  r]  rk  rq  rz  r|  r‹  r“  rš  rž  rC   rC   rC   rD   rH   R   sš   
 



"
û0ýñtüü
	
ü



	



ü
&
(

!
		ÿ


	





+rH   )Ú	metaclassc                   @  s.   e Zd ZU ded< ded< ded< ded< dS )	r  r8   r   z	List[str]r  r  zDict[str, str]r  N)rE   rF   rG   r   rC   rC   rC   rD   r  >  s
   
 r  Úmetadata_ioú-Union[schema.Identity, schema.Sequence, None]Úinspector_ioÚ
default_ioú'Union[schema.Identity, schema.Sequence]r_  úSet[str]c                   s”   t  | ¡}t  |¡}tƒ ‰ tƒ ‰d
‡ ‡‡fdd„}|||t  |¡t|ƒ |¡ƒ t jrFt|d	ƒs2J ‚|t| d	i ƒt|d	i ƒ|jt|d	i ƒƒ ˆ ˆfS )NÚ	meta_dictrˆ   Ú	insp_dictÚdefault_dictÚattrsúIterable[str]c                   s\   t |ƒ ˆ¡D ]$}|  |¡}| |¡}||kr+| |¡}||kr&ˆ |¡ qˆ  |¡ qd S rd   )ÚsetÚ
differencer_   rc  )r«  r¬  r­  r®  ÚattrÚ
meta_valueÚ
insp_valueÚdefault_value©rg  Úignored_attrr_  rC   rD   Úcheck_dictsT  s   



€øz._compare_identity_options.<locals>.check_dictsÚdialect_kwargs)r«  rˆ   r¬  rˆ   r­  rˆ   r®  r¯  )r!   Ú_get_identity_options_dictr°  ÚunionÚidentity_has_dialect_kwargsÚhasattrrb  r¹  )r¥  r§  r¨  r_  Úmeta_dÚinsp_dr¸  rC   r¶  rD   r`  E  s(   
	
ü


ür`  )r¥  r¦  r§  r¦  r¨  r©  r_  rª  )KÚ
__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*   r+   Úsqlalchemy.sql.schemar,   r-   r.   r/   Úsqlalchemy.sql.selectabler0   Úsqlalchemy.sql.type_apir1   r2   Úautogenerate.apir3   Úoperations.batchr4   r5   Ú	getLoggerrE   r�  r>   r6   r@   r   rH   r  r`  rC   rC   rC   rD   Ú<module>   s~   
     q