]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/log
thirdparty/sqlalchemy/sqlalchemy.git
4 months agoMerge "group together with_polymorphic for single inh criteria" into main
Michael Bayer [Thu, 6 Mar 2025 18:35:06 +0000 (18:35 +0000)] 
Merge "group together with_polymorphic for single inh criteria" into main

4 months agoimplement mysql limit() for UPDATE/DELETE DML (patch 2)
Mike Bayer [Mon, 24 Feb 2025 20:10:54 +0000 (15:10 -0500)] 
implement mysql limit() for UPDATE/DELETE DML (patch 2)

Added new construct :func:`_mysql.limit` which can be applied to any
:func:`_sql.update` or :func:`_sql.delete` to provide the LIMIT keyword to
UPDATE and DELETE.  This new construct supersedes the use of the
"mysql_limit" dialect keyword argument.

Change-Id: Ie10c2f273432b0c8881a48f5b287f0566dde6ec3

4 months agoMerge "syntax extensions (patch 1)" into main
Michael Bayer [Thu, 6 Mar 2025 14:55:26 +0000 (14:55 +0000)] 
Merge "syntax extensions (patch 1)" into main

4 months agosyntax extensions (patch 1)
Mike Bayer [Mon, 16 Dec 2024 22:29:22 +0000 (17:29 -0500)] 
syntax extensions (patch 1)

Added the ability to create custom SQL constructs that can define new
clauses within SELECT, INSERT, UPDATE, and DELETE statements without
needing to modify the construction or compilation code of of
:class:`.Select`, :class:`.Insert`, :class:`.Update`, or :class:`.Delete`
directly.  Support for testing these constructs, including caching support,
is present along with an example test suite.  The use case for these
constructs is expected to be third party dialects for NewSQL or other novel
styles of database that introduce new clauses to these statements.   A new
example suite is included which illustrates the ``QUALIFY`` SQL construct
used by several NewSQL databases which includes a cachable implementation
as well as a test suite.

Since these extensions start to make it a bit crowded with how many
kinds of "options" we have on statements, did some naming /
documentation changes with existing constructs on Executable, in
particular to distinguish ExecutableOption from SyntaxExtension.

Fixes: #12195
Change-Id: I4a44ee5bbc3d8b1b640837680c09d25b1b7077af

4 months agogroup together with_polymorphic for single inh criteria
Mike Bayer [Tue, 4 Mar 2025 16:31:10 +0000 (11:31 -0500)] 
group together with_polymorphic for single inh criteria

The behavior of :func:`_orm.with_polymorphic` when used with a single
inheritance mapping has been changed such that its behavior should match as
closely as possible to that of an equivalent joined inheritance mapping.
Specifically this means that the base class specified in the
:func:`_orm.with_polymorphic` construct will be the basemost class that is
loaded, as well as all descendant classes of that basemost class.
The change includes that the descendant classes named will no longer be
exclusively indicated in "WHERE polymorphic_col IN" criteria; instead, the
whole hierarchy starting with the given basemost class will be loaded.  If
the query indicates that rows should only be instances of a specific
subclass within the polymorphic hierarchy, an error is raised if an
incompatible superclass is loaded in the result since it cannot be made to
match the requested class; this behavior is the same as what joined
inheritance has done for many years. The change also allows a single result
set to include column-level results from multiple sibling classes at once
which was not previously possible with single table inheritance.

Fixes: #12395
Change-Id: I9307b236a6de8c47e452fb8f982098c54edb811a

4 months agoAdd type annotations to `postgresql.json`
Denis Laxalde [Tue, 4 Mar 2025 20:28:47 +0000 (15:28 -0500)] 
Add type annotations to `postgresql.json`

(Same as https://github.com/sqlalchemy/sqlalchemy/pull/12384, but for `json`.)

### 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
- [ ] 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 #6810

**Have a nice day!**

Closes: #12391
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12391
Pull-request-sha: 0a43724f1737a4519629a13e2d6bf33f7aecb9ac

Change-Id: I2a0e88effccf351de7fa72389ee646532ce9cf69

4 months agotest related fixes
Federico Caselli [Wed, 5 Mar 2025 18:28:30 +0000 (19:28 +0100)] 
test related fixes

improve test error logging
add order to test

Change-Id: I2003f256a2690ee5673c72e2f1cb1340af750f83

4 months agoensure compiler is not optional in create_for_statement()
Mike Bayer [Mon, 3 Mar 2025 22:01:15 +0000 (17:01 -0500)] 
ensure compiler is not optional in create_for_statement()

this involved moving some methods around and changing the
target of legacy orm/query.py calling upon this method to
use an ORM-specific method instead

Change-Id: Ib977f08e52398d0e082acf7d88abecb9908ca8b6

4 months agoallow control of constraint isolation w/ add/drop constraint
Mike Bayer [Thu, 27 Feb 2025 17:04:12 +0000 (12:04 -0500)] 
allow control of constraint isolation w/ add/drop constraint

Added new parameters :paramref:`.AddConstraint.isolate_from_table` and
:paramref:`.DropConstraint.isolate_from_table`, defaulting to True, which
both document and allow to be controllable the long-standing behavior of
these two constructs blocking the given constraint from being included
inline within the "CREATE TABLE" sequence, under the assumption that
separate add/drop directives were to be used.

Fixes: #12382
Change-Id: I53c4170ccb5803f69945ba7aa3d3a143131508eb

4 months agoMerge "The ``noload`` loader option is now deprecated." into main
Michael Bayer [Thu, 27 Feb 2025 16:03:14 +0000 (16:03 +0000)] 
Merge "The ``noload`` loader option is now deprecated." into main

4 months agoMerge "improve rowmapping key type" into main
Michael Bayer [Thu, 27 Feb 2025 16:00:56 +0000 (16:00 +0000)] 
Merge "improve rowmapping key type" into main

4 months agoimprove rowmapping key type
Federico Caselli [Tue, 25 Feb 2025 22:06:55 +0000 (23:06 +0100)] 
improve rowmapping key type

the accepted keys are also orm attributes, column elements, functions
etc, not only columns

Change-Id: I354de9b9668bc02b8b305a3c1f065744b28f8030

4 months agoAdd more `requires` to tests for easier dialect tests management
Karol Gongola [Wed, 26 Feb 2025 10:06:16 +0000 (05:06 -0500)] 
Add more `requires` to tests for easier dialect tests management

<!-- Provide a general summary of your proposed changes in the Title field above -->

### Description
<!-- Describe your changes in detail -->
I am just going through starrocks dialect tests. I have figured out that adding some requires for tests may be useful also for other dialects. So this is a proposal of adding them to sqlalchemy. Please let me know if it is aligned with your approach.

### 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:

- [x] 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.
- [ ] 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: #12362
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12362
Pull-request-sha: 932d341f5f16f0c5cadc39d3a67b0f10297177ce

Change-Id: If9fa9f7477040620d131dcbe087fb4b50fd08a08

4 months agoMerge "various improvements to the docs" into main
Michael Bayer [Tue, 25 Feb 2025 20:43:34 +0000 (20:43 +0000)] 
Merge "various improvements to the docs" into main

4 months agovarious improvements to the docs
Federico Caselli [Mon, 24 Feb 2025 19:56:38 +0000 (20:56 +0100)] 
various improvements to the docs

- remove references to the removed mypy plugin
- add create table with partition examples in mysql

Change-Id: Idc5c35519a0812f1d63be95c14afb9ce2b00ea93

4 months agoThe ``noload`` loader option is now deprecated.
Federico Caselli [Fri, 24 Jan 2025 22:00:06 +0000 (23:00 +0100)] 
The ``noload`` loader option is now deprecated.

Fixes: #11045
Change-Id: If77517926eda71f92cd92b2d22a69a5ee172274e

4 months agofix docs typo
Federico Caselli [Mon, 24 Feb 2025 11:27:50 +0000 (12:27 +0100)] 
fix docs typo

Fixes: #12371
Change-Id: I86e6e34d407223d66b2cbcb21ec10dc292676449

4 months agoFix SQLite error for table with "WITHOUT ROWID" & "STRICT"
KingOfKaste [Thu, 20 Feb 2025 19:31:42 +0000 (14:31 -0500)] 
Fix SQLite error for table with "WITHOUT ROWID" & "STRICT"

Fixed issue that omitted the comma between multiple SQLite table extension
clauses, currently ``WITHOUT ROWID`` and ``STRICT``, when both options
:paramref:`.Table.sqlite_with_rowid` and  :paramref:`.Table.sqlite_strict`
were configured at their non-default settings at the same time.  Pull
request courtesy david-fed.

Fixes: #12368
Closes: #12369
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12369
Pull-request-sha: 3c9ceffe8279f5d961a44e6d468f21881bcbc75c

Change-Id: I1a44fd2d655d0e6eaad8213a360879daca9e4f11

4 months agocheck that two CTEs aren't just annotated forms of the same thing
Mike Bayer [Thu, 20 Feb 2025 17:50:25 +0000 (12:50 -0500)] 
check that two CTEs aren't just annotated forms of the same thing

Fixed issue where using :func:`_orm.aliased` around a :class:`.CTE`
construct could cause inappropriate "duplicate CTE" errors in cases where
that aliased construct appeared multiple times in a single statement.

Fixes: #12364
Change-Id: I9625cd83e9baf5312cdc644b38951353708d3b86

4 months agoMerge "apply _propagate_attrs in _construct_for_list" into main
Michael Bayer [Tue, 18 Feb 2025 17:57:10 +0000 (17:57 +0000)] 
Merge "apply _propagate_attrs in _construct_for_list" into main

4 months agoMerge "Support generic types for union and union_all" into main
Michael Bayer [Tue, 18 Feb 2025 17:18:19 +0000 (17:18 +0000)] 
Merge "Support generic types for union and union_all" into main

4 months agoapply _propagate_attrs in _construct_for_list
Mike Bayer [Tue, 18 Feb 2025 15:20:32 +0000 (10:20 -0500)] 
apply _propagate_attrs in _construct_for_list

Fixed issue where the "is ORM" flag of a :func:`.select` or other ORM
statement would not be propagated to the ORM :class:`.Session` based on a
multi-part operator expression alone, e.g. such as ``Cls.attr + Cls.attr +
Cls.attr`` or similar, leading to ORM behaviors not taking place for such
statements.

Fixes: #12357
Change-Id: I61130eeb3c7a32c1830731fd9ad4eb99a64abf7d

4 months agoInclude status in the Pool docs
Federico Caselli [Mon, 17 Feb 2025 20:11:50 +0000 (21:11 +0100)] 
Include status in the Pool docs

Change-Id: I0a4bfc10f4cd0b7dbd3bf49e0575048b622fa4e8

4 months agominor docs fixes
Federico Caselli [Thu, 13 Feb 2025 22:17:12 +0000 (23:17 +0100)] 
minor docs fixes

Change-Id: I7379bc6904daac711063734d2f43aa5f6e734a0f

4 months agoMerge "Default python_type impl now returns object" into main
Michael Bayer [Thu, 13 Feb 2025 16:31:56 +0000 (16:31 +0000)] 
Merge "Default python_type impl now returns object" into main

4 months agoDefault python_type impl now returns object
Federico Caselli [Wed, 5 Feb 2025 22:41:32 +0000 (23:41 +0100)] 
Default python_type impl now returns object

The default implementation of :attr:`_sql.TypeEngine.python_type` now
returns ``object`` instead of ``NotImplementedError``, since that's the
base for all types in Python3.
The ``python_type`` of :class:`_sql.JSON` no longer returns ``dict``,
but instead fallbacks to the generic implementation.

Fixes: #10646
Change-Id: I2233e4a3d35a67b520a860d70afba8e5b22fd72d

4 months agoSupport generic types for union and union_all
Mingyu Park [Fri, 7 Feb 2025 19:45:26 +0000 (14:45 -0500)] 
Support generic types for union and union_all

Support generic types for compound selects (:func:`_sql.union`,
:func:`_sql.union_all`, :meth:`_sql.Select.union`,
:meth:`_sql.Select.union_all`, etc) returning the type of the first select.

Fixes: #11922
Closes: #12320
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12320
Pull-request-sha: f914a19f7201cec292056e900436d8c8431b9f87

Change-Id: I4fffa5d3fe93dd3a293b078360e326fea4207c5d

4 months agofix(AsyncResult): Fix scalar method error due to missing attribute
allenyuchen [Wed, 12 Feb 2025 17:35:58 +0000 (12:35 -0500)] 
fix(AsyncResult): Fix scalar method error due to missing attribute

Fixed bug where :meth:`_asyncio.AsyncResult.scalar`,
:meth:`_asyncio.AsyncResult.scalar_one_or_none`, and
:meth:`_asyncio.AsyncResult.scalar_one` would raise an ``AttributeError``
due to a missing internal attribute.  Pull request courtesy Allen Ho.

Fixes: #12338
Closes: #12339
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12339
Pull-request-sha: 63ba43365e9624a75e3f206e6b0f4569e3940da6

Change-Id: I44a949e4a942a080338037cd570d4b1dc0d7550d

5 months agoMerge "try pytest 8.3" into main
Michael Bayer [Tue, 11 Feb 2025 02:20:12 +0000 (02:20 +0000)] 
Merge "try pytest 8.3" into main

5 months agoreconcile #12326 and #12328
Mike Bayer [Mon, 10 Feb 2025 20:26:24 +0000 (15:26 -0500)] 
reconcile #12326 and #12328

These two issues both involve ORM DML RETURNING.   The looser
column inclusion rules given in #12328 then included a correlated
subquery column_property given in #12326, which does not work
in RETURNING.  so re-tighten UPDATE/DELETE with a more specific
rule to cut out local mapped props that are not persisted columns,
but still allow other mapped props through without blocking them.

Fixes: #12326
Change-Id: I8fe7b8ab9b85907e562648433fdb3c7ba160c0d0

5 months agoMerge "implement is_derived_from() for DML" into main
Michael Bayer [Mon, 10 Feb 2025 13:20:12 +0000 (13:20 +0000)] 
Merge "implement is_derived_from() for DML" into main

5 months agoonly use _DMLReturningColFilter for "bulk insert", not other DML
Mike Bayer [Sun, 9 Feb 2025 23:09:21 +0000 (18:09 -0500)] 
only use _DMLReturningColFilter for "bulk insert", not other DML

Fixed bug in ORM enabled UPDATE (and theoretically DELETE) where using a
multi-table DML statement would not allow ORM mapped columns from mappers
other than the primary UPDATE mapper to be named in the RETURNING clause;
they would be omitted instead and cause a column not found exception.

Fixes: #12328
Change-Id: I2223ee506eec447823a3a545eecad1a7a03364a9

5 months agotry pytest 8.3
Mike Bayer [Sun, 9 Feb 2025 23:30:11 +0000 (18:30 -0500)] 
try pytest 8.3

we've been pinned under 8.2 for unclear reasons (but likely
reasons).   see what 8.3 does.  current pypi release is 8.3.4

Change-Id: I601335f5604a37e07fd3bb0abb99160e055dd95c

5 months agoimplement is_derived_from() for DML
Mike Bayer [Sat, 8 Feb 2025 16:38:53 +0000 (11:38 -0500)] 
implement is_derived_from() for DML

Fixed bug where using DML returning such as :meth:`.Insert.returning` with
an ORM model that has :func:`_orm.column_property` constructs that contain
subqueries would fail with an internal error.

Fixes: #12326
Change-Id: I419f645769a346c229944b30ac8fd4a0efe1646d

5 months agoMerge "Deprecate objects param of flush" into main
Federico Caselli [Sat, 8 Feb 2025 10:56:46 +0000 (10:56 +0000)] 
Merge "Deprecate objects param of flush" into main

5 months agoDeprecate objects param of flush
Federico Caselli [Wed, 5 Feb 2025 21:38:08 +0000 (22:38 +0100)] 
Deprecate objects param of flush

The :paramref:`_orm.Session.flush.objects` parameter is now deprecated.

Fixes: #10816
Change-Id: I4a535e91aefa16774c2549ecec09113d6e669df4

5 months agodoc(reconecting_engine): fix re-raise after attempts (#12306)
Augustin Prolongeau [Thu, 6 Feb 2025 23:18:57 +0000 (00:18 +0100)] 
doc(reconecting_engine): fix re-raise after attempts (#12306)

* doc(reconecting_engine): fix re-raise after attempts

* move re-raise after connection invalidation/rollback, reword log message

5 months agocherry-pick changelog update for 2.0.39
Mike Bayer [Thu, 6 Feb 2025 20:10:27 +0000 (15:10 -0500)] 
cherry-pick changelog update for 2.0.39

5 months agocherry-pick changelog from 2.0.38
Mike Bayer [Thu, 6 Feb 2025 20:10:27 +0000 (15:10 -0500)] 
cherry-pick changelog from 2.0.38

5 months agothis is version 2.0.38
Mike Bayer [Thu, 6 Feb 2025 20:04:30 +0000 (15:04 -0500)] 
this is version 2.0.38

Change-Id: I784d0ba9e4afd9a7be6dac71cd04376dedbec211

5 months agochangelog edits
Mike Bayer [Thu, 6 Feb 2025 18:59:22 +0000 (13:59 -0500)] 
changelog edits

Change-Id: I61164f4af388d8f4f157ad6afe96ccbb668587a7

5 months agoMerge "remove None exception in IN" into main
Michael Bayer [Thu, 6 Feb 2025 15:14:43 +0000 (15:14 +0000)] 
Merge "remove None exception in IN" into main

5 months agoMerge "reorganize column collection init to be local" into main
Michael Bayer [Wed, 5 Feb 2025 20:56:25 +0000 (20:56 +0000)] 
Merge "reorganize column collection init to be local" into main

5 months agoMerge "Use AsyncAdaptedQueuePool in aiosqlite" into main
Michael Bayer [Wed, 5 Feb 2025 19:17:29 +0000 (19:17 +0000)] 
Merge "Use AsyncAdaptedQueuePool in aiosqlite" into main

5 months agoremove None exception in IN
Mike Bayer [Wed, 5 Feb 2025 13:37:04 +0000 (08:37 -0500)] 
remove None exception in IN

Fixed SQL composition bug which impacted caching where using a ``None``
value inside of an ``in_()`` expression would bypass the usual "expanded
bind parameter" logic used by the IN construct, which allows proper caching
to take place.

Fixes: #12314
References: #12312
Change-Id: I0d2fc4e15c73407379ba368dd4ee32660fc66259

5 months agoMerge "Added `merge_all` and `delete_all`" into main
Michael Bayer [Wed, 5 Feb 2025 19:05:44 +0000 (19:05 +0000)] 
Merge "Added `merge_all` and `delete_all`" into main

5 months agoreorganize column collection init to be local
Mike Bayer [Sat, 1 Feb 2025 19:39:57 +0000 (14:39 -0500)] 
reorganize column collection init to be local

Reorganized the internals by which the `.c` collection on a
:class:`.FromClause` gets generated so that it is resilient against the
collection being accessed in concurrent fashion.   An example is creating a
:class:`.Alias` or :class:`.Subquery` and accessing it as a module level
variable.  This impacts the Oracle dialect which uses such module-level
global alias objects but is of general use as well.

Fixes: #12302
Change-Id: I30cb07c286affce24e2d85e49f9df5b787438d86

5 months agoFix 'polymorphic' typo in a few places (#12307)
Martin Burchell [Mon, 3 Feb 2025 18:56:55 +0000 (18:56 +0000)] 
Fix 'polymorphic' typo in a few places (#12307)

5 months agoAdded `merge_all` and `delete_all`
Federico Caselli [Fri, 3 Jan 2025 20:42:48 +0000 (21:42 +0100)] 
Added `merge_all` and `delete_all`

Added the utility method :meth:`_orm.Session.merge_all` and
:meth:`_orm.Session.delete_all` that operate on a collection
of instances.

Fixes: #11776
Change-Id: Ifd70ba2850db7c5e7aee482799fd65c348c2899a

5 months agoMerge "Unable to use InstrumentedAttribute to value mappings in mysql/mariadb on_dupl...
Federico Caselli [Sat, 1 Feb 2025 20:50:04 +0000 (20:50 +0000)] 
Merge "Unable to use InstrumentedAttribute to value mappings in mysql/mariadb on_duplicate_key_update" into main

5 months agoUnable to use InstrumentedAttribute to value mappings in mysql/mariadb on_duplicate_k...
Mingyu Park [Sat, 1 Feb 2025 07:43:35 +0000 (02:43 -0500)] 
Unable to use InstrumentedAttribute to value mappings in mysql/mariadb on_duplicate_key_update

Fixes: #12117
Closes: #12296
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12296
Pull-request-sha: 32a09ebd18a6f97fdb23cc8a8e212342e6c26291

Change-Id: I72701f63b13105e5dc36e63ba2651da2673f1735

5 months agoUse AsyncAdaptedQueuePool in aiosqlite
Christophe Bornet [Fri, 31 Jan 2025 12:42:59 +0000 (07:42 -0500)] 
Use AsyncAdaptedQueuePool in aiosqlite

<!-- Provide a general summary of your proposed changes in the Title field above -->

### Description
Change default pool in `aiosqlite` from `NullPool` to `AsyncAdaptedQueuePool`.
This ensures consistency with pysqlite and least surprise when migrating from sync to async.
See discussion in https://github.com/sqlalchemy/sqlalchemy/discussions/12285
Non regression tested by existing tests.

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

**Have a nice day!**

Closes: #12291
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12291
Pull-request-sha: 5a0872b8d431a6937eaf05fb132578aed5723b6a

Change-Id: I96b4d0b5154b34cd26d3ad89774229b0f5d8686f

5 months agoRemoved the deprecated mypy plugin.
Federico Caselli [Thu, 30 Jan 2025 21:05:59 +0000 (22:05 +0100)] 
Removed the deprecated mypy plugin.

The plugin was non-functional with newer version of mypy and it's no
longer needed with modern SQLAlchemy declarative style.

Fixes: #12293
Change-Id: If4581ab58623f0a2992f4e33a6dcdae002c68dad

5 months agoMerge "Skip mypy plugin tests if incompatible or missing" into main
Federico Caselli [Thu, 30 Jan 2025 20:39:34 +0000 (20:39 +0000)] 
Merge "Skip mypy plugin tests if incompatible or missing" into main

5 months agoremove comma in docstring
Federico Caselli [Thu, 30 Jan 2025 20:34:00 +0000 (21:34 +0100)] 
remove comma in docstring

Change-Id: I135c06ddc16f905835b50cb8ea41f13a1ae2e0be

5 months agoFix typo python2 -> python in 2.0 major migration guide (#12250)
Martin Burchell [Thu, 30 Jan 2025 20:31:15 +0000 (20:31 +0000)] 
Fix typo python2 -> python in 2.0 major migration guide (#12250)

5 months agoSkip mypy plugin tests if incompatible or missing
Nils Philippsen [Thu, 30 Jan 2025 13:10:55 +0000 (08:10 -0500)] 
Skip mypy plugin tests if incompatible or missing

Fixes: #12287
<!-- Provide a general summary of your proposed changes in the Title field above -->

### Description
<!-- Describe your changes in detail -->

This skips Mypy plugin tests if mypy is missing or an unsupported version.

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

**Have a nice day!**

Closes: #12288
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12288
Pull-request-sha: 00e00f321d54da3e5d6112f61d5770e59e33bf82

Change-Id: I492a93d3c586425e2cf53304520164dc1487a667

5 months agosupport accept for chains of joineddispatchers
Mike Bayer [Wed, 29 Jan 2025 15:10:09 +0000 (10:10 -0500)] 
support accept for chains of joineddispatchers

Fixed issue where creating an :class:`.Engine` using multiple calls to
:meth:`.Engine.execution_options` where a subsequent call involved certain
options such as ``isolation_level`` would lead to an internal error
involving event registration.

Fixes: #12289
Change-Id: Iec5fbc0eb0c5a92dda1ea762872ae992ca816685

5 months agouse arm runnes on linux instead of emulation
Federico Caselli [Wed, 22 Jan 2025 20:00:41 +0000 (21:00 +0100)] 
use arm runnes on linux instead of emulation

Fixes: #12249
Change-Id: I4c56a10d09716aa5e1fc4a1688dbfdf7cfcfd2fb

5 months agodocument name normalize
Mike Bayer [Wed, 4 Dec 2024 14:22:14 +0000 (09:22 -0500)] 
document name normalize

Fixes: #10789
Change-Id: I795d92c900502e4b2fde7ab11e8adb9b03d5b782

5 months agoMerge "asyncpg: shield connection close in terminate to avoid connection leak" into...
Michael Bayer [Tue, 21 Jan 2025 00:35:03 +0000 (00:35 +0000)] 
Merge "asyncpg: shield connection close in terminate to avoid connection leak" into main

5 months agoset default iso to None for asyncpg pep-249 wrapper
Mike Bayer [Thu, 16 Jan 2025 17:14:02 +0000 (12:14 -0500)] 
set default iso to None for asyncpg pep-249 wrapper

Adjusted the asyncpg connection wrapper so that the asyncpg
``.transaction()`` call sends ``None`` for isolation_level if not otherwise
set in the SQLAlchemy dialect/wrapper, thereby allowing asyncpg to make use
of the server level setting for isolation_level in the absense of a
client-level setting. Previously, this behavior of asyncpg was blocked by a
hardcoded ``read_committed``.

Fixes: #12159
Change-Id: I2cd878a5059a8fefc9557a9b8e056fedaee2e9a4

5 months agoasyncpg: shield connection close in terminate to avoid connection leak
Federico Caselli [Fri, 17 Jan 2025 20:16:51 +0000 (21:16 +0100)] 
asyncpg: shield connection close in terminate to avoid connection leak

Added an additional ``shield()`` call within the connection terminate
process of the asyncpg driver, to mitigate an issue where terminate would
be prevented from completing under the anyio concurrency library.

Fixes #12077
Closes: #12076
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12076
Pull-request-sha: 6ae261ea7668f4c850874666efec6fef658b08c0

Change-Id: Iaec63d02b620201dc60ffdad76ba9d61d427cac1

5 months agoupdate logging_name doc
Mike Bayer [Mon, 13 Jan 2025 13:14:14 +0000 (08:14 -0500)] 
update logging_name doc

engine logging has not used hex-strings in a very long time

Change-Id: I77131e3eb2f72129fde1d9ab6dd4b4e40bc313c6

5 months agoMerge "Remove fallbacks from the previous typing change" into main
Federico Caselli [Sun, 12 Jan 2025 19:00:38 +0000 (19:00 +0000)] 
Merge "Remove fallbacks from the previous typing change" into main

6 months agoREADME.unittests: fixup for parallelized `pytest` example (#12242)
James Addison [Sat, 11 Jan 2025 22:03:56 +0000 (22:03 +0000)] 
README.unittests: fixup for parallelized `pytest` example (#12242)

6 months agofix linter warning
Federico Caselli [Sat, 11 Jan 2025 21:59:06 +0000 (22:59 +0100)] 
fix linter warning

Change-Id: I075cfff5c9aea58d29c2caf5fd7512faa4902ef4

6 months agoFix MovedIn20Warning docstring (#12237)
Juang, Yi-Lin [Fri, 10 Jan 2025 22:27:49 +0000 (15:27 -0700)] 
Fix MovedIn20Warning docstring (#12237)

Remove reference of RemovedIn20Warning

6 months agocherry-pick changelog update for 2.0.38
Mike Bayer [Thu, 9 Jan 2025 22:44:09 +0000 (17:44 -0500)] 
cherry-pick changelog update for 2.0.38

6 months agocherry-pick changelog from 2.0.37
Mike Bayer [Thu, 9 Jan 2025 22:44:09 +0000 (17:44 -0500)] 
cherry-pick changelog from 2.0.37

6 months agofix changelog typos
Mike Bayer [Thu, 9 Jan 2025 22:36:03 +0000 (17:36 -0500)] 
fix changelog typos

Change-Id: Ib1631c23fe8ad2d4aa4a537526faf970229af56d

6 months agoAsyncpg null query fix
CommanderKeynes [Tue, 7 Jan 2025 15:52:36 +0000 (10:52 -0500)] 
Asyncpg null query fix

Adjusted the asyncpg dialect so that an empty SQL string, which is valid
for PostgreSQL server, may be successfully processed at the dialect level,
such as when using :meth:`.Connection.exec_driver_sql`. Pull request
courtesy Andrew Jackson.

Closes: #12220
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12220
Pull-request-sha: 45c94febee66b567040b1fbfa3a93079a1314f09

Change-Id: I870df9e31f4a229939e76c702724c25073329282

6 months agoclose unclosed sqlite result
Mike Bayer [Fri, 3 Jan 2025 20:40:26 +0000 (15:40 -0500)] 
close unclosed sqlite result

this close is hoped to address failures that have been occurring
on github actions under python 3.13, although i am able to reproduce
the problem on other python versions as well when running
test/orm/test_events.py with the --random extension.

Change-Id: If0c4110815fd8625b39b2d74de26ac965401de14

6 months agoguard against KeyError on subclass removal
Mike Bayer [Fri, 3 Jan 2025 17:19:27 +0000 (12:19 -0500)] 
guard against KeyError on subclass removal

Fixed issue in event system which prevented an event listener from being
attached and detached from multiple class-like objects, namely the
:class:`.sessionmaker` or :class:`.scoped_session` targets that assign to
:class:`.Session` subclasses.

Fixes: #12216
Change-Id: I3d8969fe604adbc23add07a13741938c7f4fc8ca

6 months agoRemove fallbacks from the previous typing change
Federico Caselli [Tue, 19 Nov 2024 22:09:06 +0000 (23:09 +0100)] 
Remove fallbacks from the previous typing change

Removed 2.0 fallbacks from Iffc34fd42b9769f73ddb4331bd59b6b37391635d

Fixes: #11944
Fixes: #11955
Fixes: #11305
Change-Id: I358aa8ea9822d20525989f414447f7f5ecb68711

6 months agoMerge "edits and reorganization for union/pep695 typing docs" into main
Michael Bayer [Fri, 3 Jan 2025 16:14:03 +0000 (16:14 +0000)] 
Merge "edits and reorganization for union/pep695 typing docs" into main

6 months ago2025
Mike Bayer [Thu, 2 Jan 2025 21:37:27 +0000 (16:37 -0500)] 
2025

Change-Id: Ifb33b8df2f838851f329415fa70f494acb4ccde5

6 months agoedits and reorganization for union/pep695 typing docs
Mike Bayer [Fri, 27 Dec 2024 21:59:28 +0000 (16:59 -0500)] 
edits and reorganization for union/pep695 typing docs

also some new tests

References: #11944
References: #11955
References: #11305
Change-Id: Ifaf8ede52a57336fa3875e8d86c6e22b2b8a0e14

6 months agofurther fixes for _cleanup_mapped_str_annotation
Mike Bayer [Mon, 30 Dec 2024 18:17:29 +0000 (13:17 -0500)] 
further fixes for _cleanup_mapped_str_annotation

Fixed issues in type handling within the ``type_annotation_map`` feature
which prevented the use of unions, using either pep-604 or ``Union``
syntaxes under future annotations mode, which contained multiple generic
types as elements from being correctly resolvable.

also adds some further tests to assert that None added into the type
map for pep695, typing.NewType etc. sets up nullability on the column

Fixes: #12207
Change-Id: I4057694cf35868972db2942721049d79301b19c4

6 months agoMerge "General improvement on annotated declarative" into main
Michael Bayer [Fri, 27 Dec 2024 20:44:32 +0000 (20:44 +0000)] 
Merge "General improvement on annotated declarative" into main

6 months agobefore_mapper_configured event doc fixes (#12200)
Lele Gaifax [Thu, 26 Dec 2024 11:09:40 +0000 (12:09 +0100)] 
before_mapper_configured event doc fixes (#12200)

* Remove spurious word in before_mapper_configured event doc

* Fix reST markup in before_mapper_configured event doc

6 months agopin ubuntu 22 since 24 seems broken. Runners have 4 cores now
Federico Caselli [Tue, 24 Dec 2024 21:39:58 +0000 (22:39 +0100)] 
pin ubuntu 22 since 24 seems broken. Runners have 4 cores now

Change-Id: Ie62b072446e8052d5465cfe2c01b2ccb05482aba

6 months agofix lint job
Mike Bayer [Tue, 24 Dec 2024 20:15:36 +0000 (15:15 -0500)] 
fix lint job

Change-Id: Ib3d5230212eb56f8f0454bb51b23a64d93de1e43

6 months agofix typo on double doc
Federico Caselli [Mon, 23 Dec 2024 21:47:47 +0000 (22:47 +0100)] 
fix typo on double doc

Change-Id: Ia8cffddae5c5c14954d7fa6b2e11c2b78c6e5f59

6 months agodocument Oracle FLOAT/DOUBLE and binary variants
Mike Bayer [Mon, 23 Dec 2024 16:46:57 +0000 (11:46 -0500)] 
document Oracle FLOAT/DOUBLE and binary variants

Fixes: #9704
Change-Id: Id11722d32eeb2a8582348aa5846eefb19d7c83c7

6 months agoupdate for mypy 1.14
Mike Bayer [Fri, 20 Dec 2024 23:02:37 +0000 (18:02 -0500)] 
update for mypy 1.14

Change-Id: I7315c06314ed25c2c00f56b2883f97f4489e433c

6 months agofix SQLite on conflict tests
Mike Bayer [Thu, 19 Dec 2024 22:50:21 +0000 (17:50 -0500)] 
fix SQLite on conflict tests

in I4d66ec1473321616a1707da324a7dfe7a61ec94e we added new tests
in the sqlite suite but we forgot to extend from fixtures.TestBase,
so these tests did not get run at all.  repair tests

Change-Id: Iaec17a754e0ab1d4b43f063706b512ed335a7465

6 months agotyping fix: allow stmt.excluded for set_
Mike Bayer [Wed, 18 Dec 2024 22:19:56 +0000 (17:19 -0500)] 
typing fix: allow stmt.excluded for set_

Change-Id: I6f0af23fba8f5868282505438e6ca0a5af7e1bbe

6 months agoMerge "harden typing / coercion for on conflict/on duplicate key" into main
Michael Bayer [Wed, 18 Dec 2024 20:43:25 +0000 (20:43 +0000)] 
Merge "harden typing / coercion for on conflict/on duplicate key" into main

6 months agoharden typing / coercion for on conflict/on duplicate key
Mike Bayer [Wed, 18 Dec 2024 16:24:58 +0000 (11:24 -0500)] 
harden typing / coercion for on conflict/on duplicate key

in 2.1 we want these structures to be cacheable, so start
by cleaning up types and adding coercions to enforce those types.
these will be more locked down in 2.1 as we will need to move
bound parameter coercion outside of compilation, but here
do some small starts and introduce in 2.0.

in one interest of cachability, a "literal_binds" that found
its way into SQLite's compiler is replaced with "literal_execute",
the difference being that the latter is cacheable.   This literal
is apparently necessary to suit SQLite's query planner for
the "index criteria" portion of the on conflict clause that otherwise
can't work with a real bound parameter.

Change-Id: I4d66ec1473321616a1707da324a7dfe7a61ec94e

6 months agoMerge "Add missing `SmallInteger` column spec for `asyncpg`" into main
Michael Bayer [Wed, 18 Dec 2024 16:41:57 +0000 (16:41 +0000)] 
Merge "Add missing `SmallInteger` column spec for `asyncpg`" into main

6 months agoAdd missing `SmallInteger` column spec for `asyncpg`
FeeeeK [Sat, 14 Dec 2024 08:03:24 +0000 (03:03 -0500)] 
Add missing `SmallInteger` column spec for `asyncpg`

Adds missing column spec for `SmallInteger` in `asyncpg` driver

Fixes: #12170
Closes: #12171
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12171
Pull-request-sha: 82886d8521cb4e78822d685a864a9af438f6ea6b

Change-Id: I2cb15f066de756d4e3f21bcac6af2cf03bd25a1c

6 months agoMerge "Updated SQLAlchemy documentation in index.rst" into main
Michael Bayer [Tue, 17 Dec 2024 13:00:07 +0000 (13:00 +0000)] 
Merge "Updated SQLAlchemy documentation in index.rst" into main

6 months agoMerge "SQLite strict tables" into main
Michael Bayer [Mon, 16 Dec 2024 18:25:08 +0000 (18:25 +0000)] 
Merge "SQLite strict tables" into main

6 months agoharden HSTORE registration
Mike Bayer [Mon, 16 Dec 2024 15:58:01 +0000 (10:58 -0500)] 
harden HSTORE registration

* use the driver_connection when we register on the connection
* assert targets passed to register_hstore assert as boolean true;
  psycopg docs say "if None, register globally" but looking in the
  source it's actually registering globally if any false-evaluating
  object is passed.

Change-Id: Ie1fd7c96714b7fe76ef964501691fa48352be259

6 months agoadd delete limit to mysql; ensure int for update/delete limits
Pablo Nicolas Estevez [Mon, 9 Dec 2024 19:44:44 +0000 (14:44 -0500)] 
add delete limit to mysql; ensure int for update/delete limits

Added support for the ``LIMIT`` clause with ``DELETE`` for the MySQL and
MariaDB dialects, to complement the already present option for
``UPDATE``. The :meth:`.delete.with_dialect_options` method of the
`:func:`.delete` construct accepts parameters for ``mysql_limit`` and
``mariadb_limit``, allowing users to specify a limit on the number of rows
deleted. Pull request courtesy of Pablo Nicolás Estevez.

Added logic to ensure that the ``mysql_limit`` and ``mariadb_limit``
parameters of :meth:`.update.with_dialect_options` and
:meth:`.delete.with_dialect_options` when compiled to string will only
compile if the parameter is passed as an integer; a ``ValueError`` is
raised otherwise.

corrected mysql documentation for update/delete options which
must be specified using the ``with_dialect_options()`` method.

Fixes: #11764
Closes: #12146
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12146
Pull-request-sha: e34708374c67e016cda88919109fec5e6462eced

Change-Id: I8681ddabaa192b672c7a9b9981c4fe9e4bdc8d03

7 months agochore: update black
Federico Caselli [Thu, 12 Dec 2024 22:15:17 +0000 (23:15 +0100)] 
chore: update black

surprisingly no change was done to the code

Change-Id: I50af32fc2a172fa4aee52939fcec53d5b142ceed

7 months agoUpdated SQLAlchemy documentation in index.rst
hashAbhiBytes [Thu, 12 Dec 2024 21:17:39 +0000 (16:17 -0500)] 
Updated SQLAlchemy documentation in index.rst

Closes: #12132
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/12132
Pull-request-sha: 4a11a6548d812b1f61739397a3ccaa331f76a494

Change-Id: Icc03f12470b288aabf9099c8c4e2220ce62efcf0

7 months agoAdded sqlalchemy-hsqldb to list of external dialects (#12175)
Jason Pebble [Thu, 12 Dec 2024 21:14:59 +0000 (21:14 +0000)] 
Added sqlalchemy-hsqldb to list of external dialects (#12175)

7 months agoBump pypa/cibuildwheel from 2.21.3 to 2.22.0 (#12129)
dependabot[bot] [Thu, 12 Dec 2024 21:14:35 +0000 (22:14 +0100)] 
Bump pypa/cibuildwheel from 2.21.3 to 2.22.0 (#12129)

Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 2.21.3 to 2.22.0.
- [Release notes](https://github.com/pypa/cibuildwheel/releases)
- [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md)
- [Commits](https://github.com/pypa/cibuildwheel/compare/v2.21.3...v2.22.0)

---
updated-dependencies:
- dependency-name: pypa/cibuildwheel
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>