]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/log
thirdparty/sqlalchemy/sqlalchemy.git
2 months agoadd python 3.14 to run-test
Mike Bayer [Tue, 3 Jun 2025 18:28:19 +0000 (14:28 -0400)] 
add python 3.14 to run-test

If I'm reading correctly at https://github.com/actions/python-versions ,
there are plenty of python 3.14 versions available, so this should
"work".

Still not sure about wheel building so leaving that separate

Change-Id: Idd1ce0db124b700091f5499d6a7d087f6e31777e
(cherry picked from commit 9128189eaacf05a8479b27ef5b2e77f27f2f5ec3)

2 months agoMerge "Reflect index's column operator class on PostgreSQL" into rel_2_0
Michael Bayer [Tue, 3 Jun 2025 18:24:04 +0000 (18:24 +0000)] 
Merge "Reflect index's column operator class on PostgreSQL" into rel_2_0

2 months agoadd future mode tests for MappedAsDataclass; more py314b1 regressions
Mike Bayer [Fri, 9 May 2025 15:50:26 +0000 (11:50 -0400)] 
add future mode tests for MappedAsDataclass; more py314b1 regressions

for py314b2 all issues should be resolved

py314: yes
Change-Id: I498a1f623aeb5eb664289236e01e35d8a3dec99f
(cherry picked from commit 68f33ac943f07aaa1ade85d86e5113d5bec4ce65)

2 months agoFix type errors surfaced by mypy 1.16
Federico Caselli [Fri, 30 May 2025 20:53:59 +0000 (22:53 +0200)] 
Fix type errors surfaced by mypy 1.16

Change-Id: I50bbd760577ff7c865c81153041e82bba068e5d8
(cherry picked from commit 7088f7962bcdf497892da85aff16022d27662eb4)

2 months agoReflect index's column operator class on PostgreSQL
Denis Laxalde [Wed, 28 May 2025 19:37:36 +0000 (15:37 -0400)] 
Reflect index's column operator class on PostgreSQL

Fill the `postgresql_ops` key of PostgreSQL's `dialect_options` returned by get_multi_indexes() with a mapping from column names to the operator class, if it's not the default for respective data type.

As we need to join on ``pg_catalog.pg_opclass``, the table definition is added to ``postgresql.pg_catalog``.

Fixes #8664.

Closes: #12504
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12504
Pull-request-sha: 8fdf93e1b27c371f52990d5fda8b2fdf79ec23eb

Change-Id: I8789c1e9d15f8cc9a7205f492ec730570f19bbcc
(cherry picked from commit 0642541c6371d19c8d28ff0bdaf6ab3822715a6d)

2 months agoMerge "update black to 25.1.0 to align it with alembic" into rel_2_0
Michael Bayer [Tue, 27 May 2025 19:48:40 +0000 (19:48 +0000)] 
Merge "update black to 25.1.0 to align it with alembic" into rel_2_0

2 months agoMerge "Add missing requires in the tests for older postgresql version" into rel_2_0
Michael Bayer [Sun, 25 May 2025 14:16:33 +0000 (14:16 +0000)] 
Merge "Add missing requires in the tests for older postgresql version" into rel_2_0

2 months agofix missing quotes from cast call in mysqlconnector module
Federico Caselli [Fri, 23 May 2025 21:10:43 +0000 (23:10 +0200)] 
fix missing quotes from cast call in mysqlconnector module

This fixes an issue introduced by 51a7678db2f0fcb1552afa40333640bc7fbb6dac
in I37bd98049ff1a64d58e9490b0e5e2ea764dd1f73

Change-Id: Id738c04ee4dc8c2b12d9ab0fc71a4e1a6c5bc209
(cherry picked from commit 1070889f263be89e0e47bdbb9f7113e98ead192b)

2 months agoupdate black to 25.1.0 to align it with alembic
Federico Caselli [Tue, 20 May 2025 20:15:06 +0000 (22:15 +0200)] 
update black to 25.1.0 to align it with alembic

Change-Id: I2ac332237f18bbc44155eadee35c64f62adc2867
(cherry picked from commit 76e49d06ceed2121023defe2ff727acea0f1a0e5)

2 months agoDoc: Update connection / reconnecting_engine (#12617)
François-Michel L'Heureux [Fri, 23 May 2025 20:23:53 +0000 (16:23 -0400)] 
Doc: Update connection / reconnecting_engine (#12617)

(cherry picked from commit 4cac1c6002f805879188c21fb4c75b7406d743f3)

2 months agodocs: Clarify that relationship() first parameter is positional (#12621)
krave1986 [Fri, 23 May 2025 20:23:00 +0000 (04:23 +0800)] 
docs: Clarify that relationship() first parameter is positional (#12621)

(cherry picked from commit 18ee6a762ce2ab00671bcce60d6baf1b31291e71)

2 months agoAdd missing requires in the tests for older postgresql version
Denis Laxalde [Wed, 21 May 2025 07:23:12 +0000 (03:23 -0400)] 
Add missing requires in the tests for older postgresql version

Follow up commit 39bb17442ce6ac9a3dde5e2b72376b77ffce5e28.

Closes: #12612
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12612
Pull-request-sha: 894276ff232ba328cc235ecf04e84067db204c3d

Change-Id: Ib8d47f11e34d6bb40d9a88d5f411c2d5fee70823
(cherry picked from commit 6154aa1b50391aa2a0e69303d8a3b5c2a17dc67a)

2 months agoUse pg_index's indnatts when indnkeyatts is not available
Denis Laxalde [Tue, 20 May 2025 14:26:14 +0000 (10:26 -0400)] 
Use pg_index's indnatts when indnkeyatts is not available

Using NULL when this column is not available does not work with old PostgreSQL (tested on version 9.6, as reported in #12600).

Instead, use `indnatts` which should be equal to what `indnkeyatts` would be as there is no "included attributes" in the index on these old versions (but only "key columns").

From https://www.postgresql.org/docs/17/catalog-pg-index.html:
* `indnatts`, "The total number of columns in the index [...]; this number includes both key and included attributes"
* `indnkeyatts`, "The number of key columns in the index, not counting any included columns [...]"

Fixes #12600.

Closes: #12611
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12611
Pull-request-sha: 8ff48a6225ec58fdfa84aec75d487238281b1ac1

Change-Id: Idcadcd7db545bc1f73d85b29347c8ba388b1b41d
(cherry picked from commit 9071811de76dea558f932215870e4a5513b30362)

2 months agoMerge "Type mysql dialect" into rel_2_0
Michael Bayer [Tue, 20 May 2025 14:51:24 +0000 (14:51 +0000)] 
Merge "Type mysql dialect" into rel_2_0

2 months agoType mysql dialect
Pablo Estevez [Tue, 13 May 2025 13:39:19 +0000 (09:39 -0400)] 
Type mysql dialect

Closes: #12164
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12164
Pull-request-sha: 545e2c39d5ee4f3938111b26e098fa2aa2b6e800
Co-authored-by: Mike Bayer <mike_mp@zzzcomputing.com>
Change-Id: I37bd98049ff1a64d58e9490b0e5e2ea764dd1f73
(cherry picked from commit d89db542e419ac83ce1a43a5c2bf3c8225d6d2e9)

2 months agoUpdate index.rst in dialects docs to include Denodo (#12604)
Denodo Research Labs [Mon, 19 May 2025 20:19:34 +0000 (22:19 +0200)] 
Update index.rst in dialects docs to include Denodo (#12604)

(cherry picked from commit 279cd787ca12792d401bf9b45f2895c7b5dc0c77)

2 months agobackport mysql / base portions of #10415 to 2.0
Mike Bayer [Sun, 18 May 2025 17:54:09 +0000 (13:54 -0400)] 
backport mysql / base portions of #10415 to 2.0

For a backport of the mysql typing change in [1] to be useful, we need
to have most of the asyncio typing installed as well.  To make this
easier include that we will backport aiomysql / asyncmy over to the
connectors/asyncio.py connector which is already in use.

[1] https://gerrit.sqlalchemy.org/c/sqlalchemy/sqlalchemy/+/5829
Change-Id: I0414ed1f736a329ecdc9a662dbee71d621a463ae

2 months agoi think we dont need DOMAIN.adapt()
Mike Bayer [Fri, 16 May 2025 14:33:03 +0000 (10:33 -0400)] 
i think we dont need DOMAIN.adapt()

this seems to be redundant vs. what constructor copy does.

Issues are afoot w/ domain in any case see multiple issues
at [1]

[1] https://github.com/sqlalchemy/sqlalchemy/discussions/12592
Change-Id: I49879df6b78170435f021889f8f56ec43abc75c7

Change-Id: Id8fba884d47f3a494764262e23b3cc889f2cd033
(cherry picked from commit 37e1654bff3415856fc217f687bb0fbfac6666ba)

2 months agoexpand column options for composites up front at the attribute level
Mike Bayer [Thu, 15 May 2025 17:39:36 +0000 (13:39 -0400)] 
expand column options for composites up front at the attribute level

Implemented the :func:`_orm.defer`, :func:`_orm.undefer` and
:func:`_orm.load_only` loader options to work for composite attributes, a
use case that had never been supported previously.

Fixes: #12593
Change-Id: Ie7892a710f30b69c83f586f7492174a3b8198f80
(cherry picked from commit b25ce03c8d0d2a9d4f186b9b2b2c82b02b9645b7)

2 months agoVersion 2.0.42 placeholder
Mike Bayer [Wed, 14 May 2025 17:11:05 +0000 (13:11 -0400)] 
Version 2.0.42 placeholder

2 months ago- 2.0.41 rel_2_0_41
Mike Bayer [Wed, 14 May 2025 17:04:02 +0000 (13:04 -0400)] 
- 2.0.41

2 months agouse pep639 license
Mike Bayer [Wed, 14 May 2025 12:24:44 +0000 (08:24 -0400)] 
use pep639 license

Removed the "license classifier" from setup.cfg for SQLAlchemy 2.0, which
eliminates loud deprecation warnings when building the package.  SQLAlchemy
2.1 will use a full :pep:`639` configuration in pyproject.toml while
SQLAlchemy 2.0 remains using ``setup.cfg`` for setup.

Change-Id: If732dca7f9b57a4c6a789a68ecc77f0293be4786
(cherry picked from commit c93f50421ba5e96079cc89db80282aaaf6e09a6e)

2 months agochangelog edits
Mike Bayer [Wed, 14 May 2025 12:20:03 +0000 (08:20 -0400)] 
changelog edits

Change-Id: Ib2bb33698f58a62c945d147c39d3ac6af908b802
(cherry picked from commit c7d5c2ab5a7c5c97f80a904fcd3d5dcc9ebe954d)

2 months agoremove __getattr__ from root
Mike Bayer [Tue, 13 May 2025 15:28:25 +0000 (11:28 -0400)] 
remove __getattr__ from root

Removed ``__getattr__()`` rule from ``sqlalchemy/__init__.py`` that
appeared to be trying to correct for a previous typographical error in the
imports. This rule interferes with type checking and is removed.

Fixes: #12588
Change-Id: I682b1f3c13b842d6f43ed02d28d9774b55477516
(cherry picked from commit c3f1ea62286a0b038482437923c4d1c53d668dcb)

2 months agorewrite the docs on SQLite transaction handling
Mike Bayer [Mon, 12 May 2025 19:25:07 +0000 (15:25 -0400)] 
rewrite the docs on SQLite transaction handling

SQLite has added the new "connection.autocommit" mode and
associated fixes for pep-249 as of python 3.12.   they plan to
default to using this attribute as of python 3.16.   Get
on top of things by rewriting the whole doc section here, removing
old cruft about sqlalchemy isolation levels that was not correct
in any case, update recipes in a more succinct and unified way.

References: #12585
Change-Id: I9d1de8dcc27f1731ecd3c723718942148dcd0a1a
(cherry picked from commit 10ff201db40e069e8f90bb0883a916ba3d9cc96e)

2 months agoimplement pep-649 workarounds, test suite passing for python 3.14
Mike Bayer [Thu, 6 Mar 2025 14:12:43 +0000 (09:12 -0500)] 
implement pep-649 workarounds, test suite passing for python 3.14

Changes to the test suite to accommodate Python 3.14 as of version
3.14.0b1
Originally this included a major breaking change to how python 3.14
implemented :pep:`649`, however this was resolved by [1].
As of a7, greenlet is skipped due to issues in a7 and later b1
in [2].
1. the change to rewrite all conditionals in annotation related tests
   is reverted.
2. test_memusage needed an explicit set_start_method() call so that
   it can continue to use plain fork
3. unfortunately at the moment greenlet has to be re-disabled for 3.14.
4. Changes to tox overall, remove pysqlcipher which hasn't worked
   in years, etc.
5. we need to support upcoming typing-extensions also, install the beta
6. 3.14.0a7 introduces major regressions to our runtime typing
   utilities, unfortunately, it's not clear if these can be resolved
7. for 3.14.0b1, we have to vendor get_annotations to work around [3]

[1] https://github.com/python/cpython/issues/130881
[2] https://github.com/python-greenlet/greenlet/issues/440
[3] https://github.com/python/cpython/issues/133684

py314: yes
Fixes: #12405
References: #12399
Change-Id: I8715d02fae599472dd64a2a46ccf8986239ecd99

2 months agoMerge "dont render URL in unparseable URL error message" into rel_2_0
Michael Bayer [Thu, 8 May 2025 13:33:16 +0000 (13:33 +0000)] 
Merge "dont render URL in unparseable URL error message" into rel_2_0

2 months agodont render URL in unparseable URL error message
Mike Bayer [Thu, 8 May 2025 12:34:21 +0000 (08:34 -0400)] 
dont render URL in unparseable URL error message

The error message that is emitted when a URL cannot be parsed no longer
includes the URL itself within the error message.

Fixes: #12579
Change-Id: Icd17bd4fe0930036662b6a4fe0264cb13df04ba7
(cherry picked from commit aaa28f457eaa3f98c417666b4d0ad4d70ccb1ac0)

2 months agotyping: pg: type NamedType create/drops (fixes #12557)
Justine Krejcha [Tue, 6 May 2025 19:18:02 +0000 (15:18 -0400)] 
typing: pg: type NamedType create/drops (fixes #12557)

Type the `create` and `drop` functions for `NamedType`s

Also partially type the SchemaType create/drop functions more generally

One change to this is that the default parameter of `None` is removed. It doesn't work and will fail with a `AttributeError` at runtime since it immediately tries to access a property of `None` which doesn't exist.

Fixes #12557

This pull request is:

- [X] A documentation / typographical / small typing error fix
- Good to go, no issue or tests are needed
- [X] A short code fix
- please include the issue number, and create an issue if none exists, which
  must include a complete example of the issue.  one line code fixes without an
  issue and demonstration will not be accepted.
- Please include: `Fixes: #<issue number>` in the commit message
- please include tests.   one line code fixes without tests will not be accepted.
- [ ] A new feature implementation
- please include the issue number, and create an issue if none exists, which must
  include a complete example of how the feature would look.
- Please include: `Fixes: #<issue number>` in the commit message
- please include tests.

**Have a nice day!**

Closes: #12558
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12558
Pull-request-sha: 75c8d81bfb68f45299a9448d45dda446532205d3

Change-Id: I173771d365f34f54ab474b9661e1cdc70cc4de84
(cherry picked from commit b4d7bf7a2f74db73e12f47ca4cb45666bf08439e)

2 months agoreorganize ORM Annotated Declarative into its own section
Mike Bayer [Tue, 6 May 2025 22:06:15 +0000 (18:06 -0400)] 
reorganize ORM Annotated Declarative into its own section

The ORM Annotated Declarative section is now very large but has been
indented under the "Declarative Table with mapped_column()" section
where it does not show up well on top level TOCs and is too deeply
nested.   Break it out into its own section following the
entire "Declarative Table" section, but also maintain a short intro
section inside of "Declarative Table" to ensure this use is still
prominent.

Change-Id: I42f4aff6ed54da249c94ddf50727f9fe3c3bd625
(cherry picked from commit bcc4af9e061074bfdf795403027c851df8bec777)

2 months agoMerge "Added vector datatype support in Oracle dialect" into rel_2_0
Michael Bayer [Tue, 6 May 2025 13:25:36 +0000 (13:25 +0000)] 
Merge "Added vector datatype support in Oracle dialect" into rel_2_0

2 months agofix failing typing test
Federico Caselli [Mon, 5 May 2025 21:03:18 +0000 (23:03 +0200)] 
fix failing typing test

fix failing test added in 4ac02007e030232f57226aafbb9313c8ff186a62

Change-Id: If0c62fac8744caa98bd04f808ef381ffb04afd7f
(cherry picked from commit 46996843876a7635705686f67057fba9c795d787)

2 months agoFix issues in versioning.rst (#12567)
krave1986 [Mon, 5 May 2025 19:38:19 +0000 (03:38 +0800)] 
Fix issues in versioning.rst (#12567)

(cherry picked from commit e1f2f204c1b2967486d160b19a8ddf21c0b698bf)

2 months agoRemove unused typing imports (#12568)
Shamil [Mon, 5 May 2025 18:05:21 +0000 (21:05 +0300)] 
Remove unused typing imports (#12568)

* Remove unused typing imports

* remove unused per file ignores

* Revert "remove unused per file ignores"

---------

Co-authored-by: Pablo Estevez <pablo22estevez@gmail.com>
(cherry picked from commit 37c5b2e3e2cea552b5000df9281285b9f74c8166)

2 months agoAdded vector datatype support in Oracle dialect
suraj [Mon, 5 May 2025 15:14:35 +0000 (11:14 -0400)] 
Added vector datatype support in Oracle dialect

Added new datatype :class:`_oracle.VECTOR` and accompanying DDL and DQL
support to fully support this type for Oracle Database. This change
includes the base :class:`_oracle.VECTOR` type that adds new type-specific
methods ``l2_distance``, ``cosine_distance``, ``inner_product`` as well as
new parameters ``oracle_vector`` for the :class:`.Index` construct,
allowing vector indexes to be configured, and ``oracle_fetch_approximate``
for the :meth:`.Select.fetch` clause.  Pull request courtesy Suraj Shaw.

Fixes: #12317
Closes: #12321
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12321
Pull-request-sha: a72a18a45c85ae7fa50a34e97ac642e16b463b54

Change-Id: I6f3af4623ce439d0820c14582cd129df293f0ba8
(cherry picked from commit 1b780ce3d3f7e33e5cc9e49eafa316a514cdc324)

3 months agoMerge "fix sqlite localtimestamp function" into rel_2_0
Michael Bayer [Thu, 1 May 2025 15:42:50 +0000 (15:42 +0000)] 
Merge "fix sqlite localtimestamp function" into rel_2_0

3 months agoadd black dependency for format_docs_code
Mike Bayer [Thu, 1 May 2025 13:49:33 +0000 (09:49 -0400)] 
add black dependency for format_docs_code

this doesnt run if black is not installed, so use a python
env for it

Change-Id: I567d454917e7e8e4be2b7a21ffc511900f16457c
(cherry picked from commit 667a5d397ff50b24d4d4cf7e600d51fe84188949)

3 months agofix sqlite localtimestamp function
Mike Bayer [Thu, 1 May 2025 13:43:29 +0000 (09:43 -0400)] 
fix sqlite localtimestamp function

Fixed and added test support for a few SQLite SQL functions hardcoded into
the compiler most notably the "localtimestamp" function which rendered with
incorrect internal quoting.

Fixes: #12566
Change-Id: Id5bd8dc7841f0afab7df031ba5c0854dab845a1d
(cherry picked from commit d689e465edf11308b0efba018aa84c3d79ccbaab)

3 months agoadd correct typing for row getitem
Federico Caselli [Mon, 28 Apr 2025 21:44:50 +0000 (23:44 +0200)] 
add correct typing for row getitem

The overloads were broken in 8a4c27589500bc57605bb8f28c215f5f0ae5066d

Change-Id: I3736b15e95ead28537e25169a54521e991f763da
(cherry picked from commit 4ac02007e030232f57226aafbb9313c8ff186a62)

3 months agoFix simple typo (#12555)
Ross Patterson [Tue, 29 Apr 2025 20:14:09 +0000 (13:14 -0700)] 
Fix simple typo (#12555)

(cherry picked from commit 35c7fa9e9e591b120b5d20cf4125f46a3f23a251)

3 months agorefactor (orm): remove unused variables and simplify key lookups
Federico Caselli [Thu, 24 Apr 2025 22:02:32 +0000 (18:02 -0400)] 
refactor (orm): remove unused variables and simplify key lookups

Redundant variables and unnecessary conditions were removed across several modules. Improved readability and reduced code complexity without changing functionality.

Closes: #12537
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12537
Pull-request-sha: ab53f8c3487e8cfb4d4a0235c27d8a5b8557d193

Change-Id: I910d65729fdbc96933f9822c553924d37e89e201
(cherry picked from commit 29895487915b8858deb2f8ac4a88d92917641c55)

3 months agofix reference cycles/ perf in DialectKWArgs
Mike Bayer [Sat, 26 Apr 2025 15:32:30 +0000 (11:32 -0400)] 
fix reference cycles/ perf in DialectKWArgs

Identified some unnecessary cycles and overhead in how
this is implemented.  since we want to add this to Select,
needs these improvements.

Change-Id: I4324db14aaf52ab87a8b7fa49ebf1b6624bc2dcb
(cherry picked from commit ce3bbfcc4550e72a603640e533bc736715c5d76b)

3 months agoMerge "refactor(testing-and-utils): Remove unused code and fix style issues" into...
Federico Caselli [Thu, 24 Apr 2025 21:50:54 +0000 (21:50 +0000)] 
Merge "refactor(testing-and-utils): Remove unused code and fix style issues" into rel_2_0

3 months agoMerge "refactor: clean up unused variables in engine module" into rel_2_0
Federico Caselli [Thu, 24 Apr 2025 21:50:38 +0000 (21:50 +0000)] 
Merge "refactor: clean up unused variables in engine module" into rel_2_0

3 months agoMerge "refactor (sql): simplify and optimize internal SQL handling" into rel_2_0
Federico Caselli [Thu, 24 Apr 2025 21:50:07 +0000 (21:50 +0000)] 
Merge "refactor (sql): simplify and optimize internal SQL handling" into rel_2_0

3 months agoMerge "refactor: simplify and clean up dialect-specific code" into rel_2_0
Federico Caselli [Thu, 24 Apr 2025 20:32:12 +0000 (20:32 +0000)] 
Merge "refactor: simplify and clean up dialect-specific code" into rel_2_0

3 months agoUpdate entry for sqlalchemy-hana (#12553)
Christoph Heer [Thu, 24 Apr 2025 20:00:52 +0000 (22:00 +0200)] 
Update entry for sqlalchemy-hana (#12553)

(cherry picked from commit 686b3423d2a20325ccae4d5cf998774885f52c9f)

3 months agorefactor(testing-and-utils): Remove unused code and fix style issues
Shamil [Mon, 21 Apr 2025 16:35:43 +0000 (12:35 -0400)] 
refactor(testing-and-utils): Remove unused code and fix style issues

This PR includes several small refactorings and style fixes aimed at improving code cleanliness, primarily within the test suite and tooling.

Key changes:

*   Removed assignments to unused variables in various test files (`test_dialect.py`, `test_reflection.py`, `test_select.py`).
*   Removed an unused variable in the pytest plugin (`pytestplugin.py`).
*   Removed an unused variable in the topological sort utility (`topological.py`).
*   Fixed a minor style issue (removed an extra blank line) in the `cython_imports.py` script.

Closes: #12539
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12539
Pull-request-sha: 837c1e6cb17f0ff31444d5161329c318b52e48e7

Change-Id: Ifa37fb956bc3cacd31967f08bdaa4254e16911c2
(cherry picked from commit 64f45d0a6b4ad41cf570a8f0e09b86fba0ebb043)
(cherry picked from commit e15cb0779b42829027faea3496fa0d5163d9e2f5)

3 months agorefactor: clean up unused variables in engine module
Shamil [Thu, 17 Apr 2025 19:48:19 +0000 (15:48 -0400)] 
refactor: clean up unused variables in engine module

Removed unused variables to improve code clarity and maintainability. This change simplifies logic in `base.py`, `default.py`, and `result.py`. No functionality was altered.

Closes: #12535
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12535
Pull-request-sha: a9d849f3a4f3abe9aff49279c4cc81aa26aeaa9b

Change-Id: If78b18dbd33733c631f8b5aad7d55261fbc4817b
(cherry picked from commit d1d81f80a3764e3ebc38481fb6fd82cf6295dcf9)
(cherry picked from commit ba433ff9f567b0c58f5f78c2d5cf262f9e5e9c43)

3 months agorefactor (sql): simplify and optimize internal SQL handling
Shamil [Mon, 21 Apr 2025 16:36:21 +0000 (12:36 -0400)] 
refactor (sql): simplify and optimize internal SQL handling

Replaced redundant variable assignments with direct operations. Used `dict.get()` for safer dictionary lookups to streamline logic. Improves code readability and reduces unnecessary lines.

Closes: #12538
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12538
Pull-request-sha: d322d1508cfc37668099e6624816aba9c647ad51

Change-Id: Ib3dfc7086ec35117fdad65e136a17aa014b96ae5
(cherry picked from commit 93b0be7009b4f6efd091fda31229353f929f4cc9)

3 months agorefactor: simplify and clean up dialect-specific code
Shamil [Thu, 17 Apr 2025 15:23:21 +0000 (11:23 -0400)] 
refactor: simplify and clean up dialect-specific code

**Title:** Removed unused variables and redundant functions across multiple dialects. Improves code readability and reduces maintenance complexity without altering functionality.
### Description
This pull request introduces several minor refactorings across different dialect modules:
- **MSSQL:**
    - Simplified the initialization of the `fkeys` dictionary in `_get_foreign_keys` using `util.defaultdict` directly.

- **MySQL:** Removed the unused variable in `_get_table_comment`. `rp`
- **PostgreSQL (_psycopg_common):** Removed the unused variable `cursor` in `do_ping`.
- **PostgreSQL (base):** Removed the unused variable `args` in `_get_column_info`.
- **SQLite:** Removed the unused variable `new_filename` in `generate_driver_url`.

These changes focus purely on code cleanup and simplification, removing dead code and improving clarity. They do not alter the existing logic or functionality of the dialects.
### Checklist
This pull request is:
- [ ] A documentation / typographical / small typing error fix
- [x] A short code fix
    - _Note: This is a general cleanup refactor rather than a fix for a specific reported issue._

- [ ] A new feature implementation

**Have a nice day!**

Closes: #12534
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12534
Pull-request-sha: 2c7ae17b73192ba6bff6bec953b307a88ea31847

Change-Id: I1ec3b48f42aea7e45bc20f81add03051eb30bb98
(cherry picked from commit bb5bfb4beb35450ee8db7a173b9b438e065a90a9)

3 months agoMerge "optimize `@util.decorator`" into rel_2_0
Michael Bayer [Mon, 21 Apr 2025 23:08:52 +0000 (23:08 +0000)] 
Merge "optimize `@util.decorator`" into rel_2_0

3 months agodisable mysql/connector-python, again
Mike Bayer [Mon, 21 Apr 2025 13:44:40 +0000 (09:44 -0400)] 
disable mysql/connector-python, again

Just as we got this driver "working", a new regression is introduced
in version 9.3.0 which prevents basic binary string persistence [1].
I would say we need to leave this driver off for another few years
until something changes with its upstream maintenance.

[1] https://bugs.mysql.com/bug.php?id=118025

Change-Id: If876f63ebb9a6f7dfa0b316df044afa469a154f2
(cherry picked from commit 3217acc1131048aa67744e032fe8816407d8dfba)

3 months agochore: add type hint for reconstructor (#12527)
Ryu Juheon [Thu, 17 Apr 2025 19:48:54 +0000 (04:48 +0900)] 
chore: add type hint for reconstructor (#12527)

* chore: add type hint for reconstructor

* chore: fix attr-defined

* chore: use defined typevar

* chore: ignore type error

(cherry picked from commit 299284cec65076fd4c76bf1efaae60b60f4d4f7b)

3 months agochore: Fix typo of psycopg2 in comment (#12526)
Matt John [Tue, 15 Apr 2025 19:05:36 +0000 (20:05 +0100)] 
chore: Fix typo of psycopg2 in comment (#12526)

This is the first example in the documentation of a particular connector, which mgith result in copy+pastes, resulting in an error

(cherry picked from commit f2a9ecde29bb9d5daadd0626054ff8b54865c781)

3 months agoType postgresql.aggregate_order_by()
Denis Laxalde [Wed, 9 Apr 2025 07:04:20 +0000 (03:04 -0400)] 
Type postgresql.aggregate_order_by()

Overloading of `__init__()` is needed, probably for the same reason as it is in `ReturnTypeFromArgs`.

Related to #6810.

Closes: #12463
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12463
Pull-request-sha: 701d979e20c6ca3e32b79145c20441407007122f

Change-Id: I7e1bb4d2c48dfb3461725c7079aaa72c66f1dc03
(cherry picked from commit 09c1d3ccaccd93e0b8affa751c40c250aeedbaa5)

3 months agoorm.exc.NoResultFound => exc.NoResultFound (#12509)
Inada Naoki [Tue, 8 Apr 2025 20:43:25 +0000 (05:43 +0900)] 
orm.exc.NoResultFound => exc.NoResultFound (#12509)

* s/orm.exc.NoResultFound/exc.NoResultFound/

* use _exc

(cherry picked from commit d5a913c8aefad763539f8fd88b99118bcabb19a2)

3 months agooptimize `@util.decorator`
Inada Naoki [Mon, 7 Apr 2025 23:55:48 +0000 (19:55 -0400)] 
optimize `@util.decorator`

### Description

util.decorator uses code generation + eval to create signature matching wrapper.
It consumes some CPU because we can not use pyc cache.

Additionally, each wrapped function has own globals for function annotations.

By stripping function annotations from eval-ed code, compile time and memory usage are saved.

```python
from sqlalchemy.util import decorator
from sqlalchemy import *
import timeit
import tracemalloc
import sqlalchemy.orm._orm_constructors

@decorator
def with_print(fn, *args, **kwargs):
    res = fn(*args, **kwargs)
    print(f"{fn.__name__}(*{args}, **{kwargs}) => {res}")
    return res

# test
PI = 3.14

def f():
    @with_print
    def add(x: int|float, *, y: int|float=PI) -> int|float:
        return x + y
    return add

add = f()
add(1)
print(add.__annotations__)

# benchmark
print(timeit.timeit(f, number=1000)*1000, "us")

# memory
tracemalloc.start(1)
[f() for _ in range(1000)]
mem, peak = tracemalloc.get_traced_memory()
tracemalloc.stop()
print(f"{mem=}, {peak=}")
```

Result:
```
$ .venv/bin/python -VV
Python 3.14.0a6 (main, Mar 17 2025, 21:27:10) [Clang 20.1.0 ]

$ .venv/bin/python sample.py
add(*(1,), **{'y': 3.14}) => 4.140000000000001
{'x': int | float, 'y': int | float, 'return': int | float}
35.93937499681488 us
mem=9252896, peak=9300808

$ git switch -
Switched to branch 'opt-decorator'

$ .venv/bin/python sample.py
add(*(1,), **{'y': 3.14}) => 4.140000000000001
{'x': int | float, 'y': int | float, 'return': int | float}
23.32574996398762 us
mem=1439032, peak=1476423
```

### Checklist
<!-- go over following points. check them with an `x` if they do apply, (they turn into clickable checkboxes once the PR is submitted, so no need to do everything at once)

-->

This pull request is:

- [ ] A documentation / typographical / small typing error fix
- Good to go, no issue or tests are needed
- [x] A short code fix
- please include the issue number, and create an issue if none exists, which
  must include a complete example of the issue.  one line code fixes without an
  issue and demonstration will not be accepted.
- Please include: `Fixes: #<issue number>` in the commit message
- please include tests.   one line code fixes without tests will not be accepted.
- [ ] A new feature implementation
- please include the issue number, and create an issue if none exists, which must
  include a complete example of how the feature would look.
- Please include: `Fixes: #<issue number>` in the commit message
- please include tests.

Closes: #12502
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12502
Pull-request-sha: 34409cbbfd2dee65bf86a85a87e415c9af47dc62

Change-Id: I88b88eb6eb018608bc2881459f58564881d06641
(cherry picked from commit 370f13fe88ec5e4ee2400e23717db1e13df102bf)

4 months agoMerge "Support postgresql_include in UniqueConstraint and PrimaryKeyConstraint" into...
Federico Caselli [Fri, 4 Apr 2025 19:04:13 +0000 (19:04 +0000)] 
Merge "Support postgresql_include in UniqueConstraint and PrimaryKeyConstraint" into rel_2_0

4 months agoMerge "improve overloads applied to generic functions" into rel_2_0
Federico Caselli [Thu, 3 Apr 2025 19:22:52 +0000 (19:22 +0000)] 
Merge "improve overloads applied to generic functions" into rel_2_0

4 months agodocs: Fix substr function starting index in hybrid_property example (#12482)
krave1986 [Thu, 3 Apr 2025 18:55:36 +0000 (02:55 +0800)] 
docs: Fix substr function starting index in hybrid_property example (#12482)

(cherry picked from commit 0c1824c666c55ae19051feb4970060385c674bb3)

4 months agoimprove overloads applied to generic functions
Federico Caselli [Mon, 24 Mar 2025 20:50:45 +0000 (21:50 +0100)] 
improve overloads applied to generic functions

try again to remove the overloads to the generic functionn
generator (like coalesce, array_agg, etc).
As of mypy 1.15 it still does now work, but a simpler version
is added in this change

Change-Id: I8b97ae00298ec6f6bf8580090e5defff71e1ceb0
(cherry picked from commit 5cc6a65c61798078959455f5d74f535681c119b7)

4 months agoFix typo (#12495)
Adriaan Joubert [Thu, 3 Apr 2025 17:56:29 +0000 (20:56 +0300)] 
Fix typo (#12495)

(cherry picked from commit 51007fe428d87e5d5bfc2c04cd4224fda2e00879)

4 months agoensure ON UPDATE test is case insensitive
Alexander Ruehe [Tue, 1 Apr 2025 21:52:12 +0000 (17:52 -0400)] 
ensure ON UPDATE test is case insensitive

Fixed regression caused by the DEFAULT rendering changes in 2.0.40
:ticket:`12425` where using lowercase `on update` in a MySQL server default
would incorrectly apply parenthesis, leading to errors when MySQL
interpreted the rendered DDL.  Pull request courtesy Alexander Ruehe.

Fixes: #12488
Closes: #12489
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12489
Pull-request-sha: b9008f747d21bc06a4006c99a47fc6aa99407636

Change-Id: If5281c52415e4ddb6c2f8aee191d2335f6673b35
(cherry picked from commit 6f8f4a7d620f19afce8b8d43c25ff5ca5a466038)

4 months agoSupport postgresql_include in UniqueConstraint and PrimaryKeyConstraint
Denis Laxalde [Tue, 1 Apr 2025 17:30:48 +0000 (13:30 -0400)] 
Support postgresql_include in UniqueConstraint and PrimaryKeyConstraint

This is supported both for schema definition and reflection.

Fixes #10665.

Closes: #12485
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12485
Pull-request-sha: 1aabea7b55ece9fc0c6e069b777d4404ac01f964

Change-Id: I81d23966f84390dd1b03f0d13284ce6d883ee24e
(cherry picked from commit 3b7725dd1243134341cf1bfb331ed4501fc882e8)

4 months agominor cleanup of postgresql index reflection query
Federico Caselli [Tue, 1 Apr 2025 21:49:36 +0000 (23:49 +0200)] 
minor cleanup of postgresql index reflection query

Change-Id: I669ea8e99c6b69cb70263b0cacd80d3ed0fab39c
(cherry picked from commit 08619693794ebcd6671448658ce4c8bce7763ff0)

4 months agoAdd type annotations to postgresql.pg_catalog
Denis Laxalde [Tue, 25 Mar 2025 08:51:30 +0000 (04:51 -0400)] 
Add type annotations to postgresql.pg_catalog

Related to #6810.

Closes: #12462
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12462
Pull-request-sha: 5a131cc9a94a2c9efa0e888fe504ebc03d84c7f0

Change-Id: Ie4494d61f815edefef6a896499db4292fd94a22a
(cherry picked from commit 864f79d7c421cfa01b6e01eb95b76ffe77ff44d1)

4 months agoVersion 2.0.41 placeholder
Mike Bayer [Thu, 27 Mar 2025 17:52:56 +0000 (13:52 -0400)] 
Version 2.0.41 placeholder

4 months ago- 2.0.40 rel_2_0_40
Mike Bayer [Thu, 27 Mar 2025 16:48:32 +0000 (12:48 -0400)] 
- 2.0.40

4 months agochangelog update
Mike Bayer [Thu, 27 Mar 2025 16:47:43 +0000 (12:47 -0400)] 
changelog update

Change-Id: I03202183f4045030bc2940c43d637edc3524b5d4
(cherry picked from commit dd0b44b123738ba9289e120d3e3d8238d7741ea7)

4 months agoMerge "Type array_agg()" into rel_2_0
Michael Bayer [Thu, 27 Mar 2025 16:34:41 +0000 (16:34 +0000)] 
Merge "Type array_agg()" into rel_2_0

4 months agoMerge "implement AsyncSessionTransaction._regenerate_proxy_for_target" into rel_2_0
Michael Bayer [Thu, 27 Mar 2025 16:30:10 +0000 (16:30 +0000)] 
Merge "implement AsyncSessionTransaction._regenerate_proxy_for_target" into rel_2_0

4 months agoimplement AsyncSessionTransaction._regenerate_proxy_for_target
Mike Bayer [Wed, 26 Mar 2025 17:55:46 +0000 (13:55 -0400)] 
implement AsyncSessionTransaction._regenerate_proxy_for_target

Fixed issue where :meth:`.AsyncSession.get_transaction` and
:meth:`.AsyncSession.get_nested_transaction` would fail with
``NotImplementedError`` if the "proxy transaction" used by
:class:`.AsyncSession` were garbage collected and needed regeneration.

Fixes: #12471
Change-Id: Ia8055524618df706d7958786a500cdd25d9d8eaf
(cherry picked from commit 0202673a34b1b0cbbda6e2cb06012f77df642085)

4 months agoImplement GROUPS frame spec for window functions
Kaan [Wed, 19 Mar 2025 15:58:30 +0000 (11:58 -0400)] 
Implement GROUPS frame spec for window functions

Implemented support for the GROUPS frame specification in window functions
by adding :paramref:`_sql.over.groups` option to :func:`_sql.over`
and :meth:`.FunctionElement.over`. Pull request courtesy Kaan Dikmen.

Fixes: #12450
Closes: #12445
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12445
Pull-request-sha: c0808e135f15c7fef3a3abcf28465673f38eb428

Change-Id: I9ff504a9c9650485830c4a0eaf44162898a3a2ad
(cherry picked from commit 0bbc515f904446d3f0beede54321b628f32fbdad)

4 months agocompatibility with typing_extensions 4.13 and type statement
Daraan [Wed, 26 Mar 2025 18:27:46 +0000 (14:27 -0400)] 
compatibility with typing_extensions 4.13 and type statement

Fixed regression caused by ``typing_extension==4.13.0`` that introduced
a different implementation for ``TypeAliasType`` while SQLAlchemy assumed
that it would be equivalent to the ``typing`` version.

Added test regarding generic TypeAliasType

Fixes: #12473
Closes: #12472
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12472
Pull-request-sha: 8861a5acfb8e81663413ff144b41abf64779b6fd

Change-Id: I053019a222546a625ed6d588314ae9f5b34c2f8a
(cherry picked from commit 61970f9d2b7809116b5a9d339b45d910e276b428)

4 months agodocument sqlite truncate_microseconds in DATETIME and TIME
Federico Caselli [Wed, 26 Mar 2025 20:43:10 +0000 (21:43 +0100)] 
document sqlite truncate_microseconds in DATETIME and TIME

Change-Id: I93412d951b466343f2cf9b6d513ad46d17f5d8ee
(cherry picked from commit a9b37199133eea81ebdf062439352ef2745d3c00)

4 months agoType array_agg()
Denis Laxalde [Mon, 24 Mar 2025 20:35:07 +0000 (16:35 -0400)] 
Type array_agg()

The return type of `array_agg()` is declared as a `Sequence[T]` where `T` is bound to the type of input argument.

This is implemented by making `array_agg()` inheriting from `ReturnTypeFromArgs` which provides appropriate overloads of `__init__()` to support this.

This usage of ReturnTypeFromArgs is a bit different from previous ones as the return type of the function is not exactly the same as that of its arguments, but a "collection" (a generic, namely a Sequence here) of the argument types.  Accordingly, we adjust the code of `tools/generate_sql_functions.py` to retrieve the "collection" type from 'fn_class' annotation and generate expected return type.

Also add a couple of hand-written typing tests for PostgreSQL.

Related to #6810

Closes: #12461
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12461
Pull-request-sha: ba27cbb8639dcd35127ab6a2928b7b5b3667e287

Change-Id: I3fd538cc7092a0492c26970f0b825bf70ddb66cd
(cherry picked from commit 543acbd8d1c7e3037877ca74a6b05f62592ef153)

4 months agoIncrease minimum required greenlet version
Chris Withers [Tue, 25 Mar 2025 19:05:23 +0000 (15:05 -0400)] 
Increase minimum required greenlet version

Add a lower bound constraint on the greenlet version to 1.

Closes: #12459
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12459
Pull-request-sha: 4bd856b9c164df984f05c094c977686470ed4244

Change-Id: I200861f1706bf261c2e586b96e8cc35dceb7670b
(cherry picked from commit 938e0fee9b834aca8b22034c75ffadefdfbaaf5f)

4 months agoAdd missing imports to example (#12453)
Stefanie Molin [Tue, 25 Mar 2025 19:05:44 +0000 (15:05 -0400)] 
Add missing imports to example (#12453)

(cherry picked from commit aae34df0b5aa7dfe02bdc19744b1b6bc8533ee91)

4 months agoMerge "Cast empty PostgreSQL ARRAY from the type specified to array()" into rel_2_0
Michael Bayer [Thu, 20 Mar 2025 01:41:57 +0000 (01:41 +0000)] 
Merge "Cast empty PostgreSQL ARRAY from the type specified to array()" into rel_2_0

4 months agoCast empty PostgreSQL ARRAY from the type specified to array()
Denis Laxalde [Wed, 19 Mar 2025 08:17:27 +0000 (04:17 -0400)] 
Cast empty PostgreSQL ARRAY from the type specified to array()

When building a PostgreSQL ``ARRAY`` literal using
:class:`_postgresql.array` with an empty ``clauses`` argument, the
:paramref:`_postgresql.array.type_` parameter is now significant in that it
will be used to render the resulting ``ARRAY[]`` SQL expression with a
cast, such as ``ARRAY[]::INTEGER``. Pull request courtesy Denis Laxalde.

Fixes: #12432
Closes: #12435
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12435
Pull-request-sha: 9633d3c15d42026f8f45f5a4d201a5d72e57b8d4

Change-Id: I29ed7bd0562b82351d22de0658fb46c31cfe44f6
(cherry picked from commit 588cc6ed8e95f3fdd0920fd49a0992e7739662fc)

4 months agoMerge "skip FROM disambiguation for immediate alias of table" into rel_2_0
Michael Bayer [Wed, 19 Mar 2025 23:58:31 +0000 (23:58 +0000)] 
Merge "skip FROM disambiguation for immediate alias of table" into rel_2_0

4 months agoMerge "Make ARRAY generic on the item_type" into rel_2_0
Michael Bayer [Wed, 19 Mar 2025 22:43:22 +0000 (22:43 +0000)] 
Merge "Make ARRAY generic on the item_type" into rel_2_0

4 months agoskip FROM disambiguation for immediate alias of table
Mike Bayer [Wed, 19 Mar 2025 22:30:21 +0000 (18:30 -0400)] 
skip FROM disambiguation for immediate alias of table

Fixed regression caused by :ticket:`7471` leading to a SQL compilation
issue where name disambiguation for two same-named FROM clauses with table
aliasing in use at the same time would produce invalid SQL in the FROM
clause with two "AS" clauses for the aliased table, due to double aliasing.

Fixes: #12451
Change-Id: I981823f8f2cdf3992d65ace93a21fc20d1d74cda
(cherry picked from commit 9ea3be0681dc09338e53b63cea4803de80ebcdc7)

4 months agoremove attrs w/ orm annotated declarative example
Mike Bayer [Wed, 19 Mar 2025 12:59:54 +0000 (08:59 -0400)] 
remove attrs w/ orm annotated declarative example

as pointed out at
https://github.com/sqlalchemy/sqlalchemy/discussions/12449, ORM
annotated declarative is not compatible with attrs, declarative
cannot be used with attrs.

Change-Id: Ief6d1dca65b96164f48264a999c85bcae8dc3bb1
(cherry picked from commit 780d37777ea26bf88fa36388b516664fa0c11955)

4 months agoMake ARRAY generic on the item_type
Denis Laxalde [Tue, 18 Mar 2025 16:23:01 +0000 (12:23 -0400)] 
Make ARRAY generic on the item_type

Now `Column(type_=ARRAY(Integer)` is inferred as `Column[Sequence[int]]` instead as `Column[Sequence[Any]]` previously. This only works with the `type_` argument to Column, but that's not new.

This follows from a suggestion at
https://github.com/sqlalchemy/sqlalchemy/pull/12386#issuecomment-2694056069.

Related to #6810.

Closes: #12443
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12443
Pull-request-sha: 2fff4e89cd0b72d9444ce3f3d845b152770fc55d

Change-Id: I87b828fd82d10fbf157141db3c31f0ec8149caad
(cherry picked from commit 500adfafcb782c5b22ff49e00192a2ed42ed09b6)

4 months agoMerge "expand paren rules for default rendering, sqlite/mysql" into rel_2_0
Michael Bayer [Tue, 18 Mar 2025 12:17:33 +0000 (12:17 +0000)] 
Merge "expand paren rules for default rendering, sqlite/mysql" into rel_2_0

4 months agoensure SQL expressions w/o bool pass through to correct typing error
Mike Bayer [Mon, 17 Mar 2025 20:46:12 +0000 (16:46 -0400)] 
ensure SQL expressions w/o bool pass through to correct typing error

Fixed regression which occurred as of 2.0.37 where the checked
:class:`.ArgumentError` that's raised when an inappropriate type or object
is used inside of a :class:`.Mapped` annotation would raise ``TypeError``
with "boolean value of this clause is not defined" if the object resolved
into a SQL expression in a boolean context, for programs where future
annotations mode was not enabled.  This case is now handled explicitly and
a new error message has also been tailored for this case.  In addition, as
there are at least half a dozen distinct error scenarios for intepretation
of the :class:`.Mapped` construct, these scenarios have all been unified
under a new subclass of :class:`.ArgumentError` called
:class:`.MappedAnnotationError`, to provide some continuity between these
different scenarios, even though specific messaging remains distinct.

Fixes: #12329
Change-Id: I0193e3479c84a48b364df8655f050e2e84151122
(cherry picked from commit b19a09812c2b0806cc063e42993216fc1ead6ed2)

4 months agoMerge "Support column list for foreign key ON DELETE SET actions on PostgreSQL" into...
Michael Bayer [Mon, 17 Mar 2025 21:30:49 +0000 (21:30 +0000)] 
Merge "Support column list for foreign key ON DELETE SET actions on PostgreSQL" into rel_2_0

4 months agofix rst target for Insert
Federico Caselli [Mon, 17 Mar 2025 20:33:31 +0000 (21:33 +0100)] 
fix rst target for Insert

Change-Id: Iee0b8e90223722c40b25c309c47fd6175680ca0e
(cherry picked from commit 6047ccd72b7ec6e3730845985ec46fa3a7dce07d)

4 months agoexpand paren rules for default rendering, sqlite/mysql
Mike Bayer [Wed, 12 Mar 2025 20:25:48 +0000 (16:25 -0400)] 
expand paren rules for default rendering, sqlite/mysql

Expanded the rules for when to apply parenthesis to a server default in DDL
to suit the general case of a default string that contains non-word
characters such as spaces or operators and is not a string literal.

Fixed issue in MySQL server default reflection where a default that has
spaces would not be correctly reflected.  Additionally, expanded the rules
for when to apply parenthesis to a server default in DDL to suit the
general case of a default string that contains non-word characters such as
spaces or operators and is not a string literal.

Fixes: #12425
Change-Id: Ie40703dcd5fdc135025d676c01baba57ff3b71ad
(cherry picked from commit 1afb820427545e259397b98851a910d7379b2eb8)

4 months agoSupport column list for foreign key ON DELETE SET actions on PostgreSQL
Denis Laxalde [Thu, 13 Mar 2025 12:43:53 +0000 (08:43 -0400)] 
Support column list for foreign key ON DELETE SET actions on PostgreSQL

Added support for specifying a list of columns for ``SET NULL`` and ``SET
DEFAULT`` actions of ``ON DELETE`` clause of foreign key definition on
PostgreSQL.  Pull request courtesy Denis Laxalde.

Fixes: #11595
Closes: #12421
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12421
Pull-request-sha: d0394db7066ba8a8eaf3d3972d779f3e170e9406

Change-Id: I036a559ae4a8efafe9ba64d776a840bd785a7397
(cherry picked from commit 39bb17442ce6ac9a3dde5e2b72376b77ffce5e28)

4 months agoMerge "miscellaneous to type dialects" into rel_2_0
Michael Bayer [Mon, 17 Mar 2025 17:35:30 +0000 (17:35 +0000)] 
Merge "miscellaneous to type dialects" into rel_2_0

4 months agoMerge "Add type annotations to `postgresql.array`" into rel_2_0
Michael Bayer [Mon, 17 Mar 2025 17:29:39 +0000 (17:29 +0000)] 
Merge "Add type annotations to `postgresql.array`" into rel_2_0

4 months agoAdd type annotations to `postgresql.array`
Denis Laxalde [Fri, 14 Mar 2025 21:01:50 +0000 (17:01 -0400)] 
Add type annotations to `postgresql.array`

Improved static typing for `postgresql.array()` by making the type parameter (the type of array's elements) inferred from the `clauses` and `type_` arguments while also ensuring they are consistent.

Also completed type annotations of `postgresql.ARRAY` following commit 0bf7e02afbec557eb3a5607db407f27deb7aac77 and added type annotations for functions `postgresql.Any()` and `postgresql.All()`.

Finally, fixed shadowing `typing.Any` by the `Any()` function through aliasing as `typing_Any`.

Related to #6810

Closes: #12384
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12384
Pull-request-sha: 78eea29f1de850afda036502974521969629de7e

Change-Id: I5d35d15ec8ba4d58eeb9bf00abb710e2e585731f
(cherry picked from commit 75c8e112c9362f89787d8fc25a6a200700052450)

4 months agomiscellaneous to type dialects
Pablo Estevez [Sat, 8 Feb 2025 15:46:24 +0000 (10:46 -0500)] 
miscellaneous to type dialects

Type of certain methods that are called by dialect, so typing dialects is easier.

Related to https://github.com/sqlalchemy/sqlalchemy/pull/12164

breaking changes:

- Change modifiers from TextClause to InmutableDict, from Mapping, as is in the other classes

Closes: #12231
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12231
Pull-request-sha: 514fe4751c7b1ceefffed2a4ef9c8df339bd9c25

Change-Id: I29314045b2c7eb5428f8d6fec8911c4b6d5ae73e
(cherry picked from commit 4418ef79104a0e4591ff8268d75f1deb59bfcec3)

4 months agoanonymize CRUD params if visiting_cte is present
Mike Bayer [Fri, 14 Mar 2025 14:33:22 +0000 (10:33 -0400)] 
anonymize CRUD params if visiting_cte is present

Fixed issue in :class:`.CTE` constructs involving multiple DDL
:class:`.Insert` statements with multiple VALUES parameter sets where the
bound parameter names generated for these parameter sets would conflict,
generating a compile time error.

Fixes: #12363
Change-Id: If8344ff725d4e0ec58d3ff61f38a0edcfc5bdebd
(cherry picked from commit ec20f346a6ed6e5c6de3ee6b6972cf13dba4752d)

4 months agoMerge "re-support mysql-connector python" into rel_2_0
Michael Bayer [Fri, 14 Mar 2025 12:58:32 +0000 (12:58 +0000)] 
Merge "re-support mysql-connector python" into rel_2_0

4 months agoComplement type annotations for ARRAY
Denis Laxalde [Wed, 5 Mar 2025 20:59:39 +0000 (15:59 -0500)] 
Complement type annotations for ARRAY

This complements the type annotations of the `ARRAY` class, in preparation of #12384.

This pull request is:

- [ ] A documentation / typographical / small typing error fix
- Good to go, no issue or tests are needed
- [ ] A short code fix
- please include the issue number, and create an issue if none exists, which
  must include a complete example of the issue.  one line code fixes without an
  issue and demonstration will not be accepted.
- Please include: `Fixes: #<issue number>` in the commit message
- please include tests.   one line code fixes without tests will not be accepted.
- [x] A new feature implementation
- please include the issue number, and create an issue if none exists, which must
  include a complete example of how the feature would look.
- Please include: `Fixes: #<issue number>` in the commit message
- please include tests.

Related to https://github.com/sqlalchemy/sqlalchemy/issues/6810

Closes: #12386
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12386
Pull-request-sha: c9513ce729fa1116b46b02336d4e2cda3d096fee

Change-Id: If9df4708c8e597eedc79ee3990792fa6c72f1afe
(cherry picked from commit 0bf7e02afbec557eb3a5607db407f27deb7aac77)

4 months agore-support mysql-connector python
Mike Bayer [Sun, 23 Feb 2025 16:20:18 +0000 (11:20 -0500)] 
re-support mysql-connector python

Support has been re-added for the MySQL-Connector/Python DBAPI using the
``mysql+mysqlconnector://`` URL scheme.   The DBAPI now works against
modern MySQL versions as well as MariaDB versions (in the latter case it's
required to pass charset/collation explicitly).   Note however that
server side cursor support is disabled due to unresolved issues with this
driver.

note the 2.0 backport here necessarily needs to also backport some
of 49ce245998 to handle the mariadb database working under mysql
connector.

References: #12332
Change-Id: I81279478196e830d3c0d5f24ecb3fe2dc18d4ca6
(cherry picked from commit b056dd2c5ab71ce4143a95cd0fdd4a4190de19e6)