{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.9JEM4O51/b1/sqlalchemy_1.4.50+ds1-1_amd64.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.9JEM4O51/b2/sqlalchemy_1.4.50+ds1-1_amd64.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,5 +1,5 @@\n \n- 3f67245a2ffb1f76d0a6e36142d10a7b 3720016 doc optional python-sqlalchemy-doc_1.4.50+ds1-1_all.deb\n+ 739570e234d53bb198d30e333edf17f5 3720044 doc optional python-sqlalchemy-doc_1.4.50+ds1-1_all.deb\n 5644a5f4007e027d67a7e9c2152c87e8 70312 debug optional python3-sqlalchemy-ext-dbgsym_1.4.50+ds1-1_amd64.deb\n 43fb1fe4a0a459ee6c85e9a9d5ed8dcc 20916 python optional python3-sqlalchemy-ext_1.4.50+ds1-1_amd64.deb\n 7b9b7746123a45060be2c12bd6e80ed4 1009400 python optional python3-sqlalchemy_1.4.50+ds1-1_all.deb\n"}, {"source1": "python-sqlalchemy-doc_1.4.50+ds1-1_all.deb", "source2": "python-sqlalchemy-doc_1.4.50+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-01-05 13:47:47.000000 debian-binary\n--rw-r--r-- 0 0 0 13376 2024-01-05 13:47:47.000000 control.tar.xz\n--rw-r--r-- 0 0 0 3706448 2024-01-05 13:47:47.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 13368 2024-01-05 13:47:47.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 3706484 2024-01-05 13:47:47.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_10.html", "source2": "./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_10.html", "unified_diff": "@@ -590,15 +590,15 @@\n
\n

1.0 Changelog\u00b6

\n
\n

1.0.19\u00b6

\n Released: August 3, 2017
\n

oracle\u00b6

\n
    \n-
  • [oracle] [bug] [performance] [py2k] \u00b6

    Fixed performance regression caused by the fix for #3937 where\n+

  • [oracle] [performance] [bug] [py2k] \u00b6

    Fixed performance regression caused by the fix for #3937 where\n cx_Oracle as of version 5.3 dropped the .UNICODE symbol from its\n namespace, which was interpreted as cx_Oracle\u2019s \u201cWITH_UNICODE\u201d mode being\n turned on unconditionally, which invokes functions on the SQLAlchemy\n side which convert all strings to unicode unconditionally and causing\n a performance impact. In fact, per cx_Oracle\u2019s author the\n \u201cWITH_UNICODE\u201d mode has been removed entirely as of 5.1, so the expensive unicode\n conversion functions are no longer necessary and are disabled if\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -316,15 +316,15 @@\n # _\bo_\br_\ba_\bc_\bl_\be\n # _\bt_\be_\bs_\bt_\bs\n # _\bm_\bi_\bs_\bc\n *\b**\b**\b**\b**\b**\b* 1\b1.\b.0\b0 C\bCh\bha\ban\bng\bge\bel\blo\bog\bg_\b?\b\u00b6 *\b**\b**\b**\b**\b**\b*\n *\b**\b**\b**\b**\b* 1\b1.\b.0\b0.\b.1\b19\b9_\b?\b\u00b6 *\b**\b**\b**\b**\b*\n Released: August 3, 2017\n *\b**\b**\b**\b* o\bor\bra\bac\bcl\ble\be_\b?\b\u00b6 *\b**\b**\b**\b*\n- * [\b[o\bor\bra\bac\bcl\ble\be]\b] [\b[b\bbu\bug\bg]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[p\bpy\by2\b2k\bk]\b] _\b\u00b6\n+ * [\b[o\bor\bra\bac\bcl\ble\be]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[b\bbu\bug\bg]\b] [\b[p\bpy\by2\b2k\bk]\b] _\b\u00b6\n Fixed performance regression caused by the fix for _\b#_\b3_\b9_\b3_\b7 where cx_Oracle\n as of version 5.3 dropped the .UNICODE symbol from its namespace, which\n was interpreted as cx_Oracle\u2019s \u201cWITH_UNICODE\u201d mode being turned on\n unconditionally, which invokes functions on the SQLAlchemy side which\n convert all strings to unicode unconditionally and causing a performance\n impact. In fact, per cx_Oracle\u2019s author the \u201cWITH_UNICODE\u201d mode has been\n removed entirely as of 5.1, so the expensive unicode conversion functions\n"}]}, {"source1": "./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_11.html", "source2": "./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_11.html", "unified_diff": "@@ -875,15 +875,15 @@\n

\n
\n
\n

1.1.13\u00b6

\n Released: August 3, 2017
\n

oracle\u00b6

\n
    \n-
  • [oracle] [bug] [performance] [py2k] \u00b6

    Fixed performance regression caused by the fix for #3937 where\n+

  • [oracle] [performance] [bug] [py2k] \u00b6

    Fixed performance regression caused by the fix for #3937 where\n cx_Oracle as of version 5.3 dropped the .UNICODE symbol from its\n namespace, which was interpreted as cx_Oracle\u2019s \u201cWITH_UNICODE\u201d mode being\n turned on unconditionally, which invokes functions on the SQLAlchemy\n side which convert all strings to unicode unconditionally and causing\n a performance impact. In fact, per cx_Oracle\u2019s author the\n \u201cWITH_UNICODE\u201d mode has been removed entirely as of 5.1, so the expensive unicode\n conversion functions are no longer necessary and are disabled if\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -495,15 +495,15 @@\n the same PRECEDING or FOLLOWING keywords in a range by allowing for the\n left side of the range to be positive and for the right to be negative,\n e.g. (1, 3) is \u201c1 FOLLOWING AND 3 FOLLOWING\u201d.\n References: _\b#_\b4_\b0_\b5_\b3\n *\b**\b**\b**\b**\b* 1\b1.\b.1\b1.\b.1\b13\b3_\b?\b\u00b6 *\b**\b**\b**\b**\b*\n Released: August 3, 2017\n *\b**\b**\b**\b* o\bor\bra\bac\bcl\ble\be_\b?\b\u00b6 *\b**\b**\b**\b*\n- * [\b[o\bor\bra\bac\bcl\ble\be]\b] [\b[b\bbu\bug\bg]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[p\bpy\by2\b2k\bk]\b] _\b\u00b6\n+ * [\b[o\bor\bra\bac\bcl\ble\be]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[b\bbu\bug\bg]\b] [\b[p\bpy\by2\b2k\bk]\b] _\b\u00b6\n Fixed performance regression caused by the fix for _\b#_\b3_\b9_\b3_\b7 where cx_Oracle\n as of version 5.3 dropped the .UNICODE symbol from its namespace, which\n was interpreted as cx_Oracle\u2019s \u201cWITH_UNICODE\u201d mode being turned on\n unconditionally, which invokes functions on the SQLAlchemy side which\n convert all strings to unicode unconditionally and causing a performance\n impact. In fact, per cx_Oracle\u2019s author the \u201cWITH_UNICODE\u201d mode has been\n removed entirely as of 5.1, so the expensive unicode conversion functions\n"}]}, {"source1": "./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_12.html", "source2": "./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_12.html", "unified_diff": "@@ -2979,15 +2979,15 @@\n

    \n
  • \n
\n
\n
\n

oracle\u00b6

\n
    \n-
  • [oracle] [bug] [performance] [py2k] \u00b6

    Fixed performance regression caused by the fix for #3937 where\n+

  • [oracle] [performance] [bug] [py2k] \u00b6

    Fixed performance regression caused by the fix for #3937 where\n cx_Oracle as of version 5.3 dropped the .UNICODE symbol from its\n namespace, which was interpreted as cx_Oracle\u2019s \u201cWITH_UNICODE\u201d mode being\n turned on unconditionally, which invokes functions on the SQLAlchemy\n side which convert all strings to unicode unconditionally and causing\n a performance impact. In fact, per cx_Oracle\u2019s author the\n \u201cWITH_UNICODE\u201d mode has been removed entirely as of 5.1, so the expensive unicode\n conversion functions are no longer necessary and are disabled if\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1878,15 +1878,15 @@\n verify the number of rows affected on a target version.\n [\b[m\bms\bss\bsq\bql\bl]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n Added a rule to SQL Server index reflection to ignore the so-called \u201cheap\u201d\n index that is implicitly present on a table that does not specify a clustered\n index.\n References: _\b#_\b4_\b0_\b5_\b9\n *\b**\b**\b**\b* o\bor\bra\bac\bcl\ble\be_\b?\b\u00b6 *\b**\b**\b**\b*\n- * [\b[o\bor\bra\bac\bcl\ble\be]\b] [\b[b\bbu\bug\bg]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[p\bpy\by2\b2k\bk]\b] _\b\u00b6\n+ * [\b[o\bor\bra\bac\bcl\ble\be]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[b\bbu\bug\bg]\b] [\b[p\bpy\by2\b2k\bk]\b] _\b\u00b6\n Fixed performance regression caused by the fix for _\b#_\b3_\b9_\b3_\b7 where cx_Oracle\n as of version 5.3 dropped the .UNICODE symbol from its namespace, which\n was interpreted as cx_Oracle\u2019s \u201cWITH_UNICODE\u201d mode being turned on\n unconditionally, which invokes functions on the SQLAlchemy side which\n convert all strings to unicode unconditionally and causing a performance\n impact. In fact, per cx_Oracle\u2019s author the \u201cWITH_UNICODE\u201d mode has been\n removed entirely as of 5.1, so the expensive unicode conversion functions\n"}]}, {"source1": "./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_13.html", "source2": "./usr/share/doc/python-sqlalchemy-doc/html/changelog/changelog_13.html", "unified_diff": "@@ -1803,30 +1803,30 @@\n

    \n
  • \n
\n
\n
\n

oracle\u00b6

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

    Some modifications to how the cx_oracle dialect sets up per-column\n-outputtype handlers for LOB and numeric datatypes to adjust for potential\n-changes coming in cx_Oracle 8.

    \n-

    References: #5246

    \n-

    \n-
  • \n-
  • [oracle] [bug] [performance] \u00b6

    Changed the implementation of fetching CLOB and BLOB objects to use\n+

  • [oracle] [performance] [bug] \u00b6

    Changed the implementation of fetching CLOB and BLOB objects to use\n cx_Oracle\u2019s native implementation which fetches CLOB/BLOB objects inline\n with other result columns, rather than performing a separate fetch. As\n always, this can be disabled by setting auto_convert_lobs to False.

    \n

    As part of this change, the behavior of a CLOB that was given a blank\n string on INSERT now returns None on SELECT, which is now consistent with\n that of VARCHAR on Oracle.

    \n

    References: #5314

    \n

    \n
  • \n+
  • [oracle] [bug] \u00b6

    Some modifications to how the cx_oracle dialect sets up per-column\n+outputtype handlers for LOB and numeric datatypes to adjust for potential\n+changes coming in cx_Oracle 8.

    \n+

    References: #5246

    \n+

    \n+
  • \n
\n
\n
\n

firebird\u00b6

\n
    \n
  • [firebird] [change] \u00b6

    Adjusted dialect loading for firebird:// URIs so the external\n sqlalchemy-firebird dialect will be used if it has been installed,\n@@ -2204,15 +2204,15 @@\n

    misc\u00b6

    \n
      \n
    • [usecase] [ext] \u00b6

      Added keyword arguments to the MutableList.sort() function so that a\n key function as well as the \u201creverse\u201d keyword argument can be provided.

      \n

      References: #5114

      \n

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

      Revised an internal change to the test system added as a result of\n+

    • [performance] [bug] \u00b6

      Revised an internal change to the test system added as a result of\n #5085 where a testing-related module per dialect would be loaded\n unconditionally upon making use of that dialect, pulling in SQLAlchemy\u2019s\n testing framework as well as the ORM into the module import space. This\n would only impact initial startup time and memory to a modest extent,\n however it\u2019s best that these additional modules aren\u2019t reverse-dependent on\n straight Core usage.

      \n

      References: #5180

      \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1144,28 +1144,28 @@\n References: _\b#_\b5_\b2_\b5_\b5\n [\b[m\bms\bss\bsq\bql\bl]\b] [\b[b\bbu\bug\bg]\b] [\b[r\bre\bef\bfl\ble\bec\bct\bti\bio\bon\bn]\b] _\b\u00b6\n Fix a regression introduced by the reflection of computed column in MSSQL when\n using SQL server versions before 2012, which does not support the concat\n function.\n References: _\b#_\b5_\b2_\b7_\b1\n *\b**\b**\b**\b* o\bor\bra\bac\bcl\ble\be_\b?\b\u00b6 *\b**\b**\b**\b*\n- * [\b[o\bor\bra\bac\bcl\ble\be]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n- Some modifications to how the cx_oracle dialect sets up per-column\n- outputtype handlers for LOB and numeric datatypes to adjust for potential\n- changes coming in cx_Oracle 8.\n- References: _\b#_\b5_\b2_\b4_\b6\n-[\b[o\bor\bra\bac\bcl\ble\be]\b] [\b[b\bbu\bug\bg]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] _\b\u00b6\n-Changed the implementation of fetching CLOB and BLOB objects to use cx_Oracle\u2019s\n-native implementation which fetches CLOB/BLOB objects inline with other result\n-columns, rather than performing a separate fetch. As always, this can be\n-disabled by setting auto_convert_lobs to False.\n-As part of this change, the behavior of a CLOB that was given a blank string on\n-INSERT now returns None on SELECT, which is now consistent with that of VARCHAR\n-on Oracle.\n-References: _\b#_\b5_\b3_\b1_\b4\n+ * [\b[o\bor\bra\bac\bcl\ble\be]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n+ Changed the implementation of fetching CLOB and BLOB objects to use\n+ cx_Oracle\u2019s native implementation which fetches CLOB/BLOB objects inline\n+ with other result columns, rather than performing a separate fetch. As\n+ always, this can be disabled by setting auto_convert_lobs to False.\n+ As part of this change, the behavior of a CLOB that was given a blank\n+ string on INSERT now returns None on SELECT, which is now consistent with\n+ that of VARCHAR on Oracle.\n+ References: _\b#_\b5_\b3_\b1_\b4\n+[\b[o\bor\bra\bac\bcl\ble\be]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n+Some modifications to how the cx_oracle dialect sets up per-column outputtype\n+handlers for LOB and numeric datatypes to adjust for potential changes coming\n+in cx_Oracle 8.\n+References: _\b#_\b5_\b2_\b4_\b6\n *\b**\b**\b**\b* f\bfi\bir\bre\beb\bbi\bir\brd\bd_\b?\b\u00b6 *\b**\b**\b**\b*\n * [\b[f\bfi\bir\bre\beb\bbi\bir\brd\bd]\b] [\b[c\bch\bha\ban\bng\bge\be]\b] _\b\u00b6\n Adjusted dialect loading for firebird:// URIs so the external sqlalchemy-\n firebird dialect will be used if it has been installed, otherwise fall\n back to the (now deprecated) internal Firebird dialect.\n References: _\b#_\b5_\b2_\b7_\b8\n *\b**\b**\b**\b**\b* 1\b1.\b.3\b3.\b.1\b16\b6_\b?\b\u00b6 *\b**\b**\b**\b**\b*\n@@ -1409,15 +1409,15 @@\n but owned by someone else. Pull request courtesy Dave Hirschfeld.\n References: _\b#_\b5_\b1_\b4_\b6\n *\b**\b**\b**\b* m\bmi\bis\bsc\bc_\b?\b\u00b6 *\b**\b**\b**\b*\n * [\b[u\bus\bse\bec\bca\bas\bse\be]\b] [\b[e\bex\bxt\bt]\b] _\b\u00b6\n Added keyword arguments to the _\bM_\bu_\bt_\ba_\bb_\bl_\be_\bL_\bi_\bs_\bt_\b._\bs_\bo_\br_\bt_\b(_\b) function so that a key\n function as well as the \u201creverse\u201d keyword argument can be provided.\n References: _\b#_\b5_\b1_\b1_\b4\n-[\b[b\bbu\bug\bg]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] _\b\u00b6\n+[\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n Revised an internal change to the test system added as a result of _\b#_\b5_\b0_\b8_\b5 where\n a testing-related module per dialect would be loaded unconditionally upon\n making use of that dialect, pulling in SQLAlchemy\u2019s testing framework as well\n as the ORM into the module import space. This would only impact initial startup\n time and memory to a modest extent, however it\u2019s best that these additional\n modules aren\u2019t reverse-dependent on straight Core usage.\n References: _\b#_\b5_\b1_\b8_\b0\n"}]}, {"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": "@@ -2857,36 +2857,36 @@\n attributes and entities that are installed as part of an Insert,\n Update, or Delete construct. The\n Select.column_descriptions accessor is also now implemented for\n Core-only selectables.

      \n

      References: #7861

      \n

      \n
    • \n-
    • [orm] [bug] [regression] \u00b6

      Fixed regression in \u201cdynamic\u201d loader strategy where the\n+

    • [orm] [performance] [bug] \u00b6

      Improvements in memory usage by the ORM, removing a significant set of\n+intermediary expression objects that are typically stored when a copy of an\n+expression object is created. These clones have been greatly reduced,\n+reducing the number of total expression objects stored in memory by\n+ORM mappings by about 30%.

      \n+

      References: #7823

      \n+

      \n+
    • \n+
    • [orm] [bug] [regression] \u00b6

      Fixed regression in \u201cdynamic\u201d loader strategy where the\n Query.filter_by() method would not be given an appropriate\n entity to filter from, in the case where a \u201csecondary\u201d table were present\n in the relationship being queried and the mapping were against something\n complex such as a \u201cwith polymorphic\u201d.

      \n

      References: #7868

      \n

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

      Fixed bug where composite() attributes would not work in\n+

    • [orm] [bug] \u00b6

      Fixed bug where composite() attributes would not work in\n conjunction with the selectin_polymorphic() loader strategy for\n joined table inheritance.

      \n

      References: #7801

      \n

      \n
    • \n-
    • [orm] [bug] [performance] \u00b6

      Improvements in memory usage by the ORM, removing a significant set of\n-intermediary expression objects that are typically stored when a copy of an\n-expression object is created. These clones have been greatly reduced,\n-reducing the number of total expression objects stored in memory by\n-ORM mappings by about 30%.

      \n-

      References: #7823

      \n-

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

      Fixed issue where the selectin_polymorphic() loader option would\n not work with joined inheritance mappers that don\u2019t have a fixed\n \u201cpolymorphic_on\u201d column. Additionally added test support for a wider\n variety of usage patterns with this construct.

      \n

      References: #7799

      \n

      \n
    • \n@@ -4612,15 +4612,15 @@\n

      \n \n
    \n
\n
\n

oracle\u00b6

\n
    \n-
  • [oracle] [bug] [performance] \u00b6

    Added a CAST(VARCHAR2(128)) to the \u201ctable name\u201d, \u201cowner\u201d, and other\n+

  • [oracle] [performance] [bug] \u00b6

    Added a CAST(VARCHAR2(128)) to the \u201ctable name\u201d, \u201cowner\u201d, and other\n DDL-name parameters as used in reflection queries against Oracle system\n views such as ALL_TABLES, ALL_TAB_CONSTRAINTS, etc to better enable\n indexing to take place against these columns, as they previously would be\n implicitly handled as NVARCHAR2 due to Python\u2019s use of Unicode for strings;\n these columns are documented in all Oracle versions as being VARCHAR2 with\n lengths varying from 30 to 128 characters depending on server version.\n Additionally, test support has been enabled for Unicode-named DDL\n@@ -5334,15 +5334,24 @@\n

\n
\n
\n

1.4.18\u00b6

\n Released: June 10, 2021
\n

orm\u00b6

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

    Clarified the current purpose of the\n+

  • [orm] [performance] [bug] [regression] \u00b6

    Fixed regression involving how the ORM would resolve a given mapped column\n+to a result row, where under cases such as joined eager loading, a slightly\n+more expensive \u201cfallback\u201d could take place to set up this resolution due to\n+some logic that was removed since 1.3. The issue could also cause\n+deprecation warnings involving column resolution to be emitted when using a\n+1.4 style query with joined eager loading.

    \n+

    References: #6596

    \n+

    \n+
  • \n+
  • [orm] [bug] \u00b6

    Clarified the current purpose of the\n relationship.bake_queries flag, which in 1.4 is to enable\n or disable \u201clambda caching\u201d of statements within the \u201clazyload\u201d and\n \u201cselectinload\u201d loader strategies; this is separate from the more\n foundational SQL query cache that is used for most statements.\n Additionally, the lazy loader no longer uses its own cache for many-to-one\n SQL queries, which was an implementation quirk that doesn\u2019t exist for any\n other loader scenario. Finally, the \u201clru cache\u201d warning that the lazyloader\n@@ -5352,38 +5361,29 @@\n setting bake_queries=False for such a relationship will remove this\n cache from being used, there\u2019s no particular performance gain in this case\n as using no caching vs. using a cache that needs to refresh often likely\n still wins out on the caching being used side.

    \n

    References: #6072, #6487

    \n

    \n
  • \n-
  • [orm] [bug] [regression] \u00b6

    Adjusted the means by which classes such as scoped_session\n+

  • [orm] [bug] [regression] \u00b6

    Adjusted the means by which classes such as scoped_session\n and AsyncSession are generated from the base\n Session class, such that custom Session\n subclasses such as that used by Flask-SQLAlchemy don\u2019t need to implement\n positional arguments when they call into the superclass method, and can\n continue using the same argument styles as in previous releases.

    \n

    References: #6285

    \n

    \n
  • \n-
  • [orm] [bug] [regression] \u00b6

    Fixed issue where query production for joinedload against a complex left\n+

  • [orm] [bug] [regression] \u00b6

    Fixed issue where query production for joinedload against a complex left\n hand side involving joined-table inheritance could fail to produce a\n correct query, due to a clause adaption issue.

    \n

    References: #6595

    \n

    \n
  • \n-
  • [orm] [bug] [performance] [regression] \u00b6

    Fixed regression involving how the ORM would resolve a given mapped column\n-to a result row, where under cases such as joined eager loading, a slightly\n-more expensive \u201cfallback\u201d could take place to set up this resolution due to\n-some logic that was removed since 1.3. The issue could also cause\n-deprecation warnings involving column resolution to be emitted when using a\n-1.4 style query with joined eager loading.

    \n-

    References: #6596

    \n-

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

    Fixed issue in experimental \u201cselect ORM objects from INSERT/UPDATE\u201d use\n case where an error was raised if the statement were against a\n single-table-inheritance subclass.

    \n

    References: #6591

    \n

    \n
  • \n
  • [orm] [bug] \u00b6

    The warning that\u2019s emitted for relationship() when multiple\n@@ -6227,15 +6227,15 @@\n synonyms can be established linking to these constructs which work\n fully. This is a behavior that was semi-explicitly disallowed previously,\n however since it did not fail in every scenario, explicit support\n for assoc proxy and hybrids has been added.

    \n

    References: #6267

    \n

    \n
  • \n-
  • [orm] [bug] [performance] [regression] [sql] \u00b6

    Fixed a critical performance issue where the traversal of a\n+

  • [orm] [performance] [bug] [regression] [sql] \u00b6

    Fixed a critical performance issue where the traversal of a\n select() construct would traverse a repetitive product of the\n represented FROM clauses as they were each referred towards by columns in\n the columns clause; for a series of nested subqueries with lots of columns\n this could cause a large delay and significant memory growth. This\n traversal is used by a wide variety of SQL and ORM functions, including by\n the ORM Session when it\u2019s configured to have\n \u201ctable-per-bind\u201d, which while this is not a common use case, it seems to be\n@@ -9028,15 +9028,22 @@\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@@ -9047,21 +9054,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": "@@ -1901,31 +1901,31 @@\n [\b[o\bor\brm\bm]\b] [\b[u\bus\bse\bec\bca\bas\bse\be]\b] _\b\u00b6\n Added new attributes _\bU_\bp_\bd_\ba_\bt_\be_\bB_\ba_\bs_\be_\b._\br_\be_\bt_\bu_\br_\bn_\bi_\bn_\bg_\b__\bc_\bo_\bl_\bu_\bm_\bn_\b__\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn_\bs and\n _\bU_\bp_\bd_\ba_\bt_\be_\bB_\ba_\bs_\be_\b._\be_\bn_\bt_\bi_\bt_\by_\b__\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn to allow for inspection of ORM attributes and\n entities that are installed as part of an _\bI_\bn_\bs_\be_\br_\bt, _\bU_\bp_\bd_\ba_\bt_\be, or _\bD_\be_\bl_\be_\bt_\be construct.\n The _\bS_\be_\bl_\be_\bc_\bt_\b._\bc_\bo_\bl_\bu_\bm_\bn_\b__\bd_\be_\bs_\bc_\br_\bi_\bp_\bt_\bi_\bo_\bn_\bs accessor is also now implemented for Core-only\n selectables.\n References: _\b#_\b7_\b8_\b6_\b1\n+[\b[o\bor\brm\bm]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n+Improvements in memory usage by the ORM, removing a significant set of\n+intermediary expression objects that are typically stored when a copy of an\n+expression object is created. These clones have been greatly reduced, reducing\n+the number of total expression objects stored in memory by ORM mappings by\n+about 30%.\n+References: _\b#_\b7_\b8_\b2_\b3\n [\b[o\bor\brm\bm]\b] [\b[b\bbu\bug\bg]\b] [\b[r\bre\beg\bgr\bre\bes\bss\bsi\bio\bon\bn]\b] _\b\u00b6\n Fixed regression in \u201cdynamic\u201d loader strategy where the _\bQ_\bu_\be_\br_\by_\b._\bf_\bi_\bl_\bt_\be_\br_\b__\bb_\by_\b(_\b)\n method would not be given an appropriate entity to filter from, in the case\n where a \u201csecondary\u201d table were present in the relationship being queried and\n the mapping were against something complex such as a \u201cwith polymorphic\u201d.\n References: _\b#_\b7_\b8_\b6_\b8\n [\b[o\bor\brm\bm]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n Fixed bug where _\bc_\bo_\bm_\bp_\bo_\bs_\bi_\bt_\be_\b(_\b) attributes would not work in conjunction with the\n _\bs_\be_\bl_\be_\bc_\bt_\bi_\bn_\b__\bp_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\b(_\b) loader strategy for joined table inheritance.\n References: _\b#_\b7_\b8_\b0_\b1\n-[\b[o\bor\brm\bm]\b] [\b[b\bbu\bug\bg]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] _\b\u00b6\n-Improvements in memory usage by the ORM, removing a significant set of\n-intermediary expression objects that are typically stored when a copy of an\n-expression object is created. These clones have been greatly reduced, reducing\n-the number of total expression objects stored in memory by ORM mappings by\n-about 30%.\n-References: _\b#_\b7_\b8_\b2_\b3\n [\b[o\bor\brm\bm]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n Fixed issue where the _\bs_\be_\bl_\be_\bc_\bt_\bi_\bn_\b__\bp_\bo_\bl_\by_\bm_\bo_\br_\bp_\bh_\bi_\bc_\b(_\b) loader option would not work with\n joined inheritance mappers that don\u2019t have a fixed \u201cpolymorphic_on\u201d column.\n Additionally added test support for a wider variety of usage patterns with this\n construct.\n References: _\b#_\b7_\b7_\b9_\b9\n [\b[o\bor\brm\bm]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n@@ -3123,15 +3123,15 @@\n * [\b[m\bms\bss\bsq\bql\bl]\b] [\b[b\bbu\bug\bg]\b] [\b[r\bre\bef\bfl\ble\bec\bct\bti\bio\bon\bn]\b] _\b\u00b6\n Fixed an issue where sqlalchemy.engine.reflection.has_table() returned\n True for local temporary tables that actually belonged to a different SQL\n Server session (connection). An extra check is now performed to ensure\n that the temp table detected is in fact owned by the current session.\n References: _\b#_\b6_\b9_\b1_\b0\n *\b**\b**\b**\b* o\bor\bra\bac\bcl\ble\be_\b?\b\u00b6 *\b**\b**\b**\b*\n- * [\b[o\bor\bra\bac\bcl\ble\be]\b] [\b[b\bbu\bug\bg]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] _\b\u00b6\n+ * [\b[o\bor\bra\bac\bcl\ble\be]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n Added a CAST(VARCHAR2(128)) to the \u201ctable name\u201d, \u201cowner\u201d, and other DDL-\n name parameters as used in reflection queries against Oracle system views\n such as ALL_TABLES, ALL_TAB_CONSTRAINTS, etc to better enable indexing to\n take place against these columns, as they previously would be implicitly\n handled as NVARCHAR2 due to Python\u2019s use of Unicode for strings; these\n columns are documented in all Oracle versions as being VARCHAR2 with\n lengths varying from 30 to 128 characters depending on server version.\n@@ -3631,51 +3631,50 @@\n the INSERT thus triggering SQLAlchemy\u2019s feature of setting IDENTITY INSERT to\n \u201con\u201d; it\u2019s in this directive where the schema translate map would fail to be\n honored.\n References: _\b#_\b6_\b6_\b5_\b8\n *\b**\b**\b**\b**\b* 1\b1.\b.4\b4.\b.1\b18\b8_\b?\b\u00b6 *\b**\b**\b**\b**\b*\n Released: June 10, 2021\n *\b**\b**\b**\b* o\bor\brm\bm_\b?\b\u00b6 *\b**\b**\b**\b*\n- * [\b[o\bor\brm\bm]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n- Clarified the current purpose of the _\br_\be_\bl_\ba_\bt_\bi_\bo_\bn_\bs_\bh_\bi_\bp_\b._\bb_\ba_\bk_\be_\b__\bq_\bu_\be_\br_\bi_\be_\bs flag,\n- which in 1.4 is to enable or disable \u201clambda caching\u201d of statements\n- within the \u201clazyload\u201d and \u201cselectinload\u201d loader strategies; this is\n- separate from the more foundational SQL query cache that is used for most\n- statements. Additionally, the lazy loader no longer uses its own cache\n- for many-to-one SQL queries, which was an implementation quirk that\n- doesn\u2019t exist for any other loader scenario. Finally, the \u201clru cache\u201d\n- warning that the lazyloader and selectinloader strategies could emit when\n- handling a wide array of class/relationship combinations has been\n- removed; based on analysis of some end-user cases, this warning doesn\u2019t\n- suggest any significant issue. While setting bake_queries=False for such\n- a relationship will remove this cache from being used, there\u2019s no\n- particular performance gain in this case as using no caching vs. using a\n- cache that needs to refresh often likely still wins out on the caching\n- being used side.\n- References: _\b#_\b6_\b0_\b7_\b2, _\b#_\b6_\b4_\b8_\b7\n+ * [\b[o\bor\brm\bm]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[b\bbu\bug\bg]\b] [\b[r\bre\beg\bgr\bre\bes\bss\bsi\bio\bon\bn]\b] _\b\u00b6\n+ Fixed regression involving how the ORM would resolve a given mapped\n+ column to a result row, where under cases such as joined eager loading, a\n+ slightly more expensive \u201cfallback\u201d could take place to set up this\n+ resolution due to some logic that was removed since 1.3. The issue could\n+ also cause deprecation warnings involving column resolution to be emitted\n+ when using a 1.4 style query with joined eager loading.\n+ References: _\b#_\b6_\b5_\b9_\b6\n+[\b[o\bor\brm\bm]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n+Clarified the current purpose of the _\br_\be_\bl_\ba_\bt_\bi_\bo_\bn_\bs_\bh_\bi_\bp_\b._\bb_\ba_\bk_\be_\b__\bq_\bu_\be_\br_\bi_\be_\bs flag, which in\n+1.4 is to enable or disable \u201clambda caching\u201d of statements within the\n+\u201clazyload\u201d and \u201cselectinload\u201d loader strategies; this is separate from the more\n+foundational SQL query cache that is used for most statements. Additionally,\n+the lazy loader no longer uses its own cache for many-to-one SQL queries, which\n+was an implementation quirk that doesn\u2019t exist for any other loader scenario.\n+Finally, the \u201clru cache\u201d warning that the lazyloader and selectinloader\n+strategies could emit when handling a wide array of class/relationship\n+combinations has been removed; based on analysis of some end-user cases, this\n+warning doesn\u2019t suggest any significant issue. While setting bake_queries=False\n+for such a relationship will remove this cache from being used, there\u2019s no\n+particular performance gain in this case as using no caching vs. using a cache\n+that needs to refresh often likely still wins out on the caching being used\n+side.\n+References: _\b#_\b6_\b0_\b7_\b2, _\b#_\b6_\b4_\b8_\b7\n [\b[o\bor\brm\bm]\b] [\b[b\bbu\bug\bg]\b] [\b[r\bre\beg\bgr\bre\bes\bss\bsi\bio\bon\bn]\b] _\b\u00b6\n Adjusted the means by which classes such as _\bs_\bc_\bo_\bp_\be_\bd_\b__\bs_\be_\bs_\bs_\bi_\bo_\bn and _\bA_\bs_\by_\bn_\bc_\bS_\be_\bs_\bs_\bi_\bo_\bn are\n generated from the base _\bS_\be_\bs_\bs_\bi_\bo_\bn class, such that custom _\bS_\be_\bs_\bs_\bi_\bo_\bn subclasses such\n as that used by Flask-SQLAlchemy don\u2019t need to implement positional arguments\n when they call into the superclass method, and can continue using the same\n argument styles as in previous releases.\n References: _\b#_\b6_\b2_\b8_\b5\n [\b[o\bor\brm\bm]\b] [\b[b\bbu\bug\bg]\b] [\b[r\bre\beg\bgr\bre\bes\bss\bsi\bio\bon\bn]\b] _\b\u00b6\n Fixed issue where query production for joinedload against a complex left hand\n side involving joined-table inheritance could fail to produce a correct query,\n due to a clause adaption issue.\n References: _\b#_\b6_\b5_\b9_\b5\n-[\b[o\bor\brm\bm]\b] [\b[b\bbu\bug\bg]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[r\bre\beg\bgr\bre\bes\bss\bsi\bio\bon\bn]\b] _\b\u00b6\n-Fixed regression involving how the ORM would resolve a given mapped column to a\n-result row, where under cases such as joined eager loading, a slightly more\n-expensive \u201cfallback\u201d could take place to set up this resolution due to some\n-logic that was removed since 1.3. The issue could also cause deprecation\n-warnings involving column resolution to be emitted when using a 1.4 style query\n-with joined eager loading.\n-References: _\b#_\b6_\b5_\b9_\b6\n [\b[o\bor\brm\bm]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n Fixed issue in experimental \u201cselect ORM objects from INSERT/UPDATE\u201d use case\n where an error was raised if the statement were against a single-table-\n inheritance subclass.\n References: _\b#_\b6_\b5_\b9_\b1\n [\b[o\bor\brm\bm]\b] [\b[b\bbu\bug\bg]\b] _\b\u00b6\n The warning that\u2019s emitted for _\br_\be_\bl_\ba_\bt_\bi_\bo_\bn_\bs_\bh_\bi_\bp_\b(_\b) when multiple relationships would\n@@ -4245,15 +4244,15 @@\n Established support for synoynm() in conjunction with hybrid property,\n assocaitionproxy is set up completely, including that synonyms can be\n established linking to these constructs which work fully. This is a\n behavior that was semi-explicitly disallowed previously, however since it\n did not fail in every scenario, explicit support for assoc proxy and\n hybrids has been added.\n References: _\b#_\b6_\b2_\b6_\b7\n-[\b[o\bor\brm\bm]\b] [\b[b\bbu\bug\bg]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[r\bre\beg\bgr\bre\bes\bss\bsi\bio\bon\bn]\b] [\b[s\bsq\bql\bl]\b] _\b\u00b6\n+[\b[o\bor\brm\bm]\b] [\b[p\bpe\ber\brf\bfo\bor\brm\bma\ban\bnc\bce\be]\b] [\b[b\bbu\bug\bg]\b] [\b[r\bre\beg\bgr\bre\bes\bss\bsi\bio\bon\bn]\b] [\b[s\bsq\bql\bl]\b] _\b\u00b6\n Fixed a critical performance issue where the traversal of a _\bs_\be_\bl_\be_\bc_\bt_\b(_\b) construct\n would traverse a repetitive product of the represented FROM clauses as they\n were each referred towards by columns in the columns clause; for a series of\n nested subqueries with lots of columns this could cause a large delay and\n significant memory growth. This traversal is used by a wide variety of SQL and\n ORM functions, including by the ORM _\bS_\be_\bs_\bs_\bi_\bo_\bn when it\u2019s configured to have\n \u201ctable-per-bind\u201d, which while this is not a common use case, it seems to be\n@@ -6223,15 +6222,21 @@\n returned by the ResultProxy is now the _\bL_\be_\bg_\ba_\bc_\by_\bR_\bo_\bw 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@@ -6239,20 +6244,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 _\bS_\bt_\br_\bi_\bn_\bg_\b._\bR_\bE_\bT_\bU_\bR_\bN_\bS_\b__\bC_\bO_\bN_\bD_\bI_\bT_\bI_\bO_\bN_\bA_\bL or\n _\bS_\bt_\br_\bi_\bn_\bg_\b._\bR_\bE_\bT_\bU_\bR_\bN_\bS_\b__\bB_\bY_\bT_\bE_\bS, 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": "@@ -308,46 +308,46 @@\n

\n
\n

Associations\u00b6

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

\n

Listing of files:

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

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

    \n

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

    \n

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

  • \n
\n

\n
\n
\n

Asyncio Integration\u00b6

\n

Examples illustrating the asyncio engine feature of SQLAlchemy.

\n

Listing of files:

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

    \n-

  • \n
  • async_orm.py - Illustrates use of the sqlalchemy.ext.asyncio.AsyncSession object\n for asynchronous ORM use.

    \n

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

    \n

  • \n
  • greenlet_orm.py - Illustrates use of the sqlalchemy.ext.asyncio.AsyncSession object\n for asynchronous ORM use, including the optional run_sync() method.

    \n

  • \n+
  • basic.py - Illustrates the asyncio engine / connection interface.

    \n+

  • \n
\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@@ -388,32 +388,32 @@\n are modernized versions of recipes presented in the 2007 blog post\n Polymorphic Associations with SQLAlchemy.

\n

Listing of files:

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

    \n

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

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

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

    \n

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

    \n

  • \n
\n

\n
\n
\n

Large Collections\u00b6

\n

Large collection example.

\n@@ -503,30 +503,30 @@\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+
  • 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-
  • 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
  • __main__.py - Allows the examples/performance package to be run as a script.

    \n

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

    \n

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

    \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@@ -668,22 +668,22 @@\n 
\n
\n

Relationship Join Conditions\u00b6

\n

Examples of various relationship() configurations,\n which make use of the primaryjoin argument to compose special types\n of join conditions.

\n

Listing of files:

    \n-
  • threeway.py - Illustrate a \u201cthree way join\u201d - where a primary table joins to a remote\n-table via an association table, but then the primary table also needs\n-to refer to some columns in the remote table directly.

    \n-

  • \n
  • cast.py - Illustrate a relationship() that joins two columns where those\n columns are not of the same type, and a CAST must be used on the SQL\n side in order to match them.

    \n

  • \n+
  • threeway.py - Illustrate a \u201cthree way join\u201d - where a primary table joins to a remote\n+table via an association table, but then the primary table also needs\n+to refer to some columns in the remote table directly.

    \n+

  • \n
\n

\n
\n
\n

Space Invaders\u00b6

\n

A Space Invaders game using SQLite as the state machine.

\n

Originally developed in 2012. Adapted to work in Python 3.

\n@@ -838,23 +838,23 @@\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

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

    \n
    \n
    \n
    \n

    Vertical Attribute Mapping\u00b6

    \n

    Illustrates \u201cvertical table\u201d mappings.

    \n@@ -879,57 +879,57 @@\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 \n

    Listing of files:

    \n

    \n
    \n
    \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-
    • single.py - Single-table (table-per-hierarchy) inheritance example.

      \n-

    • \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
    \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@@ -958,21 +958,21 @@\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_tables.py - Illustrates sharding using a single SQLite database, that will however\n-have multiple tables using a naming convention.

      \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-
    • separate_databases.py - Illustrates sharding using distinct SQLite databases.

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

      \n

    • \n
    \n

    \n
    \n
    \n
    \n

    Extending the ORM\u00b6

    \n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -105,35 +105,35 @@\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- * _\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\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 _\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-_\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 *\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- * _\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\n- concurrently using asyncio.gather() along many asyncio database\n- connections, merging ORM results into a single AsyncSession.\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+ * _\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_\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 *\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@@ -158,28 +158,28 @@\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-_\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 _\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* L\bLa\bar\brg\bge\be C\bCo\bol\bll\ble\bec\bct\bti\bio\bon\bns\bs_\b?\b\u00b6 *\b**\b**\b**\b*\n Large collection example.\n Illustrates the options to use with _\br_\be_\bl_\ba_\bt_\bi_\bo_\bn_\bs_\bh_\bi_\bp_\b(_\b) when the list of related\n objects is very large, including:\n * \u201cdynamic\u201d relationships which query slices of data as accessed\n * how to use ON DELETE CASCADE in conjunction with passive_deletes=True to\n greatly improve the performance of related collection deletion.\n@@ -239,25 +239,25 @@\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+_\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-_\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-_\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 _\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 *\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@@ -394,20 +394,20 @@\n total time 2.754592 sec\n test_subqueryload : load everything, subquery eager loading. (1000 iterations);\n total time 2.977696 sec\n *\b**\b**\b**\b* R\bRe\bel\bla\bat\bti\bio\bon\bns\bsh\bhi\bip\bp J\bJo\boi\bin\bn C\bCo\bon\bnd\bdi\bit\bti\bio\bon\bns\bs_\b?\b\u00b6 *\b**\b**\b**\b*\n Examples of various _\br_\be_\bl_\ba_\bt_\bi_\bo_\bn_\bs_\bh_\bi_\bp_\b(_\b) configurations, which make use of the\n primaryjoin argument to compose special types of join conditions.\n Listing of files:\n- * _\bt_\bh_\br_\be_\be_\bw_\ba_\by_\b._\bp_\by - Illustrate a \u201cthree way join\u201d - where a primary table joins\n- to a remote table via an association table, but then the primary table\n- also needs to refer to some columns in the remote table directly.\n-_\bc_\ba_\bs_\bt_\b._\bp_\by - Illustrate a _\br_\be_\bl_\ba_\bt_\bi_\bo_\bn_\bs_\bh_\bi_\bp_\b(_\b) that joins two columns where those\n-columns are not of the same type, and a CAST must be used on the SQL side in\n-order to match them.\n+ * _\bc_\ba_\bs_\bt_\b._\bp_\by - Illustrate a _\br_\be_\bl_\ba_\bt_\bi_\bo_\bn_\bs_\bh_\bi_\bp_\b(_\b) that joins two columns where those\n+ columns are not of the same type, and a CAST must be used on the SQL side\n+ in order to match them.\n+_\bt_\bh_\br_\be_\be_\bw_\ba_\by_\b._\bp_\by - Illustrate a \u201cthree way join\u201d - where a primary table joins to a\n+remote table via an association table, but then the primary table also needs to\n+refer to some columns in the remote table directly.\n *\b**\b**\b**\b* S\bSp\bpa\bac\bce\be I\bIn\bnv\bva\bad\bde\ber\brs\bs_\b?\b\u00b6 *\b**\b**\b**\b*\n A Space Invaders game using SQLite as the state machine.\n Originally developed in 2012. Adapted to work in Python 3.\n Runs in a textual console using ASCII art.\n [../_images/space_invaders.jpg]\n To run:\n python -m examples.space_invaders.space_invaders\n@@ -527,21 +527,21 @@\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__\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__\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__\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 *\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@@ -560,38 +560,37 @@\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_\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+ * _\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 *\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- * _\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+ * _\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 *\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- * _\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,\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 _\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-_\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@@ -612,20 +611,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__\bd_\ba_\bt_\ba_\bb_\ba_\bs_\be_\bs_\b._\bp_\by - Illustrates sharding using distinct SQLite\n+ 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-_\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__\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"}]}, {"source1": "./usr/share/doc/python-sqlalchemy-doc/html/searchindex.js", "source2": "./usr/share/doc/python-sqlalchemy-doc/html/searchindex.js", "unified_diff": null, "details": [{"source1": "js-beautify {}", "source2": "js-beautify {}", "unified_diff": "@@ -7086,17 +7086,17 @@\n \"4138\": 12,\n \"5265\": 12,\n \"5266\": 12,\n \"td\": [12, 63],\n \"protocol\": [12, 17, 48, 51, 55, 59, 65, 66, 80, 102, 113],\n \"5255\": 12,\n \"5271\": 12,\n+ \"5314\": 12,\n \"outputtyp\": 12,\n \"5246\": 12,\n- \"5314\": 12,\n \"5278\": 12,\n \"planner\": [12, 23, 67],\n \"5162\": 12,\n \"slot\": [12, 56, 87, 91],\n \"5228\": 12,\n \"5210\": 12,\n \"eval\": [12, 75, 84, 124, 140],\n@@ -8097,23 +8097,23 @@\n \"6583\": 13,\n \"6652\": 13,\n \"majordalla\": 13,\n \"6649\": 13,\n \"6621\": 13,\n \"6132\": 13,\n \"6658\": 13,\n+ \"6596\": 13,\n \"bake_queri\": [13, 23, 123, 140],\n \"foundat\": [13, 25, 27, 42, 46, 160, 161],\n \"analysi\": [13, 76, 95],\n \"win\": 13,\n \"6072\": 13,\n \"6487\": 13,\n \"flask\": [13, 90],\n \"6285\": 13,\n- \"6596\": 13,\n \"6591\": 13,\n \"6400\": 13,\n \"async_object_sess\": [13, 102],\n \"async_sess\": [13, 102, 123],\n \"in_nested_transact\": [13, 31, 102, 146],\n \"get_transact\": [13, 31, 71, 102, 146, 147],\n \"get_nested_transact\": [13, 31, 102, 146],\n@@ -8521,20 +8521,20 @@\n \"3414\": [13, 25],\n \"alchemy2\": 13,\n \"4644\": 13,\n \"5649\": 13,\n \"get_sequence_nam\": [13, 48, 52],\n \"2056\": 13,\n \"4755\": 13,\n+ \"4524\": 13,\n \"upfront\": 13,\n \"returns_unicode_str\": [13, 48],\n \"returns_condit\": [13, 59],\n \"returns_byt\": [13, 59],\n \"5315\": 13,\n- \"4524\": 13,\n \"hundr\": [13, 21, 24, 25, 31, 76, 136, 137, 155],\n \"4645\": [13, 25],\n \"4808\": [13, 25],\n \"5004\": [13, 25],\n \"har\": [13, 25],\n \"4712\": 13,\n \"5526\": [13, 25],\n@@ -12459,29 +12459,29 @@\n \"receive_class_uninstru\": 97,\n \"rootnod\": 98,\n \"node1\": 98,\n \"node3\": 98,\n \"dump_tre\": 98,\n \"adjacency_list\": 98,\n \"basic_associ\": 98,\n- \"orderitem\": 98,\n \"purchas\": 98,\n- \"gather_orm_stat\": 98,\n+ \"orderitem\": 98,\n \"async_orm\": 98,\n+ \"gather_orm_stat\": 98,\n \"neighbor\": 98,\n \"n5\": 98,\n \"add_neighbor\": 98,\n \"higher_neighbor\": 98,\n \"directed_graph\": 98,\n \"supplier\": 98,\n \"hasaddress\": 98,\n \"generic_fk\": 98,\n \"table_per_rel\": 98,\n- \"ror\": 98,\n \"table_per_associ\": 98,\n+ \"ror\": 98,\n \"materialized_path\": 98,\n \"nested_set\": 98,\n \"single_insert\": 98,\n \"bulk_upd\": 98,\n \"test_orm_commit\": 98,\n \"test_bulk_insert_dictionari\": 98,\n \"test_cor\": 98,\n@@ -12537,31 +12537,31 @@\n \"sc1modifi\": 98,\n \"someclasshistori\": 98,\n \"__history_mapper__\": 98,\n \"_history_mapp\": 98,\n \"somehistoryclass\": 98,\n \"use_mapper_vers\": 98,\n \"versioned_map\": 98,\n- \"versioned_rows_w_versionid\": 98,\n \"versioned_update_old_row\": 98,\n+ \"versioned_rows_w_versionid\": 98,\n \"breviti\": 98,\n \"shrew\": 98,\n \"anim\": 98,\n \"cute\": 98,\n \"weasel\": 98,\n \"poison\": 98,\n \"animalfact\": 98,\n \"custom_manag\": 98,\n \"weather\": 98,\n \"contin\": 98,\n \"spoken\": 98,\n- \"separate_t\": 98,\n+ \"separate_databas\": 98,\n \"separate_schema_transl\": 98,\n \"schema_translates_map\": 98,\n- \"separate_databas\": 98,\n+ \"separate_t\": 98,\n \"temporal_rang\": 98,\n \"filter_publ\": 98,\n \"demo\": 98,\n \"datafil\": 98,\n \"helloworld\": 98,\n \"local_session_cach\": 98,\n \"datamodel\": 98,\n"}]}]}]}]}]}