§ w<ˆj'�ãó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__©óús/builddir/build/BUILD/cloudlinux-venv-1.0.12/venv/lib64/python3.11/site-packages/sqlalchemy/testing/requirements.pyrrs€€€€€Ø€Dr rcó¾ —eZdZed„¦«Zed„¦«Zed„¦«Zed„¦«Zed„¦«Zed„¦«Z ed„¦«Z ed„¦«Z ed „¦«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„¦«Zed<„¦«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úz?SuiteRequirements.on_update_or_deferrable_fks..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..ÿ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..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.. 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..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..)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..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..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 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..Ÿ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..¨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..³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..Ã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_digitszr 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..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..ë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..ý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..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.. 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..ó€•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..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..#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..+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..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..Nsø€¨d×.>Ò.>Ñ.@Ô.@Ð*@€r rkrs`rÚsqlitezSuiteRequirements.sqliteLsø€åÔ!Ð"@Ð"@Ð"@Ð"@ÑAÔAÐAr có4‡—tjˆfd„d¦«S)Ncó.•—‰ ¦« Sr%)Ú_has_cextensionsrs€rr+z/SuiteRequirements.cextensions..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..Ž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úr¯s¦ðððð € € € àÐÐÐÐÐØÐÐÐÐÐð ð ð ð ð �6ñ ô ð ðt ðt ðt ðt ðt ˜ ñt ôt ðt ðt ðt r