� J�g�t��Z�ddlmZddlZddlZddlmZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z dd lm Z dd lm Z dd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZddl m!Z!ddl"m#Z#ddl"m$Z$ddl"m%Z%ddl"m&Z&ddl"m'Z'ddl"m(Z(dd l"m)Z)dd!l"m*Z*dd"l"m+Z+dd#l,m-Z-dd$l,m.Z.d%d&l/m0Z0d%d'l1m2Z2d%d(l3m4Z4d%d)l3m5Z5d%d*l6m7Z7d%d+l6m8Z8d%d,l0m9Z9d%d-l:m;Z;e rldd.lm<Z<dd/lm=Z=dd0lm>Z>dd1l?m@Z@dd2lAmBZBdd3lCmDZDdd4lEmFZFdd5lEmGZGdd6lmHZHdd7lmIZIdd8lmJZJdd9lKmLZLdd:lKmMZMdd;lNmOZOdd<l"mPZPd%d=lQmRZRd%d>lSmTZTd%d?lUmVZVejWeX��ZYGd@�dAe.��ZZGdB�dCe%��Z[e;e+dD��dfdK���Z\e;e[dD��dgdL���Z]e;e&dD��dhdN���Z^e;e*dD��didP���Z_e8j`dQ��e7j`dQdR��e4ja�bdS��GdT�dUe4ja��������Zce2jd�eec��djdY���Zfe2jg�ee��dkd^���Zhdld_�Zidmdb�Zjdnde�ZkdS)o�)� annotationsN)�Any)�cast)�Dict)�List)�Optional)�Sequence)�Tuple)� TYPE_CHECKING)�Union)�Column)�literal_column)�Numeric)�text)�types)�BIGINT)�ExcludeConstraint)�INTEGER)� CreateIndex)� ColumnClause)� TextClause)�FunctionElement)�NULLTYPE�)� alter_column)� alter_table)� AlterColumn)� ColumnComment)�format_column_name)�format_table_name)� format_type)�IdentityColumnDefault)� RenameTable)�ComparisonResult)� DefaultImpl�)�util)�render)�ops)� schemaobj)�BatchOperations)� Operations)� sqla_compat)�compiles)�Literal)�Index)�UniqueConstraint)�ARRAY)� PGDDLCompiler)�HSTORE)�JSON)�JSONB)� ClauseElement)� ColumnElement)� quoted_name)�MetaData)�Table)� TypeEngine)�_ServerDefault)�AutogenContext)�_f_name)�MigrationContextc�|��eZdZdZdZejddhfzZdQd �Zd �Zd �Z dRdS�fd"� Z d#�Z d$�Z e jd%��e jd&��e jd'��e jd(��e jd)��fZdTd+�ZdUd/�ZdVd3�ZdWd7�ZdXd;�ZdYd>�Z dZd[�fdC� Zd\dH�Zd]dJ�Zd^dL�Zd_dN�Zd`dP�Z�xZS)a�PostgresqlImpl� postgresqlT�FLOATzDOUBLE PRECISION�indexr0�kwr�return�Nonec � �|j�dd��pd}|D]B}||jjvr2|j�t |t j�����C|�t|fi|����dS)N�postgresql_include�) �kwargs�get�table�c� append_columnr �sqltypes�NullType�_execr)�selfrErFrJ�cols �f/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/alembic/ddl/postgresql.py� create_indexzPostgresqlImpl.create_indexUs���#�\�-�-�.B�D�I�I�O�R��%� � �C��%�+�-�'�'�� �)�)��3�� 1�2�2����� � � �;�u�+�+��+�+�,�,�,�,�,�c�n�|jD],}|j�#|j|jvr|�|���-dS�N)� constraints�name�named_constraints�drop_constraint)rT� batch_implrN� constraints rV�prep_table_for_batchz#PostgresqlImpl.prep_table_for_batchasK���+� 1� 1�J���+��O�z�'C�C�C��$�$�Z�0�0�0��  1� 1rXc��|jr||jjurdS|}||k}|rdSd|||jfvr| S|jj}t |t ��rEt |jt��stj dd|��}d|�d�}t|��}|j }|�J�|� tjt|��|k���� S)NFz^'|'$��')� primary_keyrN�_autoincrement_column�server_default�arg� isinstance�str�typer�re�subr� connection�scalarr-�_select) rT�inspector_column�metadata_column�rendered_metadata_default�rendered_inspector_default�conn_col_default�defaults_equal�metadata_default�conns rV�compare_server_defaultz%PostgresqlImpl.compare_server_defaultis*�� � '� ��?�#8�#N�N�N��5�5��)�-F�F�� � ��5� � � %� � *� � � � &�%� %�*�9�=�� �&�� ,� ,� @��.�3�W�=�=� ;�#%�6�(�B�8H�#I�#I� �#:�'7�#:�#:�#:� �-�.>�?�?� ���������;�;� � ��/�0�0�4D�D� � � � � � rXNF� table_namerj� column_name�nullable�Optional[bool]rg�%Union[_ServerDefault, Literal[False]]r\� Optional[str]�type_�Optional[TypeEngine]�schema� autoincrement� existing_type�existing_server_default�Optional[_ServerDefault]�existing_nullable�existing_autoincrementc ���| �dd��}|�|�tjd���|�*|�t |||||| | | �����t ��j||f|||||| | | | d� | ��dS)N�postgresql_usingz6postgresql_using must be used with the type_ parameter)r��usingr�r�r�) r|rgr\r�r�r�r�r�r�)�popr'� CommandErrorrS�PostgresqlColumnType�superr)rTrzr{r|rgr\r�r�r�r�r�r�r�rFr�� __class__s �rVrzPostgresqlImpl.alter_column�s���� ���)�4�0�0�� � ����#�H��� � � � �J�J�$����!��"/�,C�&7� � � � � � � ����� � � ��)���'�'�$;�/�#9� � �� � � � � rXc���|�d��r�t|dttf��r�t jd|d��}|r�t j|td��|� d������ ��}|r>|\}}||dkr/t� d||j |��|d=dSdSdSdSdSdS) N�defaultrkznextval\('(.+?)'::regclass\)a9select c.relname, a.attname from pg_class as c join pg_depend d on d.objid=c.oid and d.classid='pg_class'::regclass and d.refclassid='pg_class'::regclass join pg_class t on t.oid=d.refobjid join pg_attribute a on a.attrelid=t.oid and a.attnum=d.refobjsubid where c.relkind='S' and c.oid=cast(:seqname as regclass)r)�seqnamer\z^Detected sequence named '%s' as owned by integer column '%s(%s)', assuming SERIAL and omitting)rMrirrrl�matchr-�_exec_on_inspectorr�group�first�log�infor\)rT� inspectorrN� column_info� seq_matchr�r��colnames rV�autogen_column_reflectz%PostgresqlImpl.autogen_column_reflect�s3�� �?�?�9� %� %�$ 3�*� �� �'�6�!2�+ �+ �$ 3���/��Y�1G���I�� 3�"�5��� ;� � �&�O�O�A�.�.�����%�'�'�� � 3�'+�$�G�W��+�f�"5�5�5����;�$�!�J�#� ���(� �2�2�2�I$ 3�$ 3�$ 3�$ 3�  3� 3�" 3� 3�5�5rXc��d�|D��}|D]}|�|���tjs|�||��dSdS)Nc�F�h|]}|j�d���|��S)�duplicates_constraint)r�rM)�.0rEs rV� <setcomp>zAPostgresqlImpl.correct_for_autogen_constraints.<locals>.<setcomp>�s=�� � � ���z�~�~�5�6�6� � � � � rX)�remover-�sqla_2�_skip_functional_indexes)rT�conn_unique_constraints� conn_indexes�metadata_unique_constraints�metadata_indexes�doubled_constraints�ixs rV�correct_for_autogen_constraintsz.PostgresqlImpl.correct_for_autogen_constraints�s~�� � �%� � � �� &� $� $�B� � � �� #� #� #� #��!� J� � )� )�*:�L� I� I� I� I� I� J� JrXz( asc nulls last)$z(?<! desc)( nulls last)$z( asc)$z( asc) nulls first$z desc( nulls first)$�exprc��|����dd���dd��}|j�5|�|jj����d�d��}d|vrt jdd|��}|r<|ddkr0|d d kr$|d d �}|r|ddkr |d d k�$|jD]H}|�|��x}r/|�d ��\}}|d|�||d�z}n�I|r<|ddkr0|d d kr$|d d �}|r|ddkr |d d k�$t j d ��}|� |��r,|�d|��}t jd d|��}|�dd��}|S)N�"rcrd�.z::z (::[\w ]+\w)r�(������)rz cast\s*\(z as\s+[^)]+\)� ) �lower�replacerNr\rlrm�_default_modifiers_re�search�span�compiler�)rTrEr��rsr��start�end�cast_res rV�_cleanup_index_exprz"PostgresqlImpl._cleanup_index_exprs����z�z�|�|�#�#�C��,�,�4�4�S�"�=�=�� �;� "��<�<�5�;�#3�#9�#9�#;�#;� >� >� >��C�C�D� �4�<�<��6�/�2�t�4�4�D�� �t�A�w�#�~�~�$�r�(�c�/�/���"��:�D�� �t�A�w�#�~�~�$�r�(�c�/�/� �,� � �B�� � �$���'�u� �"�Z�Z��]�]� ��s��F�U�F�|�d�3�4�4�j�0���� � � �t�A�w�#�~�~�$�r�(�c�/�/���"��:�D�� �t�A�w�#�~�~�$�r�(�c�/�/��*�\�*�*�� �=�=�� � � 5��;�;�r�4�(�(�D��6�/�2�t�4�4�D��|�|�C��$�$��� rX�item�Union[Index, UniqueConstraint]�Tuple[Any, ...]c�>�|j�d��rdSdS)N�postgresql_nulls_not_distinct)�nulls_not_distinctrK)�dialect_kwargsrM)rTr�s rV�_dialect_optionszPostgresqlImpl._dialect_options9s)�� � � "� "�#B� C� C� +�*�*��rrX�metadata_index�reflected_indexr$c ��g}|�||��}|r|�|��|j}|j}t|��t|��kr5|�dt|���dt|������|rt j|��Sg}t t||��d��D]�\}\} } |�| ��} |� || ��} |�| ��} |� || ��}| |kr�e| � ��� d��rHd| vsd| vr@|�d|�d| �d���tj d |�d| �d |j�d �����|�d|�d| �d| ������|�|��}|�|��}||kr|�d |�d|����|rt j|��S|rt j|��St j��S) Nzexpression number � to r�_opsr�r�z expression #z' detected as including operator clause.z Expression #z in index a  detected to include an operator clause. Expression compare cannot proceed. Please move the operator clause to the ``postgresql_ops`` dict to enable proper compare of the index expressions: https://docs.sqlalchemy.org/en/latest/dialects/postgresql.html#operator-classeszoptions )�_compare_index_unique�append� expressions�lenr$� Different� enumerate�zip�_compile_elementr��strip�endswithr'�warnr\r��extend�Skip�Equal)rTr�r��msg� unique_msg�m_exprs�r_exprs�skip�pos�m_e�r_e� m_compile�m_text� r_compile�r_text� m_options� r_optionss rV�compare_indexeszPostgresqlImpl.compare_indexesBs��� ���/�/� �O� � � � � #� �J�J�z� "� "� "� �,��!�-�� �w�<�<�3�w�<�<� '� '� �J�J�L�C��L�L�L�L�c�'�l�l�L�L� M� M� M� � 3�#�-�c�2�2� 2���(��W�g�)>�)>��B�B� P� P�O�C��#�s��-�-�c�2�2�I��-�-�n�i�H�H�F��-�-�c�2�2�I��-�-�n�i�H�H�F���������"�"�+�+�F�3�3� P��y� � �C�9�$4�$4�� � �4�3�4�4��4�4�4����� �f�3�f�f��f�f�&�+�f�f�f������ � �N�#�N�N� �N�N��N�N�O�O�O�O��)�)�.�9�9� ��)�)�/�:�:� � � � !� !� �J�J�<�)�<�<��<�<� =� =� =� � ,�#�-�c�2�2� 2� � ,�#�(��.�.� .�#�)�+�+� +rX�metadata_constraintr1�reflected_constraintc��|�|��}|�|��}|j}|j}||krtjd|�d|����S|�|j��}|�|j��}||krtjd|�d|����Stj��S)Nz expression r�)�_create_metadata_constraint_sig� _create_reflected_constraint_sig�unnamedr$r�r��constr�) rTr�r�� metadata_tup� reflected_tup�meta_sig�conn_sig� metadata_do�conn_dos rV�compare_unique_constraintz(PostgresqlImpl.compare_unique_constraint~s��� �;�;� � � � ��=�=� � � � � �'�� �(�� �x� � �#�-�6�h�6�6�H�6�6��� ��+�+�L�,>�?�?� ��'�'� �(;�<�<�� �'� !� !�#�-�8�g�8�8�;�8�8��� � �%�'�'�'rX�reflected_options�Dict[str, Any]�kindc��|�di�����}|�d��s|�dd��|S)N�dialect_optionsrJ)rM�copyr�)rTr�r��optionss rV� adjust_reflected_dialect_optionsz/PostgresqlImpl.adjust_reflected_dialect_options�sU��$�'�'�(9�2�>�>�C�C�E�E���{�{�/�0�0� 4� �K�K�,�d� 3� 3� 3��rX�element�Union[ClauseElement, str]c�x�t|t��r|S|�|jddd����jS)NTF)� literal_binds� include_table)�dialect�compile_kwargs)rirjr�r�string)rTrs rVr�zPostgresqlImpl._compile_element�sI�� �g�s� #� #� ��N�����L�-1�E�J�J�� � � � rXr7�is_server_default�bool�is_indexc ���|r)t|t��s|���}t��j|f||d�|��S)zdRender a SQL expression that is typically a server default, index expression, etc. )r r )rir� self_groupr��render_ddl_sql_expr)rTr�r r rFr�s �rVrz"PostgresqlImpl.render_ddl_sql_expr�sb��� � %�J�t�\�:�:� %��?�?�$�$�D�*�u�w�w�*� � �$5�� � �LN� � � rXr<�autogen_contextr>�Union[str, Literal[False]]c���t|��j}|�d��sdSt|d|jz��r$t |d|jz��}|||��SdS)Nzsqlalchemy.dialects.postgresqlFz_render_%s_type)rk� __module__� startswith�hasattr�__visit_name__�getattr)rTr�r�mod�meths rV� render_typezPostgresqlImpl.render_type�sv���5�k�k�$���~�~�>�?�?� ��5� �4�*�U�-A�A� B� B� 0��4�!2�U�5I�!I�J�J�D��4���/�/� /��urXr4c �V�tttj||dd����S)N� text_typez(.+?\(.*text_type=)�rrjr(�_render_type_w_subtype�rTr�rs rV�_render_HSTORE_typez"PostgresqlImpl._render_HSTORE_type�s3��� � � )��� �5K� � � � � rXr2c �V�tttj||dd����S)N� item_typez(.+?\()rrs rV�_render_ARRAY_typez!PostgresqlImpl._render_ARRAY_type�s2��� � � )��� �Z� � � � � rXr5c �V�tttj||dd����S�N� astext_typez(.+?\(.*astext_type=)rrs rV�_render_JSON_typez PostgresqlImpl._render_JSON_type��3��� � � )��� �7O� � � � � rXr6c �V�tttj||dd����Sr$rrs rV�_render_JSONB_typez!PostgresqlImpl._render_JSONB_type�r'rX)rEr0rFrrGrH) NFNNNNNNNN)rzrjr{rjr|r}rgr~r\rr�r�r�rr�r}r�r�r�r�r�r}r�r}rFrrGrH)rEr0r�rjrGrj)r�r�rGr�)r�r0r�r0rGr$)r�r1r�r1rGr$)r�r�r�rjrGr�)rrrGrj)FF) r�r7r r r r rFrrGrj)r�r<rr>rGr)r�r4rr>rGrj)r�r2rr>rGrj)r�r5rr>rGrj)r�r6rr>rGrj)�__name__r� __qualname__� __dialect__�transactional_ddlr%� type_synonymsrWraryrr�r�rlr�r�r�r�r�r�rr�rrrr"r&r)� __classcell__�r�s@rVrBrBNs@��������K����-� �$�%�1��M� -� -� -� -�1�1�1�+ �+ �+ �b$(�@E�"�&*� $�(,�.2�<@�,0�15�2 �2 �2 �2 �2 �2 �2 �h%3�%3�%3�NJ�J�J�> �� �'�(�(��� �-�.�.��� �9����� �(�)�)��� �)�*�*� �� � � � �D����:,�:,�:,�:,�x(�(�(�(�8��������#(��  � � � � � � �. � � � � � � � � � � � � � � � � � � � � � � � rXrBc� ��eZdZd �fd� Z�xZS) r�r\rjr{r�r<rGrHc ���|�dd��}t��j||fi|��tj|��|_||_dS)Nr�)r�r��__init__rQ� to_instancer�r�)rTr\r{r�rFr�r�s �rVr3zPostgresqlColumnType.__init__�sV������w��%�%��������{�1�1�b�1�1�1��)�%�0�0�� ��� � � rX)r\rjr{rjr�r<rGrH)r*rr+r3r/r0s@rVr�r��s=����������������rXr�rCrr#�compilerr3rGrjc �j�t||j|j���dt||jd����S)Nz RENAME TO )rrzr�r �new_table_name�rr5rFs rV�visit_rename_tabler9s=�� �H�g�0�'�.�A�A�A�A��(�G�$:�D�A�A�A� �rXc ���t||j|j���dt||j���ddt ||j��z�d|jr d|jznd��S)Nr�zTYPE %szUSING %src)rrzr�rr{r!r�r�r8s rV�visit_column_typer; sq�� �H�g�0�'�.�A�A�A�A��X�w�2�3�3�3�3��K��'�-�8�8�8�8�8�&-�m�;� �W�]�"�"��;�  �rXrc ��d}|j�1|j�|jtj����nd}|�t ||j|j��t||j ��|���S)Nz9COMMENT ON COLUMN {table_name}.{column_name} IS {comment}�NULL)rzr{�comment) r>� sql_compiler�render_literal_valuerQ�String�formatr rzr�rr{)rr5rF�ddlr>s rV�visit_column_commentrDs��� F�C� �?� &� ��2�2� �O�X�_�.�.� � � ��  � �:�:�$� �g�(�'�.� � �'�x��1D�E�E�� � � �rXr"c ��t||j|j���dt||j���d�}|j�|dz }|S|j�$|dz }||�|j��z }|S|j� |j|j��\}}}|j}t|��D]T}|dkr|d|j rdndzz }�|d|� tjd i|t||��i����zz }�U|S) Nr�z DROP IDENTITYzADD �alwayszSET GENERATED %s �ALWAYSz BY DEFAULTzSET %s rK)rrzr�rr{r�r��visit_identity_column�impl�_compare_identity_default�sortedrF�get_identity_optionsr-�Identityr)rr5rFr�diff�_�identity�attrs rVrHrH.sJ�� �H�g�0�'�.�A�A�A�A��X�w�2�3�3�3�3� �D���� ����� � � (� 0� ���� ��.�.�w��?�?�?��� ��\�;�;� �O�W�<� � � ��a���?���4�L�L� � �D��x����+� (��A�H�H�\������ �H�$A�$A��(�K�K�D�'�(�D�2I�2I�+J�K�K�%�%������ rX�create_exclude_constraint�batch_create_exclude_constraint�exclude_constraintc�z�eZdZdZdZ d"d#d�Zed$d���Z d%d&d�Zed'd���Z ed(d!���Z dS))�CreateExcludeConstraintOpz0Represent a create exclude constraint operation.�excludeN�constraint_name�sqla_compat._ConstraintNamerz�Union[str, quoted_name]�elements�IUnion[Sequence[Tuple[str, str]], Sequence[Tuple[ColumnClause[Any], str]]]�where�)Optional[Union[ColumnElement[bool], str]]r�r�_orig_constraint�Optional[ExcludeConstraint]rGrHc �h�||_||_||_||_||_||_||_dSrZ)rXrzr[r]r�r_rF)rTrXrzr[r]r�r_rFs rVr3z"CreateExcludeConstraintOp.__init__[s;�� /���$��� �� ��� ��� � 0�������rXr`rc ���tj|��}||j|jd�|jD��t d|j��|j||j|j|j �� � S)Nc��g|] \}}}||f�� SrKrK)r�r�r\�ops rV� <listcomp>z=CreateExcludeConstraintOp.from_constraint.<locals>.<listcomp>xs/�� � � �-�t�T�2��r� � � � rXzColumnElement[bool] | None)r]r�r_� deferrable� initiallyr�) r-�_table_for_constraintr\� _render_exprsrr]r�rfrgr�)�clsr`�constraint_tables rV�from_constraintz)CreateExcludeConstraintOp.from_constraintps���'�<�Z�H�H���s� �O� � !� � �1;�1I� � � ��3�Z�5E�F�F�#�*�'�!�,� �*��"�  �  �  � rX�migration_context�Optional[MigrationContext]c�h�|j�|jStj|��}|�|j|j���}t |j|j|j d�|j ��}|j D].\}}}|� t|t�����/|�|��|S)N)r�)r\r])r_r*� SchemaObjectsrNrzr�rr[rXr]rFrirPr r�append_constraint)rTrm� schema_obj�t�exclr�r\�opers rV� to_constraintz'CreateExcludeConstraintOp.to_constraint�s��� � � ,��(� (��,�->�?�?� � � � �T�_�T�[� � A� A�� � �]��%��*� � ��g�  � ��� �  4� 4� � � � � �O�O�F�4��2�2� 3� 3� 3� 3� ���D�!�!�!�� rX� operationsr,rjrrF�Optional[Table]c�B�||||fi|��}|�|��S)a�Issue an alter to create an EXCLUDE constraint using the current migration context. .. note:: This method is Postgresql specific, and additionally requires at least SQLAlchemy 1.0. e.g.:: from alembic import op op.create_exclude_constraint( "user_excl", "user", ("period", "&&"), ("group", "="), where=("group != 'some group'"), ) Note that the expressions work the same way as that of the ``ExcludeConstraint`` object itself; if plain strings are passed, quoting rules must be applied manually. :param name: Name of the constraint. :param table_name: String name of the source table. :param elements: exclude conditions. :param where: SQL expression or SQL string with optional WHERE clause. :param deferrable: optional bool. If set, emit DEFERRABLE or NOT DEFERRABLE when issuing DDL for this constraint. :param initially: optional string. If set, emit INITIALLY <value> when issuing DDL for this constraint. :param schema: Optional schema name to operate within. )�invoke)rjrwrXrzr[rFrds rVrRz3CreateExcludeConstraintOp.create_exclude_constraint�s4��V�S��*�h� =� =�"� =� =��� � ��$�$�$rXr+c�t�|jj|d<|||jj|fi|��}|�|��S)a3Issue a "create exclude constraint" instruction using the current batch migration context. .. note:: This method is Postgresql specific, and additionally requires at least SQLAlchemy 1.0. .. seealso:: :meth:`.Operations.create_exclude_constraint` r�)rIr�rzrz)rjrwrXr[rFrds rVrSz9CreateExcludeConstraintOp.batch_create_exclude_constraint�sF��&"��-��8� � �S��*�/�"<�h� M� M�"� M� M��� � ��$�$�$rX)NNN)rXrYrzrZr[r\r]r^r�rr_r`rGrH)r`rrGrVrZ)rmrnrGr) rwr,rXrjrzrjr[rrFrrGrx) rwr+rXrjr[rrFrrGrx) r*rr+�__doc__�constraint_typer3� classmethodrlrvrRrSrKrXrVrVrVQs������� ;�:��O�<@� $�8<������*� � � ��[� �&?C������,�+%�+%�+%��[�+%�Z�%�%�%��[�%�%�%rXrVrr>rdc�J�t|���|d���S)NT)�alter)�_exclude_constraintrv)rrds rV�_add_exclude_constraintr��s%�� �r�/�/�1�1�?�$� O� O� O�OrXr`r�namespace_metadatar:c�\�tjd||��}|dur|St||d��S)NrWF)r(�_user_defined_renderr�)r`rr��rendereds rV�!_render_inline_exclude_constraintr��sA�� �*��:����H��u����� �z�?�E� B� B�BrXc�B�|j}|�|�d��dS)Nz*from sqlalchemy.dialects import postgresqlz postgresql.)�imports�add)rr�s rV�_postgresql_autogenerate_prefixr��s(���%�G���� � �@�A�A�A� �=rXr�r c������g��j}�jr)��dt�j��f���jr)��dt�j��f���jr)��dt�j��f��|sA|r?�jjr3��dtj �jj��f��|s6�j r/��dtj ��j ��f�����fd�}|r�ttj ��j ����g}|s/|ttj �jj ����gz }|� |����dtj���d�|��d �zS|��}d t!���d�|��d �zS) Nrfrgr�r�r\c�����fd��jD��}�j�0|�dtj�j���z��|�d��D����|S)Nc�F��g|]\}}}dt|����d|�d���S)r��, r�)�_render_potential_column)r��sqltextr\�opstringrs �rVrezC_exclude_constraint.<locals>.do_expr_where_opts.<locals>.<listcomp>s[���  �  �  �(���x�x� )��#��������  �  �  �  rXzwhere=%sc�"�g|] \}}|�d|���� S)�=rK)r��k�vs rVrezC_exclude_constraint.<locals>.do_expr_where_opts.<locals>.<listcomp>%s'��7�7�7�$�!�Q����1�1�%�7�7�7rX)rir]r�r(�_render_potential_exprr�)�argsrr`�optss ���rV�do_expr_where_optsz/_exclude_constraint.<locals>.do_expr_where_optss����  �  �  �  �,6�+C�  �  �  �� � � '� �K�K���/��$�o���� � � � � � �7�7�$�7�7�7�8�8�8�� rXz-%(prefix)screate_exclude_constraint(%(args)s)r�)�prefixr�z%%(prefix)sExcludeConstraint(%(args)s))� _has_batchrfr�rjrgr�rNr�r(�_identr\�_render_gen_name�reprr��_alembic_autogenerate_prefix�joinr�)r`rr�� has_batchr�r�r�s`` @rVr�r��s/����� FH�D��*�I���@� � � �\�3�z�'<�#=�#=�>�?�?�?���>� � � �[�#�j�&:�";�";�<�=�=�=���6� � � �W�c�*�"2�3�3�4�5�5�5� �H��H�:�#3�#:�H� � � �X�v�}�Z�-=�-D�E�E�F�G�G�G� � �Z�_� � � � � �V�,�_�j�o�N�N� O� � � ��������, � � ��(��*�/�J�J� K� K� ��� A� �T�&�-� �(8�(=�>�>�?�?�@� @�D� � � �&�&�(�(�)�)�)�>��9�/�J�J��I�I�d�O�O�B �B � � � "�!�#�#��6�5�o�F�F��I�I�d�O�O�: �: � � rX�value�GUnion[ColumnClause[Any], Column[Any], TextClause, FunctionElement[Any]]c ���t|t��r+|jrd}nd}|tj|��|jd�zStj||t|ttf�����S)Nz"%(prefix)sliteral_column(%(name)r)z%(prefix)scolumn(%(name)r))r�r\)� wrap_in_text) rir� is_literalr(�_sqlalchemy_autogenerate_prefixr\r�rr)r�r�templates rVr�r�;s��� �%��&�&� � � � 4�;�H�H�3�H���<�_�M�M��J� � � � � �,� � �#�E�J��+H�I�I� � � � rX)rr#r5r3rGrj)rr�r5r3rGrj)rrr5r3rGrj)rr"r5r3)rr>rdrVrGrj)r`rrr>r�r:rGrj)rr>rGrj)r`rrr>r�r rGrj)r�r�rr>rGrj)l� __future__r�loggingrl�typingrrrrrr r r r � sqlalchemyr rrrrrQ�sqlalchemy.dialects.postgresqlrrr�sqlalchemy.schemar�sqlalchemy.sql.elementsrr�sqlalchemy.sql.functionsr�sqlalchemy.typesr�baserrrrrr r!r"r#rIr$r%rcr'� autogenerater(rwr)r*�operations.baser+r,r-�util.sqla_compatr.r/r0r1�$sqlalchemy.dialects.postgresql.arrayr2�#sqlalchemy.dialects.postgresql.baser3�%sqlalchemy.dialects.postgresql.hstorer4�#sqlalchemy.dialects.postgresql.jsonr5r6r7r8r9�sqlalchemy.sql.schemar:r;�sqlalchemy.sql.type_apir<r=�autogenerate.apir>�autogenerate.renderr?�runtime.migrationr@� getLoggerr*r�rBr�r9r;rDrH�register_operation�AddConstraintOp�register_add_constraintrV� renderers� dispatch_forr��_constraint_renderersr�r�r�r�rKrXrV�<module>r�s���#�"�"�"�"�"����� � � � ������������������������������������������� � � � � � �������������%�%�%�%�%�%�������������(�(�(�(�(�(�1�1�1�1�1�1�<�<�<�<�<�<�2�2�2�2�2�2�)�)�)�)�)�)�0�0�0�0�0�0�.�.�.�.�.�.�4�4�4�4�4�4�%�%�%�%�%�%�������������������������$�$�$�$�$�$�#�#�#�#�#�#�������'�'�'�'�'�'�������"�"�"�"�"�"�������������!�!�!�!�!�!�������"�"�"�"�"�"�-�-�-�-�-�-�(�(�(�(�(�(�������'�'�'�'�'�'��5������� � � � � � �+�+�+�+�+�+�:�:�:�:�:�:�A�A�A�A�A�A�<�<�<�<�<�<�8�8�8�8�8�8�9�9�9�9�9�9�5�5�5�5�5�5�5�5�5�5�5�5�3�3�3�3�3�3�.�.�.�.�.�.�+�+�+�+�+�+�2�2�2�2�2�2�$�$�$�$�$�$�1�1�1�1�1�1�-�-�-�-�-�-�4�4�4�4�4�4��g���!�!��g �g �g �g �g �[�g �g �g �T �����;���� ��+�|�$�$����%�$�� �� � �-�-����.�-�� ��-��&�&����'�&��* �� ��.�.����/�.��D���:�;�;�#��#��!B�����,�,�-A�B�B�F%�F%�F%�F%�F%�� 3�F%�F%�C�B���<�;� F%�R����8�9�9�P�P�P�:�9�P� ��*�*�+<�=�=� C� C� C�>�=� C�����< �< �< �< �~ � � � � � rX
Memory