{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.9RZY0lOO/b1/sqlalchemy_2.0.32+ds1-1_i386.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.9RZY0lOO/b2/sqlalchemy_2.0.32+ds1-1_i386.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,5 +1,5 @@\n \n- 98a02c5c49bd80e90e3e1d1c45d8c8b2 3956068 doc optional python-sqlalchemy-doc_2.0.32+ds1-1_all.deb\n+ a9d07aad0784f5e68858537e33b02d63 3956116 doc optional python-sqlalchemy-doc_2.0.32+ds1-1_all.deb\n 6be7382861298efb5a82b60405fa7f83 1748792 debug optional python3-sqlalchemy-ext-dbgsym_2.0.32+ds1-1_i386.deb\n b5c87ce5c170577275eeeed1855128e0 219664 python optional python3-sqlalchemy-ext_2.0.32+ds1-1_i386.deb\n e1c78ec120d9d481e2a5c4c579530013 1196072 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 13920 2024-08-23 07:52:58.000000 control.tar.xz\n--rw-r--r-- 0 0 0 3941956 2024-08-23 07:52:58.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 13908 2024-08-23 07:52:58.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 3942016 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": "@@ -9239,15 +9239,22 @@\n
\n

See also

\n

RowProxy is no longer a \u201cproxy\u201d; is now called Row and behaves like an enhanced named tuple

\n
\n

References: #4710

\n

\n \n-
  • [engine] [change] [performance] [py3k] \u00b6

    Disabled the \u201cunicode returns\u201d check that runs on dialect startup when\n+

  • [engine] [performance] \u00b6

    The pool \u201cpre-ping\u201d feature has been refined to not invoke for a DBAPI\n+connection that was just opened in the same checkout operation. pre ping\n+only applies to a DBAPI connection that\u2019s been checked into the pool\n+and is being checked out again.

    \n+

    References: #4524

    \n+

    \n+
  • \n+
  • [engine] [performance] [change] [py3k] \u00b6

    Disabled the \u201cunicode returns\u201d check that runs on dialect startup when\n running under Python 3, which for many years has occurred in order to test\n the current DBAPI\u2019s behavior for whether or not it returns Python Unicode\n or Py2K strings for the VARCHAR and NVARCHAR datatypes. The check still\n occurs by default under Python 2, however the mechanism to test the\n behavior will be removed in SQLAlchemy 2.0 when Python 2 support is also\n removed.

    \n

    This logic was very effective when it was needed, however now that Python 3\n@@ -9258,21 +9265,14 @@\n dialect flags by setting the dialect level flag returns_unicode_strings\n to one of String.RETURNS_CONDITIONAL or\n String.RETURNS_BYTES, both of which will enable Unicode conversion\n even under Python 3.

    \n

    References: #5315

    \n

    \n
  • \n-
  • [engine] [performance] \u00b6

    The pool \u201cpre-ping\u201d feature has been refined to not invoke for a DBAPI\n-connection that was just opened in the same checkout operation. pre ping\n-only applies to a DBAPI connection that\u2019s been checked into the pool\n-and is being checked out again.

    \n-

    References: #4524

    \n-

    \n-
  • \n
  • [engine] [bug] \u00b6

    Revised the Connection.execution_options.schema_translate_map\n feature such that the processing of the SQL statement to receive a specific\n schema name occurs within the execution phase of the statement, rather than\n at the compile phase. This is to support the statement being efficiently\n cached. Previously, the current schema being rendered into the statement\n for a particular run would be considered as part of the cache key itself,\n meaning that for a run against hundreds of schemas, there would be hundreds\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -6354,15 +6354,21 @@\n returned by the ResultProxy is now the LegacyRow subclass, which maintains\n mapping/tuple hybrid behavior, however the base _\bR_\bo_\bw class now behaves more\n fully like a named tuple.\n See also\n _\bR_\bo_\bw_\bP_\br_\bo_\bx_\by_\b _\bi_\bs_\b _\bn_\bo_\b _\bl_\bo_\bn_\bg_\be_\br_\b _\ba_\b _\b\u201c_\bp_\br_\bo_\bx_\by_\b\u201d_\b;_\b _\bi_\bs_\b _\bn_\bo_\bw_\b _\bc_\ba_\bl_\bl_\be_\bd_\b _\bR_\bo_\bw_\b _\ba_\bn_\bd_\b _\bb_\be_\bh_\ba_\bv_\be_\bs_\b _\bl_\bi_\bk_\be_\b _\ba_\bn_\b _\be_\bn_\bh_\ba_\bn_\bc_\be_\bd\n _\bn_\ba_\bm_\be_\bd_\b _\bt_\bu_\bp_\bl_\be\n References: _\b#_\b4_\b7_\b1_\b0\n-[\b[e\ben\bng\bgi\bin\bne\be]\b] [\b[c\bch\bha\ban\bng\bge\be]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[p\bpy\by3\b3k\bk]\b] _\b\u00b6\n+[\b[e\ben\bng\bgi\bin\bne\be]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] _\b\u00b6\n+The pool \u201cpre-ping\u201d feature has been refined to not invoke for a DBAPI\n+connection that was just opened in the same checkout operation. pre ping only\n+applies to a DBAPI connection that\u2019s been checked into the pool and is being\n+checked out again.\n+References: _\b#_\b4_\b5_\b2_\b4\n+[\b[e\ben\bng\bgi\bin\bne\be]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[c\bch\bha\ban\bng\bge\be]\b] [\b[p\bpy\by3\b3k\bk]\b] _\b\u00b6\n Disabled the \u201cunicode returns\u201d check that runs on dialect startup when running\n under Python 3, which for many years has occurred in order to test the current\n DBAPI\u2019s behavior for whether or not it returns Python Unicode or Py2K strings\n for the VARCHAR and NVARCHAR datatypes. The check still occurs by default under\n Python 2, however the mechanism to test the behavior will be removed in\n SQLAlchemy 2.0 when Python 2 support is also removed.\n This logic was very effective when it was needed, however now that Python 3 is\n@@ -6370,20 +6376,14 @@\n datatypes. In the unlikely case that a third party DBAPI does not support this,\n the conversion logic within _\bS_\bt_\br_\bi_\bn_\bg is still available and the third party\n dialect may specify this in its upfront dialect flags by setting the dialect\n level flag returns_unicode_strings to one of String.RETURNS_CONDITIONAL or\n String.RETURNS_BYTES, both of which will enable Unicode conversion even under\n Python 3.\n References: _\b#_\b5_\b3_\b1_\b5\n-[\b[e\ben\bng\bgi\bin\bne\be]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] _\b\u00b6\n-The pool \u201cpre-ping\u201d feature has been refined to not invoke for a DBAPI\n-connection that was just opened in the same checkout operation. pre ping only\n-applies to a DBAPI connection that\u2019s been checked into the pool and is being\n-checked out again.\n-References: _\b#_\b4_\b5_\b2_\b4\n [\b[e\ben\bng\bgi\bin\bne\be]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n Revised the _\bC_\bo_\bn_\bn_\be_\bc_\bt_\bi_\bo_\bn_\b._\be_\bx_\be_\bc_\bu_\bt_\bi_\bo_\bn_\b__\bo_\bp_\bt_\bi_\bo_\bn_\bs_\b._\bs_\bc_\bh_\be_\bm_\ba_\b__\bt_\br_\ba_\bn_\bs_\bl_\ba_\bt_\be_\b__\bm_\ba_\bp feature such that\n the processing of the SQL statement to receive a specific schema name occurs\n within the execution phase of the statement, rather than at the compile phase.\n This is to support the statement being efficiently cached. Previously, the\n current schema being rendered into the statement for a particular run would be\n considered as part of the cache key itself, meaning that for a run against\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": "@@ -319,29 +319,29 @@\n \n

    \n \n
    \n

    Asyncio Integration\u00b6

    \n

    Examples illustrating the asyncio engine feature of SQLAlchemy.

    \n

    Listing of files:

    \n

    \n
    \n
    \n

    Directed Graphs\u00b6

    \n

    An example of persistence for a directed graph structure. The\n graph is stored as a collection of edges, each referencing both a\n@@ -378,37 +378,37 @@\n subclassing the HasAddresses mixin, which ensures that the\n parent class is provided with an addresses collection\n which contains Address objects.

    \n

    The discriminator_on_association.py and generic_fk.py scripts\n are modernized versions of recipes presented in the 2007 blog post\n Polymorphic Associations with SQLAlchemy.

    \n

    Listing of files:

    \n

    \n
    \n
    \n

    Materialized Paths\u00b6

    \n

    Illustrates the \u201cmaterialized paths\u201d pattern for hierarchical data using the\n SQLAlchemy ORM.

    \n@@ -477,33 +477,33 @@\n \n
    \n

    File Listing\u00b6

    \n

    Listing of files:

      \n-
    • 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-

    • \n-
    • bulk_inserts.py - This series of tests illustrates different ways to INSERT a large number\n-of rows in bulk.

      \n-

    • \n-
    • __main__.py - Allows the examples/performance package to be run as a script.

      \n-

    • \n-
    • large_resultsets.py - In this series of tests, we are looking at time to load a large number\n-of very small and simple rows.

      \n-

    • \n
    • single_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

    • \n
    • short_selects.py - This series of tests illustrates different ways to SELECT a single\n record by primary key

      \n

    • \n+
    • __main__.py - Allows the examples/performance package to be run as a script.

      \n+

    • \n+
    • bulk_inserts.py - This series of tests illustrates different ways to INSERT a large number\n+of rows in bulk.

      \n+

    • \n+
    • large_resultsets.py - In this series of tests, we are looking at time to load a large number\n+of very small and simple rows.

      \n+

    • \n+
    • 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+

    • \n
    \n

    \n
    \n
    \n

    Running all tests with time\u00b6

    \n

    This is the default form of run:

    \n
    $ python -m examples.performance single_inserts\n@@ -751,23 +751,23 @@\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:

      \n-
    • 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.

      \n-

    • \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.

      \n

    • \n+
    • 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.

      \n+

    • \n
    • 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

    • \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@@ -815,42 +815,42 @@\n
      \n

      Inheritance Mapping Recipes\u00b6

      \n
      \n

      Basic Inheritance Mappings\u00b6

      \n

      Working examples of single-table, joined-table, and concrete-table\n inheritance as described in Mapping Class Inheritance Hierarchies.

      \n

      Listing of files:

        \n+
      • concrete.py - Concrete-table (table-per-class) inheritance example.

        \n+

      • \n
      • joined.py - Joined-table (table-per-subclass) inheritance example.

        \n

      • \n
      • single.py - Single-table (table-per-hierarchy) inheritance example.

        \n

      • \n-
      • concrete.py - Concrete-table (table-per-class) inheritance example.

        \n-

      • \n
      \n

      \n
      \n
      \n
      \n

      Special APIs\u00b6

      \n
      \n

      Attribute Instrumentation\u00b6

      \n

      Examples illustrating modifications to SQLAlchemy\u2019s attribute management\n system.

      \n

      Listing of files:

      \n

      \n
      \n
      \n

      Horizontal Sharding\u00b6

      \n

      A basic example of using the SQLAlchemy Sharding API.\n Sharding refers to horizontally scaling data across multiple\n@@ -879,24 +879,24 @@\n

      The construction of generic sharding routines is an ambitious approach\n to the issue of organizing instances among multiple databases. For a\n more plain-spoken alternative, the \u201cdistinct entity\u201d approach\n is a simple method of assigning objects to different tables (and potentially\n database nodes) in an explicit way - described on the wiki at\n EntityName.

      \n

      Listing of files:

        \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.

        \n+

      • \n
      • separate_tables.py - Illustrates sharding using a single SQLite database, that will however\n have multiple tables using a naming convention.

        \n

      • \n
      • asyncio.py - Illustrates sharding API used with asyncio.

        \n

      • \n
      • separate_databases.py - Illustrates sharding using distinct SQLite databases.

        \n

      • \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.

        \n-

      • \n
      \n

      \n
      \n
      \n
      \n

      Extending the ORM\u00b6

      \n
      \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -109,24 +109,24 @@\n values, which conceal the underlying mapped classes.\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+ * _\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\n+ simpler handling of ORM collections under asyncio.\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 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 _\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 *\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 n2 = Node(2)\n n5 = Node(5)\n@@ -148,32 +148,31 @@\n Supplier, both subclassing the HasAddresses mixin, which ensures that the\n parent class is provided with an addresses collection which contains Address\n objects.\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- * _\bg_\be_\bn_\be_\br_\bi_\bc_\b__\bf_\bk_\b._\bp_\by - Illustrates a so-called \u201cgeneric foreign key\u201d, in a\n- similar fashion to that of popular frameworks such as Django, ROR, etc.\n- This approach bypasses standard referential integrity practices, in that\n- the \u201cforeign key\u201d column is not actually constrained to refer to any\n- particular table; instead, in-application logic is used to determine\n- which table is referenced.\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\n+ generic association using a single target table and a single association\n+ table, referred to by all parent tables. The association table contains a\n+ \u201cdiscriminator\u201d column which determines what type of parent object\n+ associates to each particular row in the association table.\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 persist\n+those objects on behalf of a particular parent class.\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 _\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-_\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 persist\n-those objects on behalf of a particular parent class.\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 *\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 SQLAlchemy ORM.\n Listing of files:\n * _\bm_\ba_\bt_\be_\br_\bi_\ba_\bl_\bi_\bz_\be_\bd_\b__\bp_\ba_\bt_\bh_\bs_\b._\bp_\by - Illustrates the \u201cmaterialized paths\u201d pattern.\n *\b**\b**\b**\b* N\bNe\bes\bst\bte\bed\bd S\bSe\bet\bts\bs_\b?\b\u00b6 *\b**\b**\b**\b*\n Illustrates a rudimentary way to implement the \u201cnested sets\u201d pattern for\n@@ -221,28 +220,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+ * _\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\n+ that inserts a row within a distinct transaction, and afterwards returns\n+ to essentially a \u201cclosed\u201d state. This would be analogous to an API call\n+ that starts up a database connection, inserts the row, commits and\n+ closes.\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+_\b__\b__\bm_\ba_\bi_\bn_\b__\b__\b._\bp_\by - Allows the examples/performance package to be run as a script.\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-_\b__\b__\bm_\ba_\bi_\bn_\b__\b__\b._\bp_\by - Allows the examples/performance package to be run as a 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-_\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__\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@@ -468,22 +468,22 @@\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__\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\n- on objects, turning an UPDATE statement on a single row into an INSERT\n- statement, so that a new row is inserted with the new data, keeping the\n- 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@@ -516,29 +516,29 @@\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 *\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- * _\bj_\bo_\bi_\bn_\be_\bd_\b._\bp_\by - Joined-table (table-per-subclass) inheritance example.\n+ * _\bc_\bo_\bn_\bc_\br_\be_\bt_\be_\b._\bp_\by - Concrete-table (table-per-class) 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 * _\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\n instrumented attributes and listen for change events.\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 _\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+_\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 *\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 instances may refer to different databases, or different schemas /\n accounts within the same database, or they can even be differentiated\n@@ -559,21 +559,21 @@\n attempt to determine a single shard being requested.\n The construction of generic sharding routines is an ambitious approach to the\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__\bt_\ba_\bb_\bl_\be_\bs_\b._\bp_\by - Illustrates sharding using a single SQLite database,\n- that will however have multiple tables using a naming convention.\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\n+ database with multiple schemas, where a different \u201cschema_translates_map\u201d\n+ can be used for each shard.\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 _\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__\bd_\ba_\bt_\ba_\bb_\ba_\bs_\be_\bs_\b._\bp_\by - Illustrates sharding using distinct SQLite databases.\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 *\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"}]}]}]}]}]}