Your IP : 18.116.61.169
�
��bg�T��(�dZddlZddlZddlmZddlmZddlmZejd��Z ejd ��Z
Gd
�de��Zd�Z
ejd
���ZGd�dejj��ZGd�dejj��ZGd�de��ZGd�de��ZGd�de��ZGd�de��ZGd�de��ZGd�dej��ZGd�deje��ZGd �d!ej��Zd#d"�ZdS)$z4Foundational utilities common to many sql modules.
�N�)�
ClauseVisitor�)�exc)�util�PARSE_AUTOCOMMIT�NO_ARGc�$�eZdZdZd�Zd�Zd�ZdS)� Immutablez@mark a ClauseElement as 'immutable' when expressions are cloned.c� �td����Nz(Immutable objects do not support copying��NotImplementedError��self�optionaldict�kwargss �J/opt/cloudlinux/venv/lib64/python3.11/site-packages/sqlalchemy/sql/base.py�
unique_paramszImmutable.unique_params���!�"L�M�M�M�c� �td���r
rrs r�paramszImmutable.paramsrrc��|S�N��rs r�_clonezImmutable._clone"s���rN)�__name__�
__module__�__qualname__�__doc__rrrrrrrrsM������J�J�N�N�N�N�N�N�����rrc�2�tjd�|D���S)Nc��g|] }|j��
Sr)�
_from_objects)�.0�elements r�
<listcomp>z!_from_objects.<locals>.<listcomp>'s��K�K�K�w�W�2�K�K�Kr)� itertools�chain)�elementss rr%r%&s���?�K�K�(�K�K�K�L�Lrc�b�|d���}||g|dd��Ri|��|S)zMark a method as generative.rrN)� _generate)�fn�args�kwrs r�_generativer1*sF����7�����D��B�t��d�1�2�2�h����"�����Krc�<�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z d�Z
d S)
�_DialectArgViewzaA dictionary view of dialect-level arguments in the form
<dialectname>_<argument_name>.
c��||_dSr)�obj)rr5s r�__init__z_DialectArgView.__init__9s
������rc�� |�dd��\}}||fS#t$r.}tjt |��|���Yd}~dSd}~wwxYw)N�_r��replace_context)�split�
ValueErrorr�raise_�KeyError)r�key�dialect� value_key�errs r�_keyz_DialectArgView._key<sz�� &�!$���3��!2�!2��G�Y��I�%�%��� <� <� <��K���
�
�s�;�;�;�;�;�;�;�;�;�;����� <���s��
A�#A�Ac���|�|��\}} |jj|}||S#tj$r.}tjt|��|���Yd}~dSd}~wwxYw)Nr9)rCr5�dialect_optionsr�NoSuchModuleErrorrr=r>)rr?r@rA�optrBs r�__getitem__z_DialectArgView.__getitem__Ds���!�Y�Y�s�^�^���� "��(�*�7�3�C��y�>�!���$� <� <� <��K���
�
�s�;�;�;�;�;�;�;�;�;�;����� <���s�4�A1�#A,�,A1c��� |�|��\}}||jj||<dS#t$r3}t jt
jd��|���Yd}~dSd}~wwxYw)Nz0Keys must be of the form <dialectname>_<argname>r9)rCr5rEr>rr=r�
ArgumentError)rr?�valuer@rArBs r�__setitem__z_DialectArgView.__setitem__Ns���
A�!%���3����G�Y�<A�D�H�$�W�-�i�8�8�8��� � � ��K��!�F���!$�
�
�
�
�
�
�
�
�
�
����� ���s�1�
A.�(A)�)A.c�\�|�|��\}}|jj||=dSr)rCr5rE)rr?r@rAs r�__delitem__z_DialectArgView.__delitem__[s.��!�Y�Y�s�^�^�����H�$�W�-�i�8�8�8rc�l�td�|jj���D����S)Nc3�>K�|]}t|j��V��dSr)�len�
_non_defaults)r&r/s r� <genexpr>z*_DialectArgView.__len__.<locals>.<genexpr>`sA����
�
��
��"�#�#�
�
�
�
�
�
r)�sumr5rE�valuesrs r�__len__z_DialectArgView.__len___sA���
�
���0�7�7�9�9�
�
�
�
�
�
rc�4���fd��jjD��S)Nc3�~�K�|]7}�jj|jD]}tj|�d|����V���8dS)r8N)r5rErRr�
safe_kwarg)r&�dialect_name�
value_namers �rrSz+_DialectArgView.__iter__.<locals>.<genexpr>fss�����
�
��"�h�6����
�
��
�O�|�|�|�Z�Z�@�A�A�
�
�
�
�
�
�
r)r5rErs`r�__iter__z_DialectArgView.__iter__es3���
�
�
�
� $�� 8�
�
�
�
rN)rr r!r"r6rCrHrLrNrVr\rrrr3r33s���������
���&�&�&�"�"�"�A�A�A�9�9�9�
�
�
�
�
�
�
�
rr3c�6�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z dS) �_DialectArgDictz�A dictionary view of dialect-level arguments for a specific
dialect.
Maintains a separate collection of user-specified arguments
and dialect-specified default arguments.
c�"�i|_i|_dSr�rR� _defaultsrs rr6z_DialectArgDict.__init__xs���������rc�t�tt|j���|j����Sr)rQ�setrR�unionrars rrVz_DialectArgDict.__len__|s+���3�t�)�*�*�0�0���@�@�A�A�Arc�t�tt|j���|j����Sr)�iterrcrRrdrars rr\z_DialectArgDict.__iter__s+���C��*�+�+�1�1�$�.�A�A�B�B�Brc�H�||jvr
|j|S|j|Srr`�rr?s rrHz_DialectArgDict.__getitem__�s+���$�$�$�$��%�c�*�*��>�#�&�&rc��||j|<dSr�rR)rr?rKs rrLz_DialectArgDict.__setitem__�s��"'���3���rc��|j|=dSrrjrhs rrNz_DialectArgDict.__delitem__�s����s�#�#�#rN)
rr r!r"r6rVr\rHrLrNrrrr^r^os~�����������B�B�B�C�C�C�'�'�'�(�(�(�$�$�$�$�$rr^c���eZdZdZed���Zejd���Ze d���Z
ejd��d���Zej
e��Zd�Zejd���Zd �Zd
S)�
DialectKWArgsa9Establish the ability for a class to have dialect-specific arguments
with defaults and constructor validation.
The :class:`.DialectKWArgs` interacts with the
:attr:`.DefaultDialect.construct_arguments` present on a dialect.
.. seealso::
:attr:`.DefaultDialect.construct_arguments`
c��tj|}|�tjd|z���||vri||<||||<dS)a�Add a new kind of dialect-specific keyword argument for this class.
E.g.::
Index.argument_for("mydialect", "length", None)
some_index = Index('a', 'b', mydialect_length=5)
The :meth:`.DialectKWArgs.argument_for` method is a per-argument
way adding extra arguments to the
:attr:`.DefaultDialect.construct_arguments` dictionary. This
dictionary provides a list of argument names accepted by various
schema-level constructs on behalf of a dialect.
New dialects should typically specify this dictionary all at once as a
data member of the dialect class. The use case for ad-hoc addition of
argument names is typically for end-user code that is also using
a custom compilation scheme which consumes the additional arguments.
:param dialect_name: name of a dialect. The dialect must be
locatable, else a :class:`.NoSuchModuleError` is raised. The
dialect must also include an existing
:attr:`.DefaultDialect.construct_arguments` collection, indicating
that it participates in the keyword-argument validation and default
system, else :class:`.ArgumentError` is raised. If the dialect does
not include this collection, then any keyword argument can be
specified on behalf of this dialect already. All dialects packaged
within SQLAlchemy include this collection, however for third party
dialects, support may vary.
:param argument_name: name of the parameter.
:param default: default value of the parameter.
.. versionadded:: 0.9.4
NzRDialect '%s' does have keyword-argument validation and defaults enabled configured)rm�_kw_registryrrJ)�clsrZ�
argument_name�default�construct_arg_dictionarys r�argument_forzDialectKWArgs.argument_for�sk��P$1�#=�l�#K� �#�+��#�=�?K�L���
��.�.�.�,.�$�S�)�7>� ��%�m�4�4�4rc� �t|��S)a9A collection of keyword arguments specified as dialect-specific
options to this construct.
The arguments are present here in their original ``<dialect>_<kwarg>``
format. Only arguments that were actually passed are included;
unlike the :attr:`.DialectKWArgs.dialect_options` collection, which
contains all options known by this dialect including defaults.
The collection is also writable; keys are accepted of the
form ``<dialect>_<kwarg>`` where the value will be assembled
into the list of options.
.. versionadded:: 0.9.2
.. versionchanged:: 0.9.4 The :attr:`.DialectKWArgs.dialect_kwargs`
collection is now writable.
.. seealso::
:attr:`.DialectKWArgs.dialect_options` - nested dictionary form
)r3rs r�dialect_kwargszDialectKWArgs.dialect_kwargs�s��0�t�$�$�$rc��|jS)z4A synonym for :attr:`.DialectKWArgs.dialect_kwargs`.)rvrs rrzDialectKWArgs.kwargs�s
���"�"rzsqlalchemy.dialectsc�p�|j�|��}|j�dSt|j��Sr)�registry�load�construct_arguments�dict)�dialectsrZ�dialect_clss r�_kw_reg_for_dialectz!DialectKWArgs._kw_reg_for_dialect�s7���'�,�,�\�:�:���*�2��4��K�3�4�4�4rc��tj|}t��}|�|j�ddi��n@t|jj��D]&}||vr |j�||���'|S)N�*)rmror^ra�update�reversed� __class__�__mro__)rrZrs�drps r�_kw_reg_for_dialect_clsz%DialectKWArgs._kw_reg_for_dialect_cls�s���#0�#=�l�#K� �����#�+�
�K����T�{�+�+�+�+���� 6�7�7�
F�
F���2�2�2��K�&�&�'?��'D�E�E�E���rc�X�tjtj|j����S)a�A collection of keyword arguments specified as dialect-specific
options to this construct.
This is a two-level nested registry, keyed to ``<dialect_name>``
and ``<argument_name>``. For example, the ``postgresql_where``
argument would be locatable as::
arg = my_object.dialect_options['postgresql']['where']
.. versionadded:: 0.9.2
.. seealso::
:attr:`.DialectKWArgs.dialect_kwargs` - flat dictionary form
)r�PopulateDict�portable_instancemethodr�rs rrEzDialectKWArgs.dialect_optionss*��&� ��(��)E�F�F�
�
�
rc ��|sdS|D]�}tjd|��}|std|z���|�dd��\}} |j|}d|vr&||vr"tjd|�d|�d|j�����||||<��#t
j$ratj
d |�d
|����t��x|j|<}|j�
ddi��|||j|<Y��wxYwdS)Nz^(.+?)_(.+)$zGAdditional arguments should be named <dialectname>_<argument>, got '%s'rrr�z Argument z is not accepted by dialect z on behalf of zCan't validate argument z,; can't locate any SQLAlchemy dialect named )�re�match� TypeError�grouprErrJr�rFr�warnr^rar�rR)rr�k�mrZ�arg_namersr�s r�_validate_dialect_kwargsz&DialectKWArgs._validate_dialect_kwargss���� ��F�� C� C�A�����+�+�A��
��?�AB�C����&'�W�W�Q��]�]�"�L�(�
C�+/�+?��+M�(��7�7�7� �(@�@�@��+�+��1�1�l�l�l�D�N�N�<����:@���,�X�6�6��)�(�
6�
6�
6�� � ��q�q�,�,�(����
:I�9J�9J�J��$�\�2�Q���"�"�C��;�/�/�/�,2�1�I����)�)�)�
6���� C� Cs�
B�A-C?�>C?N)rr r!r"�classmethodrtr�memoized_propertyrv�propertyr�dependenciesrr�ror�rEr�rrrrmrm�s�������
�
��/?�/?��[�/?�b
��%�%���%�2�#�#��X�#��T��,�-�-�5�5�.�-�5�%�4�$�%8�9�9�L�
�
�
�
��
�
���
�,%C�%C�%C�%C�%Crrmc��eZdZdZd�ZdS)�
GenerativezRAllow a ClauseElement to generate itself via the
@_generative decorator.
c��|j�|j��}|j���|_|Sr)r��__new__�__dict__�copy)r�ss rr-zGenerative._generateGs3���N�"�"�4�>�2�2���]�'�'�)�)��
��rN)rr r!r"r-rrrr�r�As-��������
����rr�c�v�eZdZdZdZej��ZdZe d���Z
d�Zd�Zd�Z
ed���ZdS) �
Executablez�Mark a :class:`_expression.ClauseElement` as supporting execution.
:class:`.Executable` is a superclass for all "statement" types
of objects, including :func:`select`, :func:`delete`, :func:`update`,
:func:`insert`, :func:`text`.
TNc��d|vrtjd���d|vrtjd���|j�|��|_dS)a�Set non-SQL options for the statement which take effect during
execution.
Execution options can be set on a per-statement or
per :class:`_engine.Connection` basis. Additionally, the
:class:`_engine.Engine` and ORM :class:`~.orm.query.Query`
objects provide
access to execution options which they in turn configure upon
connections.
The :meth:`execution_options` method is generative. A new
instance of this statement is returned that contains the options::
statement = select([table.c.x, table.c.y])
statement = statement.execution_options(autocommit=True)
Note that only a subset of possible execution options can be applied
to a statement - these include "autocommit" and "stream_results",
but not "isolation_level" or "compiled_cache".
See :meth:`_engine.Connection.execution_options` for a full list of
possible options.
.. seealso::
:meth:`_engine.Connection.execution_options`
:meth:`_query.Query.execution_options`
:meth:`.Executable.get_execution_options`
�isolation_levelz�'isolation_level' execution option may only be specified on Connection.execution_options(), or per-engine using the isolation_level argument to create_engine().�compiled_cachezm'compiled_cache' execution option may only be specified on Connection.execution_options(), not per statement.N)rrJ�_execution_optionsrd)rr0s r�execution_optionszExecutable.execution_optionsZss��B��"�"��#�/���
��r�!�!��#�H���
�#'�"9�"?�"?��"C�"C����rc��|jS)z�Get the non-SQL options which will take effect during execution.
.. versionadded:: 1.3
.. seealso::
:meth:`.Executable.execution_options`
)r�rs r�get_execution_optionsz Executable.get_execution_options�s
���&�&rc��|j}|�4t|d|jj��}d|z}t j|���|�|||��S)z.Compile and execute this :class:`.Executable`.N�descriptionz�This %s is not directly bound to a Connection or Engine. Use the .execute() method of a Connection or Engine to execute this construct.)�bind�getattrr�rr�UnboundExecutionError�_execute_clauseelement)r�multiparamsr�e�label�msgs r�executezExecutable.execute�sa���I���9��D�-���1H�I�I�E�-�/4�5�
�
�+�C�0�0�0��'�'��k�6�B�B�Brc�@�|j|i|�����S)znCompile and execute this :class:`.Executable`, returning the
result's scalar representation.
)r��scalar)rr�rs rr�zExecutable.scalar�s'��
�t�|�[�3�F�3�3�:�:�<�<�<rc�j�|j�|jSt|��D]}||ur�|j}|�|cS�dS)aCReturns the :class:`_engine.Engine` or :class:`_engine.Connection`
to which this :class:`.Executable` is bound, or None if none found.
This is a traversal which checks locally, then
checks among the "from" clauses of associated objects
until a bound engine or connection is found.
N)�_bindr%r�)r�f�engines rr�zExecutable.bind�sY���:�!��:���t�$�$� � �A��D�y�y���V�F��!��
�
�
�"��4r)rr r!r"�supports_executionr�
immutabledictr�r�r1r�r�r�r�r�r�rrrr�r�Ms�����������+��+�-�-���E��,D�,D��[�,D�\
'�
'�
'�C�C�C�=�=�=�����X���rr�c��eZdZdZd�Zd�ZdS)�SchemaEventTargetz�Base class for elements that are the targets of :class:`.DDLEvents`
events.
This includes :class:`.SchemaItem` as well as :class:`.SchemaType`.
c��dS)z0Associate with this SchemaEvent's parent object.Nr)r�parents r�_set_parentzSchemaEventTarget._set_parent�s���rc��|j�||��|j|fi|��|j�||��dSr)�dispatch�before_parent_attachr��after_parent_attach)rr�r0s r�_set_parent_with_dispatchz+SchemaEventTarget._set_parent_with_dispatch�sS���
�*�*�4��8�8�8�����&�&�2�&�&�&��
�)�)�$��7�7�7�7�7rN)rr r!r"r�r�rrrr�r��s<��������?�?�?�8�8�8�8�8rr�c��eZdZdZddiZdS)�
SchemaVisitorz/Define the visiting for ``SchemaItem`` objects.�schema_visitorTN)rr r!r"�__traverse_options__rrrr�r��s!������9�9�,�d�3���rr�c���eZdZdZdZ�fd�Zd�Zd�Zd�Zd�Z d�Z
d �Zd
�Zd�Z
d�Zd
�ZdZejd��d���Zd�Zd�Zd�Zd�Zd�Z�xZS)�ColumnCollectionz�An ordered dictionary that stores a list of ColumnElement
instances.
Overrides the ``__eq__()`` method to produce SQL clauses between
sets of correlated columns.
�_all_columnsc����tt|�����t�|dg��|D]}|�|���dS�Nr�)�superr�r6�object�__setattr__�add)r�columns�cr�s �rr6zColumnCollection.__init__�sb���
���%�%�.�.�0�0�0����4���4�4�4�� � �A��H�H�Q�K�K�K�K� � rc�4�td�|D����S)Nc�,�g|]}t|����Sr)�str�r&r�s rr(z,ColumnCollection.__str__.<locals>.<listcomp>�s��*�*�*��S��V�V�*�*�*r)�reprrs r�__str__zColumnCollection.__str__�s���*�*�T�*�*�*�+�+�+rc�n���d��j|vr<�j�jkr,|�j}|j|jkr|�|j|j=�j|jvr|j�j��|j�j<�� ��fd�|jD��|jdd�<dS|j����dS)aAdd the given column to this collection, removing unaliased
versions of this column as well as existing columns with the
same key.
E.g.::
t = Table('sometable', metadata, Column('col1', Integer))
t.columns.replace(Column('col1', Integer, key='columnone'))
will remove the original 'col1' from the collection, and add
the new column under the name 'columnname'.
Used by schema.Column to override columns during table reflection.
Nc� ��g|]
}|�ur�n|��Srr)r&r��column�
remove_cols ��rr(z,ColumnCollection.replace.<locals>.<listcomp>s2���$�$�$�56�!�z�/�/���q�$�$�$r)�namer?�_datar��append)rr��otherr�s ` @r�replacezColumnCollection.replace�s����� �
��;�$���6�:���#<�#<����%�E��z�U�Y�&�&�"�
��J�u�y�)��:���#�#���F�J�/�J�!'��
�6�:���!�$�$�$�$�$�:>�:K�$�$�$�D��a�a�a� � � �
��$�$�V�,�,�,�,�,rc�P�|jstjd���|||j<dS)z�Add a column to this collection.
The key attribute of the column will be used as the hash key
for this dictionary.
z-Can't add unnamed column to column collectionN)r?rrJ�rr�s rr�zColumnCollection.add
s:���z� ��#�?���
�"��V�Z���rc��t���rrrhs rrNzColumnCollection.__delitem__���!�#�#�#rc��t���rr)rr?r5s rr�zColumnCollection.__setattr__r�rc
�6�||vrp||}||urdS|�|��s-tjd|�dt|dd���d|�d���tj�|d��|j�|��||j|<dS)NzColumn z
on table �tablez being replaced by zG, which has the same key. Consider use_labels for select() statements.� proxy_set) �shares_lineagerr�r�r��resetr�r�r�)rr?rK�existings rrLzColumnCollection.__setitem__ s����$�;�;��C�y�H��5� � ����*�*�5�1�1�
�� � ��s�s�G�H�g�t�<�<�<�<�e�e�e�E����
�"�(�(���<�<�<��� � ��'�'�'���
�3���rc��t���rrrs r�clearzColumnCollection.clear<r�rc�\��|j�j=�fd�|jD��|jdd�<dS)Nc���g|]}|�u�|�� Srr)r&r�r�s �rr(z+ColumnCollection.remove.<locals>.<listcomp>As%���
�
�
��A�V�O�O�A�O�O�Or)r�r?r�r�s `r�removezColumnCollection.remove?sL����J�v�z�"�
�
�
�
��(�
�
�
���!�!�!���rc����t|��}t|j���|j��fd�|D����|j�d�|D����dS)Nc3�*�K�|]
\}}|�v� |V��dSrr)r&r�r��all_col_sets �rrSz*ColumnCollection.update.<locals>.<genexpr>Hs:�����!
�!
��%��a�{�&:�&:�A�&:�&:�&:�&:�!
�!
rc3�$K�|]\}}||fV��dSrr)r&r�r�s rrSz*ColumnCollection.update.<locals>.<genexpr>Ks*����:�:����5�!�*�:�:�:�:�:�:r��listrcr��extendr�r��r�iter_�colsr�s @rr�zColumnCollection.updateEs�����E�{�{���$�+�,�,���� � �!
�!
�!
�!
�"�!
�!
�!
�
�
�
�
�
���:�:�T�:�:�:�:�:�:�:�:rc����t|��}t|j���|j��fd�|D����|j�d�|D����dS)Nc3�$�K�|]
}|�v�|V��dSrr)r&r�r�s �rrSz*ColumnCollection.extend.<locals>.<genexpr>Ps-����� I� I�q�A�[�4H�4H��4H�4H�4H�4H� I� Irc3�(K�|]
}|j|fV��dSr)r?r�s rrSz*ColumnCollection.extend.<locals>.<genexpr>Qs(����3�3��1�5�!�*�3�3�3�3�3�3rr�r�s @rr�zColumnCollection.extendMsu����E�{�{���$�+�,�,���� � � I� I� I� I�D� I� I� I�I�I�I��
���3�3�d�3�3�3�3�3�3�3�3rN�sqlalchemy.sql.elementsc��g}t|d|��D]:}|jD]0}|�|��r|�||k���1�;|j|�Sr�)r�r�r�r��and_�rr+r��lr��locals r�__eq__zColumnCollection.__eq__Usw��������6�6� )� )�A��*�
)�
)���#�#�E�*�*�)��H�H�Q�%�Z�(�(�(��
)��x�}�a� � rc��t|tj��stjd���tj�||��S)Nz'__contains__ requires a string argument)�
isinstancer�string_typesrrJ�OrderedProperties�__contains__�rr�s rrzColumnCollection.__contains__^sC���%��!2�3�3� O��#�$M�N�N�N��%�2�2�4��?�?�?rc� �|j|jd�S)N�r�r�rrs r�__getstate__zColumnCollection.__getstate__cs����T�5F�G�G�Grc��t�|d|d��t�|d|d��dS)Nr�r�)r�r�)r�states r�__setstate__zColumnCollection.__setstate__fsA�����4��%��.�9�9�9����4���~�1F�G�G�G�G�Grc�.�|t|j��vSr)rcr��r�cols r�contains_columnz ColumnCollection.contains_columnjs���c�$�+�,�,�,�,rc�6�t|j|j��Sr)�ImmutableColumnCollectionr�r�rs r�as_immutablezColumnCollection.as_immutablems��(���T�5F�G�G�Gr)rr r!r"� __slots__r6r�r�r�rNr�rLr�r�r�r��__hash__rr�rrrrrr�
__classcell__)r�s@rr�r��sj����������I������,�,�,� -� -� -�D"�"�"�$�$�$�$�$�$� � � �8$�$�$�
�
�
�;�;�;�4�4�4��H��T��0�1�1�!�!�2�1�!�@�@�@�
H�H�H�H�H�H�-�-�-�H�H�H�H�H�H�Hrr�c�0�eZdZd�ZejjxZZdS)rc�~�tj�||��t�|d|��dSr�)r�ImmutablePropertiesr6r�r�)r�data�all_columnss rr6z"ImmutableColumnCollection.__init__rs9��� �)�)�$��5�5�5����4���=�=�=�=�=rN) rr r!r6rr �
_immutabler�r�rrrrrqs/������>�>�>��.�9�9�F�V�V�Vrrc�X�eZdZd�Zd�Zd�Zejd��d���Zd�Z dS)� ColumnSetc�
�||vSrrrs rrzColumnSet.contains_columnzs���d�{�rc�:�|D]}|�|���dSr)r�)rr�rs rr�zColumnSet.extend}s,��� � �C��H�H�S�M�M�M�M� � rc�@�t|��t|��zSr)r�r
s r�__add__zColumnSet.__add__�s���D�z�z�D��K�K�'�'rrc��g}|D]5}|D]0}|�|��r|�||k���1�6|j|�Sr)r�r�rrs rrzColumnSet.__eq__�sh����� )� )�A��
)�
)���#�#�E�*�*�)��H�H�Q�%�Z�(�(�(��
)��x�}�a� � rc�N�ttd�|D������S)Nc3�K�|]}|V��dSrr)r&�xs rrSz%ColumnSet.__hash__.<locals>.<genexpr>�s"����*�*��!�*�*�*�*�*�*r)�hash�tuplers rrzColumnSet.__hash__�s'���E�*�*�T�*�*�*�*�*�+�+�+rN)
rr r!rr�r)rr�rrrrrr%r%ysz������������(�(�(��T��0�1�1�!�!�2�1�!�,�,�,�,�,rr%c ���|j}|sV|jj}t|dt|dd����}|r|�d|��}nd|z}|�d|z}t j|���|S)N�fullnamer�z object z %s objectzm%s is not bound to an Engine or Connection. Execution can not proceed without a database to execute against.)r�r�rr�rr�)�
schemaitemr�r�r�r��items r�_bind_or_errorr4�s����?�D��-��#�,����
�G�J���$E�$E�
�
��� &�%)�T�T�5�5�1�D�D���%�D��;��!�"�
�
�'��,�,�,��Krr) r"r)r��visitorsr�rr�symbolrr r�rr%� decoratorr1�collections_abc�MutableMappingr3r^rmr�r�r�r�rr�r r�ordered_column_setr%r4rrr�<module>r<s�����
���� � � � �#�#�#�#�#�#��������������4�;�1�2�2�� ���X� � ��
�
�
�
�
��
�
�
�M�M�M��������9
�9
�9
�9
�9
�d�*�9�9
�9
�9
�x$�$�$�$�$�d�*�9�$�$�$�@oC�oC�oC�oC�oC�F�oC�oC�oC�d � � � � �� � � �p�p�p�p�p��p�p�p�f8�8�8�8�8��8�8�8�"4�4�4�4�4�M�4�4�4�WH�WH�WH�WH�WH�t�-�WH�WH�WH�t:�:�:�:�:�� 8�:J�:�:�:�,�,�,�,�,��'�,�,�,�0�����r
?>