]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/log
thirdparty/sqlalchemy/sqlalchemy.git
16 months agoimplement native uuid for mariadb >= 10.7
Volodymyr Kochetkov [Fri, 26 Jan 2024 15:54:11 +0000 (10:54 -0500)] 
implement native uuid for mariadb >= 10.7

Modified the MariaDB dialect so that when using the :class:`_sqltypes.Uuid`
datatype with  MariaDB >= 10.7, leaving the
:paramref:`_sqltypes.Uuid.native_uuid` parameter at its default of True,
the native ``UUID`` datatype will be rendered in DDL and used for database
communication, rather than ``CHAR(32)`` (the non-native UUID type) as was
the case previously.   This is a behavioral change since 2.0, where the
generic :class:`_sqltypes.Uuid` datatype delivered ``CHAR(32)`` for all
MySQL and MariaDB variants.   Support for all major DBAPIs is implemented
including support for less common "insertmanyvalues" scenarios where UUID
values are generated in different ways for primary keys.   Thanks much to
Volodymyr Kochetkov for delivering the PR.

To support this fully without hacks, the mariadb dialect now supports
driver-specific mariadb dialects as well, where we add one here for the
mysqlconnector DBAPI that doesn't accept Python UUID objects, whereas
all the other ones do.

Fixes: #10339
Closes: #10849
Co-authored-by: Mike Bayer <mike_mp@zzzcomputing.com>
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/10849
Pull-request-sha: 8490b08713f6c19692b11c084ae38d19e60dd396

Change-Id: Ib920871102b9b64f2cba9697f5cb72b6263e4ed8

16 months agoFix mysql dialect text docstring, length is interpreted as byte size
Zhong Zheng [Fri, 16 Feb 2024 17:20:59 +0000 (12:20 -0500)] 
Fix mysql dialect text docstring, length is interpreted as byte size

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

### Description
The `Text` and its variant types in MySQL are bytes size limited, not character length, so fixing the doctoring where the upper limit uses the `characters` as the unit instead of `bytes`

https://dev.mysql.com/doc/refman/5.7/en/storage-requirements.html
https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html

<img width="878" alt="Screenshot 2024-02-15 at 17 27 59" src="https://github.com/sqlalchemy/sqlalchemy/assets/5219229/29731769-f57e-46f9-858b-46feda0ae83c">

### 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: #11018
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/11018
Pull-request-sha: 13fa52917efea9a229c7abf19a3be40e24a79cb9

Change-Id: Iea903a6dc4b52ee4b7b5d2d64256c69abbd1f8aa

16 months agoFix typos in 2.1's migration notes (#10992)
Lele Gaifax [Fri, 16 Feb 2024 17:19:00 +0000 (18:19 +0100)] 
Fix typos in 2.1's migration notes (#10992)

16 months agoUpdate Actian entry in External Dialects table (#11014)
Michael Habiger [Fri, 16 Feb 2024 17:16:44 +0000 (11:16 -0600)] 
Update Actian entry in External Dialects table (#11014)

16 months agoMerge "ensure secondary cols not excluded from adaption" into main
Michael Bayer [Thu, 15 Feb 2024 01:04:22 +0000 (01:04 +0000)] 
Merge "ensure secondary cols not excluded from adaption" into main

16 months agoclarify example in orm tutorial
Federico Caselli [Wed, 14 Feb 2024 19:55:57 +0000 (20:55 +0100)] 
clarify example in orm tutorial

Change-Id: Ib6f9a7ce0beacda43ccd6d3c7750778ed3333b38

16 months agoensure secondary cols not excluded from adaption
Mike Bayer [Wed, 14 Feb 2024 14:29:19 +0000 (09:29 -0500)] 
ensure secondary cols not excluded from adaption

Fixed regression caused by :ticket:`9779` where using the "secondary" table
in a relationship ``and_()`` expression would fail to be aliased to match
how the "secondary" table normally renders within a
:meth:`_sql.Select.join` expression, leading to an invalid query.

Fixes: #11010
Change-Id: I535ce8b14f6a779c26b6b50b796ce64e57d7ee3d

16 months agocherry-pick changelog update for 2.0.28
Mike Bayer [Tue, 13 Feb 2024 15:05:54 +0000 (10:05 -0500)] 
cherry-pick changelog update for 2.0.28

16 months agocherry-pick changelog from 2.0.27
Mike Bayer [Tue, 13 Feb 2024 15:05:54 +0000 (10:05 -0500)] 
cherry-pick changelog from 2.0.27

16 months agouse correct exception for terminate catch + test
Mike Bayer [Tue, 13 Feb 2024 13:45:53 +0000 (08:45 -0500)] 
use correct exception for terminate catch + test

Fixed regression caused by just-released fix for :ticket:`10863` where an
invalid exception class were added to the "except" block, which does not
get exercised unless such a catch actually happens.   A mock-style test has
been added to ensure this catch is exercised in unit tests.

Fixes: #11005
Change-Id: I5a65403fb7bb35296ff44ae3cf6a336f8e0bda97

17 months agocherry-pick changelog update for 2.0.27
Mike Bayer [Sun, 11 Feb 2024 15:15:17 +0000 (10:15 -0500)] 
cherry-pick changelog update for 2.0.27

17 months agocherry-pick changelog from 2.0.26
Mike Bayer [Sun, 11 Feb 2024 15:15:17 +0000 (10:15 -0500)] 
cherry-pick changelog from 2.0.26

17 months agofix changelog messages
Mike Bayer [Sun, 11 Feb 2024 15:08:22 +0000 (10:08 -0500)] 
fix changelog messages

Change-Id: I5af8f59ec15820f83210f49aab3006b726484301

17 months agohandle case where neither side has a cache key
Mike Bayer [Thu, 8 Feb 2024 13:45:22 +0000 (08:45 -0500)] 
handle case where neither side has a cache key

Fixed issue where an assertion within the implementation for
:func:`_orm.with_expression` would raise if a SQL expression that was not
cacheable were used; this was a 2.0 regression since 1.4.

Fixes: #10990
Change-Id: I6541189d29d2e860df7fbab187bfcc6f4dcbfc76

17 months agoMerge "Fix typing generics in PostgreSQL range types." into main
Federico Caselli [Wed, 7 Feb 2024 19:48:57 +0000 (19:48 +0000)] 
Merge "Fix typing generics in PostgreSQL range types." into main

17 months agoFixed typo on ordered_values example. (#10984)
Siloé Garcez [Wed, 7 Feb 2024 18:14:24 +0000 (15:14 -0300)] 
Fixed typo on ordered_values example. (#10984)

17 months agoFix typing generics in PostgreSQL range types.
Jim Bosch [Tue, 14 Nov 2023 21:19:31 +0000 (16:19 -0500)] 
Fix typing generics in PostgreSQL range types.

Correctly type PostgreSQL RANGE and MULTIRANGE types as ``Range[T]``
and ``Sequence[Range[T]]``.
Introduced utility sequence ``MultiRange`` to allow better
interoperability of MULTIRANGE types.

Fixes #9736
Closes: #10625
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/10625
Pull-request-sha: 2c17bc5f922a2bdb805a29e458184076ccc08055

Change-Id: I4f91d0233b29fd8101e67bdd4cd0aa2524ab788a

17 months agoMerge "include cls locals in annotation evaluate" into main
Michael Bayer [Wed, 7 Feb 2024 00:45:47 +0000 (00:45 +0000)] 
Merge "include cls locals in annotation evaluate" into main

17 months agoMerge "remove unnecessary string concat in same line" into main
Michael Bayer [Wed, 7 Feb 2024 00:44:19 +0000 (00:44 +0000)] 
Merge "remove unnecessary string concat in same line" into main

17 months agoMerge "remove unneeded constructors for Unicode, UnicodeText" into main
Michael Bayer [Wed, 7 Feb 2024 00:42:39 +0000 (00:42 +0000)] 
Merge "remove unneeded constructors for Unicode, UnicodeText" into main

17 months agorestore uuid_data_type as closed at top level
Mike Bayer [Tue, 6 Feb 2024 23:11:32 +0000 (18:11 -0500)] 
restore uuid_data_type as closed at top level

the supports_native_uuid attribute does NOT indicate
the UUID datatype being present, only that Uuid(native_uuid=True)
would be able to produce something. On SQL Server it produces
UNIQUEIDENTIFIER.  The current use for this requirement is
that of testing the uppercase UUID type that has to match
that exactly.

Change-Id: I050e5d1889f804ee3763b84828f2bd6a47dd265e

17 months agoremove unneeded constructors for Unicode, UnicodeText
Mike Bayer [Tue, 6 Feb 2024 19:11:05 +0000 (14:11 -0500)] 
remove unneeded constructors for Unicode, UnicodeText

References: https://github.com/sqlalchemy/sqlalchemy/pull/10970
Change-Id: I59461bcd6359314c0c0a99923da5e3f3d3ddbfff

17 months agoremove unnecessary string concat in same line
Federico Caselli [Tue, 6 Feb 2024 18:44:47 +0000 (19:44 +0100)] 
remove unnecessary string concat in same line

manually update the files to remove literal string concat on the same line,
since black does not seem to be making progress in handling these

Change-Id: I3c651374c5f3db5b8bc0c700328d67ca03743b7b

17 months agoFix mariadb run tests doc (#10848)
whysage [Tue, 6 Feb 2024 17:57:21 +0000 (19:57 +0200)] 
Fix mariadb run tests doc (#10848)

17 months agoImprove formatting of data_select.rst (#10931)
Umer Zia [Tue, 6 Feb 2024 17:56:09 +0000 (18:56 +0100)] 
Improve formatting of data_select.rst (#10931)

17 months agoAdd bullets (#10973)
Artem Smirnov [Tue, 6 Feb 2024 17:55:41 +0000 (19:55 +0200)] 
Add bullets (#10973)

* Add bullets

* Fix as suggested

17 months agoBump pypa/cibuildwheel from 2.16.2 to 2.16.5 (#10947)
dependabot[bot] [Tue, 6 Feb 2024 17:53:28 +0000 (18:53 +0100)] 
Bump pypa/cibuildwheel from 2.16.2 to 2.16.5 (#10947)

Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 2.16.2 to 2.16.5.
- [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.16.2...v2.16.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
17 months agoupdate .git-blame-ignore-revs to exclude black update commit
Federico Caselli [Tue, 6 Feb 2024 17:52:07 +0000 (18:52 +0100)] 
update .git-blame-ignore-revs to exclude black update commit

Change-Id: I20ca8ced42b19ec2bf26db743117321e336f4538

17 months agoinclude cls locals in annotation evaluate
Mike Bayer [Thu, 18 Jan 2024 17:47:02 +0000 (12:47 -0500)] 
include cls locals in annotation evaluate

Fixed issue where it was not possible to use a type (such as an enum)
within a :class:`_orm.Mapped` container type if that type were declared
locally within the class body.  The scope of locals used for the eval now
includes that of the class body itself.  In addition, the expression within
:class:`_orm.Mapped` may also refer to the class name itself, if used as a
string or with future annotations mode.

Fixes: #10899
Change-Id: Id4d07499558e457e63b483ff44c0972d9265409d

17 months agoMerge "add additional IMV UUID tests, fix pymssql case" into main
Michael Bayer [Tue, 6 Feb 2024 00:27:50 +0000 (00:27 +0000)] 
Merge "add additional IMV UUID tests, fix pymssql case" into main

17 months agoMerge "Update black to 24.1.1" into main
Michael Bayer [Mon, 5 Feb 2024 23:18:43 +0000 (23:18 +0000)] 
Merge "Update black to 24.1.1" into main

17 months agoadd additional IMV UUID tests, fix pymssql case
Mike Bayer [Mon, 5 Feb 2024 17:02:19 +0000 (12:02 -0500)] 
add additional IMV UUID tests, fix pymssql case

Fixed an issue regarding the use of the :class:`.Uuid` datatype with the
:paramref:`.Uuid.as_uuid` parameter set to False, when using the pymssql
dialect. ORM-optimized INSERT statements (e.g. the "insertmanyvalues"
feature) would not correctly align primary key UUID values for bulk INSERT
statements, resulting in errors.

This change also adds a small degree of generalization to the
Uuid datatype by adding the native/non-native compilation conditional
to the base compiler.

Patch is originally part of Ib920871102b9b64f2cba9697f5cb72b6263e4ed8
which is implementing native UUID for mariadb in 2.1 only.

Change-Id: I96cbec5c0ece312b345206aa5a5db2ffcf732d41

17 months agorun postfetch_post_update for version_id_col even if delete
Mike Bayer [Mon, 5 Feb 2024 21:06:28 +0000 (16:06 -0500)] 
run postfetch_post_update for version_id_col even if delete

Fixed issue where using :meth:`_orm.Session.delete` along with the
:paramref:`_orm.Mapper.version_id_col` feature would fail to use the
correct version identifier in the case that an additional UPDATE were
emitted against the target object as a result of the use of
:paramref:`_orm.relationship.post_update` on the object.  The issue is
similar to :ticket:`10800` just fixed in version 2.0.25 for the case of
updates alone.

Fixes: #10967
Change-Id: I959e9a2cc3e750e86e8de7b12b28ee1e819ed6d8

17 months agoUpdate black to 24.1.1
Federico Caselli [Mon, 29 Jan 2024 20:16:02 +0000 (21:16 +0100)] 
Update black to 24.1.1

Change-Id: Iadaea7b798d8e99302e1acb430dc7b758ca61137

17 months agoMerge "Support PEP-621 and PEP-685" into main
Michael Bayer [Tue, 30 Jan 2024 13:25:15 +0000 (13:25 +0000)] 
Merge "Support PEP-621 and PEP-685" into main

17 months agoExport array module from postgresql
Federico Caselli [Mon, 29 Jan 2024 19:09:56 +0000 (20:09 +0100)] 
Export array module from postgresql

Before this module was shadowed by same named array classe.

Change-Id: I6fc56795c9363a9a07466fd36fcd49d0fb9658f7

17 months agoMerge "suffix index names with "_history" just like tables" into main
Michael Bayer [Sat, 27 Jan 2024 22:55:10 +0000 (22:55 +0000)] 
Merge "suffix index names with "_history" just like tables" into main

17 months agore-establish section on why __init__ not called on load
Mike Bayer [Fri, 26 Jan 2024 14:17:31 +0000 (09:17 -0500)] 
re-establish section on why __init__ not called on load

this section got lost, leaving the FAQ to point to an
empty document.  Rewrite a new section introducing that
__init__ is not called on load, illustrate strategies.

I am not that happy with *where* this doc is, as this is
supposed to be "mapping styles" high level introductory
type stuff, but there's nowhere else for it.

References: https://github.com/sqlalchemy/sqlalchemy/discussions/10923
Change-Id: Ie9260e4076bc82da0ef6dc11349a85beb0223a33

17 months agoFix typo in a docstring (#10925)
Eugene Toder [Thu, 25 Jan 2024 22:19:44 +0000 (17:19 -0500)] 
Fix typo in a docstring (#10925)

* Fix typo in a docstring

It's "compiled_cache" not "query_cache".

* Update async engine as well

17 months agoSupport PEP-621 and PEP-685
KOLANICH [Thu, 16 Feb 2023 18:31:29 +0000 (21:31 +0300)] 
Support PEP-621 and PEP-685

Move the metadata for `setuptools` into `PEP 621`-compliant `pyproject.toml`.
Use PEP-685 extras, keeping the old names for backward compatibility.

Closes: #9324
Closes: #10481
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/9324
Change-Id: I14170e33a4a7370257d941adea4f96a39e785911

17 months agoMerge "Add PEP 646 integration" into main
Michael Bayer [Wed, 24 Jan 2024 15:42:11 +0000 (15:42 +0000)] 
Merge "Add PEP 646 integration" into main

17 months agoMerge "Support specifying access method when creating Postgres tables" into main
Michael Bayer [Wed, 24 Jan 2024 15:32:37 +0000 (15:32 +0000)] 
Merge "Support specifying access method when creating Postgres tables" into main

17 months agoMerge "Correct type hint for FunctionElement.table_valued()" into main
Michael Bayer [Wed, 24 Jan 2024 15:31:49 +0000 (15:31 +0000)] 
Merge "Correct type hint for FunctionElement.table_valued()" into main

17 months agosuffix index names with "_history" just like tables
Mike Bayer [Tue, 23 Jan 2024 19:06:01 +0000 (14:06 -0500)] 
suffix index names with "_history" just like tables

Fixed regression in history_meta example where the use of
:meth:`_schema.MetaData.to_metadata` to make a copy of the history table
would also copy indexes (which is a good thing), but causing naming
conflicts indexes regardless of naming scheme used for those indexes. A
"_history" suffix is now added to these indexes in the same way as is
achieved for the table name.

Fixes: #10920
Change-Id: I78823650956ff979d500bedbdbce261048894ce9

17 months agofix a docs typo (#10912)
Jeff Balogh [Tue, 23 Jan 2024 19:25:10 +0000 (13:25 -0600)] 
fix a docs typo (#10912)

The code following this declaration suggests the employee.type should be `sysadmin`

17 months agoUpdate cascades.rst (#10918)
Gord Thompson [Tue, 23 Jan 2024 19:22:32 +0000 (12:22 -0700)] 
Update cascades.rst (#10918)

"delete-cascade" → "delete-orphan"

17 months agoParse NOT NULL for MySQL generated columns
Georg Wicke-Arndt [Mon, 22 Jan 2024 15:22:43 +0000 (10:22 -0500)] 
Parse NOT NULL for MySQL generated columns

Fixed issue where NULL/NOT NULL would not be properly reflected from a
MySQL column that also specified the VIRTUAL or STORED directives.  Pull
request courtesy Georg Wicke-Arndt.

Fixes: #10850
Closes: #10851
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/10851
Pull-request-sha: fb9a81020c393231ca90a1e88342b11cf64414a1

Change-Id: I9a80d0db722c15682e18f0390a7b58e5979e73a1

17 months agoAdd PEP 646 integration
Yurii Karabas [Wed, 17 Jan 2024 17:08:05 +0000 (12:08 -0500)] 
Add PEP 646 integration

The :class:`.Row` object now no longer makes use of an intermediary
``Tuple`` in order to represent its individual element types; instead,
the individual element types are present directly, via new :pep:`646`
integration, now available in more recent versions of Mypy.  Mypy
1.7 or greater is now required for statements, results and rows
to be correctly typed.   Pull request courtesy Yurii Karabas.

Fixes: #10635
Closes: #10634
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/10634
Pull-request-sha: 430785c8a04a48fe96ce35b4f4e08476700c1f79

Change-Id: Ibd0ae31a98b4ea69dcb89f970e640920b2be6c48

17 months agoSupport specifying access method when creating Postgres tables
Edgar Ramírez Mondragón [Mon, 22 Jan 2024 07:29:44 +0000 (02:29 -0500)] 
Support specifying access method when creating Postgres tables

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

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

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

Fixes #10904

**Have a nice day!**

Closes: #10905
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/10905
Pull-request-sha: 85f232a303a5543725dac42206cb2395fc34109e

Change-Id: I5e2fc05a696eb6da71bbd695f0466e8552d203b6

17 months agouse sequence instead of list in result docs
Federico Caselli [Sat, 20 Jan 2024 17:33:28 +0000 (18:33 +0100)] 
use sequence instead of list in result docs

Change-Id: Iaed8505c495455f0d82e4b0cbcc7dffd2d833408

17 months agoMerge "remove loader depth warning, replace with logging message" into main
Michael Bayer [Fri, 19 Jan 2024 16:14:09 +0000 (16:14 +0000)] 
Merge "remove loader depth warning, replace with logging message" into main

17 months agoremove loader depth warning, replace with logging message
Mike Bayer [Thu, 18 Jan 2024 02:15:37 +0000 (21:15 -0500)] 
remove loader depth warning, replace with logging message

Replaced the "loader depth is excessively deep" warning with a shorter
message added to the caching badge within SQL logging, for those statements
where the ORM disabled the cache due to a too-deep chain of loader options.
The condition which this warning highlights is difficult to resolve and is
generally just a limitation in the ORM's application of SQL caching. A
future feature may include the ability to tune the threshold where caching
is disabled, but for now the warning will no longer be a nuisance.

Fixes: #10896
Change-Id: Ic3be2086d1db16f9a75390323f00a43ef72aca12

17 months agoMerge "Oracle default arraysize is now set by the driver" into main
Federico Caselli [Thu, 18 Jan 2024 18:54:20 +0000 (18:54 +0000)] 
Merge "Oracle default arraysize is now set by the driver" into main

17 months agoOracle default arraysize is now set by the driver
Federico Caselli [Fri, 12 Jan 2024 18:17:30 +0000 (19:17 +0100)] 
Oracle default arraysize is now set by the driver

Changed the default arraysize of the Oracle dialects so that the value set
by the driver is used, that is 100 at the time of writing for both
cx_oracle and oracledb. Previously the value was set to 50 by default.

Fixes: #10877
Change-Id: Ie4c53f42437d3d7dbbad36398d7883472577f367

17 months agoMerge "use ensure_closed() for async close, close() for terminate" into main
Michael Bayer [Wed, 17 Jan 2024 19:34:11 +0000 (19:34 +0000)] 
Merge "use ensure_closed() for async close, close() for terminate" into main

17 months agoMerge "allow callable for relationship.back_populates" into main
Michael Bayer [Wed, 17 Jan 2024 19:33:24 +0000 (19:33 +0000)] 
Merge "allow callable for relationship.back_populates" into main

17 months agoallow callable for relationship.back_populates
Priyanshu Parikh [Sun, 15 Oct 2023 14:34:25 +0000 (10:34 -0400)] 
allow callable for relationship.back_populates

The :paramref:`_orm.relationship.back_populates` argument to
:func:`_orm.relationship` may now be passed as a Python callable, which
resolves to either the direct linked ORM attribute, or a string value as
before.  ORM attributes are also accepted directly by
:paramref:`_orm.relationship.back_populates`.   This change allows type
checkers and IDEs to confirm the argument for
:paramref:`_orm.relationship.back_populates` is valid. Thanks to Priyanshu
Parikh for the help on suggesting and helping to implement this feature.

An attempt was made to do this for ForeignKey as well, however this
is not feasible since there is no "deferred configuration" step
for Table objects; Table objects set each other up on ForeignKey
as they are created, such as setting the type of a column
in a referencing Column when the referenced table is created.  We
have no way to know which Table a foreign key intends to represent
when it's a callable whereas when it's a string, we do know, and
we actually make a lot of use of that string to match it to the
target table as that target is created (see _fk_memos).  However
the commit keeps a little bit of the cleanup to ForeignKey intact.

Co-authored-by: Mike Bayer <mike_mp@zzzcomputing.com>
Fixes: #10050
Closes: #10260
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/10260
Pull-request-sha: 6f21002e1d5bbe291111655f33b19e4eb4b3cb84

Change-Id: I8e0a40c9898ec91d44f2df06dcc22f33b06745c3

17 months agouse ensure_closed() for async close, close() for terminate
Gord Thompson [Sun, 14 Jan 2024 16:49:11 +0000 (09:49 -0700)] 
use ensure_closed() for async close, close() for terminate

Fixed issue in asyncio dialects asyncmy and aiomysql, where their
``.close()`` method is apparently not a graceful close.  replace with
non-standard ``.ensure_closed()`` method that's awaitable and move
``.close()`` to the so-called "terminate" case.

Fixes: #10893
Change-Id: I33d871e67854d85f770c46f699e41a6e73b6fbe0

17 months agoCorrect type hint for FunctionElement.table_valued()
Martijn Pieters [Tue, 16 Jan 2024 12:03:09 +0000 (07:03 -0500)] 
Correct type hint for FunctionElement.table_valued()

### Description

The documentation and the type annotations for `TableValueType()` clearly
state that both strings and column expression arguments are accepted
but the annotation omits `str`, which is the most common use case.

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

Closes: #10886
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/10886
Pull-request-sha: 624a97f051b378516518a30d88e7f216456d1c50

Change-Id: I2a1d2eb9b70815c33a27dd238ff2a9f11e5f5a64

17 months agoFix type of CASE expressions which include NULLs
David Evans [Mon, 15 Jan 2024 15:13:53 +0000 (10:13 -0500)] 
Fix type of CASE expressions which include NULLs

Fixed issues in :func:`_sql.case` where the logic for determining the
type of the expression could result in :class:`.NullType` if the last
element in the "whens" had no type, or in other cases where the type
could resolve to ``None``.  The logic has been updated to scan all
given expressions so that the first non-null type is used, as well as
to always ensure a type is present.  Pull request courtesy David Evans.

updates to test suite to use modern fixture patterns by Mike

Fixes: #10843
Closes: #10847
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/10847
Pull-request-sha: 4fd5c39ab56de046e68c08f6c20cd1f7b2cb0e0d

Change-Id: I40f905ac336a8a42b617ff9473dbd9c22ac57505

17 months agoMerge "add Identity() for remaining examples" into main
Michael Bayer [Sat, 13 Jan 2024 15:27:10 +0000 (15:27 +0000)] 
Merge "add Identity() for remaining examples" into main

18 months agoadd Identity() for remaining examples
Mike Bayer [Fri, 12 Jan 2024 14:29:28 +0000 (09:29 -0500)] 
add Identity() for remaining examples

Fixed the performance example scripts in examples/performance to mostly
work with the Oracle database, by adding the :class:`.Identity` construct
to all the tables and allowing primary generation to occur on this backend.
A few of the "raw DBAPI" cases still are not compatible with Oracle.

Change-Id: I7ce19645ea78736dddfda6f33b9356ad75dee68f

18 months agoMerge "Support reflecting no inherit check constraint in pg." into main
Michael Bayer [Thu, 11 Jan 2024 18:55:16 +0000 (18:55 +0000)] 
Merge "Support reflecting no inherit check constraint in pg." into main

18 months agoSupport reflecting no inherit check constraint in pg.
Ellis Valentiner [Mon, 8 Jan 2024 16:16:21 +0000 (11:16 -0500)] 
Support reflecting no inherit check constraint in pg.

Added support for reflection of PostgreSQL CHECK constraints marked with
"NO INHERIT", setting the key ``no_inherit=True`` in the reflected data.
Pull request courtesy Ellis Valentiner.

Fixes: #10777
Closes: #10778
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/10778
Pull-request-sha: 058082ff6297f9ccdc4977e65ef024e9a093426e

Change-Id: Ia33e29c0c57cf0076e8819311f4628d712fdc332

18 months agoMerge "remove unnecessary execution_options.merge_with in _execute_ddl" into main
Michael Bayer [Thu, 11 Jan 2024 16:54:48 +0000 (16:54 +0000)] 
Merge "remove unnecessary execution_options.merge_with in _execute_ddl" into main

18 months agocatch OSError (base of ConnectionError) and asyncpg errors for terminate
Mike Bayer [Thu, 11 Jan 2024 03:31:59 +0000 (22:31 -0500)] 
catch OSError (base of ConnectionError) and asyncpg errors for terminate

Fixed regression in the asyncpg dialect caused by :ticket:`10717` in
release 2.0.24 where the change that now attempts to gracefully close the
asyncpg connection before terminating would not fall back to
``terminate()`` for other potential connection-related exceptions other
than a timeout error, not taking into account cases where the graceful
``.close()`` attempt fails for other reasons such as connection errors.

Fixes: #10863
Change-Id: If1791bce26803f92547cdf26fb641996c7f638fa

18 months agoremove unnecessary execution_options.merge_with in _execute_ddl
Federico Caselli [Wed, 10 Jan 2024 18:30:53 +0000 (19:30 +0100)] 
remove unnecessary execution_options.merge_with in _execute_ddl

Change-Id: Idcd886bf6ad5db28c4dc581a7f1e91e12f6f9a05

18 months agoAdd note that password parameter is not to be url encoded
Mike Bayer [Tue, 9 Jan 2024 18:45:52 +0000 (13:45 -0500)] 
Add note that password parameter is not to be url encoded

References: #10852
Change-Id: Ifa44513ce315214fa5d1b55d3e92b53889caeacc

18 months agofix code typo in doc:faq:sqlexpressions on `in_()` (#10845)
Xiaokui Shu [Mon, 8 Jan 2024 18:44:53 +0000 (13:44 -0500)] 
fix code typo in doc:faq:sqlexpressions on `in_()` (#10845)

18 months agoFix typo in 'Mapping Table Columns' documentation (#10842)
Mateusz Bączek [Mon, 8 Jan 2024 18:44:18 +0000 (19:44 +0100)] 
Fix typo in 'Mapping Table Columns' documentation (#10842)

Co-authored-by: Mateusz Bączek <mateusz.baczek@creotech.pl>
18 months agoDBAPIConnection can be None for checkin event
Mike Bayer [Mon, 8 Jan 2024 14:15:17 +0000 (09:15 -0500)] 
DBAPIConnection can be None for checkin event

Fixed the type signature for the :meth:`.PoolEvents.checkin` event to
indicate that the given :class:`.DBAPIConnection` argument may be ``None``
in the case where the connection has been invalidated.

Change-Id: I4c6f0cf999f2ffb730909e2688eb3b0794ecf2ab

18 months agocherry-pick changelog update for 2.0.26
Mike Bayer [Wed, 3 Jan 2024 02:22:17 +0000 (21:22 -0500)] 
cherry-pick changelog update for 2.0.26

18 months agocherry-pick changelog from 2.0.25
Mike Bayer [Wed, 3 Jan 2024 02:22:17 +0000 (21:22 -0500)] 
cherry-pick changelog from 2.0.25

18 months agochangelog fixes
Mike Bayer [Wed, 3 Jan 2024 01:40:16 +0000 (20:40 -0500)] 
changelog fixes

Change-Id: Ie0e1d5d2df93e26f31004aff11196043fc665679

18 months agocherry-pick changelog update for 1.4.52
Mike Bayer [Wed, 3 Jan 2024 01:32:39 +0000 (20:32 -0500)] 
cherry-pick changelog update for 1.4.52

18 months agocherry-pick changelog from 1.4.51
Mike Bayer [Wed, 3 Jan 2024 01:32:38 +0000 (20:32 -0500)] 
cherry-pick changelog from 1.4.51

18 months agohappy new year, continued
Mike Bayer [Wed, 3 Jan 2024 01:06:43 +0000 (20:06 -0500)] 
happy new year, continued

Change-Id: Ibf9a9b7ac7dab19aa82d6e0c446d4d555c18dcf6

18 months agoMerge "allow literals for function arguments" into main
Michael Bayer [Wed, 3 Jan 2024 00:52:37 +0000 (00:52 +0000)] 
Merge "allow literals for function arguments" into main

18 months agoallow literals for function arguments
Mike Bayer [Tue, 2 Jan 2024 18:03:40 +0000 (13:03 -0500)] 
allow literals for function arguments

* Fixed the argument types passed to functions so that literal expressions
like strings and ints are again interpreted correctly (:ticket:`10818`)

this includes a reformatting of the changelog message from #10801
to read as a general "fixed regressions" list.

Fixes: #10818
Change-Id: I65ad86e096241863e833608d45f0bdb6069f5896

18 months agoMerge "refactor any_ / all_" into main
Michael Bayer [Tue, 2 Jan 2024 23:48:29 +0000 (23:48 +0000)] 
Merge "refactor any_ / all_" into main

18 months agoMerge "Add oracledb_async driver support" into main
Michael Bayer [Tue, 2 Jan 2024 20:55:54 +0000 (20:55 +0000)] 
Merge "Add oracledb_async driver support" into main

18 months agorefactor any_ / all_
Mike Bayer [Tue, 2 Jan 2024 16:16:13 +0000 (11:16 -0500)] 
refactor any_ / all_

Improved compilation of :func:`_sql.any_` / :func:`_sql.all_` in the
context of a negation of boolean comparison, will now render ``NOT (expr)``
rather than reversing the equality operator to not equals, allowing
finer-grained control of negations for these non-typical operators.

Fixes: #10817
Change-Id: If0b324b1220ad3c7f053af91e8a61c81015f312a

18 months agoFix typo in dataclasses docs (#10809)
Paul McMillan [Tue, 2 Jan 2024 19:51:48 +0000 (11:51 -0800)] 
Fix typo in dataclasses docs (#10809)

18 months agoAdd oracledb_async driver support
Federico Caselli [Thu, 21 Dec 2023 22:41:56 +0000 (23:41 +0100)] 
Add oracledb_async driver support

Added support for :ref:`oracledb` in async mode.
The current implementation has some limitation, preventing
the support for :meth:`_asyncio.AsyncConnection.stream`.
Improved support if planned for the 2.1 release of SQLAlchemy.

Fixes: #10679
Change-Id: Iff123cf6241bcfa0fbac57529b80f933951be0a7

18 months agoforce uselist=False for all collection class not present
Mike Bayer [Tue, 2 Jan 2024 16:36:20 +0000 (11:36 -0500)] 
force uselist=False for all collection class not present

Fixed issue where ORM Annotated Declarative would mis-interpret the left
hand side of a relationship without any collection specified as
uselist=True if the left type were given as a class and not a string,
without using future-style annotations.

Fixes: #10815
Change-Id: I85daccec03f7e6ea3b49eb07c06e0f85e361a1c0

18 months agoMerge "ensure correct lock type propagated in pool recreate" into main
Michael Bayer [Tue, 2 Jan 2024 14:57:17 +0000 (14:57 +0000)] 
Merge "ensure correct lock type propagated in pool recreate" into main

18 months agoadd new notes on viewonly section
jonathan vanasco [Fri, 24 Sep 2021 21:48:09 +0000 (17:48 -0400)] 
add new notes on viewonly section

Updated join_conditions documentation to explain the limits of mutation
tracking on advanced relationships and illustrate potential ways to
remedy the situation.

Instead of simply writing a note, the (functional) code from the original
issue was turned into a tutorial that explains the various approaches.

Fixes: #4201
Change-Id: Id8bd163777688efd799d9b41f1c9edfce2f4dfad

18 months agoMerge "2024 setup" into main
Michael Bayer [Tue, 2 Jan 2024 14:01:06 +0000 (14:01 +0000)] 
Merge "2024 setup" into main

18 months agoMerge "support pep695 when resolving type map types" into main
Michael Bayer [Tue, 2 Jan 2024 01:11:45 +0000 (01:11 +0000)] 
Merge "support pep695 when resolving type map types" into main

18 months agoensure correct lock type propagated in pool recreate
Mike Bayer [Mon, 1 Jan 2024 21:54:58 +0000 (16:54 -0500)] 
ensure correct lock type propagated in pool recreate

Fixed critical issue in asyncio version of the connection pool where
calling :meth:`_asyncio.AsyncEngine.dispose` would produce a new connection
pool that did not fully re-establish the use of asyncio-compatible mutexes,
leading to the use of a plain ``threading.Lock()`` which would then cause
deadlocks in an asyncio context when using concurrency features like
``asyncio.gather()``.

Fixes: #10813
Change-Id: I95ec698b6a1ba79555aa0b28e6bce65fedf3b1fe

18 months ago2024 setup
Mike Bayer [Mon, 1 Jan 2024 22:03:08 +0000 (17:03 -0500)] 
2024 setup

Change-Id: I2853d99bbc19c94227e2b88d450873197013bdfb

18 months agoadd a generic argument to _HasClauseElement
Mike Bayer [Mon, 1 Jan 2024 17:49:10 +0000 (12:49 -0500)] 
add a generic argument to _HasClauseElement

Further enhancements to pep-484 typing to allow SQL functions from
:attr:`_sql.func` derived elements to work more effectively with ORM-mapped
attributes.

Fixes: #10801
Change-Id: Ib8222d888a2d8c3fbeab0d1bf5edb535916d4721

18 months agoMerge "pop prefetch values from committed_state when they are available" into main
Michael Bayer [Sat, 30 Dec 2023 17:07:55 +0000 (17:07 +0000)] 
Merge "pop prefetch values from committed_state when they are available" into main

18 months agosupport pep695 when resolving type map types
Mike Bayer [Sat, 30 Dec 2023 15:36:40 +0000 (10:36 -0500)] 
support pep695 when resolving type map types

Added preliminary support for Python 3.12 pep-695 type alias structures,
when resolving custom type maps for ORM Annotated Declarative mappings.

Fixes: #10807
Change-Id: Ia28123ce1d6d1fd6bae5e8a037be4754c890f281

18 months agofix typo in session.reset docs
Federico Caselli [Fri, 29 Dec 2023 23:14:39 +0000 (00:14 +0100)] 
fix typo in session.reset docs

Change-Id: I6073cc623f216ffad8c18396001191b38eccc129

18 months agoadd test illustrating workaround for #4376
Mike Bayer [Fri, 29 Dec 2023 17:07:19 +0000 (12:07 -0500)] 
add test illustrating workaround for #4376

Fixes: #4376
Change-Id: I5131b55a9859bb9d93949a5a90b65f519cd82122

18 months agodocument alternative relationship to AC patterns
Mike Bayer [Fri, 29 Dec 2023 16:45:55 +0000 (11:45 -0500)] 
document alternative relationship to AC patterns

using event hook to defer construction

this is for 2.0 and above only as it includes a typed mapping
recipe as well.

Fixes: #4660
Change-Id: I9478c7f451c0e58096cca60c0725396fed339abf

18 months agoRemove unused method in SimpleResultMetaData
Federico Caselli [Thu, 28 Dec 2023 22:50:20 +0000 (23:50 +0100)] 
Remove unused method in SimpleResultMetaData

Change-Id: I859c52613da84519bacbf55a105e3a16bb8e9728

18 months agopop prefetch values from committed_state when they are available
Mike Bayer [Thu, 28 Dec 2023 21:02:48 +0000 (16:02 -0500)] 
pop prefetch values from committed_state when they are available

Fixed issue where when making use of the
:paramref:`_orm.relationship.post_update` feature at the same time as using
a mapper version_id_col could lead to a situation where the second UPDATE
statement emitted by the post-update feature would fail to make use of the
correct version identifier, assuming an UPDATE was already emitted in that
flush which had already bumped the version counter.

Fixes: #10800
Change-Id: I3fccdb26ebbd2d987bb4f0e894449b7413556054

18 months agocherry-pick changelog update for 2.0.25
Mike Bayer [Thu, 28 Dec 2023 16:23:13 +0000 (11:23 -0500)] 
cherry-pick changelog update for 2.0.25