{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.elSf6pZm/b1/sqlalchemy_2.0.32+ds1-1_amd64.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.elSf6pZm/b2/sqlalchemy_2.0.32+ds1-1_amd64.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,5 +1,5 @@\n \n- 16b0dd92122a404c377e0d104469c6a0 3955920 doc optional python-sqlalchemy-doc_2.0.32+ds1-1_all.deb\n+ 8cd338149914843804f8967ce2f84e36 3956092 doc optional python-sqlalchemy-doc_2.0.32+ds1-1_all.deb\n 73061d0b1218d0420785827bfa00ac6a 1725472 debug optional python3-sqlalchemy-ext-dbgsym_2.0.32+ds1-1_amd64.deb\n 6f14e55f0bd3351fa84934d455ddb6fa 201732 python optional python3-sqlalchemy-ext_2.0.32+ds1-1_amd64.deb\n 0955e7f12a0b73c1ab8406c88fbab7d2 1196068 python optional python3-sqlalchemy_2.0.32+ds1-1_all.deb\n"}, {"source1": "python-sqlalchemy-doc_2.0.32+ds1-1_all.deb", "source2": "python-sqlalchemy-doc_2.0.32+ds1-1_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2024-08-23 07:52:58.000000 debian-binary\n -rw-r--r-- 0 0 0 13912 2024-08-23 07:52:58.000000 control.tar.xz\n--rw-r--r-- 0 0 0 3941816 2024-08-23 07:52:58.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 3941988 2024-08-23 07:52:58.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_14.html", "source2": "./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_14.html", "unified_diff": "@@ -1226,28 +1226,28 @@\n
\n \n \n \n[sql] [bug] \u00b6
Fixed caching issue where using the TextualSelect.add_cte()
method\n-of the TextualSelect
construct would not set a correct cache key\n-which distinguished between different CTE expressions.
References: #11471
\n-\n-[sql] [bug] \u00b6
Fixed caching issue where the\n+
[sql] [bug] \u00b6
Fixed caching issue where the\n Select.with_for_update.key_share
element of\n Select.with_for_update()
was not considered as part of the cache\n key, leading to incorrect caching if different variations of this parameter\n were used with an otherwise identical statement.
References: #11544
\n \n[sql] [bug] \u00b6
Fixed caching issue where using the TextualSelect.add_cte()
method\n+of the TextualSelect
construct would not set a correct cache key\n+which distinguished between different CTE expressions.
References: #11471
\n+\n+[mypy] [bug] \u00b6
The deprecated mypy plugin is no longer fully functional with the latest\n series of mypy 1.11.0, as changes in the mypy interpreter are no longer\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -808,24 +808,24 @@\n sqlalchemy.util.await_only() directly.\n [\b[e\ben\bng\bgi\bin\bne\be]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n Adjustments to the C extensions, which are specific to the SQLAlchemy 1.x\n series, to work under Python 3.13. Pull request courtesy Ben Beasley.\n References: _\b#_\b1_\b1_\b4_\b9_\b9\n *\b**\b**\b**\b* s\bsq\bql\bl_\b?\b\u00b6 *\b**\b**\b**\b*\n * [\b[s\bsq\bql\bl]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n- Fixed caching issue where using the _\bT_\be_\bx_\bt_\bu_\ba_\bl_\bS_\be_\bl_\be_\bc_\bt_\b._\ba_\bd_\bd_\b__\bc_\bt_\be_\b(_\b) method of the\n- _\bT_\be_\bx_\bt_\bu_\ba_\bl_\bS_\be_\bl_\be_\bc_\bt construct would not set a correct cache key which\n- distinguished between different CTE expressions.\n- References: _\b#_\b1_\b1_\b4_\b7_\b1\n+ Fixed caching issue where the _\bS_\be_\bl_\be_\bc_\bt_\b._\bw_\bi_\bt_\bh_\b__\bf_\bo_\br_\b__\bu_\bp_\bd_\ba_\bt_\be_\b._\bk_\be_\by_\b__\bs_\bh_\ba_\br_\be element of\n+ _\bS_\be_\bl_\be_\bc_\bt_\b._\bw_\bi_\bt_\bh_\b__\bf_\bo_\br_\b__\bu_\bp_\bd_\ba_\bt_\be_\b(_\b) was not considered as part of the cache key,\n+ leading to incorrect caching if different variations of this parameter\n+ were used with an otherwise identical statement.\n+ References: _\b#_\b1_\b1_\b5_\b4_\b4\n [\b[s\bsq\bql\bl]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n-Fixed caching issue where the _\bS_\be_\bl_\be_\bc_\bt_\b._\bw_\bi_\bt_\bh_\b__\bf_\bo_\br_\b__\bu_\bp_\bd_\ba_\bt_\be_\b._\bk_\be_\by_\b__\bs_\bh_\ba_\br_\be element of\n-_\bS_\be_\bl_\be_\bc_\bt_\b._\bw_\bi_\bt_\bh_\b__\bf_\bo_\br_\b__\bu_\bp_\bd_\ba_\bt_\be_\b(_\b) was not considered as part of the cache key, leading\n-to incorrect caching if different variations of this parameter were used with\n-an otherwise identical statement.\n-References: _\b#_\b1_\b1_\b5_\b4_\b4\n+Fixed caching issue where using the _\bT_\be_\bx_\bt_\bu_\ba_\bl_\bS_\be_\bl_\be_\bc_\bt_\b._\ba_\bd_\bd_\b__\bc_\bt_\be_\b(_\b) method of the\n+_\bT_\be_\bx_\bt_\bu_\ba_\bl_\bS_\be_\bl_\be_\bc_\bt construct would not set a correct cache key which distinguished\n+between different CTE expressions.\n+References: _\b#_\b1_\b1_\b4_\b7_\b1\n *\b**\b**\b**\b* m\bmy\byp\bpy\by_\b?\b\u00b6 *\b**\b**\b**\b*\n * [\b[m\bmy\byp\bpy\by]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n The deprecated mypy plugin is no longer fully functional with the latest\n series of mypy 1.11.0, as changes in the mypy interpreter are no longer\n compatible with the approach used by the plugin. If code is dependent on\n the mypy plugin with sqlalchemy2-stubs, it\u2019s recommended to pin mypy to\n be below the 1.11.0 series. Seek upgrading to the 2.0 series of\n"}]}, {"source1": "./usr/share/doc/python-sqlalchemy-doc/html/orm/examples.html", "source2": "./usr/share/doc/python-sqlalchemy-doc/html/orm/examples.html", "comments": ["Ordering differences only"], "unified_diff": "@@ -299,46 +299,46 @@\n
Examples illustrating the usage of the \u201cassociation object\u201d pattern,\n where an intermediary class mediates the relationship between two\n classes that are associated in a many-to-many pattern.
\nListing of files:
basic_association.py - Illustrate a many-to-many relationship between an\n-\u201cOrder\u201d and a collection of \u201cItem\u201d objects, associating a purchase price\n-with each via an association object called \u201cOrderItem\u201d
\n-dict_of_sets_with_default.py - An advanced association proxy example which\n illustrates nesting of association proxies to produce multi-level Python\n collections, in this case a dictionary with string keys and sets of integers\n as values, which conceal the underlying mapped classes.
\nbasic_association.py - Illustrate a many-to-many relationship between an\n+\u201cOrder\u201d and a collection of \u201cItem\u201d objects, associating a purchase price\n+with each via an association object called \u201cOrderItem\u201d
\n+proxied_association.py - Same example as basic_association, adding in\n usage of sqlalchemy.ext.associationproxy
to make explicit references\n to OrderItem
optional.
Examples illustrating the asyncio engine feature of SQLAlchemy.
\nListing of files:
greenlet_orm.py - Illustrates use of the sqlalchemy.ext.asyncio.AsyncSession object\n+for asynchronous ORM use, including the optional run_sync() method.
\n+async_orm.py - Illustrates use of the sqlalchemy.ext.asyncio.AsyncSession
object\n for asynchronous ORM use.
basic.py - Illustrates the asyncio engine / connection interface.
\n+gather_orm_statements.py - Illustrates how to run many statements concurrently using asyncio.gather()
\n along many asyncio database connections, merging ORM results into a single\n AsyncSession
.
greenlet_orm.py - Illustrates use of the sqlalchemy.ext.asyncio.AsyncSession object\n-for asynchronous ORM use, including the optional run_sync() method.
\n-basic.py - Illustrates the asyncio engine / connection interface.
\n-async_orm_writeonly.py - Illustrates using write only relationships for simpler handling\n of ORM collections under asyncio.
\nListing of files:
table_per_related.py - Illustrates a generic association which persists association\n objects within individual tables, each one generated to persist\n those objects on behalf of a particular parent class.
\ntable_per_association.py - Illustrates a mixin which provides a generic association\n-via a individually generated association tables for each parent class.\n-The associated objects themselves are persisted in a single table\n-shared among all parents.
\n-discriminator_on_association.py - Illustrates a mixin which provides a generic association\n using a single target table and a single association table,\n referred to by all parent tables. The association table\n contains a \u201cdiscriminator\u201d column which determines what type of\n parent object associates to each particular row in the association\n table.
\ntable_per_association.py - Illustrates a mixin which provides a generic association\n+via a individually generated association tables for each parent class.\n+The associated objects themselves are persisted in a single table\n+shared among all parents.
\n+generic_fk.py - Illustrates a so-called \u201cgeneric foreign key\u201d, in a similar fashion\n to that of popular frameworks such as Django, ROR, etc. This\n approach bypasses standard referential integrity\n practices, in that the \u201cforeign key\u201d column is not actually\n constrained to refer to any particular table; instead,\n in-application logic is used to determine which table is referenced.
\nSee also
\n \nListing of files:
bulk_updates.py - This series of tests will illustrate different ways to UPDATE a large number\n-of rows in bulk (under construction! there\u2019s just one test at the moment)
\n+__main__.py - Allows the examples/performance package to be run as a script.
\nlarge_resultsets.py - In this series of tests, we are looking at time to load a large number\n of very small and simple rows.
\nsingle_inserts.py - In this series of tests, we\u2019re looking at a method that inserts a row\n within a distinct transaction, and afterwards returns to essentially a\n \u201cclosed\u201d state. This would be analogous to an API call that starts up\n a database connection, inserts the row, commits and closes.
\n__main__.py - Allows the examples/performance package to be run as a script.
\n-short_selects.py - This series of tests illustrates different ways to SELECT a single\n record by primary key
\nbulk_inserts.py - This series of tests illustrates different ways to INSERT a large number\n of rows in bulk.
\nbulk_updates.py - This series of tests will illustrate different ways to UPDATE a large number\n+of rows in bulk (under construction! there\u2019s just one test at the moment)
\n+This is the default form of run:
\n$ python -m examples.performance single_inserts\n@@ -751,31 +751,31 @@\n Several examples that illustrate the technique of intercepting changes\n that would be first interpreted as an UPDATE on a row, and instead turning\n it into an INSERT of a new row, leaving the previous row intact as\n a historical version.
\n Compare to the Versioning with a History Table example which writes a\n history row to a separate history table.
\n Listing of files:
versioned_map.py - A variant of the versioned_rows example built around the\n-concept of a \u201cvertical table\u201d structure, like those illustrated in\n-Vertical Attribute Mapping examples.
\n-versioned_rows.py - Illustrates a method to intercept changes on objects, turning\n-an UPDATE statement on a single row into an INSERT statement, so that a new\n-row is inserted with the new data, keeping the old row intact.
\n-versioned_update_old_row.py - Illustrates the same UPDATE into INSERT technique of versioned_rows.py
,\n but also emits an UPDATE on the old row to affect a change in timestamp.\n Also includes a SessionEvents.do_orm_execute()
hook to limit queries\n to only the most recent version.
versioned_rows_w_versionid.py - Illustrates a method to intercept changes on objects, turning\n an UPDATE statement on a single row into an INSERT statement, so that a new\n row is inserted with the new data, keeping the old row intact.
\nversioned_map.py - A variant of the versioned_rows example built around the\n+concept of a \u201cvertical table\u201d structure, like those illustrated in\n+Vertical Attribute Mapping examples.
\n+versioned_rows.py - Illustrates a method to intercept changes on objects, turning\n+an UPDATE statement on a single row into an INSERT statement, so that a new\n+row is inserted with the new data, keeping the old row intact.
\n+Illustrates \u201cvertical table\u201d mappings.
\n@@ -800,54 +800,54 @@\n q = (session.query(Animal).\n filter(Animal.facts.any(\n and_(AnimalFact.key == u'weasel-like',\n AnimalFact.value == True))))\n print('weasel-like animals', q.all())Listing of files:
dictlike.py - Mapping a vertical table as a dictionary.
\n-dictlike-polymorphic.py - Mapping a polymorphic-valued vertical table as a dictionary.
\ndictlike.py - Mapping a vertical table as a dictionary.
\n+Working examples of single-table, joined-table, and concrete-table\n inheritance as described in Mapping Class Inheritance Hierarchies.
\nListing of files:
concrete.py - Concrete-table (table-per-class) inheritance example.
\n+single.py - Single-table (table-per-hierarchy) inheritance example.
\njoined.py - Joined-table (table-per-subclass) inheritance example.
\nsingle.py - Single-table (table-per-hierarchy) inheritance example.
\n+concrete.py - Concrete-table (table-per-class) inheritance example.
\nExamples illustrating modifications to SQLAlchemy\u2019s attribute management\n system.
\nListing of files:
custom_management.py - Illustrates customized class instrumentation, using\n-the sqlalchemy.ext.instrumentation
extension package.
active_column_defaults.py - Illustrates use of the AttributeEvents.init_scalar()
\n event, in conjunction with Core column defaults to provide\n ORM objects that automatically produce the default value\n when an un-set attribute is accessed.
custom_management.py - Illustrates customized class instrumentation, using\n+the sqlalchemy.ext.instrumentation
extension package.
listen_for_events.py - Illustrates how to attach events to all instrumented attributes\n and listen for change events.
\nListing of files:
separate_databases.py - Illustrates sharding using distinct SQLite databases.
\nasyncio.py - Illustrates sharding API used with asyncio.
\n-separate_schema_translates.py - Illustrates sharding using a single database with multiple schemas,\n where a different \u201cschema_translates_map\u201d can be used for each shard.
\nasyncio.py - Illustrates sharding API used with asyncio.
\n+separate_tables.py - Illustrates sharding using a single SQLite database, that will however\n have multiple tables using a naming convention.
\nExamples include demonstrations of the with_loader_criteria()
\n option as well as the SessionEvents.do_orm_execute()
hook.
As of SQLAlchemy 1.4, the Query
construct is unified\n with the Select
construct, so that these two objects\n are mostly the same.
Listing of files:
filter_public.py - Illustrates a global criteria applied to entities of a particular type.
\n+temporal_range.py - Illustrates a custom per-query criteria that will be applied\n to selected entities.
\nfilter_public.py - Illustrates a global criteria applied to entities of a particular type.
\n-Illustrates how to embed\n dogpile.cache\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -96,35 +96,36 @@\n Listing of files:\n * _\ba_\bd_\bj_\ba_\bc_\be_\bn_\bc_\by_\b__\bl_\bi_\bs_\bt_\b._\bp_\by\n *\b**\b**\b**\b* A\bAs\bss\bso\boc\bci\bia\bat\bti\bio\bon\bns\bs_\b?\b\u00b6 *\b**\b**\b**\b*\n Examples illustrating the usage of the \u201cassociation object\u201d pattern, where an\n intermediary class mediates the relationship between two classes that are\n associated in a many-to-many pattern.\n Listing of files:\n- * _\bb_\ba_\bs_\bi_\bc_\b__\ba_\bs_\bs_\bo_\bc_\bi_\ba_\bt_\bi_\bo_\bn_\b._\bp_\by - Illustrate a many-to-many relationship between an\n- \u201cOrder\u201d and a collection of \u201cItem\u201d objects, associating a purchase price\n- with each via an association object called \u201cOrderItem\u201d\n-_\bd_\bi_\bc_\bt_\b__\bo_\bf_\b__\bs_\be_\bt_\bs_\b__\bw_\bi_\bt_\bh_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt_\b._\bp_\by - An advanced association proxy example which\n-illustrates nesting of association proxies to produce multi-level Python\n-collections, in this case a dictionary with string keys and sets of integers as\n-values, which conceal the underlying mapped classes.\n+ * _\bd_\bi_\bc_\bt_\b__\bo_\bf_\b__\bs_\be_\bt_\bs_\b__\bw_\bi_\bt_\bh_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt_\b._\bp_\by - An advanced association proxy example\n+ which illustrates nesting of association proxies to produce multi-level\n+ Python collections, in this case a dictionary with string keys and sets\n+ of integers as values, which conceal the underlying mapped classes.\n+_\bb_\ba_\bs_\bi_\bc_\b__\ba_\bs_\bs_\bo_\bc_\bi_\ba_\bt_\bi_\bo_\bn_\b._\bp_\by - Illustrate a many-to-many relationship between an\n+\u201cOrder\u201d and a collection of \u201cItem\u201d objects, associating a purchase price with\n+each via an association object called \u201cOrderItem\u201d\n _\bp_\br_\bo_\bx_\bi_\be_\bd_\b__\ba_\bs_\bs_\bo_\bc_\bi_\ba_\bt_\bi_\bo_\bn_\b._\bp_\by - Same example as basic_association, adding in usage of\n _\bs_\bq_\bl_\ba_\bl_\bc_\bh_\be_\bm_\by_\b._\be_\bx_\bt_\b._\ba_\bs_\bs_\bo_\bc_\bi_\ba_\bt_\bi_\bo_\bn_\bp_\br_\bo_\bx_\by to make explicit references to OrderItem\n optional.\n *\b**\b**\b**\b* A\bAs\bsy\byn\bnc\bci\bio\bo I\bIn\bnt\bte\beg\bgr\bra\bat\bti\bio\bon\bn_\b?\b\u00b6 *\b**\b**\b**\b*\n Examples illustrating the asyncio engine feature of SQLAlchemy.\n Listing of files:\n- * _\ba_\bs_\by_\bn_\bc_\b__\bo_\br_\bm_\b._\bp_\by - Illustrates use of the sqlalchemy.ext.asyncio.AsyncSession\n- object for asynchronous ORM use.\n+ * _\bg_\br_\be_\be_\bn_\bl_\be_\bt_\b__\bo_\br_\bm_\b._\bp_\by - Illustrates use of the\n+ sqlalchemy.ext.asyncio.AsyncSession object for asynchronous ORM use,\n+ including the optional run_sync() method.\n+_\ba_\bs_\by_\bn_\bc_\b__\bo_\br_\bm_\b._\bp_\by - Illustrates use of the sqlalchemy.ext.asyncio.AsyncSession\n+object for asynchronous ORM use.\n+_\bb_\ba_\bs_\bi_\bc_\b._\bp_\by - Illustrates the asyncio engine / connection interface.\n _\bg_\ba_\bt_\bh_\be_\br_\b__\bo_\br_\bm_\b__\bs_\bt_\ba_\bt_\be_\bm_\be_\bn_\bt_\bs_\b._\bp_\by - Illustrates how to run many statements concurrently\n using asyncio.gather() along many asyncio database connections, merging ORM\n results into a single AsyncSession.\n-_\bg_\br_\be_\be_\bn_\bl_\be_\bt_\b__\bo_\br_\bm_\b._\bp_\by - Illustrates use of the sqlalchemy.ext.asyncio.AsyncSession\n-object for asynchronous ORM use, including the optional run_sync() method.\n-_\bb_\ba_\bs_\bi_\bc_\b._\bp_\by - Illustrates the asyncio engine / connection interface.\n _\ba_\bs_\by_\bn_\bc_\b__\bo_\br_\bm_\b__\bw_\br_\bi_\bt_\be_\bo_\bn_\bl_\by_\b._\bp_\by - Illustrates using w\bwr\bri\bit\bte\be o\bon\bnl\bly\by r\bre\bel\bla\bat\bti\bio\bon\bns\bsh\bhi\bip\bps\bs for simpler\n handling of ORM collections under asyncio.\n *\b**\b**\b**\b* D\bDi\bir\bre\bec\bct\bte\bed\bd G\bGr\bra\bap\bph\bhs\bs_\b?\b\u00b6 *\b**\b**\b**\b*\n An example of persistence for a directed graph structure. The graph is stored\n as a collection of edges, each referencing both a \u201clower\u201d and an \u201cupper\u201d node\n in a table of nodes. Basic persistence and querying for lower- and upper-\n neighbors are illustrated:\n@@ -151,23 +152,23 @@\n The _\bd_\bi_\bs_\bc_\br_\bi_\bm_\bi_\bn_\ba_\bt_\bo_\br_\b__\bo_\bn_\b__\ba_\bs_\bs_\bo_\bc_\bi_\ba_\bt_\bi_\bo_\bn_\b._\bp_\by and _\bg_\be_\bn_\be_\br_\bi_\bc_\b__\bf_\bk_\b._\bp_\by scripts are modernized\n versions of recipes presented in the 2007 blog post _\bP_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\b _\bA_\bs_\bs_\bo_\bc_\bi_\ba_\bt_\bi_\bo_\bn_\bs\n _\bw_\bi_\bt_\bh_\b _\bS_\bQ_\bL_\bA_\bl_\bc_\bh_\be_\bm_\by.\n Listing of files:\n * _\bt_\ba_\bb_\bl_\be_\b__\bp_\be_\br_\b__\br_\be_\bl_\ba_\bt_\be_\bd_\b._\bp_\by - Illustrates a generic association which persists\n association objects within individual tables, each one generated to\n persist those objects on behalf of a particular parent class.\n-_\bt_\ba_\bb_\bl_\be_\b__\bp_\be_\br_\b__\ba_\bs_\bs_\bo_\bc_\bi_\ba_\bt_\bi_\bo_\bn_\b._\bp_\by - Illustrates a mixin which provides a generic\n-association via a individually generated association tables for each parent\n-class. The associated objects themselves are persisted in a single table shared\n-among all parents.\n _\bd_\bi_\bs_\bc_\br_\bi_\bm_\bi_\bn_\ba_\bt_\bo_\br_\b__\bo_\bn_\b__\ba_\bs_\bs_\bo_\bc_\bi_\ba_\bt_\bi_\bo_\bn_\b._\bp_\by - Illustrates a mixin which provides a generic\n association using a single target table and a single association table,\n referred to by all parent tables. The association table contains a\n \u201cdiscriminator\u201d column which determines what type of parent object associates\n to each particular row in the association table.\n+_\bt_\ba_\bb_\bl_\be_\b__\bp_\be_\br_\b__\ba_\bs_\bs_\bo_\bc_\bi_\ba_\bt_\bi_\bo_\bn_\b._\bp_\by - Illustrates a mixin which provides a generic\n+association via a individually generated association tables for each parent\n+class. The associated objects themselves are persisted in a single table shared\n+among all parents.\n _\bg_\be_\bn_\be_\br_\bi_\bc_\b__\bf_\bk_\b._\bp_\by - Illustrates a so-called \u201cgeneric foreign key\u201d, in a similar\n fashion to that of popular frameworks such as Django, ROR, etc. This approach\n bypasses standard referential integrity practices, in that the \u201cforeign key\u201d\n column is not actually constrained to refer to any particular table; instead,\n in-application logic is used to determine which table is referenced.\n *\b**\b**\b**\b* M\bMa\bat\bte\ber\bri\bia\bal\bli\biz\bze\bed\bd P\bPa\bat\bth\bhs\bs_\b?\b\u00b6 *\b**\b**\b**\b*\n Illustrates the \u201cmaterialized paths\u201d pattern for hierarchical data using the\n@@ -220,28 +221,29 @@\n $ python -m examples.performance bulk_inserts \\\n --dburl mysql+mysqldb://scott:tiger@localhost/test \\\n --profile --num 1000\n See also\n _\bH_\bo_\bw_\b _\bc_\ba_\bn_\b _\bI_\b _\bp_\br_\bo_\bf_\bi_\bl_\be_\b _\ba_\b _\bS_\bQ_\bL_\bA_\bl_\bc_\bh_\be_\bm_\by_\b _\bp_\bo_\bw_\be_\br_\be_\bd_\b _\ba_\bp_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bo_\bn_\b?\n *\b**\b**\b* F\bFi\bil\ble\be L\bLi\bis\bst\bti\bin\bng\bg_\b?\b\u00b6 *\b**\b**\b*\n Listing of files:\n- * _\bb_\bu_\bl_\bk_\b__\bu_\bp_\bd_\ba_\bt_\be_\bs_\b._\bp_\by - This series of tests will illustrate different ways to\n- UPDATE a large number of rows in bulk (under construction! there\u2019s just\n- one test at the moment)\n+ * _\b__\b__\bm_\ba_\bi_\bn_\b__\b__\b._\bp_\by - Allows the examples/performance package to be run as a\n+ script.\n _\bl_\ba_\br_\bg_\be_\b__\br_\be_\bs_\bu_\bl_\bt_\bs_\be_\bt_\bs_\b._\bp_\by - In this series of tests, we are looking at time to load a\n large number of very small and simple rows.\n _\bs_\bi_\bn_\bg_\bl_\be_\b__\bi_\bn_\bs_\be_\br_\bt_\bs_\b._\bp_\by - In this series of tests, we\u2019re looking at a method that\n inserts a row within a distinct transaction, and afterwards returns to\n essentially a \u201cclosed\u201d state. This would be analogous to an API call that\n starts up a database connection, inserts the row, commits and closes.\n-_\b__\b__\bm_\ba_\bi_\bn_\b__\b__\b._\bp_\by - Allows the examples/performance package to be run as a script.\n _\bs_\bh_\bo_\br_\bt_\b__\bs_\be_\bl_\be_\bc_\bt_\bs_\b._\bp_\by - This series of tests illustrates different ways to SELECT a\n single record by primary key\n _\bb_\bu_\bl_\bk_\b__\bi_\bn_\bs_\be_\br_\bt_\bs_\b._\bp_\by - This series of tests illustrates different ways to INSERT a\n large number of rows in bulk.\n+_\bb_\bu_\bl_\bk_\b__\bu_\bp_\bd_\ba_\bt_\be_\bs_\b._\bp_\by - This series of tests will illustrate different ways to UPDATE\n+a large number of rows in bulk (under construction! there\u2019s just one test at\n+the moment)\n *\b**\b**\b* R\bRu\bun\bnn\bni\bin\bng\bg a\bal\bll\bl t\bte\bes\bst\bts\bs w\bwi\bit\bth\bh t\bti\bim\bme\be_\b?\b\u00b6 *\b**\b**\b*\n This is the default form of run:\n $ python -m examples.performance single_inserts\n Tests to run: test_orm_commit, test_bulk_save,\n test_bulk_insert_dictionaries, test_core,\n test_core_query_caching, test_dbapi_raw_w_connect,\n test_dbapi_raw_w_pool\n@@ -467,27 +469,28 @@\n Several examples that illustrate the technique of intercepting changes that\n would be first interpreted as an UPDATE on a row, and instead turning it into\n an INSERT of a new row, leaving the previous row intact as a historical\n version.\n Compare to the _\bV_\be_\br_\bs_\bi_\bo_\bn_\bi_\bn_\bg_\b _\bw_\bi_\bt_\bh_\b _\ba_\b _\bH_\bi_\bs_\bt_\bo_\br_\by_\b _\bT_\ba_\bb_\bl_\be example which writes a history\n row to a separate history table.\n Listing of files:\n- * _\bv_\be_\br_\bs_\bi_\bo_\bn_\be_\bd_\b__\bm_\ba_\bp_\b._\bp_\by - A variant of the versioned_rows example built around\n- the concept of a \u201cvertical table\u201d structure, like those illustrated in\n- _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl_\b _\bA_\bt_\bt_\br_\bi_\bb_\bu_\bt_\be_\b _\bM_\ba_\bp_\bp_\bi_\bn_\bg examples.\n-_\bv_\be_\br_\bs_\bi_\bo_\bn_\be_\bd_\b__\br_\bo_\bw_\bs_\b._\bp_\by - Illustrates a method to intercept changes on objects,\n-turning an UPDATE statement on a single row into an INSERT statement, so that a\n-new row is inserted with the new data, keeping the old row intact.\n-_\bv_\be_\br_\bs_\bi_\bo_\bn_\be_\bd_\b__\bu_\bp_\bd_\ba_\bt_\be_\b__\bo_\bl_\bd_\b__\br_\bo_\bw_\b._\bp_\by - Illustrates the same UPDATE into INSERT technique\n-of versioned_rows.py, but also emits an UPDATE on the o\bol\bld\bd row to affect a\n-change in timestamp. Also includes a _\bS_\be_\bs_\bs_\bi_\bo_\bn_\bE_\bv_\be_\bn_\bt_\bs_\b._\bd_\bo_\b__\bo_\br_\bm_\b__\be_\bx_\be_\bc_\bu_\bt_\be_\b(_\b) hook to\n-limit queries to only the most recent version.\n+ * _\bv_\be_\br_\bs_\bi_\bo_\bn_\be_\bd_\b__\bu_\bp_\bd_\ba_\bt_\be_\b__\bo_\bl_\bd_\b__\br_\bo_\bw_\b._\bp_\by - Illustrates the same UPDATE into INSERT\n+ technique of versioned_rows.py, but also emits an UPDATE on the o\bol\bld\bd row\n+ to affect a change in timestamp. Also includes a\n+ _\bS_\be_\bs_\bs_\bi_\bo_\bn_\bE_\bv_\be_\bn_\bt_\bs_\b._\bd_\bo_\b__\bo_\br_\bm_\b__\be_\bx_\be_\bc_\bu_\bt_\be_\b(_\b) hook to limit queries to only the most\n+ recent version.\n _\bv_\be_\br_\bs_\bi_\bo_\bn_\be_\bd_\b__\br_\bo_\bw_\bs_\b__\bw_\b__\bv_\be_\br_\bs_\bi_\bo_\bn_\bi_\bd_\b._\bp_\by - Illustrates a method to intercept changes on\n objects, turning an UPDATE statement on a single row into an INSERT statement,\n so that a new row is inserted with the new data, keeping the old row intact.\n+_\bv_\be_\br_\bs_\bi_\bo_\bn_\be_\bd_\b__\bm_\ba_\bp_\b._\bp_\by - A variant of the versioned_rows example built around the\n+concept of a \u201cvertical table\u201d structure, like those illustrated in _\bV_\be_\br_\bt_\bi_\bc_\ba_\bl\n+_\bA_\bt_\bt_\br_\bi_\bb_\bu_\bt_\be_\b _\bM_\ba_\bp_\bp_\bi_\bn_\bg examples.\n+_\bv_\be_\br_\bs_\bi_\bo_\bn_\be_\bd_\b__\br_\bo_\bw_\bs_\b._\bp_\by - Illustrates a method to intercept changes on objects,\n+turning an UPDATE statement on a single row into an INSERT statement, so that a\n+new row is inserted with the new data, keeping the old row intact.\n *\b**\b**\b**\b* V\bVe\ber\brt\bti\bic\bca\bal\bl A\bAt\btt\btr\bri\bib\bbu\but\bte\be M\bMa\bap\bpp\bpi\bin\bng\bg_\b?\b\u00b6 *\b**\b**\b**\b*\n Illustrates \u201cvertical table\u201d mappings.\n A \u201cvertical table\u201d refers to a technique where individual attributes of an\n object are stored as distinct rows in a table. The \u201cvertical table\u201d technique\n is used to persist objects which can have a varied set of attributes, at the\n expense of simple query control and brevity. It is commonly found in content/\n document management systems in order to represent user-created structures\n@@ -506,35 +509,36 @@\n \n q = (session.query(Animal).\n filter(Animal.facts.any(\n and_(AnimalFact.key == u'weasel-like',\n AnimalFact.value == True))))\n print('weasel-like animals', q.all())\n Listing of files:\n- * _\bd_\bi_\bc_\bt_\bl_\bi_\bk_\be_\b._\bp_\by - Mapping a vertical table as a dictionary.\n-_\bd_\bi_\bc_\bt_\bl_\bi_\bk_\be_\b-_\bp_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\b._\bp_\by - Mapping a polymorphic-valued vertical table as a\n-dictionary.\n+ * _\bd_\bi_\bc_\bt_\bl_\bi_\bk_\be_\b-_\bp_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\b._\bp_\by - Mapping a polymorphic-valued vertical table as\n+ a dictionary.\n+_\bd_\bi_\bc_\bt_\bl_\bi_\bk_\be_\b._\bp_\by - Mapping a vertical table as a dictionary.\n *\b**\b**\b**\b**\b* I\bIn\bnh\bhe\ber\bri\bit\bta\ban\bnc\bce\be M\bMa\bap\bpp\bpi\bin\bng\bg R\bRe\bec\bci\bip\bpe\bes\bs_\b?\b\u00b6 *\b**\b**\b**\b**\b*\n *\b**\b**\b**\b* B\bBa\bas\bsi\bic\bc I\bIn\bnh\bhe\ber\bri\bit\bta\ban\bnc\bce\be M\bMa\bap\bpp\bpi\bin\bng\bgs\bs_\b?\b\u00b6 *\b**\b**\b**\b*\n Working examples of single-table, joined-table, and concrete-table inheritance\n as described in _\bM_\ba_\bp_\bp_\bi_\bn_\bg_\b _\bC_\bl_\ba_\bs_\bs_\b _\bI_\bn_\bh_\be_\br_\bi_\bt_\ba_\bn_\bc_\be_\b _\bH_\bi_\be_\br_\ba_\br_\bc_\bh_\bi_\be_\bs.\n Listing of files:\n- * _\bc_\bo_\bn_\bc_\br_\be_\bt_\be_\b._\bp_\by - Concrete-table (table-per-class) inheritance example.\n+ * _\bs_\bi_\bn_\bg_\bl_\be_\b._\bp_\by - Single-table (table-per-hierarchy) inheritance example.\n _\bj_\bo_\bi_\bn_\be_\bd_\b._\bp_\by - Joined-table (table-per-subclass) inheritance example.\n-_\bs_\bi_\bn_\bg_\bl_\be_\b._\bp_\by - Single-table (table-per-hierarchy) inheritance example.\n+_\bc_\bo_\bn_\bc_\br_\be_\bt_\be_\b._\bp_\by - Concrete-table (table-per-class) inheritance example.\n *\b**\b**\b**\b**\b* S\bSp\bpe\bec\bci\bia\bal\bl A\bAP\bPI\bIs\bs_\b?\b\u00b6 *\b**\b**\b**\b**\b*\n *\b**\b**\b**\b* A\bAt\btt\btr\bri\bib\bbu\but\bte\be I\bIn\bns\bst\btr\bru\bum\bme\ben\bnt\bta\bat\bti\bio\bon\bn_\b?\b\u00b6 *\b**\b**\b**\b*\n Examples illustrating modifications to SQLAlchemy\u2019s attribute management\n system.\n Listing of files:\n- * _\bc_\bu_\bs_\bt_\bo_\bm_\b__\bm_\ba_\bn_\ba_\bg_\be_\bm_\be_\bn_\bt_\b._\bp_\by - Illustrates customized class instrumentation,\n- using the _\bs_\bq_\bl_\ba_\bl_\bc_\bh_\be_\bm_\by_\b._\be_\bx_\bt_\b._\bi_\bn_\bs_\bt_\br_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn extension package.\n-_\ba_\bc_\bt_\bi_\bv_\be_\b__\bc_\bo_\bl_\bu_\bm_\bn_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt_\bs_\b._\bp_\by - Illustrates use of the _\bA_\bt_\bt_\br_\bi_\bb_\bu_\bt_\be_\bE_\bv_\be_\bn_\bt_\bs_\b._\bi_\bn_\bi_\bt_\b__\bs_\bc_\ba_\bl_\ba_\br\n-_\b(_\b) event, in conjunction with Core column defaults to provide ORM objects that\n-automatically produce the default value when an un-set attribute is accessed.\n+ * _\ba_\bc_\bt_\bi_\bv_\be_\b__\bc_\bo_\bl_\bu_\bm_\bn_\b__\bd_\be_\bf_\ba_\bu_\bl_\bt_\bs_\b._\bp_\by - Illustrates use of the\n+ _\bA_\bt_\bt_\br_\bi_\bb_\bu_\bt_\be_\bE_\bv_\be_\bn_\bt_\bs_\b._\bi_\bn_\bi_\bt_\b__\bs_\bc_\ba_\bl_\ba_\br_\b(_\b) event, in conjunction with Core column\n+ defaults to provide ORM objects that automatically produce the default\n+ value when an un-set attribute is accessed.\n+_\bc_\bu_\bs_\bt_\bo_\bm_\b__\bm_\ba_\bn_\ba_\bg_\be_\bm_\be_\bn_\bt_\b._\bp_\by - Illustrates customized class instrumentation, using the\n+_\bs_\bq_\bl_\ba_\bl_\bc_\bh_\be_\bm_\by_\b._\be_\bx_\bt_\b._\bi_\bn_\bs_\bt_\br_\bu_\bm_\be_\bn_\bt_\ba_\bt_\bi_\bo_\bn extension package.\n _\bl_\bi_\bs_\bt_\be_\bn_\b__\bf_\bo_\br_\b__\be_\bv_\be_\bn_\bt_\bs_\b._\bp_\by - Illustrates how to attach events to all instrumented\n attributes and listen for change events.\n *\b**\b**\b**\b* H\bHo\bor\bri\biz\bzo\bon\bnt\bta\bal\bl S\bSh\bha\bar\brd\bdi\bin\bng\bg_\b?\b\u00b6 *\b**\b**\b**\b*\n A basic example of using the SQLAlchemy Sharding API. Sharding refers to\n horizontally scaling data across multiple databases.\n The basic components of a \u201csharded\u201d mapping are:\n * multiple _\bE_\bn_\bg_\bi_\bn_\be instances, each assigned a \u201cshard id\u201d. These _\bE_\bn_\bg_\bi_\bn_\be\n@@ -559,34 +563,34 @@\n issue of organizing instances among multiple databases. For a more plain-spoken\n alternative, the \u201cdistinct entity\u201d approach is a simple method of assigning\n objects to different tables (and potentially database nodes) in an explicit way\n - described on the wiki at _\bE_\bn_\bt_\bi_\bt_\by_\bN_\ba_\bm_\be.\n Listing of files:\n * _\bs_\be_\bp_\ba_\br_\ba_\bt_\be_\b__\bd_\ba_\bt_\ba_\bb_\ba_\bs_\be_\bs_\b._\bp_\by - Illustrates sharding using distinct SQLite\n databases.\n-_\ba_\bs_\by_\bn_\bc_\bi_\bo_\b._\bp_\by - Illustrates sharding API used with asyncio.\n _\bs_\be_\bp_\ba_\br_\ba_\bt_\be_\b__\bs_\bc_\bh_\be_\bm_\ba_\b__\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\be_\bs_\b._\bp_\by - Illustrates sharding using a single database\n with multiple schemas, where a different \u201cschema_translates_map\u201d can be used\n for each shard.\n+_\ba_\bs_\by_\bn_\bc_\bi_\bo_\b._\bp_\by - Illustrates sharding API used with asyncio.\n _\bs_\be_\bp_\ba_\br_\ba_\bt_\be_\b__\bt_\ba_\bb_\bl_\be_\bs_\b._\bp_\by - Illustrates sharding using a single SQLite database, that\n will however have multiple tables using a naming convention.\n *\b**\b**\b**\b**\b* E\bEx\bxt\bte\ben\bnd\bdi\bin\bng\bg t\bth\bhe\be O\bOR\bRM\bM_\b?\b\u00b6 *\b**\b**\b**\b**\b*\n *\b**\b**\b**\b* O\bOR\bRM\bM Q\bQu\bue\ber\bry\by E\bEv\bve\ben\bnt\bts\bs_\b?\b\u00b6 *\b**\b**\b**\b*\n Recipes which illustrate augmentation of ORM SELECT behavior as used by\n _\bS_\be_\bs_\bs_\bi_\bo_\bn_\b._\be_\bx_\be_\bc_\bu_\bt_\be_\b(_\b) with _\b2_\b._\b0_\b _\bs_\bt_\by_\bl_\be use of _\bs_\be_\bl_\be_\bc_\bt_\b(_\b), as well as the _\b1_\b._\bx_\b _\bs_\bt_\by_\bl_\be\n _\bQ_\bu_\be_\br_\by object.\n Examples include demonstrations of the _\bw_\bi_\bt_\bh_\b__\bl_\bo_\ba_\bd_\be_\br_\b__\bc_\br_\bi_\bt_\be_\br_\bi_\ba_\b(_\b) option as well as\n the _\bS_\be_\bs_\bs_\bi_\bo_\bn_\bE_\bv_\be_\bn_\bt_\bs_\b._\bd_\bo_\b__\bo_\br_\bm_\b__\be_\bx_\be_\bc_\bu_\bt_\be_\b(_\b) hook.\n As of SQLAlchemy 1.4, the _\bQ_\bu_\be_\br_\by construct is unified with the _\bS_\be_\bl_\be_\bc_\bt construct,\n so that these two objects are mostly the same.\n Listing of files:\n- * _\bt_\be_\bm_\bp_\bo_\br_\ba_\bl_\b__\br_\ba_\bn_\bg_\be_\b._\bp_\by - Illustrates a custom per-query criteria that will be\n- applied to selected entities.\n-_\bf_\bi_\bl_\bt_\be_\br_\b__\bp_\bu_\bb_\bl_\bi_\bc_\b._\bp_\by - Illustrates a global criteria applied to entities of a\n-particular type.\n+ * _\bf_\bi_\bl_\bt_\be_\br_\b__\bp_\bu_\bb_\bl_\bi_\bc_\b._\bp_\by - Illustrates a global criteria applied to entities of a\n+ particular type.\n+_\bt_\be_\bm_\bp_\bo_\br_\ba_\bl_\b__\br_\ba_\bn_\bg_\be_\b._\bp_\by - Illustrates a custom per-query criteria that will be\n+applied to selected entities.\n *\b**\b**\b**\b* D\bDo\bog\bgp\bpi\bil\ble\be C\bCa\bac\bch\bhi\bin\bng\bg_\b?\b\u00b6 *\b**\b**\b**\b*\n Illustrates how to embed _\bd_\bo_\bg_\bp_\bi_\bl_\be_\b._\bc_\ba_\bc_\bh_\be functionality with ORM queries, allowing\n full cache control as well as the ability to pull \u201clazy loaded\u201d attributes from\n long term cache.\n In this demo, the following techniques are illustrated:\n * Using the _\bS_\be_\bs_\bs_\bi_\bo_\bn_\bE_\bv_\be_\bn_\bt_\bs_\b._\bd_\bo_\b__\bo_\br_\bm_\b__\be_\bx_\be_\bc_\bu_\bt_\be_\b(_\b) event hook\n * Basic technique of circumventing _\bS_\be_\bs_\bs_\bi_\bo_\bn_\b._\be_\bx_\be_\bc_\bu_\bt_\be_\b(_\b) to pull from a custom\n"}]}]}]}]}]}