ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ 4]c@sbdZddlZddlmZddlmZdefdYZd efd YZdS( sGlobal 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. iNi(t exclusionsi(tutilt RequirementscBseZRS((t__name__t __module__(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRstSuiteRequirementscBs[eZedZedZedZedZedZedZedZ edZ edZ ed Z ed Z ed Zed Zed ZedZedZedZedZedZedZedZedZedZedZedZedZedZedZedZedZ edZ!edZ"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/Z2ed0Z3ed1Z4ed2Z5ed3Z6ed4Z7ed5Z8ed6Z9ed7Z:ed8Z;ed9Z<ed:Z=ed;Z>ed<Z?ed=Z@ed>ZAed?ZBed@ZCedAZDedBZEedCZFedDZGedEZHedFZIedGZJedHZKedIZLedJZMedKZNedLZOedMZPedNZQedOZRedPZSedQZTedRZUedSZVedTZWedUZXedVZYedWZZedXZ[edYZ\edZZ]ed[Z^ed\Z_ed]Z`ed^Zaed_Zbed`ZcedaZdedbZeedcZfeddZgedeZhedfZiedgZjedhZkediZledjZmdkZnedlZoedmZpednZqedoZredpZsedqZtedrZuedsZvedtZweduZxedvZyedwZzedxZ{dyZ|dzZ}ed{Z~ed|Zd}Zd~ZRS(cCs tjS(s/target platform can emit basic CreateTable DDL.(Rtopen(tself((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt create_tablescCs tjS(s-target platform can emit basic DropTable DDL.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt drop_table#scCs tjS(s*Target database must support foreign keys.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt foreign_keys)scCs tjS(sR"target database must support ON UPDATE..CASCADE behavior in foreign keys.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyton_update_cascade/scCs tjS(sWtarget database must *not* support ON UPDATE..CASCADE behavior in foreign keys.(Rtclosed(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytnon_updating_cascade6scCs tjS(N(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytdeferrable_fks<scstjfdS(NcsjjpjjS(N(R tenabledR((R(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytFs (Rtonly_if(R((RsR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyton_update_or_deferrable_fks@scCs tjS(s;Target database must support self-referential foreign keys.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytself_referential_foreign_keysJscCs tjS(s=Target database must support the DDL phrases for FOREIGN KEY.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytforeign_key_ddlPscCs tjS(s3target database must support names for constraints.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytnamed_constraintsVscCs tjS(s(Target database must support subqueries.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt subqueries\scCs tjS(sRtarget database can render OFFSET, or an equivalent, in a SELECT. (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytoffsetbscCs tjS(sWtarget database can render LIMIT and/or OFFSET using a bound parameter (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytbound_limit_offsetjscCs tjS(sTarget 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. (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt/parens_in_union_contained_select_w_limit_offsetrs cCs tjS(slTarget 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. (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt0parens_in_union_contained_select_wo_limit_offset~s cCs tjS(s;Target database must support boolean expressions as columns(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytboolean_col_expressionsscCs tjS(s,Target backends that support nulls ordering.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt nullsorderingscCs tjS(starget database/driver supports bound parameters as column expressions without being in the context of a typed column. (RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytstandalone_bindsscCs tjS(s5Target database must support INTERSECT or equivalent.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt intersectscCs tjS(s?Target database must support EXCEPT or equivalent (i.e. MINUS).(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytexcept_scCs tjS(s.Target database must support window functions.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytwindow_functionsscCs tjS(sTarget database supports CTEs(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytctesscCs tjS(starget database supports CTES that ride on top of a normal UPDATE or DELETE statement which refers to the CTE in a correlated subquery. (RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytctes_with_update_deletescCs tjS(s}target database supports CTES which consist of INSERT, UPDATE or DELETE *within* the CTE, e.g. WITH x AS (UPDATE....)(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt ctes_on_dmlscCs tjS(s~target platform generates new surrogate integer primary key values when insert() is executed, excluding the pk column.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytautoincrement_insertscCs tjS(s#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. (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytfetch_rows_post_commits cCs tjS(starget platform supports SQL expressions in GROUP BY e.g. SELECT x + y AS somelabel FROM table GROUP BY x + y (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytgroup_by_complex_expressions cCstjddS(NcSs|jjj S(N(tdbtdialecttsupports_sane_rowcount(tconfig((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRts&driver doesn't support 'sane' rowcount(Rtskip_if(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt sane_rowcountscCstjddS(NcSs|jjj S(N(R'R(tsupports_sane_multi_rowcount(R*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRR+s;driver %(driver)s %(doesnt_support)s 'sane' multi row count(Rtfails_if(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytsane_multi_rowcountscCstjddS(NcSs|jjj S(N(R'R(t supports_sane_rowcount_returning(R*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRss;driver doesn't support 'sane' rowcount when returning is on(RR/(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytsane_rowcount_w_returningscCstjddS(satarget platform supports INSERT with no values, i.e. INSERT DEFAULT VALUES or equivalent.cSs|jjjp|jjjS(N(R'R(tsupports_empty_inserttsupports_default_values(R*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRssempty inserts not supported(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt empty_insertsscCs tjS(s.target platform supports INSERT from a SELECT.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytinsert_from_selectscCstjddS(s#target platform supports RETURNING.cSs |jjjS(N(R'R(timplicit_returning(R*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRR+s)%(database)s %(does_support)s 'returning'(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt returning scCs tjS(sZTarget platform supports the syntax "(x, y) IN ((x1, y1), (x2, y2), ...)" (RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyttuple_inscCs tjS(swtarget platform supports a SELECT statement that has the same name repeated more than once in the columns list.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt%duplicate_names_in_cursor_descriptionscCstjddS(s[Target database must have 'denormalized', i.e. UPPERCASE as case insensitive names.cSs|jjj S(N(R'R(trequires_name_normalize(R*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyR+R+s,Backend does not require denormalized names.(RR,(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytdenormalized_names%scCstjddS(sTtarget database must support multiple VALUES clauses in an INSERT statement.cSs|jjj S(N(R'R(tsupports_multivalues_insert(R*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyR5R+s*Backend does not support multirow inserts.(RR,(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytmultivalues_inserts/scCs tjS(sw"target dialect implements the executioncontext.get_lastrowid() method without reliance on RETURNING. (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytimplements_get_lastrowid9scCs tjS(s="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. (RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytemulated_lastrowidAs cCs tjS(s^"target platform includes a 'lastrowid' accessor on the DBAPI cursor object. (RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytdbapi_lastrowidMscCs tjS(s#Target database must support VIEWs.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytviewsUscCs tjS(sXTarget database must support external schemas, and have one named 'test_schema'.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytschemas[scCstjdgdS(s0Target dialect must support server side cursors.cSs |jjjS(N(R'R(tsupports_server_side_cursors(R*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRgR+sno server side cursors support(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytserver_side_cursorsbs cCstjdgdS(s'Target database must support SEQUENCEs.cSs |jjjS(N(R'R(tsupports_sequences(R*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRpR+sno sequence support(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt sequencesks cCstjdgdS(sgTarget database supports sequences, but also optionally as a means of generating new PK values.cSs|jjjo|jjjS(N(R'R(RFtsequences_optional(R*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyR{ss.no sequence support, or sequences not optional(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRHts cCs tjS(N(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytreflects_pk_namesscCs tjS(N(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyttable_reflectionscCs tjS(N(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytcomment_reflectionscCs|jS(starget 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. (RB(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytview_column_reflectionscCs|jS(sTtarget database must support inspection of the full CREATE VIEW definition. (RB(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytview_reflectionscCs|jS(N(RC(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytschema_reflectionscCs tjS(N(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt!primary_key_constraint_reflectionscCs tjS(N(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt!foreign_key_constraint_reflectionscCs tjS(N(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt1foreign_key_constraint_option_reflection_ondeletescCs tjS(N(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt1foreign_key_constraint_option_reflection_onupdatescCs tjS(N(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyttemp_table_reflectionscCs tjS(s8target dialect supports listing of temporary table names(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyttemp_table_namesscCs tjS(s)target database supports temporary tables(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyttemporary_tablesscCs tjS(s(target database supports temporary views(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyttemporary_viewsscCs tjS(N(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytindex_reflectionscCs tjS(s>target database supports CREATE INDEX against SQL expressions.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytindexes_with_expressionsscCs tjS(s8target dialect supports reflection of unique constraints(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytunique_constraint_reflectionscCs tjS(s7target dialect supports reflection of check constraints(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytcheck_constraint_reflectionscCs tjS(starget dialect raises IntegrityError when reporting an INSERT with a primary key violation. (hint: it should) (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt$duplicate_key_raises_integrity_errorscCs tjS(s3Target database must support VARCHAR with no length(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytunbounded_varcharscCs tjS(sTarget database/dialect must support Python unicode objects with non-ASCII characters represented, delivered as bound parameters as well as in result rows. (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt unicode_datascCs tjS(sRTarget driver must support some degree of non-ascii symbol names. (RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt unicode_ddlscCs tjS(starget dialect supports rendering of a date, time, or datetime as a literal string, e.g. via the TypeEngine.literal_processor() method. (RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytdatetime_literalsscCs tjS(sUtarget dialect supports representation of Python datetime.datetime() objects.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytdatetimescCs tjS(sftarget dialect supports representation of Python datetime.datetime() with microsecond objects.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytdatetime_microsecondsscCs tjS(starget dialect supports representation of Python datetime.datetime() with microsecond objects but only if TIMESTAMP is used.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyttimestamp_microseconds scCs tjS(sutarget dialect supports representation of Python datetime.datetime() objects with historic (pre 1970) values.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytdatetime_historicscCs tjS(sQtarget dialect supports representation of Python datetime.date() objects.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytdatescCs tjS(sPtarget dialect accepts a datetime object as the target of a date column.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytdate_coerces_from_datetime!scCs tjS(sutarget dialect supports representation of Python datetime.datetime() objects with historic (pre 1970) values.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt date_historic(scCs tjS(sQtarget dialect supports representation of Python datetime.time() objects.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyttime/scCs tjS(sbtarget dialect supports representation of Python datetime.time() with microsecond objects.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyttime_microseconds6scCs tjS(sttarget database/driver can allow BLOB/BINARY fields to be compared against a bound parameter value. (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytbinary_comparisons=scCs tjS(s!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. (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytbinary_literalsEscCs tjS(s:target dialect supports 'AUTOCOMMIT' as an isolation_level(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt autocommitUscCs tjS(s.target platform implements a native JSON type.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt json_typeZscCs|jS(sO"target platform supports numeric array indexes within a JSON structure(Rl(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytjson_array_indexes`scCs tjS(sRtarget backend has general support for moderately high-precision numerics.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytprecision_numerics_generalgscCs tjS(sbtarget backend supports Decimal() objects using E notation to represent very small values.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt"precision_numerics_enotation_smallmscCs tjS(sbtarget backend supports Decimal() objects using E notation to represent very large values.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt"precision_numerics_enotation_largesscCs tjS(starget backend supports values with many digits on both sides, such as 319438950232418390.273596, 87673.594069654243 (RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt*precision_numerics_many_significant_digitsyscCs tjS(s-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` (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytimplicit_decimal_bindsscCs tjS(shtarget database can select an aggregate from a subquery that's also using an aggregate (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytnested_aggregatesscCs tjS(sbtarget database must support ON DELETE CASCADE on a self-referential foreign key (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytrecursive_fk_cascadescCs tjS(sA 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.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt-precision_numerics_retains_significant_digitsscCs tjS(starget backend will return native floating point numbers with at least seven decimal places when using the generic Float type. (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytprecision_generic_float_typescCs tjS(starget 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). (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytfloats_to_four_decimalsscCs tjS(starget backend doesn't crash when you try to select a NUMERIC value that has a value of NULL. Added to support Pyodbc bug #351. (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytfetch_null_from_numericscCs tjS(sUTarget database must support an unbounded Text() " "type such as TEXT or CLOB(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt text_typescCs tjS(sTtarget database can persist/return an empty string with a varchar. (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytempty_strings_varcharscCs tjS(sRtarget database can persist/return an empty string with an unbounded text.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytempty_strings_textscCs tjS(sUtarget database supports use of an unbounded textual field in a WHERE clause.(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt"expressions_against_unbounded_textscCs tjS(s;target driver must support the literal statement 'select 1'(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt selectonescCs tjS(s(Target database must support savepoints.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt savepointsscCs tjS(s4Target database must support two-phase transactions.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyttwo_phase_transactionsscCs tjS(s'Target must support UPDATE..FROM syntax(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt update_fromscCs tjS(s=Target must support DELETE FROM..FROM or DELETE..USING syntax(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt delete_fromscCs tjS(sTarget 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 ) (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytupdate_where_target_in_subqueryscCs tjS(sOtarget database must use a plain percent '%' as the 'modulus' operator.(RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytmod_operator_as_percent_signscCs tjS(starget 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. (RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytpercent_schema_namess cCs tjS(starget 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. (RR (R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytorder_by_label_with_expression#s csfd}tj|S(Ncs.yj|tSWntk r)tSXdS(N(tget_order_by_collationtFalsetNotImplementedErrortTrue(R*(R(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytcheck4s   (RR,(RR((RsR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytorder_by_collation2scCs tdS(N(R(RR*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyR=scCs tjS(sUTarget driver must support non-ASCII characters being passed at all. (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytunicode_connections@scCs tjS(sTarget driver must raise a DBAPI-level exception, such as InterfaceError, when the underlying connection has been closed and the execute() method is called. (RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytgraceful_disconnectsGscCs tjS(s9Catchall for a large variety of MySQL on Windows failures(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytskip_mysql_on_windowsOscCstjdS(sTest 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. cSs |jjS(N(toptionstlow_connections(R*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyR^R+(RR,(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytad_hoc_enginesTs cCs tjdS(Nttiming_intensive(Rt requires_tag(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRascCs tjdS(Ntmemory_intensive(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRescCstjddS(sMark tests that use threading and mock at the same time - stability issues have been observed with coverage + python 3.3 cSstjo|jjS(N(Rtpy3kRt has_coverage(R*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRpR+s%Stability issues with coverage + py3k(RR,(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytthreading_with_mockiscCstjddS(NcSs tjdkS(Ni(i(tsyst version_info(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRwR+s Python version 2.xx is required.(RR,(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytpython2tscCstjddS(NcSs tjdkS(Ni(i(RR(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyR~R+s Python version 3.xx is required.(RR,(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytpython3{scCstjddS(NcSstjS(N(Rtcpython(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRR+scPython interpreter needed(RR(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRscs)ddlmtjfddS(Ni(tpicklecs&tj rjdkp%tjdkS(NtcPickleii(ii(RtpypyRRR((R(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRs s.Needs cPickle+cPython or newer Python 3 pickle(tsqlalchemy.utilRRR(R((RsR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytnon_broken_pickles cCs|jS(starget platform must remove all cycles unconditionally when gc.collect() is called, as well as clean out unreferenced subclasses. (R(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytpredictable_gcscCstjddS(sTest 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. cSs |jjS(N(RR(R*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRR+s(Issues observed when coverage is enabled(RR,(R((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt no_coveragescCstS(N(R(RR*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt_has_mysql_on_windowsscCstS(N(R(RR*((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt_has_mysql_fully_case_sensitivescstjfdS(Ncs j S(N(t _has_sqlite((R(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRR+(RR,(R((RsR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pytsqlitescstjfddS(Ncs j S(N(t_has_cextensions((R(sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRR+sC extensions not installed(RR,(R((RsR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyt cextensionsscCs;ddlm}y|dtSWntk r6tSXdS(Ni(t create_engines sqlite://(t sqlalchemyRRt ImportErrorR(RR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRs   cCs7yddlm}m}tSWntk r2tSXdS(Ni(t cresultproxyt cprocessors(RRRRRR(RRR((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRs  (RRtpropertyRR R R R RRRRRRRRRRRRRRRR R!R"R#R$R%R&R-R0R2R5R6R8R9R:R<R>R?R@RARBRCRERGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR[R\R]R^R_R`RaRbRcRdReRfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzR{R|R}R~RRRRRRRRRRRRRRRRRRRRRRRRRRRR(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyRs                           (t__doc__RR+RRtobjectRR(((sR/opt/alt/python27/lib64/python2.7/site-packages/sqlalchemy/testing/requirements.pyts