sqlalchemy-backlog-intelligence / data /pull_requests.html
cjc0013's picture
Publish SQLAlchemy backlog intelligence Space
6a437f0 verified
Raw
History Blame Contribute Delete
28 kB
<style>
:root { color-scheme: light; }
.bi-wrap { font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; color: #1f2328 !important; }
.bi-wrap h1, .bi-wrap h2, .bi-wrap h3, .bi-wrap p, .bi-wrap strong, .bi-wrap td, .bi-wrap th, .bi-wrap div { color: #1f2328 !important; }
.bi-band { border: 1px solid #d8dee4; border-radius: 8px; background: #ffffff !important; padding: 16px; margin: 0 0 12px; }
.bi-title { display: flex; gap: 12px; align-items: flex-start; justify-content: space-between; margin-bottom: 12px; }
.bi-title h1, .bi-title h2 { margin: 0; line-height: 1.15; letter-spacing: 0; }
.bi-title h1 { font-size: 1.55rem; }
.bi-title h2 { font-size: 1.12rem; }
.bi-title p { margin: 4px 0 0; color: #57606a; max-width: 820px; }
.status-pill { border-radius: 999px; padding: 5px 9px; font-size: .78rem; font-weight: 700; background: #dafbe1; color: #116329 !important; white-space: nowrap; }
.metric-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(138px, 1fr)); gap: 8px; }
.metric { border: 1px solid #d0d7de; border-radius: 8px; padding: 10px; background: #f6f8fa !important; min-height: 86px; }
.metric-value { font-size: 1.45rem; font-weight: 800; line-height: 1.1; color: #0969da !important; }
.metric-label { margin-top: 4px; font-size: .84rem; font-weight: 700; }
.metric-note { margin-top: 2px; font-size: .76rem; color: #57606a !important; }
.callout-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 8px; }
.callout { border-left: 4px solid #0969da; background: #f6f8fa !important; border-radius: 8px; padding: 10px 12px; }
.callout:nth-child(2) { border-left-color: #1a7f37; }
.callout:nth-child(3) { border-left-color: #bf8700; }
.callout:nth-child(4) { border-left-color: #cf222e; }
.callout strong { display: block; margin-bottom: 4px; }
.group-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(310px, 1fr)); gap: 10px; }
.group-card { border: 1px solid #d8dee4; border-radius: 8px; padding: 12px; background: #fff !important; }
.group-card h3 { margin: 0 0 7px; font-size: 1rem; line-height: 1.25; letter-spacing: 0; }
.meta-row { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0; }
.chip-row { display: inline-flex; flex-wrap: wrap; gap: 5px; align-items: center; vertical-align: middle; }
.chip { display: inline-flex; align-items: center; border: 1px solid #d0d7de; border-radius: 999px; padding: 2px 7px; font-size: .78rem; background: #f6f8fa !important; color: #24292f !important; }
.chip.bucket { border-color: #9a6700; background: #fff8c5 !important; }
.chip.kind { border-color: #0969da; background: #ddf4ff !important; }
.workflow-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 10px; }
.workflow-card { border: 1px solid #d8dee4; border-radius: 8px; padding: 12px; background: #fff !important; }
.workflow-card h3 { margin: 0 0 7px; font-size: 1rem; line-height: 1.25; letter-spacing: 0; }
.workflow-card .move-count { font-weight: 800; color: #0969da !important; }
.move-list { display: grid; gap: 10px; }
.move-row { border: 1px solid #d8dee4; border-radius: 8px; background: #fff !important; }
.move-row summary { list-style: none; cursor: pointer; padding: 12px; }
.move-row summary::-webkit-details-marker { display: none; }
.move-summary { display: grid; grid-template-columns: minmax(190px, 1.1fr) minmax(220px, 1.35fr) minmax(220px, 1.35fr) minmax(120px, .7fr) minmax(100px, .55fr) minmax(220px, 1.25fr) auto; gap: 10px; align-items: start; }
.move-title h3 { margin: 0 0 4px; font-size: 1rem; line-height: 1.25; letter-spacing: 0; }
.move-field span { display: block; color: #57606a !important; font-size: .72rem; font-weight: 800; text-transform: uppercase; letter-spacing: .02em; }
.move-field p { margin: 3px 0 0; font-size: .84rem; line-height: 1.35; }
.view-bundles { align-self: center; justify-self: end; border: 1px solid #000000; border-radius: 999px; color: #000000 !important; background: #ffffff !important; padding: 4px 9px; font-size: .78rem; font-weight: 800; white-space: nowrap; }
.move-row[open] .view-bundles { background: #f6f8fa !important; }
.move-expanded { border-top: 1px solid #d8dee4; padding: 0 12px 12px; }
.bundle-row { border-top: 1px solid #eef1f4; padding: 12px 0; }
.bundle-row:first-child { border-top: none; }
.bundle-row h4 { margin: 0 0 6px; font-size: .94rem; line-height: 1.25; letter-spacing: 0; }
.bundle-scope { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 7px; margin-top: 8px; }
.evidence-list { margin: 8px 0 0 18px; padding: 0; color: #57606a !important; font-size: .82rem; line-height: 1.35; }
.evidence-list li { margin: 3px 0; }
.muted { color: #57606a !important; }
.evidence { font-size: .84rem; color: #57606a !important; }
.scroll-table { overflow-x: auto; border: 1px solid #d8dee4; border-radius: 8px; background: #fff !important; }
table.bi-table { width: 100%; border-collapse: collapse; font-size: .86rem; }
.bi-table th { text-align: left; background: #f6f8fa !important; color: #57606a !important; font-size: .78rem; border-bottom: 1px solid #d8dee4; padding: 8px; white-space: nowrap; }
.bi-table td { border-bottom: 1px solid #eef1f4; padding: 8px; vertical-align: top; min-width: 86px; }
.bi-table tr:last-child td { border-bottom: none; }
.wide { min-width: 280px; }
.tight { max-width: 180px; }
a { color: #0969da !important; text-decoration: none; }
a:hover { text-decoration: underline; }
.bi-wrap, .bi-wrap * { color: #000000 !important; }
@media (max-width: 720px) {
.bi-title { display: block; }
.status-pill { display: inline-block; margin-top: 8px; }
.group-grid { grid-template-columns: 1fr; }
.move-summary { grid-template-columns: 1fr; }
.view-bundles { justify-self: start; }
}
</style>
<div class='bi-wrap'><section class='bi-band'><div class='bi-title'><div><h2>Open Pull Requests</h2><p>Public-safe normalized rows for auditability.</p></div></div><div class='scroll-table'><table class='bi-table'><thead><tr><th>Pull Request</th><th>Bucket</th><th>Score</th><th>Linked</th><th>Labels</th><th>Excerpt</th></tr></thead><tbody><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13421' target='_blank' rel='noopener noreferrer'>Pull Request #13421: Fix oracledb async dialect entering cursors synchronously</a></td><td>waiting on CI/check fix</td><td>73</td><td><span class='chip-row'><span class='chip'>#13420</span></span></td><td></td><td><div class='wide'>`AsyncAdapt_oracledb_cursor._aenter_cursor()` called the synchronous `cursor.__enter__()` instead of awaiting `cursor.__aenter__()`, silently bypassing third-party async cursor wrappers (e.g. instrumentation libraries) that implement only the async context manager protocol. Removed the incorrect override so the curs...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13418' target='_blank' rel='noopener noreferrer'>Pull Request #13418: Use identifier preparer for string type collations</a></td><td>waiting on repo-owner test approval</td><td>70</td><td><span class='chip-row'><span class='chip'>#9693</span></span></td><td></td><td><div class='wide'>### Description Fixes #9693. String type collation rendering currently hardcodes quoted collation names, so a PostgreSQL schema-qualified collation such as `schema.collation` is treated as one quoted identifier. This changes string type collation rendering to use the dialect identifier preparer, matching the existi...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13417' target='_blank' rel='noopener noreferrer'>Pull Request #13417: Add type annotations to sqlalchemy.ext.serializer</a></td><td>waiting on repo-owner test approval</td><td>60</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td></td><td><div class='wide'>## Summary Adds a small set of inline type annotations to the legacy `sqlalchemy.ext.serializer` extension. ## Details This keeps the change intentionally small and focused. It adds future annotations, removes the module-level mypy ignore marker, and annotates the serializer/deserializer helper methods plus the publ...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13416' target='_blank' rel='noopener noreferrer'>Pull Request #13416: Perf/eager collection bulk extend</a></td><td>waiting on repo-owner test approval</td><td>60</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td></td><td><div class='wide'>&lt;!-- Provide a general summary of your proposed changes in the Title field above --&gt; ### Description ## What changed Every eagerly-loaded child paid two wasted Python frames: the generated instrumentation wrapper (`append`/`add`) plus its `__set` no-op shell, even though with `_sa_initiator=False` the wrapper&#x27;s enti...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13415' target='_blank' rel='noopener noreferrer'>Pull Request #13415: scalars/mappings performance improvement.</a></td><td>waiting on repo-owner test approval</td><td>60</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td></td><td><div class='wide'>&lt;!-- Provide a general summary of your proposed changes in the Title field above --&gt; ### Description What changed Core .scalars() built a one-column Row per row only to unwrap it with itemgetter(0); .mappings() built a Row plus a second BaseRow (RowMapping) via attrgetter(&quot;_mapping&quot;). New class-level _fetch_shape hi...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13405' target='_blank' rel='noopener noreferrer'>Pull Request #13405: # Cython batch instance processor — ~10–30% on most loads (collection joinedload −5%)</a></td><td>waiting on repo-owner test approval</td><td>70</td><td><span class='chip-row'><span class='chip'>#13407</span></span></td><td></td><td><div class='wide'>&lt;!-- Provide a general summary of your proposed changes in the Title field above --&gt; ### Description Add `orm/_loading_cy.py` with `_InstancesBatch`, a whole-chunk row processor built by `_instance_processor()` for the non-refresh, non-polymorphic load path. It replaces the per-row `[proc(row) for row in fetch]` com...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13404' target='_blank' rel='noopener noreferrer'>Pull Request #13404: Subqueryload without per-row Row construction — ~26% on subqueryload</a></td><td>waiting on repo-owner test approval</td><td>70</td><td><span class='chip-row'><span class='chip'>#13406</span></span></td><td></td><td><div class='wide'>&lt;!-- Provide a general summary of your proposed changes in the Title field above --&gt; ### Description &lt;!-- Describe your changes in detail --&gt; `_SubqCollections._load` iterated the `Query`, which routes through `Query.__iter__ -&gt; result.unique()` and builds a `Row` object (plus runs the uniquing filter) for every row...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13402' target='_blank' rel='noopener noreferrer'>Pull Request #13402: Allow inspection registrations from module reloads</a></td><td>waiting on CI/check fix</td><td>73</td><td><span class='chip-row'><span class='chip'>#10748</span></span></td><td></td><td><div class='wide'>### Summary - allow the inspection registry to accept a replacement registrar when it has the same module and name as the existing registration - keep the existing duplicate-registration assertion for conflicting registrars - add regression coverage for module reload style registration and a changelog entry Closes #...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13399' target='_blank' rel='noopener noreferrer'>Pull Request #13399: UniqueConstraint and Index withheld from table via attach_to_table flag, and appended to table via append_constraint</a></td><td>waiting on repo-owner test approval</td><td>70</td><td><span class='chip-row'><span class='chip'>#13048</span></span></td><td></td><td><div class='wide'>&lt;!-- Provide a general summary of your proposed changes in the Title field above --&gt; ### Description &lt;!-- Describe your changes in detail --&gt; attach_to_table has been included for UniqueConstraint and Index to allow users to choose whether to include or withhold them from the Table (Table.constraints for UniqueConst...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13398' target='_blank' rel='noopener noreferrer'>Pull Request #13398: fix catastrophic backtracking in sqlite inline unique reflection regex</a></td><td>waiting on repo-owner test approval</td><td>70</td><td><span class='chip-row'><span class='chip'>#13419</span></span></td><td></td><td><div class='wide'>Fixes: #13419 ### Description While reflecting a SQLite table, `get_unique_constraints` scans the stored `CREATE TABLE` text (taken verbatim from `sqlite_master.sql`) with an `INLINE_UNIQUE_PATTERN` to spot inline `UNIQUE` columns. The tail of that pattern is `[\t ]+[a-z0-9_ ]+?[\t ]+UNIQUE`, where the lazy middle c...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13368' target='_blank' rel='noopener noreferrer'>Pull Request #13368: Document deprecated MySQL (M,D) float syntax and improve error message</a></td><td>waiting on repo-owner test approval</td><td>70</td><td><span class='chip-row'><span class='chip'>#11132</span></span></td><td></td><td><div class='wide'>### Description Fixes #11132. Per maintainer guidance in the issue, this PR does two things: 1. **Documents the caveat**: adds a `.. warning::` to the MySQL dialect&#x27;s `DOUBLE`, `REAL` and `FLOAT` datatype docs stating that the `DOUBLE(M,D)` / `REAL(M,D)` / `FLOAT(M,D)` precision/scale syntaxes are non-standard MySQL...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13323' target='_blank' rel='noopener noreferrer'>Pull Request #13323: Apply tuple bind expressions to expanding IN values</a></td><td>waiting on repo-owner test approval</td><td>62</td><td><span class='chip-row'><span class='chip'>#8992</span></span></td><td></td><td><div class='wide'>### Description Tuple-valued expanding parameters now apply each element type&#x27;s `bind_expression()` when rendering expanded tuples. This matches scalar `IN` behavior for custom types and covers both `render_postcompile` and `literal_binds`. Fixes: #8992 ### Checklist This pull request is: - [ ] A documentation / typ...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13312' target='_blank' rel='noopener noreferrer'>Pull Request #13312: test: add coverage for delete with nested alias exists</a></td><td>waiting on repo-owner test approval</td><td>52</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td></td><td><div class='wide'>### Description Adds test coverage for compiling a `DELETE` statement with a correlated `EXISTS` subquery that uses an aliased table. This verifies that SQLAlchemy correctly renders the aliased table inside the nested `EXISTS` clause while correlating it against the outer `DELETE` target. ### Checklist This pull req...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13303' target='_blank' rel='noopener noreferrer'>Pull Request #13303: Fix PostgreSQL CHECK constraint reflection stripping unrelated parens</a></td><td>waiting on contributor</td><td>45</td><td><span class='chip-row'><span class='chip'>#13157</span></span></td><td></td><td><div class='wide'>Fixes #13157. The second pass over the CHECK constraint body in `get_multi_check_constraints` used a naive ```python re.sub(r&quot;^[\s\n]*\((.+)\)[\s\n]*$&quot;, r&quot;\1&quot;, m.group(1)) ``` which greedily paired the leading `(` with the trailing `)`. For an expression like ``` (x IS NULL OR y IS NULL) AND (x IS NULL OR y IS NULL)...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13289' target='_blank' rel='noopener noreferrer'>Pull Request #13289: fix: raise clear error when default_factory/default passed to WriteOnlyMapped/DynamicMapped relationship</a></td><td>waiting on contributor</td><td>45</td><td><span class='chip-row'><span class='chip'>#13227</span></span></td><td></td><td><div class='wide'>### Description Fixes: #13227 When `default_factory=list` or `default` is passed to a `WriteOnlyMapped` or `DynamicMapped` relationship, it previously caused cryptic crashes (e.g., `TypeError: LoaderCallableStatus object is not iterable` in `_WriteOnlyAttributeImpl.set()`). This happens because these mapped types ha...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13288' target='_blank' rel='noopener noreferrer'>Pull Request #13288: fix(pool): use time.monotonic() instead of time.time() for connection timestamps</a></td><td>waiting on contributor</td><td>45</td><td><span class='chip-row'><span class='chip'>#13169</span></span></td><td></td><td><div class='wide'>### Description Replaced all `time.time()` calls in `pool/base.py` with `time.monotonic()` for connection record timestamp tracking. Also updated the comment block that documented the Windows precision caveat. `time.time()` on Windows has approximately 16 ms granularity, which can cause soft invalidation checks to f...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13137' target='_blank' rel='noopener noreferrer'>Pull Request #13137: Use _effective_decimal_return_scale in Numeric.result_processor</a></td><td>waiting on repo-owner test approval</td><td>52</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td></td><td><div class='wide'>### Description `Numeric.result_processor` computes the decimal return scale inline, bypassing the `decimal_return_scale` parameter, while `Float.result_processor` correctly uses `_effective_decimal_return_scale`. ### Current behavior ```python # Numeric.result_processor - ignores decimal_return_scale return process...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/13051' target='_blank' rel='noopener noreferrer'>Pull Request #13051: Added implementations for avg &amp; abs</a></td><td>waiting on contributor</td><td>45</td><td><span class='chip-row'><span class='chip'>#13049</span></span></td><td></td><td><div class='wide'>&lt;!-- Provide a general summary of your proposed changes in the Title field above --&gt; ### Description Added the implementations for `func.avg()` and `func.abs()`. Fixes: #13049 ### Checklist &lt;!-- go over following points. check them with an `x` if they do apply, (they turn into clickable checkboxes once the PR is sub...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/12731' target='_blank' rel='noopener noreferrer'>Pull Request #12731: fix(typing): allow DeclarativeBase subclasses in with_for_update(of=...)</a></td><td>draft/noise</td><td>33</td><td><span class='chip-row'><span class='chip'>#12730</span></span></td><td></td><td><div class='wide'>This commit updates the `_ForUpdateOfArgument` type alias used in the `with_for_update(of=...)` method to explicitly allow `Type[DeclarativeBase]` subclasses. In SQLAlchemy 2.x, `DeclarativeBase` is the recommended way to define ORM models. While runtime behavior already accepts these classes as valid arguments for...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/12698' target='_blank' rel='noopener noreferrer'>Pull Request #12698: Handle schema-qualified collation value in collate()</a></td><td>draft/noise</td><td>43</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td></td><td><div class='wide'>based on #12697 (and #12510).</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/12697' target='_blank' rel='noopener noreferrer'>Pull Request #12697: Support schema-qualified collation in types for PostgreSQL</a></td><td>waiting on contributor</td><td>45</td><td><span class='chip-row'><span class='chip'>#9693</span></span></td><td></td><td><div class='wide'>We add a `collation_schema` in types supporting `collation`, along with `postgresql.DOMAIN`, allowing to create respective elements with a schema-qualified collation name. Reflection is also handled for both types and domains. Fix #9693.</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/12645' target='_blank' rel='noopener noreferrer'>Pull Request #12645: enable mypy &quot;ignore-without-code&quot; rule</a></td><td>waiting on CI/check fix</td><td>55</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td></td><td><div class='wide'>### Description Enable mypy &quot;ignore-without-code&quot; rule and apply the necessary fixes. Not really a &quot;small typing error fix&quot; but I think that&#x27;s the closest of the items from the checklist. ### Checklist This pull request is: - [x] A documentation / typographical / small typing error fix - Good to go, no issue or test...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/12433' target='_blank' rel='noopener noreferrer'>Pull Request #12433: Coerce aliased Select and CompoundSelect to subquery</a></td><td>waiting on contributor</td><td>35</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td></td><td><div class='wide'>Fixes issue #6274 ### Description When `aliased()` is used on a select statement or compound select statement, it currently throws an error. The proposed solution in #6274 was to instead return a subquery and emit a warning to the user that aliases are not supported for these types of statements. ### Checklist &lt;!--...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/12401' target='_blank' rel='noopener noreferrer'>Pull Request #12401: Make loader strategy error message more verbose</a></td><td>waiting on CI/check fix</td><td>65</td><td><span class='chip-row'><span class='chip'>#12398</span></span></td><td></td><td><div class='wide'>Fixes: #12398 This PR makes the error message on conflicting loader strategies more verbose to help with debugging &lt;!-- Provide a general summary of your proposed changes in the Title field above --&gt; ### Description &lt;!-- Describe your changes in detail --&gt; I changed the omitted error messages and the tests covering...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/12297' target='_blank' rel='noopener noreferrer'>Pull Request #12297: refactor(MSExecutionContext): improve identity insert handling and va…</a></td><td>has linked issue</td><td>27</td><td><span class='chip-row'><span class='chip'>#11620</span></span></td><td></td><td><div class='wide'>Fixes: #11620 ### Description - Refactored method in to improve readability and maintainability: - Extracted identity insert logic into helper methods: - : Determines if identity insert should be enabled. - : Handles warnings or errors based on . - Simplified the method by delegating responsibilities to these helper...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/11437' target='_blank' rel='noopener noreferrer'>Pull Request #11437: initial commit to update the SQLAlchemy examples</a></td><td>waiting on contributor</td><td>35</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td></td><td><div class='wide'>* most examples now work on 2.x * examples are mostly typed * README files are added for more instruction * examples now have metadata for automation * a preliminary fabric tool is used for testing and reporting Change-Id: Ib5a12cc59b2ea045c48ea90798b887e3b5d4fbbe ### Description There are quite a bit of things goin...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/11297' target='_blank' rel='noopener noreferrer'>Pull Request #11297: Optionally include rollback exception in closed transaction invalid request error message when possible</a></td><td>waiting on contributor</td><td>35</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td></td><td><div class='wide'>Following discussion https://github.com/sqlalchemy/sqlalchemy/discussions/11243 ### Description 1. Exposing private attribute `SessionTransaction._rollback_exception` using public property `rollback_exception` 2. In `TransactionalContext._trans_ctx_check()` when a closed transaction is detected. first checking a tra...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/11296' target='_blank' rel='noopener noreferrer'>Pull Request #11296: Ability to specify `WITH` when creating a table + fixes `WITH` when creating an index</a></td><td>waiting on contributor</td><td>45</td><td><span class='chip-row'><span class='chip'>#11122</span></span></td><td></td><td><div class='wide'>&lt;!-- Provide a general summary of your proposed changes in the Title field above --&gt; ### Description Adding the ability to specify storage parameters via with + fix for specifying index storage parameters (should it be split into two different PRs?). Fixes: #11122 ### Checklist &lt;!-- go over following points. check t...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/11180' target='_blank' rel='noopener noreferrer'>Pull Request #11180: Fix subquerload deprecation</a></td><td>stale/low urgency</td><td>17</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td></td><td><div class='wide'>Change-Id: I3d1b844dee6dc29da4a6aaa0c2916e6a1178aaec The deprecation info does not appear in 3 important sections: * The initial overview * API docstrings in 2 places. This PR notes the deprecation in the overview, and adds links/deprecation docstrings to the functions so they should show up in the API docs. ### Des...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/11107' target='_blank' rel='noopener noreferrer'>Pull Request #11107: migration note on subqueries</a></td><td>waiting on contributor</td><td>35</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td></td><td><div class='wide'>Change-Id: Id33779cb126a700d9adebe5f08f9d6c085589db4 Under 2.0, calls to `in_` and `not_in` no longer accept an explicit `.subquery()`. Passing a `.subquery()` will cause typing issues from MyPy AND will raise runtime warnings. There was no note of this in the migration guide. This may be an effect of another change...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/10574' target='_blank' rel='noopener noreferrer'>Pull Request #10574: fixes: #2943, allow overriding validates for inheritance</a></td><td>waiting on CI/check fix</td><td>55</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td></td><td><div class='wide'>Applied the patch mentioned in #2943, to allow overriding the validates method of a given Model, Added tests for same in test_validators. If a Child class overrides the parent class validates method only child class validator will be invoked unless child class explicitly invokes parent class validator &lt;!-- Provide a...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/pull/8136' target='_blank' rel='noopener noreferrer'>Pull Request #8136: Add tools for documentation formatting and validation</a></td><td>draft/noise</td><td>43</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td></td><td><div class='wide'>### Description The goal of this PR is to add tools that help with contributing to documentation, from discussion started on #7659. Goals include: - Automatic formatting of code blocks in .rst documents and in docstrings (blacken-docs) - Flake8 validation of these code blocks (flake8-rst-docstrings, flake8-docstring...</div></td></tr></tbody></table></div></section></div>