]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/log
thirdparty/sqlalchemy/sqlalchemy.git
2 years agonote future row change for session.execute()
Mike Bayer [Wed, 10 May 2023 14:08:47 +0000 (10:08 -0400)] 
note future row change for session.execute()

Fixes: #9761
Change-Id: I555e822b092d047badab86b3a365380121968592
(cherry picked from commit 987285fb4b13c39bcc6b8922e618d9e830577dda)

2 years agoVersion 1.4.49 placeholder
Mike Bayer [Sun, 30 Apr 2023 21:33:17 +0000 (17:33 -0400)] 
Version 1.4.49 placeholder

2 years ago- 1.4.48 rel_1_4_48
Mike Bayer [Sun, 30 Apr 2023 21:24:32 +0000 (17:24 -0400)] 
- 1.4.48

2 years agoadjust verbiage
Mike Bayer [Sun, 30 Apr 2023 21:22:44 +0000 (17:22 -0400)] 
adjust verbiage

Change-Id: Icc8f201d63e4cc2e7df2f42acb28a6dc84a58342
(cherry picked from commit 623044bb54a58eaa25ed239b7646396548f4b1e7)

2 years agodo not allow non-cache-key entity objects in annotations
Mike Bayer [Sun, 30 Apr 2023 17:56:33 +0000 (13:56 -0400)] 
do not allow non-cache-key entity objects in annotations

Fixed critical caching issue where combination of :func:`_orm.aliased()`
:func:`_sql.case` and :func:`_hybrid.hybrid_property` expressions would
cause a cache key mismatch, leading to cache keys that held onto the actual
:func:`_orm.aliased` object while also not matching each other, filling up
the cache.

Fixes: #9728
Change-Id: I700645b5629a81a0104cf923db72a7421fa43ff4
(cherry picked from commit 4d69d83530666f9aaf3fb327d8c63110ef5e7ff5)

2 years agouse a lot more random names
Mike Bayer [Thu, 27 Apr 2023 13:49:07 +0000 (09:49 -0400)] 
use a lot more random names

very small number of tiny names generated by
random_names() could cause _ordered_name_fixture() to
run out of names.

Fixes: #9706
Change-Id: I3df00c9cf99e76fe82eb535c7fe589b73b10cd67
(cherry picked from commit 1329037bfed428e458547824a861ce1aa9df0c78)

2 years agodont assume _compile_options are present
Mike Bayer [Mon, 17 Apr 2023 14:16:35 +0000 (10:16 -0400)] 
dont assume _compile_options are present

Fixed bug where various ORM-specific getters such as
:attr:`.ORMExecuteState.is_column_load`,
:attr:`.ORMExecuteState.is_relationship_load`,
:attr:`.ORMExecuteState.loader_strategy_path` etc. would throw an
``AttributeError`` if the SQL statement itself were a "compound select"
such as a UNION.

Fixes: #9634
Change-Id: Ia37df5d6f89d6534d69237dcab294bd849ece28b
(cherry picked from commit 89608ccd3f5e5796d578e9a39201f7c5c45a61fe)

2 years agoclarify get_isolation_level() excludes AUTOCOMMIT
Mike Bayer [Mon, 17 Apr 2023 12:22:49 +0000 (08:22 -0400)] 
clarify get_isolation_level() excludes AUTOCOMMIT

I thought this was documented but apparently not.

Fixes: #9658
Change-Id: I93fad12c159c599ffdbab1aff586b49e8c92a6e4
(cherry picked from commit f7bfa04bcae1e9bafa19a5ee03aaa0beac532294)

2 years agoconsider aliased mappers in cycles also
Mike Bayer [Sun, 2 Apr 2023 18:24:32 +0000 (14:24 -0400)] 
consider aliased mappers in cycles also

Fixed endless loop which could occur when using "relationship to aliased
class" feature and also indicating a recursive eager loader such as
``lazy="selectinload"`` in the loader, in combination with another eager
loader on the opposite side. The check for cycles has been fixed to include
aliased class relationships.

Fixes: #9590
Change-Id: I8d340882f040ff9289c209bedd8fbdfd7186f944
(cherry picked from commit e79ab08165e01dc7af50fcffadb31468ace51b6c)

2 years agoadd tip that reflection is not necessary for an existing database
Mike Bayer [Tue, 21 Mar 2023 17:40:36 +0000 (13:40 -0400)] 
add tip that reflection is not necessary for an existing database

a new user spent many days misled by this paragraph thinking
they were required to use reflection for an existing database.

Change-Id: I4c6757b931481db7a8d4202334382143e1491935
(cherry picked from commit 42b3b80fae8d7b808125efc1dd9a900231c2ed21)

2 years agoVersion 1.4.48 placeholder
Mike Bayer [Sat, 18 Mar 2023 17:09:08 +0000 (13:09 -0400)] 
Version 1.4.48 placeholder

2 years ago- 1.4.47 rel_1_4_47
Mike Bayer [Sat, 18 Mar 2023 17:04:58 +0000 (13:04 -0400)] 
- 1.4.47

2 years agoimplement content hashing for custom_op, not identity
Mike Bayer [Sat, 18 Mar 2023 15:43:47 +0000 (11:43 -0400)] 
implement content hashing for custom_op, not identity

Fixed critical SQL caching issue where use of the :meth:`_sql.Operators.op`
custom operator function would not produce an appropriate cache key,
leading to reduce the effectiveness of the SQL cache.

Fixes: #9506
Change-Id: I3eab1ddb5e09a811ad717161a59df0884cdf70ed
(cherry picked from commit 0a0c7c73729152b7606509b6e750371106dfdd46)

2 years agoremove "listeners" docstring
Mike Bayer [Wed, 15 Mar 2023 14:09:57 +0000 (10:09 -0400)] 
remove "listeners" docstring

this should have been removed with #4638.

Fixes: #9492
Change-Id: If82dba7e63382e921aceb0c01d88f0977b7f5e8d
(cherry picked from commit 7fd3b4747d2935effd9e0c2bbe72f080df4ffc50)

2 years agoadditional consistency for ORM/Core in tutorial
Mike Bayer [Wed, 8 Mar 2023 15:10:14 +0000 (10:10 -0500)] 
additional consistency for ORM/Core in tutorial

* Make sure we have blue borders for all sections
* rewrite "blue border" text, refer to textual means of determining
  subject matter for a section; "blue borders" are not a primary
  source of information
* Add some more intro text that was missing

Change-Id: I4d599e13d23bad8bb3c199a11afb53e3e9100c59
References: #9450
(cherry picked from commit 8d5986fafd8360ddfe3992bd56602d5a52a23392)

2 years agoAdd separate version notes for scalars
Grey Li [Sun, 26 Feb 2023 10:56:37 +0000 (05:56 -0500)] 
Add separate version notes for scalars

Add separate 1.4.24 and 1.4.26 version notes for the .scalars method;
this covers Session, scoped_session, AsyncSession, async_scoped_session
as the "scoped" versions did not have the method added until 1.4.26
as part of :ticket:`7103`.

Also indicate scoped_session as ``sqlalchemy.orm.scoped_session`` in
docs rather than ``sqlalchemy.orm.scoping.scoped_session``.  This is
also happening in I77da54891860095edcb1f0625ead99fee89bd76f separately,
as both changesets refer to scoped_session without using ".scoping".

References: #7103
Closes: #9371
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/9371
Pull-request-sha: 61132230cc6e897ab61beff25d98b19a4c0aefd0

Change-Id: I84c8b1aad752db124cfee6bc8516f6eed7ba2faf
(cherry picked from commit ff97b9ab5e59283f684edac9a075702c43e8a4c1)

2 years agoprevent float tests from running on asyncmy
Mike Bayer [Wed, 15 Feb 2023 23:28:12 +0000 (18:28 -0500)] 
prevent float tests from running on asyncmy

asyncmy 0.2.7 has had a loss in float precision for even
very low numbers of significant digits.

Change-Id: Iec6d2650943eeaa8e854f21990f6565d73331f8c
References: https://github.com/long2ice/asyncmy/issues/56
(cherry picked from commit 8855656626202e541bd2c95bc023e820a022322f)

2 years agoUpdate dialect documentation about CrateDB (#9322)
Andreas Motl [Sun, 19 Feb 2023 16:47:02 +0000 (08:47 -0800)] 
Update dialect documentation about CrateDB (#9322)

The `crate-0.30.0` package offers compatibility with SQLAlchemy 2.0.

(cherry picked from commit 46b81981340a703ae4fbe47fcdaaec85a590d5e9)

2 years agoFix grammatical error in intro.rst (#9316)
Maxwell D. Dorliea [Sun, 19 Feb 2023 16:46:42 +0000 (16:46 +0000)] 
Fix grammatical error in intro.rst (#9316)

(cherry picked from commit 1fc1aafbc4bd5bc85289699c0de1d82cb6cbc2d3)

2 years agopin sphinx-copybutton and change config
Mike Bayer [Thu, 9 Feb 2023 17:05:47 +0000 (12:05 -0500)] 
pin sphinx-copybutton and change config

sphinx-copybutton introduced a new feature
in 0.5.1 which includes a default configuration
that breaks the regexp prompt matching scheme.

set copybutton_exclude to not include ".gp" as that's the class
where we exactly look for the prompts we are matching.
While we're there, use this new feature to exclude our sql
styles, even though this is not strictly necessary in our case.

pin sphinx-copybutton at 0.5.1 to avoid future problems.

Change-Id: I8eaeab13995c032b9ee3afd1f08dae5929009d45
References: https://github.com/executablebooks/sphinx-copybutton/issues/185
(cherry picked from commit 13d3b2c291f49525bc38d082d1c2abe9e03bd3fe)

2 years agofix late-eval example
Mike Bayer [Wed, 1 Feb 2023 16:18:55 +0000 (11:18 -0500)] 
fix late-eval example

Fixes: #9209
Change-Id: Ic5bc87b25281e3cecc967843c402e96c7c2a3dbb
(cherry picked from commit bfc33c5c72e3b24fd62d80b77441b38f40c746b0)

2 years agouse scalars().one() for count migration
Mike Bayer [Mon, 30 Jan 2023 14:02:33 +0000 (09:02 -0500)] 
use scalars().one() for count migration

so that the typed result is non-optional

Fixes: #9184
Change-Id: I40e655010d08f795f3b835b9327ce50c6ec72135
(cherry picked from commit 956f152a29632afacacc4ea11dce1a54a7afb3ea)

2 years agoCorrect #7664 to include DropSchema
Mike Bayer [Sat, 28 Jan 2023 14:37:50 +0000 (09:37 -0500)] 
Correct #7664 to include DropSchema

Corrected the fix for :ticket:`7664`, released in version 2.0.0, to also
include :class:`.DropSchema` which was inadvertently missed in this fix,
allowing stringification without a dialect. The fixes for both constructs
is backported to the 1.4 series as of 1.4.47.

Fixes: #7664
Change-Id: I509b7500ee496ac1e444ea2096c2a02520167e6d
(cherry picked from commit 70d1de6cff816d4627dd6b72223d9796e28aca1e)

2 years agofix incorrect use of testing.future()
Mike Bayer [Thu, 26 Jan 2023 01:19:10 +0000 (20:19 -0500)] 
fix incorrect use of testing.future()

this has been emitting a warning probably for a long
time

Change-Id: I44a6766b5e92d14ce6bbb5a90ab52648f877afc2
(cherry picked from commit 74aabce5190449ba2af65c180ebe67fe444193fb)

2 years agodisable new tox 4.4.0 feature
Mike Bayer [Wed, 25 Jan 2023 22:34:08 +0000 (17:34 -0500)] 
disable new tox 4.4.0 feature

a new flag constrain_package_deps appears to interpret deps
as constraints, and not requirements.  turn it off.

also remove the python setup command and use their default,
try to stay compatible

Change-Id: Ib400a7783c08c2c63ddb099944cd48b9631acd75
(cherry picked from commit aa2c2c8b4189b0fd71e7f8af0a81eda4204678f9)

2 years agoMerge "reflect Oracle ROWID" into rel_1_4
mike bayer [Wed, 25 Jan 2023 01:46:41 +0000 (01:46 +0000)] 
Merge "reflect Oracle ROWID" into rel_1_4

2 years agoreflect Oracle ROWID
Mike Bayer [Tue, 24 Jan 2023 20:08:30 +0000 (15:08 -0500)] 
reflect Oracle ROWID

Added :class:`_oracle.ROWID` to reflected types as this type may be used in
a "CREATE TABLE" statement.

For 1.4, the cherry-pick also backports a few more type reflection
tests that should pass without issue.

Fixes: #5047
Change-Id: I818dcf68ed81419d0fd5df5e2d51d6fa0f1be7fc
(cherry picked from commit 1c6c5532d8bec105d9aaa7843a176b4e1ef0340a)

2 years agofix stringify for CreateSchema
Mike Bayer [Tue, 24 Jan 2023 20:34:27 +0000 (15:34 -0500)] 
fix stringify for CreateSchema

Fixed stringify for a the :class:`.CreateSchema` DDL construct, which would
fail with an ``AttributeError`` when stringified without a dialect.

Fixes: #7664
Change-Id: Ifc1769604bc5219c060f5112f7bdea0f780f1a1c
(cherry picked from commit 90f4b5d84f248d95f3df38e74be92b23fd880e42)

2 years agoRun bracket interpretation for reflection
Shan [Sun, 22 Jan 2023 16:19:11 +0000 (11:19 -0500)] 
Run bracket interpretation for reflection

Fixed bug where a schema name given with brackets, but no dots inside the
name, for parameters such as :paramref:`_schema.Table.schema` would not be
interpreted within the context of the SQL Server dialect's documented
behavior of interpreting explicit brackets as token delimiters, first added
in 1.2 for #2626, when referring to the schema name in reflection
operations. The original assumption for #2626's behavior was that the
special interpretation of brackets was only significant if dots were
present, however in practice, the brackets are not included as part of the
identifier name for all SQL rendering operations since these are not valid
characters within regular or delimited identifiers.  Pull request courtesy
Shan.

Fixes: #9133
Closes: #9134
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/9134
Pull-request-sha: 5dac87c82cd3063dd8e50f0075c7c00330be6439

Change-Id: I7a507bc38d75a04ffcb7e920298775baae22c6d1
(cherry picked from commit aa50375a9aa72be896a7cf3afbbbec161c7111bd)

2 years agomypy plugin fixes
Mike Bayer [Tue, 17 Jan 2023 01:17:50 +0000 (20:17 -0500)] 
mypy plugin fixes

Adjustments made to the mypy plugin to accommodate for some potential
changes being made for issue #236 sqlalchemy2-stubs when using SQLAlchemy
1.4. These changes are being kept in sync within SQLAlchemy 2.0.
The changes are also backwards compatible with older versions of
sqlalchemy2-stubs.

Fixed crash in mypy plugin which could occur on both 1.4 and 2.0 versions
if a decorator for the :func:`_orm.registry.mapped` decorator were used
that was referenced in an expression with more than two components (e.g.
``@Backend.mapper_registry.mapped``). This scenario is now ignored; when
using the plugin, the decorator expression needs to be two components (i.e.
``@reg.mapped``).

References: https://github.com/sqlalchemy/sqlalchemy2-stubs/issues/236
Fixes: #9102
Change-Id: Ieb1bf7bf8184645bcd43253e57f1c267b2640537
(cherry picked from commit cf64582f61b15716228302f669322d7efa1003c1)
(cherry picked from commit 36285760238314f70eed4532ca2c2c0c2d684609)

2 years agoapply changelog note for change of column loader options
Mike Bayer [Mon, 16 Jan 2023 21:02:07 +0000 (16:02 -0500)] 
apply changelog note for change of column loader options

Change-Id: Ib9a69e20420e1fda755f4533c5f90bc08ba11b48
References: #8879
References: #9101
(cherry picked from commit 5e6cb26a017fb72bc3f925194c6f8c1eda968fbe)

2 years agofix orm-header for standalone
Mike Bayer [Sun, 15 Jan 2023 16:28:22 +0000 (11:28 -0500)] 
fix orm-header for standalone

Change-Id: I20e7f8ad5800c2ce5cdc9645c4dbe66f53b8cdf8
(cherry picked from commit 48eed9eb9c6ba853b48e41ef6038ec97c5a3fb68)

2 years agoRemove missing doc section
Federico Caselli [Thu, 12 Jan 2023 22:08:33 +0000 (23:08 +0100)] 
Remove missing doc section

Change-Id: Ic6dda7f32a7561a0c0a92b8a7c08e44cb174eec1

2 years agoMerge "add with_loader_criteria() test for #8064 / #9091" into rel_1_4
mike bayer [Thu, 12 Jan 2023 18:55:16 +0000 (18:55 +0000)] 
Merge "add with_loader_criteria() test for #8064 / #9091" into rel_1_4

2 years agoMove docs in mysql dbapi
Federico Caselli [Wed, 11 Jan 2023 19:33:16 +0000 (20:33 +0100)] 
Move docs in mysql dbapi

Fixes: #9084
Change-Id: I5e174c318a20b7fcb5ea7c771293c5102e761ed7
(cherry picked from commit a06cd94baab114cd0b2fa0987267e31811d38f7a)

2 years agoadd with_loader_criteria() test for #8064 / #9091
Mike Bayer [Thu, 12 Jan 2023 16:25:39 +0000 (11:25 -0500)] 
add with_loader_criteria() test for #8064 / #9091

test related to #8064, added after discussion #9091 which
requested this behavior for with_loader_criteria() where it was
found to be working as of this issue, just not tested

Change-Id: I703f25af3708e49380b6004badd3a8ffb783ef70
References: #8064
References: #9091
(cherry picked from commit a2bf6f1bb4a56dfe6c6d1fe22c3a4e84f5da99bc)

2 years agofix ORM support for column-named bindparam() in crud .values()
Mike Bayer [Tue, 10 Jan 2023 14:51:23 +0000 (09:51 -0500)] 
fix ORM support for column-named bindparam() in crud .values()

Fixed bug / regression where using :func:`.bindparam()` with the same name
as a column in the :meth:`.Update.values` method of :class:`.Update`, as
well as the :meth:`.Insert.values` method of :class:`.Insert` in 2.0 only,
would in some cases silently fail to honor the SQL expression in which the
parameter were presented, replacing the expression with a new parameter of
the same name and discarding any other elements of the SQL expression, such
as SQL functions, etc. The specific case would be statements that were
constructed against ORM entities rather than plain :class:`.Table`
instances, but would occur if the statement were invoked with a
:class:`.Session` or a :class:`.Connection`.

:class:`.Update` part of the issue was present in both 2.0 and 1.4 and is
backported to 1.4.

For 1.4, also backports the sqlalchemy.testing.Variation update
to the variation() API.

Fixes: #9075
Change-Id: Ie954bc1f492ec6a566163588182ef4910c7ee452
(cherry picked from commit b5b864e0fe50243a94c0ef04fddda6fa446c1524)

2 years agoremove misleading line in post_update
Mike Bayer [Mon, 9 Jan 2023 17:38:10 +0000 (12:38 -0500)] 
remove misleading line in post_update

this UPDATE refers to the unit of work's need to consider this
additional UPDATE as a dependency and not an actual UPDATE statement.

Change-Id: I2a520af21ebf96b45c431efa898d4e7683a5bc2d
References: #9066
References: #1063
(cherry picked from commit 2ef4b449a7709ecab45e926f0e8d0dd398fd12db)

2 years agoMerge "include parsed col length field as integer from mysql index reflection" into...
mike bayer [Thu, 5 Jan 2023 14:17:09 +0000 (14:17 +0000)] 
Merge "include parsed col length field as integer from mysql index reflection" into rel_1_4

2 years ago[asyncpg] Extract rowcount for SELECT statements
Michael Gorven [Wed, 4 Jan 2023 17:30:42 +0000 (12:30 -0500)] 
[asyncpg] Extract rowcount for SELECT statements

Added support to the asyncpg dialect to return the ``cursor.rowcount``
value for SELECT statements when available. While this is not a typical use
for ``cursor.rowcount``, the other PostgreSQL dialects generally provide
this value. Pull request courtesy Michael Gorven.

Fixes: #9048
Closes: #9049
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/9049
Pull-request-sha: df16160530c6001d99de059995ad5047a75fb7b0

Change-Id: I095b866779ccea7e4d50bc841fef7605e61c667f
(cherry picked from commit 9c502f5788737fa65029716c73fe0f65f3dafb53)

2 years agoinclude parsed col length field as integer from mysql index reflection
Mike Bayer [Wed, 4 Jan 2023 14:23:07 +0000 (09:23 -0500)] 
include parsed col length field as integer from mysql index reflection

Added support to MySQL index reflection to correctly reflect the
``mysql_length`` dictionary, which previously was being ignored.

Fixes: #9047
Change-Id: I0a5e27123be68741e12af4464a0fa305052ec36e
(cherry picked from commit 4a31f97824095610cfdbc1ac1180fd8690f9f477)

2 years agoVersion 1.4.47 placeholder
Mike Bayer [Tue, 3 Jan 2023 20:17:21 +0000 (15:17 -0500)] 
Version 1.4.47 placeholder

2 years ago- 1.4.46 rel_1_4_46
Mike Bayer [Tue, 3 Jan 2023 20:02:32 +0000 (15:02 -0500)] 
- 1.4.46

2 years agoupdate wording
Mike Bayer [Tue, 3 Jan 2023 20:01:40 +0000 (15:01 -0500)] 
update wording

Change-Id: I19c7d9683218d2c059aa36dd1743661e78974976

2 years agochangelog updates
Mike Bayer [Tue, 3 Jan 2023 19:54:14 +0000 (14:54 -0500)] 
changelog updates

Change-Id: I69581c1563f15762a9a9afae4741e23fefd76906

2 years agohappy new year 2023
Mike Bayer [Tue, 3 Jan 2023 17:50:29 +0000 (12:50 -0500)] 
happy new year 2023

Change-Id: I14db8e9c69a832b0f5dae8036db3c0a70bb49edd

2 years agolink to with_variant() narrative from API doc
Mike Bayer [Tue, 3 Jan 2023 14:48:06 +0000 (09:48 -0500)] 
link to with_variant() narrative from API doc

Change-Id: I5d8e4d7cb7871bedebe0fe89758be441e64b94c6
(cherry picked from commit 7f86be997eea27bc994b25c4fb65d72b3d4567f9)

2 years agoMerge "add uber warning for 1.4" into rel_1_4
mike bayer [Tue, 3 Jan 2023 05:14:06 +0000 (05:14 +0000)] 
Merge "add uber warning for 1.4" into rel_1_4

2 years agorepair underline levels in 20 migration doc
Mike Bayer [Tue, 3 Jan 2023 04:58:06 +0000 (23:58 -0500)] 
repair underline levels in 20 migration doc

two sections got whacked here, update underlines to be
the same as the 2.0 branch

Change-Id: Ic36d51ad9a2cbe23482f72e73f4cbbcbe1617780

2 years agoadd uber warning for 1.4
Mike Bayer [Mon, 2 Jan 2023 17:27:36 +0000 (12:27 -0500)] 
add uber warning for 1.4

As we don't have any automatic deprecation warning for 2.0
unless SQLALCHEMY_WARN_20 is set, applications that are not
being monitored for deprecations have no way to guard against
2.0 being released on pypi unless they add a requirements
rule.

make sure we are putting out a major warning for people who
may have not noticed that SQLAlchemy 2.0 will break compatibility
with legacy use patterns.

Fixes: #8983
Change-Id: I7d50db52c9a0fe3165b0131aab2fce9af80d51dd

2 years agoRectify reference to class LambdaElement, misnamed as LamdaElement (#9037)
Lele Gaifax [Thu, 29 Dec 2022 09:21:09 +0000 (10:21 +0100)] 
Rectify reference to class LambdaElement, misnamed as LamdaElement (#9037)

Fixes #9034.

2 years agonote that 2.0 has behavioral changes outside of the 1.4->2.0 process
Mike Bayer [Wed, 28 Dec 2022 20:53:03 +0000 (15:53 -0500)] 
note that 2.0 has behavioral changes outside of the 1.4->2.0 process

Change-Id: I0ab9611c75f592acec73ca92271f970eae74d7ab
(cherry picked from commit 2c1550af60e5fc8303990519b3ae497401196348)

2 years agochangelog adjustments
Mike Bayer [Wed, 28 Dec 2022 20:30:32 +0000 (15:30 -0500)] 
changelog adjustments

include backport markings

Change-Id: I810923a641977569b8b4d9967e84b8cb684e7a52
(cherry picked from commit 46fe3e53e06864cafbbcbfd8a82a2ec00727b8c5)

2 years agoensure whereclause, returning copied as tuples
Mike Bayer [Wed, 28 Dec 2022 17:04:07 +0000 (12:04 -0500)] 
ensure whereclause, returning copied as tuples

Fixed issue in the internal SQL traversal for DML statements like
:class:`_dml.Update` and :class:`_dml.Delete` which would cause among other
potential issues, a specific issue using lambda statements with the ORM
update/delete feature.

Fixes: #9033
Change-Id: I76428049cb767ba302fbea89555114bf63ab8687
(cherry picked from commit e68173bf7d296b2948abed06f79c7cbd0ab66b0d)

2 years agoCorrect URL import in docs
Federico Caselli [Wed, 28 Dec 2022 12:33:53 +0000 (13:33 +0100)] 
Correct URL import in docs

Fixes: #9032
Change-Id: I2c4164d8e1c74e0c74a578f4629c714b96761ed5

2 years agoMerge "pass more contextual information to PyWrapper param create" into rel_1_4
mike bayer [Tue, 27 Dec 2022 20:54:01 +0000 (20:54 +0000)] 
Merge "pass more contextual information to PyWrapper param create" into rel_1_4

2 years agodont prefix ssl args with "ssl" in the ssl dict
Mike Bayer [Tue, 27 Dec 2022 20:51:06 +0000 (15:51 -0500)] 
dont prefix ssl args with "ssl" in the ssl dict

Fixes: #9031
Change-Id: I9ef077e7da5b2328a345f6526a6210ce82d807f6
(cherry picked from commit e0ea78bd079c1545ced7c9233f949fabe296cd07)

2 years agopass more contextual information to PyWrapper param create
Mike Bayer [Tue, 27 Dec 2022 17:29:38 +0000 (12:29 -0500)] 
pass more contextual information to PyWrapper param create

Fixed issue in lambda SQL feature where the calculated type of a literal
value would not take into account the type coercion rules of the "compared
to type", leading to a lack of typing information for SQL expressions, such
as comparisons to :class:`.JSON` elements and similar.

Fixes: #9029
Change-Id: I381c8d7458d98ba762313dee9ec47a9c1881f74a
(cherry picked from commit f63d7e33ec785a5ea4fbc77963c537be26b8419b)

2 years agoexpand out Index if passed to "constraint"
Mike Bayer [Thu, 22 Dec 2022 23:14:31 +0000 (18:14 -0500)] 
expand out Index if passed to "constraint"

Fixed bug where the PostgreSQL
:paramref:`_postgresql.OnConflictClause.constraint` parameter would accept
an :class:`.Index` object, however would not expand this index out into its
individual index expressions, instead rendering its name in an ON CONFLICT
ON CONSTRAINT clause, which is not accepted by PostgreSQL; the "constraint
name" form only accepts unique or exclude constraint names. The parameter
continues to accept the index but now expands it out into its component
expressions for the render.

Fixes: #9023
Change-Id: I6baf243e26bfe578bf3f193c162dd7a623b6ede9
(cherry picked from commit 5cc18bb80077e98418b4a8066c0bc628209f3ada)

2 years agoMerge "add joins_implicitly to column_valued()" into rel_1_4
mike bayer [Tue, 20 Dec 2022 20:48:36 +0000 (20:48 +0000)] 
Merge "add joins_implicitly to column_valued()" into rel_1_4

2 years agoadd joins_implicitly to column_valued()
Mike Bayer [Mon, 19 Dec 2022 20:15:35 +0000 (15:15 -0500)] 
add joins_implicitly to column_valued()

Added parameter
:paramref:`.FunctionElement.column_valued.joins_implicitly`, which is
useful in preventing the "cartesian product" warning when making use of
table-valued or column-valued functions. This parameter was already
introduced for :meth:`.FunctionElement.table_valued` in :ticket:`7845`,
however it failed to be added for :meth:`.FunctionElement.column_valued`
as well.

Fixes: #9009
Change-Id: Ifb72fbcb4f4d2998e730d6f85ec7280df3bf3d47
(cherry picked from commit 567878e5c67d08c561dd064fe6dc25e4db7349e7)

2 years agoAdd MACCADDR8 for PGCompiler
asimfarooq5 [Wed, 14 Dec 2022 20:32:47 +0000 (15:32 -0500)] 
Add MACCADDR8 for PGCompiler

Add MACCADDR8 for PGCompiler

Closes: #8393
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/8393
Pull-request-sha: 837a68eba3e31e0acbb7c47ee87bca4e9def7648

Change-Id: I87e4999eb8d82662ff8ab409c98dc57edd7fd271
(cherry picked from commit 33f15740a0b72bae64fc2c2f6d0f9724cfe9164a)

2 years agoadd exclusion for unusual chars in column names
Mike Bayer [Mon, 19 Dec 2022 13:34:51 +0000 (08:34 -0500)] 
add exclusion for unusual chars in column names

Added new exclusion rule for third party dialects called
``unusual_column_name_characters``, which can be "closed" for third party
dialects that don't support column names with unusual characters such as
dots, slashes, or percent signs in them, even if the name is properly
quoted.

Fixes: #9002
Change-Id: I44b765df4c73ce5ec1907d031fd9c89761fd99d1
References: #8993
(cherry picked from commit 946058ec6070ab4db9fdfab612ec4543fea9cd1c)

2 years agodont call platform.architecture()
Mike Bayer [Fri, 16 Dec 2022 19:05:48 +0000 (14:05 -0500)] 
dont call platform.architecture()

Fixed regression where the base compat module was calling upon
``platform.architecture()`` in order to detect some system properties,
which results in an over-broad system call against the system-level
``file`` call that is unavailable under some circumstances, including
within some secure environment configurations.

Fixes: #8995
Change-Id: Ib6171e75aff5a60a79dab81a0be21bee2456318b
(cherry picked from commit e852362bfdf9a18dfd91137f4a2d7c2dfee30082)

2 years agoimplement literal_binds with expanding + bind_expression
Mike Bayer [Thu, 15 Dec 2022 15:22:36 +0000 (10:22 -0500)] 
implement literal_binds with expanding + bind_expression

Fixed bug where SQL compilation would fail (assertion fail in 2.0, NoneType
error in 1.4) when using an expression whose type included
:meth:`_types.TypeEngine.bind_expression`, in the context of an "expanding"
(i.e. "IN") parameter in conjunction with the ``literal_binds`` compiler
parameter.

Fixes: #8989
Change-Id: Ic9fd27b46381b488117295ea5a492d8fc158e39f
(cherry picked from commit 8c6de3c2c43ab372cbbe76464b4c5be3b6457252)

2 years agoMerge "catch all BaseException in pool and revert failed checkouts" into rel_1_4
mike bayer [Wed, 14 Dec 2022 20:40:59 +0000 (20:40 +0000)] 
Merge "catch all BaseException in pool and revert failed checkouts" into rel_1_4

2 years agocheck index_list pragma for number of columns returned
Mike Bayer [Mon, 12 Dec 2022 23:05:07 +0000 (18:05 -0500)] 
check index_list pragma for number of columns returned

Fixed regression caused by new support for reflection of partial indexes on
SQLite added in 1.4.45 for :ticket:`8804`, where the ``index_list`` pragma
command in very old versions of SQLite (possibly prior to 3.8.9) does not
return the current expected number of columns, leading to exceptions raised
when reflecting tables and indexes.

Fixes: #8969
Change-Id: If317cdcfc6782f7e180df329b6ea0ddb48ce2269
(cherry picked from commit e026a0f3562bec5fbc18e223176be8121c147193)

2 years agocatch all BaseException in pool and revert failed checkouts
Mike Bayer [Mon, 12 Dec 2022 18:47:27 +0000 (13:47 -0500)] 
catch all BaseException in pool and revert failed checkouts

Fixed a long-standing race condition in the connection pool which could
occur under eventlet/gevent monkeypatching schemes in conjunction with the
use of eventlet/gevent ``Timeout`` conditions, where a connection pool
checkout that's interrupted due to the timeout would fail to clean up the
failed state, causing the underlying connection record and sometimes the
database connection itself to "leak", leaving the pool in an invalid state
with unreachable entries. This issue was first identified and fixed in
SQLAlchemy 1.2 for :ticket:`4225`, however the failure modes detected in
that fix failed to accommodate for ``BaseException``, rather than
``Exception``, which prevented eventlet/gevent ``Timeout`` from being
caught. In addition, a block within initial pool connect has also been
identified and hardened with a ``BaseException`` -> "clean failed connect"
block to accommodate for the same condition in this location.
Big thanks to Github user @niklaus for their tenacious efforts in
identifying and describing this intricate issue.

Fixes: #8974
Change-Id: I95a0e1f080d0cee6f1a66977432a586fdf87f686
(cherry picked from commit a71917204dcf12a93d957a0fa29c9df97d0411ee)

2 years agoadd color directives
Mike Bayer [Sun, 11 Dec 2022 20:47:25 +0000 (15:47 -0500)] 
add color directives

See https://tox.wiki/en/latest/faq.html#tox-4-known-regressions

Change-Id: I3c7291a660dc167bce3151e02cd123edc4707ca1
(cherry picked from commit 184508afbb7656c4f51d98695bbeeeec9aae9b87)

2 years agoadjust for tox changes to passenv
Mike Bayer [Sun, 11 Dec 2022 16:27:52 +0000 (11:27 -0500)] 
adjust for tox changes to passenv

Fixed issue in tox.ini file where changes in the tox 4.0 series to the
format of "passenv" caused tox to not function correctly, in particular
raising an error as of tox 4.0.6.

Change-Id: I659c8fc523a71deaa02a89103c9e7241cf81d831
References: https://github.com/tox-dev/tox/issues/2676

2 years agoMerge "Specify view columns in HasTableTest" into rel_1_4
mike bayer [Sun, 11 Dec 2022 15:07:00 +0000 (15:07 +0000)] 
Merge "Specify view columns in HasTableTest" into rel_1_4

2 years agoVersion 1.4.46 placeholder
Mike Bayer [Sat, 10 Dec 2022 18:51:43 +0000 (13:51 -0500)] 
Version 1.4.46 placeholder

2 years ago- 1.4.45 rel_1_4_45
Mike Bayer [Sat, 10 Dec 2022 18:47:24 +0000 (13:47 -0500)] 
- 1.4.45

2 years agochangelog edits for 1.4.45
Mike Bayer [Sat, 10 Dec 2022 18:46:43 +0000 (13:46 -0500)] 
changelog edits for 1.4.45

Change-Id: Ic54a46c5091eda1480ce80989075527c6b3a6d7e

2 years agoSpecify view columns in HasTableTest
Gord Thompson [Fri, 9 Dec 2022 16:55:34 +0000 (09:55 -0700)] 
Specify view columns in HasTableTest

Fixes: #8960
Avoid test errors on databases that do not
support CREATE VIEW vv AS SELECT * FROM

Change-Id: Ic9e892aa4466030b9b325c11228dad15cf59a258
(cherry picked from commit 7e9b1450b6899c82c9362cbc92fcc0f01c97b043)

2 years agoMerge "look out for extras=None in freeze" into rel_1_4
mike bayer [Fri, 9 Dec 2022 22:06:08 +0000 (22:06 +0000)] 
Merge "look out for extras=None in freeze" into rel_1_4

2 years agolook out for extras=None in freeze
Mike Bayer [Fri, 9 Dec 2022 20:56:15 +0000 (15:56 -0500)] 
look out for extras=None in freeze

Fixed issue where :meth:`_engine.Result.freeze` method would not work for
textual SQL using either :func:`_sql.text` or
:meth:`_engine.Connection.exec_driver_sql`.

Fixes: #8963
Change-Id: Ia131c6ac41a4adf32eb1bf1abf23930ef395f16c
(cherry picked from commit 44170aee47a021883c6244f702de2e4385a5cd1d)

2 years agoBetter syncronize async result docs with plain ones.
Federico Caselli [Thu, 8 Dec 2022 18:34:49 +0000 (19:34 +0100)] 
Better syncronize async result docs with plain ones.

Removed non-functional method ``merge`` from :class:`_asyncio.AsyncResult`.
This method was non-functional and non-testes since the first introduction
of asyncio in SQLAlchemy.

Fixes: #7158
Fixes: #8952
Change-Id: Ibc3d17be8a8b7cab9bf2074f0408f74b4c4b161d
(cherry picked from commit ab8a21c613fb6c69b07f053e4622a4426b2e9ef0)

2 years agoOracle COLUMN_VALUE is a column name, not a keyword
Mike Bayer [Wed, 7 Dec 2022 20:54:59 +0000 (15:54 -0500)] 
Oracle COLUMN_VALUE is a column name, not a keyword

Fixed issue in Oracle compiler where the syntax for
:meth:`.FunctionElement.column_valued` was incorrect, rendering the name
``COLUMN_VALUE`` without qualifying the source table correctly.

Fixes: #8945
Change-Id: Ia04bbdc68168e78b67a74bb3834a63f5d5000627
(cherry picked from commit 655be0237367462a01a9c86cdef9e9afab06d6d6)

2 years agorepair memusage tox under python 2
Mike Bayer [Tue, 6 Dec 2022 02:04:21 +0000 (21:04 -0500)] 
repair memusage tox under python 2

memusage was inadvertently blocked under py2k.  also
add path to test files as old pytest 4 versions are extremely slow
collecting tests on py2.

Change-Id: Ida74b6ef7f3c29d03201e27876cce56c517f3b05

2 years agochangelog updates
Mike Bayer [Mon, 5 Dec 2022 22:16:32 +0000 (17:16 -0500)] 
changelog updates

prep for 2.0.0b4

Change-Id: I2bf7249f6ed0c120b9d04d81eaecdf8593729c83
(cherry picked from commit 42876aabb5f893e1922676eb809e6b37c0519ed8)

2 years agoadjustments for unreliable gc
Mike Bayer [Mon, 5 Dec 2022 04:25:14 +0000 (23:25 -0500)] 
adjustments for unreliable gc

sporadic (and at the moment persistent) test failures
related to aiosqlite seem to have in common that Python
gc stops working fully when we run a lot of tests with
aiosqlite.  The failures are not limited to aiosqlite
as they are more involving places where we assume or
expect gc.collect() to get rid of things, and it doesn't.

Identify (based on reproducible case on the d3 CI runner)
the spots where this happens and add fixes.

test/orm/test_transaction.py test_gced_delete_on_rollback
has always been a very sensitive test with a lot of issues,
so here we move it to the test_memusage suite and limit
it only to when the memusage suite is running.

Change-Id: I683412d0effe8732c45980b40722e5bb63431177
(cherry picked from commit ca46caede4b8d846f3cd48e642922ae821d0be2b)

2 years agoMerge "Fixed an invalid syntax in an except statement" into rel_1_4
mike bayer [Mon, 5 Dec 2022 13:54:57 +0000 (13:54 +0000)] 
Merge "Fixed an invalid syntax in an except statement" into rel_1_4

2 years agodoc change - Add new external dialect for openGauss
j00356287 [Mon, 5 Dec 2022 13:44:09 +0000 (08:44 -0500)] 
doc change - Add new external dialect for openGauss

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

### Description
<!-- Describe your changes in detail -->
Added new external dialect for [openGauss](https://www.opengauss.org/en/).

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

Change-Id: Ia8ca38f98f346fa3cc910ceb7af47f8c903eb587
(cherry picked from commit db6145287244ca9801f7b7e1acc90cd25a572cde)

2 years agoFixed an invalid syntax in an except statement
wiseaidev [Mon, 5 Dec 2022 13:44:35 +0000 (08:44 -0500)] 
Fixed an invalid syntax in an except statement

### Description

As the title suggests, I have fixed an invalid syntax in the docs for an `except` statement while reading the unusual.

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

Change-Id: If8512bf1853f7cdb1ae655f0945cd922fff6fbce
(cherry picked from commit 38636bfd22f236343daf11aef31145ae54867028)

2 years agoReturned "GitHub Actions" support for py27 and py36 environments. (#8924)
Jonathan Vanasco [Sat, 3 Dec 2022 16:20:51 +0000 (11:20 -0500)] 
Returned "GitHub Actions" support for py27 and py36 environments. (#8924)

GitHub recently upgraded the `ubuntu-latest` operating system label to
point to `ubuntu-22.04` instead of `ubuntu-22.04`.  The `ubuntu-22.04` build
does not support Python 2.7 or 3.6.

In order to return support for CI Testing and release builds, the affected jobs
now utilize `include` and `exclude` commands in run matrixes to enable and
disable jobs under certain environments.

Jobs that requres Py27 and Py36 now run under an explicitly identified
`ubuntu-20.04` operating system. The majority of jobs require Py37 or higher,
which are all currently supported in the new `ubuntu-latest` operating system (
which points to `ubuntu-22.04`).

Although `ubuntu-20.04` should continue to receive support for several more
years, the `ubuntu-22.04` platform is likely to benefit from patch releases on
a faster schedule – so it is preferable to continue running all compatible
tests on `ubuntu-latest` rather than pinning everything to the earlier os
version.

Several jobs were also standardized to use the job "name" as a prefix, a
convention that most jobs in the workflows already adapted. This practice
greatly simplifies correlating failed tests to specific jobs.

See::

* https://github.blog/changelog/2022-11-09-github-actions-ubuntu-latest-workflows-will-use-ubuntu-22-04/
* https://github.blog/changelog/2022-12-01-github-actions-larger-runners-using-ubuntu-latest-label-will-now-use-ubuntu-22-04/

Change-Id: I0014029c7c6ee74824c8d971bd21ee9199bc8381

2 years agoadd spaces, leading underscore to oracle checks
Mike Bayer [Fri, 2 Dec 2022 22:00:10 +0000 (17:00 -0500)] 
add spaces, leading underscore to oracle checks

Expand the test suite from #8708 which unfortunately did
not exercise the bound parameter codepaths completely.

Continued fixes for Oracle fix :ticket:`8708` released in 1.4.43 where
bound parameter names that start with underscores, which are disallowed by
Oracle, were still not being properly escaped in all circumstances.

Fixes: #8708
Change-Id: Ic389c09bd7c53b773e5de35f1a18ef20769b92a7
(cherry picked from commit 2886412438de072b4925818ac746e56a2067bee3)

2 years agoRevert "Returned Github Actions support for py27 and py36."
Mike Bayer [Fri, 2 Dec 2022 19:06:45 +0000 (14:06 -0500)] 
Revert "Returned Github Actions support for py27 and py36."

This reverts commit 3f1e6303f0f53cd6239b2a6227c8cd55789a175f.

2 years agoReturned Github Actions support for py27 and py36.
jonathan vanasco [Fri, 2 Dec 2022 17:37:30 +0000 (12:37 -0500)] 
Returned Github Actions support for py27 and py36.
GitHub recently upgraded the `ubuntu-latest` label from `ubuntu-20.04` to `ubuntu-22.04`.
The `ubuntu-22.04` image removed support for py27 and py36.

To return support, the affected jobs have been duplicated to `-legacy` versions.
The -legacy versions of jobs run py27 and py36 on a pinned `ubuntu-20.04` os.
The existing jobs continue to run py37+ on ubuntu-latest, as that platform may continue to benefit from patch releases on the python versions.

Change-Id: I0f063723cb993fab89bc64c89df6dfcaf4dbe5a5

2 years agoMerge "Fix positional compiling bugs" into rel_1_4
mike bayer [Fri, 2 Dec 2022 14:32:30 +0000 (14:32 +0000)] 
Merge "Fix positional compiling bugs" into rel_1_4

2 years agoFix positional compiling bugs
Federico Caselli [Sat, 19 Nov 2022 19:39:10 +0000 (20:39 +0100)] 
Fix positional compiling bugs

Fixed a series of issues regarding positionally rendered bound parameters,
such as those used for SQLite, asyncpg, MySQL and others. Some compiled
forms would not maintain the order of parameters correctly, such as the
PostgreSQL ``regexp_replace()`` function as well as within the "nesting"
feature of the :class:`.CTE` construct first introduced in :ticket:`4123`.

Fixes: #8827
Change-Id: I9813ed7c358cc5c1e26725c48df546b209a442cb
(cherry picked from commit 0f2baae6bf72353f785bad394684f2d6fa53e0ef)

2 years ago[sqlite] Reflect DEFERRABLE and INITIALLY options for foreign keys
Michael Gorven [Tue, 29 Nov 2022 23:36:19 +0000 (18:36 -0500)] 
[sqlite] Reflect DEFERRABLE and INITIALLY options for foreign keys

Added support for the SQLite backend to reflect the "DEFERRABLE" and
"INITIALLY" keywords which may be present on a foreign key construct. Pull
request courtesy Michael Gorven.

Fixes: #8903
Closes: #8904
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/8904
Pull-request-sha: 52aa4cf77482c4051899e21bea75b9830e4c3efa

Change-Id: I713906db1a458d8f1be39625841ca3bbc03ec835
(cherry picked from commit 07760011b5176be03c7811e9a45933b473b8b80b)

2 years agoAdd PyAthena Dialect (#8898)
Jason Myers [Tue, 29 Nov 2022 18:12:12 +0000 (12:12 -0600)] 
Add PyAthena Dialect (#8898)

* Add PyAthena Dialect

* Changing order

(cherry picked from commit 07d40578b1bb77456b7a7af425a905b146fdaef1)

2 years agoadd partial index predicate to SQLiteDialect.get_indexes() result
Tobias Pfeiffer [Mon, 28 Nov 2022 12:52:31 +0000 (07:52 -0500)] 
add partial index predicate to SQLiteDialect.get_indexes() result

Added support for reflection of expression-oriented WHERE criteria included
in indexes on the SQLite dialect, in a manner similar to that of the
PostgreSQL dialect. Pull request courtesy Tobias Pfeiffer.

Fixes: #8804
Closes: #8806
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/8806
Pull-request-sha: 539dfcb372360911b69aed2a804698bb1a2220b1

Change-Id: I0e34d47dbe2b9c1da6fce531363084843e5127a3
(cherry picked from commit ed39e846cd8ae2714c47fc3d563582f72483df0c)

2 years agoMerge "improve column targeting issues with query_expression" into rel_1_4
mike bayer [Sun, 27 Nov 2022 16:36:47 +0000 (16:36 +0000)] 
Merge "improve column targeting issues with query_expression" into rel_1_4

2 years agoAdd recommendation for URL.create() re: escaping
Gord Thompson [Thu, 24 Nov 2022 17:38:20 +0000 (10:38 -0700)] 
Add recommendation for URL.create() re: escaping

Let users know that URL.create() can build the
whole connection URL instead of making them
escape things like passwords ad-hoc.

includes some general cleanup of URL docstring
by mike

Change-Id: Ic71bb0201fecf30e1db11e006c269f2d041b5439
(cherry picked from commit 14c73685ba909838fb90d762d465e7ae8d067c15)

2 years agoadd new variation helper
Mike Bayer [Sat, 26 Nov 2022 16:03:45 +0000 (11:03 -0500)] 
add new variation helper

I'm using a lot of @testing.combinations with either
a boolean True/False, or a series of string names, each indicating
some case to switch on.  I want a descriptive name in the test
run (not True/False) and I don't want to compare strings.

So make a new helper around @combinations that provides an
object interface that has booleans inside of it, prints nicely
in the test output, raises an error if you name the case
incorrectly.

Before:

test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[False-False-both] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[False-False-key] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[False-False-name] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[False-True-both] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[False-True-key] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[False-True-name] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[True-False-both] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[True-False-key] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[True-False-name] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[True-True-both] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[True-True-key] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[True-True-name] PASSED

After:

test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[not_use_add_property-deferred-both] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[not_use_add_property-deferred-key] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[not_use_add_property-deferred-name] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[not_use_add_property-not_deferred-both] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[not_use_add_property-not_deferred-key] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[not_use_add_property-not_deferred-name] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[use_add_property-deferred-both] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[use_add_property-deferred-key] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[use_add_property-deferred-name] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[use_add_property-not_deferred-both] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[use_add_property-not_deferred-key] PASSED
test/orm/declarative/test_typed_mapping.py::MappedColumnTest::test_separate_name[use_add_property-not_deferred-name] PASSED

Change-Id: Idde87632581ee69e0f47360966758583dfd8baab
(cherry picked from commit 3ffa8dccc224d7b7d604bdfb684c437f4cb42f92)

2 years agoimprove column targeting issues with query_expression
Mike Bayer [Fri, 25 Nov 2022 21:49:28 +0000 (16:49 -0500)] 
improve column targeting issues with query_expression

Fixed issues in :func:`_orm.with_expression` where expressions that were
composed of columns within a subquery being SELECTed from, or when using
``.from_statement()``, would not render correct SQL **if** the expression
had a label name that matched the attribute which used
:func:`_orm.query_expression`, even when :func:`_orm.query_expression` had
no default expression. For the moment, if the :func:`_orm.query_expression`
**does** have a default expression, that label name is still used for that
default, and an additional label with the same name will be ignored.
Overall, this case is pretty thorny so further adjustments might be
warranted.

Fixes: #8881
Change-Id: Ie939b1470cb2e824717384be65f4cd8edd619942
(cherry picked from commit 474326e87038f997fb9423c56379b8ba19a5e43b)

2 years agosort for addresess relationship in new merge test
Mike Bayer [Sat, 26 Nov 2022 15:14:02 +0000 (10:14 -0500)] 
sort for addresess relationship in new merge test

saw a random failure under py2 on 1.4, will backport

Change-Id: I3e2b037bf4211be44e28f85f5e51ffdc218eeb5a
(cherry picked from commit 34e29f7b225cf1305e151af9d03ef95f42a9dbcc)

2 years agoMerge "avoid putting annotated columns in sets" into rel_1_4
mike bayer [Sat, 26 Nov 2022 02:35:11 +0000 (02:35 +0000)] 
Merge "avoid putting annotated columns in sets" into rel_1_4