Hacked By AnonymousFox

Current Path : /opt/cloudlinux/venv/lib64/python3.11/site-packages/sqlalchemy/testing/__pycache__/
Upload File :
Current File : //opt/cloudlinux/venv/lib64/python3.11/site-packages/sqlalchemy/testing/__pycache__/requirements.cpython-311.pyc

�

�܋f'���b�dZddlZddlmZddlmZGd�de��ZGd	�d
e��ZdS)z�Global database feature support policy.

Provides decorators to mark tests requiring specific feature support from the
target database.

External dialect test suites should subclass SuiteRequirements
to provide specific inclusion/exclusions.

�N�)�
exclusions�)�utilc��eZdZdS)�RequirementsN)�__name__�
__module__�__qualname__���r/builddir/build/BUILD/cloudlinux-venv-1.0.6/venv/lib64/python3.11/site-packages/sqlalchemy/testing/requirements.pyrrs�������Dr
rc��eZdZed���Zed���Zed���Zed���Zed���Zed���Z	ed���Z
ed���Zed	���Zed
���Z
ed���Zed���Zed
���Zed���Zed���Zed���Zed���Zed���Zed���Zed���Zed���Zed���Zed���Zed���Zed���Zed���Zed���Zed���Zed���Z ed���Z!ed���Z"ed ���Z#ed!���Z$ed"���Z%ed#���Z&ed$���Z'ed%���Z(ed&���Z)ed'���Z*ed(���Z+ed)���Z,ed*���Z-ed+���Z.ed,���Z/ed-���Z0ed.���Z1ed/���Z2ed0���Z3ed1���Z4ed2���Z5ed3���Z6ed4���Z7ed5���Z8ed6���Z9ed7���Z:ed8���Z;ed9���Z<ed:���Z=ed;���Z>ed<���Z?ed=���Z@ed>���ZAed?���ZBed@���ZCedA���ZDedB���ZEedC���ZFedD���ZGedE���ZHedF���ZIedG���ZJedH���ZKedI���ZLedJ���ZMedK���ZNedL���ZOedM���ZPedN���ZQedO���ZRedP���ZSedQ���ZTedR���ZUedS���ZVedT���ZWedU���ZXedV���ZYedW���ZZedX���Z[edY���Z\edZ���Z]ed[���Z^ed\���Z_d]�Z`ed^���Zaed_���Zbed`���Zceda���Zdedb���Zeedc���Zfedd���Zgede���Zhedf���Ziedg���Zjedh���Zkedi���Zledj���Zmedk���Znedl���Zoedm���Zpedn���Zqedo���Zredp���Zsedq���Ztedr���Zueds���Zvedt���Zwedu���Zxedv���Zyedw���Zzedx���Z{edy���Z|edz���Z}d{�Z~ed|���Zed}���Z�ed~���Z�ed���Z�ed����Z�ed����Z�ed����Z�ed����Z�ed����Z�ed����Z�ed����Z�ed����Z�ed����Z�ed����Z�ed����Z�ed����Z�ed����Z�d��Z�d��Z�ed����Z�ed����Z�d��Z�d��Z�ed����Z�ed����Z�ed����Z�ed����Z�ed����Z�ed����Z�d�S)��SuiteRequirementsc�(�tj��S)z/target platform can emit basic CreateTable DDL.�r�open��selfs r�create_tablezSuiteRequirements.create_table����� � � r
c�(�tj��S)z-target platform can emit basic DropTable DDL.rrs r�
drop_tablezSuiteRequirements.drop_table#rr
c�(�tj��S)z*Target database must support foreign keys.rrs r�foreign_keyszSuiteRequirements.foreign_keys)rr
c�(�tj��S)zQtarget database must support ON UPDATE..CASCADE behavior in
        foreign keys.rrs r�on_update_cascadez#SuiteRequirements.on_update_cascade/���
�� � � r
c�(�tj��S)zWtarget database must *not* support ON UPDATE..CASCADE behavior in
        foreign keys.�r�closedrs r�non_updating_cascadez&SuiteRequirements.non_updating_cascade6���� �"�"�"r
c�(�tj��S�Nr rs r�deferrable_fksz SuiteRequirements.deferrable_fks<���� �"�"�"r
c�2��tj�fd���S)Nc�4���jjp�jjSr%)r�enabledr&rs�r�<lambda>z?SuiteRequirements.on_update_or_deferrable_fks.<locals>.<lambda>Fs���D�*�2�+��"�*�r
�r�only_ifrs`r�on_update_or_deferrable_fksz-SuiteRequirements.on_update_or_deferrable_fks@s.���
�!�
+�
+�
+�
+�
�
�	
r
c�(�tj��S)z;Target database must support self-referential foreign keys.rrs r�self_referential_foreign_keysz/SuiteRequirements.self_referential_foreign_keysJrr
c�(�tj��S)z=Target database must support the DDL phrases for FOREIGN KEY.rrs r�foreign_key_ddlz!SuiteRequirements.foreign_key_ddlPrr
c�(�tj��S)z3target database must support names for constraints.rrs r�named_constraintsz#SuiteRequirements.named_constraintsVrr
c�(�tj��S)z(Target database must support subqueries.rrs r�
subquerieszSuiteRequirements.subqueries\rr
c�(�tj��S)zRtarget database can render OFFSET, or an equivalent, in a
        SELECT.
        rrs r�offsetzSuiteRequirements.offsetb����� � � r
c�(�tj��S)zWtarget database can render LIMIT and/or OFFSET using a bound
        parameter
        rrs r�bound_limit_offsetz$SuiteRequirements.bound_limit_offsetjr9r
c�(�tj��S)z�target database can render LIMIT and/or OFFSET with a complete
        SQL expression, such as one that uses the addition operator.
        parameter
        rrs r�sql_expression_limit_offsetz-SuiteRequirements.sql_expression_limit_offsetr����� � � r
c�(�tj��S)z�Target database must support parenthesized SELECT in UNION
        when LIMIT/OFFSET is specifically present.

        E.g. (SELECT ...) UNION (SELECT ..)

        This is known to fail on SQLite.

        rrs r�/parens_in_union_contained_select_w_limit_offsetzASuiteRequirements.parens_in_union_contained_select_w_limit_offset{����� � � r
c�(�tj��S)alTarget database must support parenthesized SELECT in UNION
        when OFFSET/LIMIT is specifically not present.

        E.g. (SELECT ... LIMIT ..) UNION (SELECT .. OFFSET ..)

        This is known to fail on SQLite.  It also fails on Oracle
        because without LIMIT/OFFSET, there is currently no step that
        creates an additional subquery.

        rrs r�0parens_in_union_contained_select_wo_limit_offsetzBSuiteRequirements.parens_in_union_contained_select_wo_limit_offset�s���� � � r
c�(�tj��S)z;Target database must support boolean expressions as columnsr rs r�boolean_col_expressionsz)SuiteRequirements.boolean_col_expressions�r#r
c�(�tj��S)z5Target database allows boolean columns to store NULL.rrs r�nullable_booleansz#SuiteRequirements.nullable_booleans�rr
c�(�tj��S)z,Target backends that support nulls ordering.r rs r�
nullsorderingzSuiteRequirements.nullsordering�r#r
c�(�tj��S)z�target database/driver supports bound parameters as column expressions
        without being in the context of a typed column.

        r rs r�standalone_bindsz"SuiteRequirements.standalone_binds����� �"�"�"r
c�(�tj��S)z�target database/driver supports bound parameters with NULL in the
        WHERE clause, in situations where it has to be typed.

        rrs r�!standalone_null_binds_whereclausez3SuiteRequirements.standalone_null_binds_whereclause�r9r
c�(�tj��S)z5Target database must support INTERSECT or equivalent.r rs r�	intersectzSuiteRequirements.intersect����� �"�"�"r
c�(�tj��S)z?Target database must support EXCEPT or equivalent (i.e. MINUS).r rs r�except_zSuiteRequirements.except_�rQr
c�(�tj��S)z.Target database must support window functions.r rs r�window_functionsz"SuiteRequirements.window_functions�rQr
c�(�tj��S)zTarget database supports CTEsr rs r�cteszSuiteRequirements.ctes�r#r
c�(�tj��S)z�target database supports CTES that ride on top of a normal UPDATE
        or DELETE statement which refers to the CTE in a correlated subquery.

        r rs r�ctes_with_update_deletez)SuiteRequirements.ctes_with_update_delete����� �"�"�"r
c�(�tj��S)z}target database supports CTES which consist of INSERT, UPDATE
        or DELETE *within* the CTE, e.g. WITH x AS (UPDATE....)r rs r�ctes_on_dmlzSuiteRequirements.ctes_on_dml����
� �"�"�"r
c�(�tj��S)z~target platform generates new surrogate integer primary key values
        when insert() is executed, excluding the pk column.rrs r�autoincrement_insertz&SuiteRequirements.autoincrement_insert�rr
c�(�tj��S)a#target platform will allow cursor.fetchone() to proceed after a
        COMMIT.

        Typically this refers to an INSERT statement with RETURNING which
        is invoked within "autocommit".   If the row can be returned
        after the autocommit, then this rule can be open.

        rrs r�fetch_rows_post_commitz(SuiteRequirements.fetch_rows_post_commit�s���� � � r
c�(�tj��S)z�target platform supports SQL expressions in GROUP BY

        e.g.

        SELECT x + y AS somelabel FROM table GROUP BY x + y

        rrs r�group_by_complex_expressionz-SuiteRequirements.group_by_complex_expression�rAr
c�.�tjd�d��S)Nc�&�|jjjSr%)�db�dialect�supports_sane_rowcount��configs rr+z1SuiteRequirements.sane_rowcount.<locals>.<lambda>�s��v�y�0�G�G�r
z&driver doesn't support 'sane' rowcount�r�skip_ifrs r�
sane_rowcountzSuiteRequirements.sane_rowcount�s ���!�G�G�4�
�
�	
r
c�.�tjd�d��S)Nc�&�|jjjSr%)rfrg�supports_sane_multi_rowcountris rr+z7SuiteRequirements.sane_multi_rowcount.<locals>.<lambda>s��v�y�0�M�M�r
z;driver %(driver)s %(doesnt_support)s 'sane' multi row count�r�fails_ifrs r�sane_multi_rowcountz%SuiteRequirements.sane_multi_rowcounts ���"�M�M�I�
�
�	
r
c�.�tjd�d��S)Nc�&�|jjjSr%)rfrg� supports_sane_rowcount_returningris rr+z=SuiteRequirements.sane_rowcount_w_returning.<locals>.<lambda>
s���	�!�B��r
z;driver doesn't support 'sane' rowcount when returning is onrqrs r�sane_rowcount_w_returningz+SuiteRequirements.sane_rowcount_w_returning
s'���"�
�
�
J�	
�
�	
r
c�.�tjd�d��S)zatarget platform supports INSERT with no values, i.e.
        INSERT DEFAULT VALUES or equivalent.c�F�|jjjp|jjjSr%)rfrg�supports_empty_insert�supports_default_valuesris rr+z1SuiteRequirements.empty_inserts.<locals>.<lambda>s!��6�9�,�B�9��y� �8�r
zempty inserts not supportedr,rs r�
empty_insertszSuiteRequirements.empty_insertss&��
�!�
9�
9�)�
�
�	
r
c�(�tj��S)z.target platform supports INSERT from a SELECT.rrs r�insert_from_selectz$SuiteRequirements.insert_from_selectrr
c�.�tjd�d��S)z#target platform supports RETURNING.c�$�|jjjSr%)rfrg�implicit_returningris rr+z-SuiteRequirements.returning.<locals>.<lambda>)s��6�9�,�?�r
z)%(database)s %(does_support)s 'returning'r,rs r�	returningzSuiteRequirements.returning$s"���!�?�?�7�
�
�	
r
c�(�tj��S)zZTarget platform supports the syntax
        "(x, y) IN ((x1, y1), (x2, y2), ...)"
        r rs r�tuple_inzSuiteRequirements.tuple_in-rLr
c��|jS)z%Target platform tuple IN w/ empty set)r�rs r�tuple_in_w_emptyz"SuiteRequirements.tuple_in_w_empty5s���}�r
c�(�tj��S)zwtarget platform supports a SELECT statement that has
        the same name repeated more than once in the columns list.rrs r�%duplicate_names_in_cursor_descriptionz7SuiteRequirements.duplicate_names_in_cursor_description:rr
c�.�tjd�d��S)z[Target database must have 'denormalized', i.e.
        UPPERCASE as case insensitive names.c�&�|jjjSr%)rfrg�requires_name_normalizeris rr+z6SuiteRequirements.denormalized_names.<locals>.<lambda>Gs��v�y�0�H�H�r
z,Backend does not require denormalized names.rkrs r�denormalized_namesz$SuiteRequirements.denormalized_namesAs"��
�!�H�H�:�
�
�	
r
c�.�tjd�d��S)zTtarget database must support multiple VALUES clauses in an
        INSERT statement.c�&�|jjjSr%)rfrg�supports_multivalues_insertris rr+z7SuiteRequirements.multivalues_inserts.<locals>.<lambda>Qs��v�y�0�L�L�r
z*Backend does not support multirow inserts.rkrs r�multivalues_insertsz%SuiteRequirements.multivalues_insertsKs"��
�!�L�L�8�
�
�	
r
c�(�tj��S)zvtarget dialect implements the executioncontext.get_lastrowid()
        method without reliance on RETURNING.

        rrs r�implements_get_lastrowidz*SuiteRequirements.implements_get_lastrowidUr9r
c�(�tj��S)a<target dialect retrieves cursor.lastrowid, or fetches
        from a database-side function after an insert() construct executes,
        within the get_lastrowid() method.

        Only dialects that "pre-execute", or need RETURNING to get last
        inserted id, would return closed/fail/skip for this.

        r rs r�emulated_lastrowidz$SuiteRequirements.emulated_lastrowid]���� �"�"�"r
c�(�tj��S)z]target platform includes a 'lastrowid' accessor on the DBAPI
        cursor object.

        r rs r�dbapi_lastrowidz!SuiteRequirements.dbapi_lastrowidirLr
c�(�tj��S)z#Target database must support VIEWs.r rs r�viewszSuiteRequirements.viewsqr#r
c�(�tj��S)zXTarget database must support external schemas, and have one
        named 'test_schema'.r rs r�schemaszSuiteRequirements.schemaswr]r
c�(�tj��S)zJtarget system must support reflection of inter-schema foreign
        keysr rs r�cross_schema_fk_reflectionz,SuiteRequirements.cross_schema_fk_reflection~r#r
c�(�tj��S)aTarget supports refleciton of FOREIGN KEY constraints and
        will return the name of the constraint that was used in the
        "CONSTRANT <name> FOREIGN KEY" DDL.

        MySQL prior to version 8 and MariaDB prior to version 10.5
        don't support this.

        r rs r�&foreign_key_constraint_name_reflectionz8SuiteRequirements.foreign_key_constraint_name_reflection�r�r
c�(�tj��S)z�target system has a strong concept of 'default' schema that can
        be referred to implicitly.

        basically, PostgreSQL.

        r rs r�implicit_default_schemaz)SuiteRequirements.implicit_default_schema����� �"�"�"r
c�0�tjd�gd��S)z0Target dialect must support server side cursors.c�$�|jjjSr%)rfrg�supports_server_side_cursorsris rr+z7SuiteRequirements.server_side_cursors.<locals>.<lambda>�s��F�I�-�J�r
zno server side cursors supportr,rs r�server_side_cursorsz%SuiteRequirements.server_side_cursors�s%���!�
J�
J�K�,�
�
�	
r
c�0�tjd�gd��S)z'Target database must support SEQUENCEs.c�$�|jjjSr%)rfrg�supports_sequencesris rr+z-SuiteRequirements.sequences.<locals>.<lambda>�s��F�I�-�@�r
zno sequence supportr,rs r�	sequenceszSuiteRequirements.sequences�s%���!�
@�
@�A�!�
�
�	
r
c�0�tjd�gd��S)zgTarget database supports sequences, but also optionally
        as a means of generating new PK values.c�F�|jjjo|jjjSr%)rfrgr��sequences_optionalris rr+z6SuiteRequirements.sequences_optional.<locals>.<lambda>�s!��v�y�0�C� 9��I�%�8�r
z.no sequence support, or sequences not optionalr,rs rr�z$SuiteRequirements.sequences_optional�s-��
�!�9�9�
�
=�
�
�	
r
c�.�tjd�g��S)atarget database / driver supports cursor.lastrowid as a means
        of retrieving the last inserted primary key value.

        note that if the target DB supports sequences also, this is still
        assumed to work.  This is a new use case brought on by MariaDB 10.3.

        c�$�|jjjSr%)rfrg�postfetch_lastrowidris rr+z6SuiteRequirements.supports_lastrowid.<locals>.<lambda>�s��F�I�-�A�r
r,rs r�supports_lastrowidz$SuiteRequirements.supports_lastrowid�s"���!�
A�
A�B�
�
�	
r
c�4�tj|j��S)z"the opposite of supports_lastrowid)r�NotPredicater�rs r�no_lastrowid_supportz&SuiteRequirements.no_lastrowid_support�s���&�t�'>�?�?�?r
c�(�tj��Sr%r rs r�reflects_pk_namesz#SuiteRequirements.reflects_pk_names�r'r
c�(�tj��Sr%rrs r�table_reflectionz"SuiteRequirements.table_reflection������ � � r
c�(�tj��Sr%r rs r�comment_reflectionz$SuiteRequirements.comment_reflection�r'r
c��|jS)z�target database must support retrieval of the columns in a view,
        similarly to how a table is inspected.

        This does not include the full CREATE VIEW definition.

        �r�rs r�view_column_reflectionz(SuiteRequirements.view_column_reflection�s���z�r
c��|jS)zStarget database must support inspection of the full CREATE VIEW
        definition.r�rs r�view_reflectionz!SuiteRequirements.view_reflection�s���z�r
c��|jSr%)r�rs r�schema_reflectionz#SuiteRequirements.schema_reflection�s
���|�r
c�(�tj��Sr%rrs r�!primary_key_constraint_reflectionz3SuiteRequirements.primary_key_constraint_reflection�r�r
c�(�tj��Sr%rrs r�!foreign_key_constraint_reflectionz3SuiteRequirements.foreign_key_constraint_reflection�r�r
c�(�tj��Sr%r rs r�1foreign_key_constraint_option_reflection_ondeletezCSuiteRequirements.foreign_key_constraint_option_reflection_ondelete�r'r
c�(�tj��Sr%r rs r�1foreign_key_constraint_option_reflection_onupdatezCSuiteRequirements.foreign_key_constraint_option_reflection_onupdate�r'r
c�(�tj��Sr%rrs r�temp_table_reflectionz'SuiteRequirements.temp_table_reflection�r�r
c�(�tj��S)z8target dialect supports listing of temporary table namesr rs r�temp_table_namesz"SuiteRequirements.temp_table_names�rQr
c�(�tj��S)z)target database supports temporary tablesrrs r�temporary_tablesz"SuiteRequirements.temporary_tables����� � � r
c�(�tj��S)z(target database supports temporary viewsr rs r�temporary_viewsz!SuiteRequirements.temporary_views	rQr
c�(�tj��Sr%rrs r�index_reflectionz"SuiteRequirements.index_reflectionr�r
c�(�tj��S)z?target database supports CREATE INDEX with per-column ASC/DESC.rrs r�indexes_with_ascdescz&SuiteRequirements.indexes_with_ascdescr�r
c�(�tj��S)z>target database supports CREATE INDEX against SQL expressions.r rs r�indexes_with_expressionsz*SuiteRequirements.indexes_with_expressionsrQr
c�(�tj��S)z8target dialect supports reflection of unique constraintsrrs r�unique_constraint_reflectionz.SuiteRequirements.unique_constraint_reflectionr�r
c�(�tj��S)z7target dialect supports reflection of check constraintsr rs r�check_constraint_reflectionz-SuiteRequirements.check_constraint_reflection!rQr
c�(�tj��S)z�target dialect raises IntegrityError when reporting an INSERT
        with a primary key violation.  (hint: it should)

        rrs r�$duplicate_key_raises_integrity_errorz6SuiteRequirements.duplicate_key_raises_integrity_error&r9r
c�(�tj��S)z3Target database must support VARCHAR with no lengthrrs r�unbounded_varcharz#SuiteRequirements.unbounded_varchar.rr
c�(�tj��S)z�Target database/dialect must support Python unicode objects with
        non-ASCII characters represented, delivered as bound parameters
        as well as in result rows.

        rrs r�unicode_datazSuiteRequirements.unicode_data4r>r
c�(�tj��S)zRTarget driver must support some degree of non-ascii symbol
        names.
        r rs r�unicode_ddlzSuiteRequirements.unicode_ddl=r]r
c�(�tj��S)z?Target driver can create tables with a name like 'some " table'rrs r�symbol_names_w_double_quotez-SuiteRequirements.symbol_names_w_double_quoteDr�r
c�(�tj��S)z�target dialect supports rendering of a date, time, or datetime as a
        literal string, e.g. via the TypeEngine.literal_processor() method.

        r rs r�datetime_literalsz#SuiteRequirements.datetime_literalsIrZr
c�(�tj��S)zUtarget dialect supports representation of Python
        datetime.datetime() objects.rrs r�datetimezSuiteRequirements.datetimeRrr
c�(�tj��S)zftarget dialect supports representation of Python
        datetime.datetime() with microsecond objects.rrs r�datetime_microsecondsz'SuiteRequirements.datetime_microsecondsYrr
c�(�tj��S)z�target dialect supports representation of Python
        datetime.datetime() with microsecond objects but only
        if TIMESTAMP is used.r rs r�timestamp_microsecondsz(SuiteRequirements.timestamp_microseconds`r]r
c�(�tj��S�zutarget dialect supports representation of Python
        datetime.datetime() objects with historic (pre 1970) values.r rs r�datetime_historicz#SuiteRequirements.datetime_historicgr]r
c�(�tj��S)zQtarget dialect supports representation of Python
        datetime.date() objects.rrs r�datezSuiteRequirements.datenrr
c�(�tj��S)zPtarget dialect accepts a datetime object as the target
        of a date column.rrs r�date_coerces_from_datetimez,SuiteRequirements.date_coerces_from_datetimeurr
c�(�tj��Sr�r rs r�
date_historiczSuiteRequirements.date_historic|r]r
c�(�tj��S)zQtarget dialect supports representation of Python
        datetime.time() objects.rrs r�timezSuiteRequirements.time�rr
c�(�tj��S)zbtarget dialect supports representation of Python
        datetime.time() with microsecond objects.rrs r�time_microsecondsz#SuiteRequirements.time_microseconds�rr
c�(�tj��S)zttarget database/driver can allow BLOB/BINARY fields to be compared
        against a bound parameter value.
        rrs r�binary_comparisonsz$SuiteRequirements.binary_comparisons�r9r
c�(�tj��S)a!target backend supports simple binary literals, e.g. an
        expression like::

            SELECT CAST('foo' AS BINARY)

        Where ``BINARY`` is the type emitted from :class:`.LargeBinary`,
        e.g. it could be ``BLOB`` or similar.

        Basically fails on Oracle.

        rrs r�binary_literalsz!SuiteRequirements.binary_literals������ � � r
c�(�tj��S)z:target dialect supports 'AUTOCOMMIT' as an isolation_levelr rs r�
autocommitzSuiteRequirements.autocommit�rQr
c�(�tj��S)z�target dialect supports general isolation level settings.

        Note that this requirement, when enabled, also requires that
        the get_isolation_levels() method be implemented.

        r rs r�isolation_levelz!SuiteRequirements.isolation_level�r�r
c��dS)a�Return a structure of supported isolation levels for the current
        testing dialect.

        The structure indicates to the testing suite what the expected
        "default" isolation should be, as well as the other values that
        are accepted.  The dictionary has two keys, "default" and "supported".
        The "supported" key refers to a list of all supported levels and
        it should include AUTOCOMMIT if the dialect supports it.

        If the :meth:`.DefaultRequirements.isolation_level` requirement is
        not open, then this method has no return value.

        E.g.::

            >>> testing.requirements.get_isolation_levels()
            {
                "default": "READ_COMMITED",
                "supported": [
                    "SERIALIZABLE", "READ UNCOMMITTED",
                    "READ COMMITTED", "REPEATABLE READ",
                    "AUTOCOMMIT"
                ]
            }
        Nr�rrjs  r�get_isolation_levelsz&SuiteRequirements.get_isolation_levels�s���r
c�(�tj��S)z.target platform implements a native JSON type.r rs r�	json_typezSuiteRequirements.json_type�r#r
c��|jS)zNtarget platform supports numeric array indexes
        within a JSON structure)r
rs r�json_array_indexesz$SuiteRequirements.json_array_indexes�s��
�~�r
c�(�tj��Sr%rrs r�(json_index_supplementary_unicode_elementz:SuiteRequirements.json_index_supplementary_unicode_element�r�r
c�(�tj��S)zRtarget backend has general support for moderately high-precision
        numerics.rrs r�precision_numerics_generalz,SuiteRequirements.precision_numerics_general�rr
c�(�tj��S)zbtarget backend supports Decimal() objects using E notation
        to represent very small values.r rs r�"precision_numerics_enotation_smallz4SuiteRequirements.precision_numerics_enotation_small�r#r
c�(�tj��S)zbtarget backend supports Decimal() objects using E notation
        to represent very large values.r rs r�"precision_numerics_enotation_largez4SuiteRequirements.precision_numerics_enotation_large�r#r
c�(�tj��S)z�target backend supports values with many digits on both sides,
        such as 319438950232418390.273596, 87673.594069654243

        r rs r�*precision_numerics_many_significant_digitsz<SuiteRequirements.precision_numerics_many_significant_digits�rLr
c�(�tj��S)a-target backend will return a selected Decimal as a Decimal, not
        a string.

        e.g.::

            expr = decimal.Decimal("15.7563")

            value = e.scalar(
                select([literal(expr)])
            )

            assert value == expr

        See :ticket:`4036`

        rrs r�implicit_decimal_bindsz(SuiteRequirements.implicit_decimal_binds�s��&�� � � r
c�(�tj��S)zhtarget database can select an aggregate from a subquery that's
        also using an aggregate

        rrs r�nested_aggregatesz#SuiteRequirements.nested_aggregatesr9r
c�(�tj��S)zbtarget database must support ON DELETE CASCADE on a self-referential
        foreign key

        rrs r�recursive_fk_cascadez&SuiteRequirements.recursive_fk_cascader9r
c�(�tj��S)z�A precision numeric type will return empty significant digits,
        i.e. a value such as 10.000 will come back in Decimal form with
        the .000 maintained.r rs r�-precision_numerics_retains_significant_digitsz?SuiteRequirements.precision_numerics_retains_significant_digits"rLr
c�(�tj��S)z�target backend will return native floating point numbers with at
        least seven decimal places when using the generic Float type.

        rrs r�precision_generic_float_typez.SuiteRequirements.precision_generic_float_type*r9r
c�(�tj��S)z�target backend can return a floating-point number with four
        significant digits (such as 15.7563) accurately
        (i.e. without FP inaccuracies, such as 15.75629997253418).

        rrs r�floats_to_four_decimalsz)SuiteRequirements.floats_to_four_decimals2r>r
c�(�tj��S)z�target backend doesn't crash when you try to select a NUMERIC
        value that has a value of NULL.

        Added to support Pyodbc bug #351.
        rrs r�fetch_null_from_numericz)SuiteRequirements.fetch_null_from_numeric;����� � � r
c�(�tj��S)zUTarget database must support an unbounded Text() "
        "type such as TEXT or CLOBrrs r�	text_typezSuiteRequirements.text_typeErr
c�(�tj��S)zTtarget database can persist/return an empty string with a
        varchar.

        rrs r�empty_strings_varcharz'SuiteRequirements.empty_strings_varcharLr9r
c�(�tj��S)zRtarget database can persist/return an empty string with an
        unbounded text.rrs r�empty_strings_textz$SuiteRequirements.empty_strings_textTrr
c�(�tj��S)zUtarget database supports use of an unbounded textual field in a
        WHERE clause.rrs r�"expressions_against_unbounded_textz4SuiteRequirements.expressions_against_unbounded_text[rr
c�(�tj��S)z;target driver must support the literal statement 'select 1'rrs r�	selectonezSuiteRequirements.selectonebr�r
c�(�tj��S)z(Target database must support savepoints.r rs r�
savepointszSuiteRequirements.savepointsgr#r
c�(�tj��S)z4Target database must support two-phase transactions.r rs r�two_phase_transactionsz(SuiteRequirements.two_phase_transactionsmr#r
c�(�tj��S)z'Target must support UPDATE..FROM syntaxr rs r�update_fromzSuiteRequirements.update_fromsrQr
c�(�tj��S)z=Target must support DELETE FROM..FROM or DELETE..USING syntaxr rs r�delete_fromzSuiteRequirements.delete_fromxrQr
c�(�tj��S)a�Target must support UPDATE (or DELETE) where the same table is
        present in a subquery in the WHERE clause.

        This is an ANSI-standard syntax that apparently MySQL can't handle,
        such as::

            UPDATE documents SET flag=1 WHERE documents.title IN
                (SELECT max(documents.title) AS title
                    FROM documents GROUP BY documents.user_id
                )

        rrs r�update_where_target_in_subqueryz1SuiteRequirements.update_where_target_in_subquery}rr
c�(�tj��S)zOtarget database must use a plain percent '%' as the 'modulus'
        operator.r rs r�mod_operator_as_percent_signz.SuiteRequirements.mod_operator_as_percent_sign�r#r
c�(�tj��S)atarget backend supports weird identifiers with percent signs
        in them, e.g. 'some % column'.

        this is a very weird use case but often has problems because of
        DBAPIs that use python formatting.  It's not a critical use
        case either.

        r rs r�percent_schema_namesz&SuiteRequirements.percent_schema_names�r�r
c�(�tj��S)z�target database supports ordering by a column from a SELECT
        inside of a UNION

        E.g.  (SELECT id, ...) UNION (SELECT id, ...) ORDER BY id

        rrs r�order_by_col_from_unionz)SuiteRequirements.order_by_col_from_union�r%r
c�(�tj��S)atarget backend supports ORDER BY a column label within an
        expression.

        Basically this::

            select data as foo from test order by foo || 'bar'

        Lots of databases including PostgreSQL don't support this,
        so this is off by default.

        r rs r�order_by_label_with_expressionz0SuiteRequirements.order_by_label_with_expression�s��� �"�"�"r
c�6���fd�}tj|��S)Nc�V��	��|��dS#t$rYdSwxYw)NFT)�get_order_by_collation�NotImplementedError)rjrs �r�checkz3SuiteRequirements.order_by_collation.<locals>.check�sC���
��+�+�F�3�3�3��u��&�
�
�
��t�t�
���s��
(�(rk)rrFs` r�order_by_collationz$SuiteRequirements.order_by_collation�s/���	�	�	�	�	��!�%�(�(�(r
c��t���r%)rErs  rrDz(SuiteRequirements.get_order_by_collation�s��!�#�#�#r
c�(�tj��S)zUTarget driver must support non-ASCII characters being passed at
        all.
        rrs r�unicode_connectionsz%SuiteRequirements.unicode_connections�rr
c�(�tj��S)z�Target driver must raise a DBAPI-level exception, such as
        InterfaceError, when the underlying connection has been closed
        and the execute() method is called.
        rrs r�graceful_disconnectsz&SuiteRequirements.graceful_disconnects�r9r
c�(�tj��S)zU
        Target must support simultaneous, independent database connections.
        rrs r�independent_connectionsz)SuiteRequirements.independent_connections�rr
c�(�tj��S)z9Catchall for a large variety of MySQL on Windows failuresrrs r�skip_mysql_on_windowsz'SuiteRequirements.skip_mysql_on_windows�r�r
c�,�tjd���S)aTest environment must allow ad-hoc engine/connection creation.

        DBs that scale poorly for many connections, even when closed, i.e.
        Oracle, may use the "--low-connections" option which flags this
        requirement as not present.

        c��|jjSr%)�options�low_connectionsris rr+z2SuiteRequirements.ad_hoc_engines.<locals>.<lambda>�s��6�>�9�r
rkrs r�ad_hoc_enginesz SuiteRequirements.ad_hoc_engines�s���!�9�9�
�
�	
r
c�*�tjd��S)N�timing_intensive�r�requires_tagrs rrWz"SuiteRequirements.timing_intensive�����&�'9�:�:�:r
c�*�tjd��S)N�memory_intensiverXrs rr\z"SuiteRequirements.memory_intensive�rZr
c�.�tjd�d��S)z�Mark tests that use threading and mock at the same time - stability
        issues have been observed with coverage + python 3.3

        c�2�tjo|jjSr%)r�py3krS�has_coverageris rr+z7SuiteRequirements.threading_with_mock.<locals>.<lambda>�s��4�9�D���)D�r
z%Stability issues with coverage + py3krkrs r�threading_with_mockz%SuiteRequirements.threading_with_mock�s"���!�D�D�3�
�
�	
r
c�.�tjd�d��S)Nc�"�tjdkS�N)���sys�version_inforr
rr+z+SuiteRequirements.python2.<locals>.<lambda>s��C�$��,�r
z Python version 2.xx is required.rkrs r�python2zSuiteRequirements.python2s ���!�,�,�.�
�
�	
r
c�.�tjd�d��S)Nc�"�tjdkSrdrfrr
rr+z+SuiteRequirements.python3.<locals>.<lambda>s��C�$�t�+�r
z Python version 3.xx is required.rkrs r�python3zSuiteRequirements.python3s ���!�+�+�-O�
�
�	
r
c��|jSr%)�python36rs r�pep520zSuiteRequirements.pep520s
���}�r
c�.�tjd�d��S)Nc�"�tjdkS)N)re�rfrr
rr+z,SuiteRequirements.python36.<locals>.<lambda>���C�$�v�-�r
z*Python version 3.6 or greater is required.rkrs rrnzSuiteRequirements.python36� ���!�-�-�8�
�
�	
r
c�.�tjd�d��S)Nc�"�tjdkS)N)re�rfrr
rr+z,SuiteRequirements.python37.<locals>.<lambda>rsr
z*Python version 3.7 or greater is required.rkrs r�python37zSuiteRequirements.python37rtr
c�.�tjd�d��S)Nc��tjSr%)r�cpythonrr
rr+z+SuiteRequirements.cpython.<locals>.<lambda>#s��D�L�r
zcPython interpreter neededr,rs rr{zSuiteRequirements.cpython s ���!� � �">�
�
�	
r
c�@��ddlm�tj�fd�d��S)Nr��picklec�T��tjr�jdkptjdkS)N�cPickle)rer)r�pypyr	rgrhr}s�rr+z5SuiteRequirements.non_broken_pickle.<locals>.<lambda>+s-����	�M�-���9�,�*���6�)�r
z.Needs cPickle+cPython or newer Python 3 pickle)�sqlalchemy.utilr~rr-)rr~s @r�non_broken_picklez#SuiteRequirements.non_broken_pickle&sC���*�*�*�*�*�*��!�
*�
*�
*�
*�
=�	
�
�	
r
c��|jS)z�target platform must remove all cycles unconditionally when
        gc.collect() is called, as well as clean out unreferenced subclasses.

        )r{rs r�predictable_gcz SuiteRequirements.predictable_gc1s���|�r
c�.�tjd�d��S)z�Test should be skipped if coverage is enabled.

        This is to block tests that exercise libraries that seem to be
        sensitive to coverage, such as PostgreSQL notice logging.

        c��|jjSr%)rSr`ris rr+z/SuiteRequirements.no_coverage.<locals>.<lambda>Bs��6�>�6�r
z(Issues observed when coverage is enabledrkrs r�no_coveragezSuiteRequirements.no_coverage9s"���!�6�6�6�
�
�	
r
c��dS�NFrrs  r�_has_mysql_on_windowsz'SuiteRequirements._has_mysql_on_windowsF����ur
c��dSr�rrs  r�_has_mysql_fully_case_sensitivez1SuiteRequirements._has_mysql_fully_case_sensitiveIr�r
c�2��tj�fd���S)Nc�.������Sr%)�_has_sqliters�rr+z*SuiteRequirements.sqlite.<locals>.<lambda>Ns���d�.>�.>�.@�.@�*@�r
rkrs`r�sqlitezSuiteRequirements.sqliteLs����!�"@�"@�"@�"@�A�A�Ar
c�4��tj�fd�d��S)Nc�.������Sr%)�_has_cextensionsrs�rr+z/SuiteRequirements.cextensions.<locals>.<lambda>Ss����-�-�/�/�/�r
zC extensions not installedrkrs`r�cextensionszSuiteRequirements.cextensionsPs'����!�/�/�/�/�1M�
�
�	
r
c�L�ddlm}	|d��dS#t$rYdSwxYw)Nr)�
create_enginez	sqlite://TF)�
sqlalchemyr��ImportError)rr�s  rr�zSuiteRequirements._has_sqliteVsP��,�,�,�,�,�,�	��M�+�&�&�&��4���	�	�	��5�5�	���s��
#�#c�:�	ddlm}m}dS#t$rYdSwxYw)Nr)�cresultproxy�cprocessorsTF)r�r�r�r�)rr�r�s   rr�z"SuiteRequirements._has_cextensions_sF��	�<�<�<�<�<�<�<�<��4���	�	�	��5�5�	���s��
�c�(�tj��S)zSupports computed columnsr rs r�computed_columnsz"SuiteRequirements.computed_columnsgrQr
c�(�tj��S)z/Supports computed columns with `persisted=True`r rs r�computed_columns_storedz)SuiteRequirements.computed_columns_storedlrQr
c�(�tj��S)z0Supports computed columns with `persisted=False`r rs r�computed_columns_virtualz*SuiteRequirements.computed_columns_virtualqrQr
c�(�tj��S)zSIf the default persistence is virtual or stored when `persisted`
        is omittedr rs r�"computed_columns_default_persistedz4SuiteRequirements.computed_columns_default_persistedvr#r
c�(�tj��S)zTIf persistence information is returned by the reflection of
        computed columnsr rs r�"computed_columns_reflect_persistedz4SuiteRequirements.computed_columns_reflect_persisted|r#r
c�.�tjd�d��S)a Supports some form of "x IS [NOT] DISTINCT FROM y" construct.
        Different dialects will implement their own flavour, e.g.,
        sqlite will emit "x IS NOT y" instead of "x IS DISTINCT FROM y".

        .. seealso::

            :meth:`.ColumnOperators.is_distinct_from`

        c�&�|jjjSr%)rfrg�supports_is_distinct_fromris rr+z=SuiteRequirements.supports_is_distinct_from.<locals>.<lambda>�s��v�y�0�J�J�r
z4driver doesn't support an IS DISTINCT FROM constructrkrs rr�z+SuiteRequirements.supports_is_distinct_from�s"���!�J�J�B�
�
�	
r
N)�r	r
r�propertyrrrrr"r&r.r0r2r4r6r8r;r=r@rCrErGrIrKrNrPrSrUrWrYr\r_rarcrmrsrwr|r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr
rrrrrrrrrrr r"r$r'r)r+r-r/r1r3r5r7r9r;r=r?rArGrDrJrLrNrPrUrWr\rarirlrornrxr{r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr
rrrs�������
�!�!��X�!�
�!�!��X�!�
�!�!��X�!�
�!�!��X�!��#�#��X�#�
�#�#��X�#��
�
��X�
��!�!��X�!�
�!�!��X�!�
�!�!��X�!�
�!�!��X�!�
�!�!��X�!��!�!��X�!��!�!��X�!��	!�	!��X�	!��!�!��X�!��#�#��X�#�
�!�!��X�!�
�#�#��X�#�
�#�#��X�#��!�!��X�!��#�#��X�#��#�#��X�#��#�#��X�#��#�#��X�#�
�#�#��X�#��#�#��X�#��!�!��X�!��
!�
!��X�
!��	!�	!��X�	!��
�
��X�
��
�
��X�
��
�
��X�
��
�
��X�
��!�!��X�!�
�
�
��X�
��#�#��X�#�����X���!�!��X�!��
�
��X�
��
�
��X�
��!�!��X�!��	#�	#��X�	#��#�#��X�#��#�#��X�#�
�#�#��X�#��#�#��X�#�
�	#�	#��X�	#��#�#��X�#��
�
��X�
��
�
��X�
��

�

��X�

��

�

��X�

��@�@��X�@��#�#��X�#��!�!��X�!��#�#��X�#�����X������X��
����X���!�!��X�!��!�!��X�!��#�#��X�#��#�#��X�#��!�!��X�!��#�#��X�#��!�!��X�!��#�#��X�#��!�!��X�!��!�!��X�!��#�#��X�#��!�!��X�!��#�#��X�#��!�!��X�!��!�!��X�!�
�!�!��X�!��#�#��X�#��!�!��X�!��#�#��X�#��!�!��X�!��!�!��X�!��#�#��X�#��#�#��X�#��!�!��X�!��!�!��X�!��#�#��X�#��!�!��X�!��!�!��X�!��!�!��X�!��
!�
!��X�
!��#�#��X�#��#�#��X�#����4�#�#��X�#�
����X���!�!��X�!��!�!��X�!�
�#�#��X�#�
�#�#��X�#�
�#�#��X�#��!�!��X�!�(�!�!��X�!��!�!��X�!��#�#��X�#��!�!��X�!��!�!��X�!��!�!��X�!��!�!��X�!��!�!��X�!��!�!��X�!��!�!��X�!��!�!��X�!��#�#��X�#�
�#�#��X�#�
�#�#��X�#��#�#��X�#��
!�
!��X�
!��#�#��X�#�
�	#�	#��X�	#��!�!��X�!��#�#��X�#��)�)��X�)�$�$�$��!�!��X�!��!�!��X�!��!�!��X�!��!�!��X�!��

�

��X�

��;�;��X�;��;�;��X�;��
�
��X�
��
�
��X�
��
�
��X�
�
����X���
�
��X�
��
�
��X�
��
�
��X�
�
�
�
��X�
�����X���

�

��X�

��������B�B��X�B��
�
��X�
�
�������#�#��X�#��#�#��X�#��#�#��X�#��#�#��X�#�
�#�#��X�#�
�

�

��X�

�

�

r
r)�__doc__rg�rr�objectrrrr
r�<module>r�s������
�
�
�������������	�	�	�	�	�6�	�	�	�t
�t
�t
�t
�t
��t
�t
�t
�t
�t
r

Hacked By AnonymousFox1.0, Coded By AnonymousFox