]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/log
thirdparty/sqlalchemy/sqlalchemy.git
3 years agoMerge "set within_columns_clause=False for all sub-elements of select()" into main
mike bayer [Tue, 9 Nov 2021 23:56:12 +0000 (23:56 +0000)] 
Merge "set within_columns_clause=False for all sub-elements of select()" into main

3 years agoMerge "upgrade deferred loader to regular loader if refresh_state" into main
mike bayer [Tue, 9 Nov 2021 23:55:10 +0000 (23:55 +0000)] 
Merge "upgrade deferred loader to regular loader if refresh_state" into main

3 years agoMerge "change the POSTCOMPILE/ SCHEMA symbols to not conflict w mssql quoting" into...
mike bayer [Tue, 9 Nov 2021 23:52:28 +0000 (23:52 +0000)] 
Merge "change the POSTCOMPILE/ SCHEMA symbols to not conflict w mssql quoting" into main

3 years agoMerge "Fixes: #7295" into main
mike bayer [Tue, 9 Nov 2021 20:35:50 +0000 (20:35 +0000)] 
Merge "Fixes: #7295" into main

3 years agochange the POSTCOMPILE/ SCHEMA symbols to not conflict w mssql quoting
Mike Bayer [Mon, 8 Nov 2021 23:29:16 +0000 (18:29 -0500)] 
change the POSTCOMPILE/ SCHEMA symbols to not conflict w mssql quoting

Adjusted the compiler's generation of "post compile" symbols including
those used for "expanding IN" as well as for the "schema translate map" to
not be based directly on plain bracketed strings with underscores, as this
conflicts directly with SQL Server's quoting format of also using brackets,
which produces false matches when the compiler replaces "post compile" and
"schema translate" symbols. The issue created easy to reproduce examples
both with the :meth:`.Inspector.get_schema_names` method when used in
conjunction with the
:paramref:`_engine.Connection.execution_options.schema_translate_map`
feature, as well in the unlikely case that a symbol overlapping with the
internal name "POSTCOMPILE" would be used with a feature like "expanding
in".

Fixes: #7300
Change-Id: I6255c850b140522a4aba95085216d0bca18ce230

3 years agoset within_columns_clause=False for all sub-elements of select()
Mike Bayer [Tue, 9 Nov 2021 20:02:44 +0000 (15:02 -0500)] 
set within_columns_clause=False for all sub-elements of select()

Fixed issue where using the feature of using a string label for ordering or
grouping described at :ref:`tutorial_order_by_label` would fail to function
correctly if used on a :class:`.CTE` construct, when the CTE were embedded
inside of an enclosing :class:`_sql.Select` statement that itself was set
up as a scalar subquery.

Fixes: #7269
Change-Id: Ied6048a1c9a622374a418230c8cfedafa8d3f87e

3 years agorevert mis-commit from aa026c302c6b188a7e28508f9ecb603809b9e03f
Mike Bayer [Tue, 9 Nov 2021 20:04:22 +0000 (15:04 -0500)] 
revert mis-commit from aa026c302c6b188a7e28508f9ecb603809b9e03f

A scratch line from #7269 was inadvertently committed here.
this needs to be in its own commit w/ tests.

Change-Id: I62796e18b05bbbd3b6225e9f27e1e63ab98cf24c

3 years agoupgrade deferred loader to regular loader if refresh_state
Mike Bayer [Tue, 9 Nov 2021 16:31:23 +0000 (11:31 -0500)] 
upgrade deferred loader to regular loader if refresh_state

Fixed issue where deferred polymorphic loading of attributes from a
joined-table inheritance subclass would fail to populate the attribute
correctly if the :func:`_orm.load_only` option were used to originally
exclude that attribute, in the case where the load_only were descending
from a relationship loader option.  The fix allows that other valid options
such as ``defer(..., raiseload=True)`` etc. still function as expected.

Fixes: #7304
Change-Id: I58b7ce7c450bcc52d2f0c9bfbcb4d747463ee9b2

3 years agoDe-emphasize notion of "default driver" (DBAPI)
Gord Thompson [Mon, 8 Nov 2021 18:03:54 +0000 (11:03 -0700)] 
De-emphasize notion of "default driver" (DBAPI)

Fixes: #6960
Even though a default driver still exists for
each dialect, remove most usages of `dialect://`
to encourage users to explicitly specify
`dialect+driver://`

Change-Id: I0ad42167582df509138fca64996bbb53e379b1af

3 years agoconnection doc updates for future
Mike Bayer [Mon, 8 Nov 2021 15:36:11 +0000 (10:36 -0500)] 
connection doc updates for future

* remove autocommit section, missed in future engine merge
* remove implicit execution section, also missed
* rewrite "transactions" section to fully discuss
  "commit as you go" vs. "begin once", remove all references
  to "future"
* fix up "understanding DBAPI autocommit" to be a little more
  clear

Pushing this straight up, we can attend to remaining typos /
edits ad hoc

Change-Id: I687c89a515e5a5cdce69700b039bb7c10d90159a

3 years agoMerge "fully implement future engine and remove legacy" into main
mike bayer [Sun, 7 Nov 2021 21:19:45 +0000 (21:19 +0000)] 
Merge "fully implement future engine and remove legacy" into main

3 years agofully implement future engine and remove legacy
Mike Bayer [Mon, 1 Nov 2021 19:44:44 +0000 (15:44 -0400)] 
fully implement future engine and remove legacy

The major action here is to lift and move future.Connection
and future.Engine fully into sqlalchemy.engine.base.   This
removes lots of engine concepts, including:

* autocommit
* Connection running without a transaction, autobegin
  is now present in all cases
* most "autorollback" is obsolete
* Core-level subtransactions (i.e. MarkerTransaction)
* "branched" connections, copies of connections
* execution_options() returns self, not a new connection
* old argument formats, distill_params(), simplifies calling
  scheme between engine methods
* before/after_execute() events (oriented towards compiled constructs)
  don't emit for exec_driver_sql().  before/after_cursor_execute()
  is still included for this
* old helper methods superseded by context managers, connection.transaction(),
  engine.transaction() engine.run_callable()
* ancient engine-level reflection methods has_table(), table_names()
* sqlalchemy.testing.engines.proxying_engine

References: #7257

Change-Id: Ib20ed816642d873b84221378a9ec34480e01e82c

3 years agoFixes: #7295
jonathan vanasco [Fri, 5 Nov 2021 16:38:30 +0000 (12:38 -0400)] 
Fixes: #7295
Fixed issue in ``Table``` object where: param:`implicit_returning` was not
compatible with: param:`extend_existing`.
Change-Id: I16f4ab585d82f5691a3fed9eba04b84730a8a59e

3 years agoMerge "use tuple expansion if type._is_tuple, test for Sequence if no type" into...
mike bayer [Fri, 5 Nov 2021 20:34:39 +0000 (20:34 +0000)] 
Merge "use tuple expansion if type._is_tuple, test for Sequence if no type" into main

3 years agouse tuple expansion if type._is_tuple, test for Sequence if no type
Mike Bayer [Fri, 5 Nov 2021 14:18:42 +0000 (10:18 -0400)] 
use tuple expansion if type._is_tuple, test for Sequence if no type

Fixed regression where the row objects returned for ORM queries, which are
now the normal :class:`_sql.Row` objects, would not be interpreted by the
:meth:`_sql.ColumnOperators.in_` operator as tuple values to be broken out
into individual bound parameters, and would instead pass them as single
values to the driver leading to failures. The change to the "expanding IN"
system now accommodates for the expression already being of type
:class:`.TupleType` and treats values accordingly if so. In the uncommon
case of using "tuple-in" with an untyped statement such as a textual
statement with no typing information, a tuple value is detected for values
that implement ``collections.abc.Sequence``, but that are not ``str`` or
``bytes``, as always when testing for ``Sequence``.

Added :class:`.TupleType` to the top level ``sqlalchemy`` import namespace.

Fixes: #7292
Change-Id: I8286387e3b3c3752b3bd4ae3560d4f31172acc22

3 years agofix typo in changelog.
Federico Caselli [Fri, 5 Nov 2021 08:58:18 +0000 (09:58 +0100)] 
fix typo in changelog.

Change-Id: Ic78a9ce9032ab759fc796d3218b64352dde6155b

3 years agoCheck for Mapping explicitly in 2.0 params
Mike Bayer [Thu, 4 Nov 2021 21:02:24 +0000 (17:02 -0400)] 
Check for Mapping explicitly in 2.0 params

Fixed issue in future :class:`_future.Connection` object where the
:meth:`_future.Connection.execute` method would not accept a non-dict
mapping object, such as SQLAlchemy's own :class:`.RowMapping` or other
``abc.collections.Mapping`` object as a parameter dictionary.

Fixes: #7291
Change-Id: I819f079d86d19d1d81c570e0680f987e51e34b84

3 years agoUpdate "transaction has already begun" language
Mike Bayer [Thu, 4 Nov 2021 17:36:43 +0000 (13:36 -0400)] 
Update "transaction has already begun" language

As future connections will now be autobeginning, there
will be more cases where begin() can't be called as well as where isolation level
can't be set, which will be surprising as this is a behavioral
change for 2.0; additionally, when DBAPI autocommit is set,
there isn't actually a DBAPI level transaction in effect even though
Connection has a Transaction object.  Clarify the language in these
two error messages to make it clear that begin() and autobegin
are tracking a SQLAlchemy-level Transaction() object, whether or not
the DBAPI has actually started a transaction, and that this is the
reason rollback() or commit() is required before performing
the requsted operation.   Additionally make sure the error message
mentions "autobegin" as a likely reason this error is being
encountered along with what Connection needs the user to do in
order to resolve.

Change-Id: If8763939eeabc46aa9d9209a56d05ad82b892c5c

3 years agoMerge "simplify and publicize the asyncpg JSON(B) codec registrsation" into main
mike bayer [Thu, 4 Nov 2021 16:27:40 +0000 (16:27 +0000)] 
Merge "simplify and publicize the asyncpg JSON(B) codec registrsation" into main

3 years agosimplify and publicize the asyncpg JSON(B) codec registrsation
Mike Bayer [Wed, 3 Nov 2021 15:32:51 +0000 (11:32 -0400)] 
simplify and publicize the asyncpg JSON(B) codec registrsation

Added overridable methods ``PGDialect_asyncpg.setup_asyncpg_json_codec``
and ``PGDialect_asyncpg.setup_asyncpg_jsonb_codec`` codec, which handle the
required task of registering JSON/JSONB codecs for these datatypes when
using asyncpg. The change is that methods are broken out as individual,
overridable methods to support third party dialects that need to alter or
disable how these particular codecs are set up.

Fixes: #7284
Change-Id: I3eac258fea61f3975bd03c428747f788813ce45e

3 years agouse ExpressionElementRole for case targets in case()
Mike Bayer [Thu, 4 Nov 2021 01:26:44 +0000 (21:26 -0400)] 
use ExpressionElementRole for case targets in case()

Fixed regression where the :func:`_sql.text` construct would no longer be
accepted as a target case in the "whens" list within a :func:`_sql.case`
construct. The regression appears related to an attempt to guard against
some forms of literal values that were considered to be ambiguous when
passed here; however, there's no reason the target cases shouldn't be
interpreted as open-ended SQL expressions just like anywhere else, and a
literal string or tuple will be converted to a bound parameter as would be
the case elsewhere.

Fixes: #7287
Change-Id: I75478adfa115f3292cb1362cc5b2fdf152b0ed6f

3 years agoadd missing info from groupby documentation
Federico Caselli [Wed, 3 Nov 2021 21:47:51 +0000 (22:47 +0100)] 
add missing info from groupby documentation

Change-Id: Icfaf242353c23a579fe79f9d72500a08d90fcb77
Signed-off-by: Federico Caselli <cfederico87@gmail.com>
3 years agoRevert "Gracefully degrade unsupported types with asyncpg"
mike bayer [Wed, 3 Nov 2021 15:13:22 +0000 (15:13 +0000)] 
Revert "Gracefully degrade unsupported types with asyncpg"

This reverts commit 96c294da8a50d692b3f0b8e508dbbca5d9c22f1b.

I have another approach that is more obvious, easier to override explicitly and also I can test it more easily.

Change-Id: I11a3be7700dbc6f25d436e450b6fb8e8f6c4fd16

3 years agoformatting updates
Mike Bayer [Wed, 3 Nov 2021 15:01:08 +0000 (11:01 -0400)] 
formatting updates

Change-Id: I7352bed0115b8fcdb4708e012d83e81d1ae494ed

3 years agoMerge "Gracefully degrade unsupported types with asyncpg" into main
mike bayer [Wed, 3 Nov 2021 14:50:36 +0000 (14:50 +0000)] 
Merge "Gracefully degrade unsupported types with asyncpg" into main

3 years agoMerge "Fixed issue in visit_on_duplicate_key_update within a composed expression...
mike bayer [Wed, 3 Nov 2021 14:49:20 +0000 (14:49 +0000)] 
Merge "Fixed issue in visit_on_duplicate_key_update within a composed expression" into main

3 years agoFixed issue in visit_on_duplicate_key_update within a composed expression
Cristian Sabaila [Wed, 3 Nov 2021 01:39:08 +0000 (21:39 -0400)] 
Fixed issue in visit_on_duplicate_key_update within a composed expression

Fixed issue in MySQL :meth:`_mysql.Insert.on_duplicate_key_update` which
would render the wrong column name when an expression were used in a VALUES
expression. Pull request courtesy Cristian Sabaila.

Fixes: #7281
Closes: #7285
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/7285
Pull-request-sha: 3e6ad6f2fecc6ae36a10a5a34b5d3d393483edbb

Change-Id: I83377c20eae6358fead9e7e361127938e538a71c

3 years agomap Float to asyncpg.FLOAT, test for infinity
Mike Bayer [Tue, 2 Nov 2021 22:19:35 +0000 (18:19 -0400)] 
map Float to asyncpg.FLOAT, test for infinity

Fixes: #7283
Change-Id: I5402a72617b7f9bc366d64bc5ce8669374839984

3 years agoGracefully degrade unsupported types with asyncpg
Gord Thompson [Tue, 2 Nov 2021 22:16:50 +0000 (16:16 -0600)] 
Gracefully degrade unsupported types with asyncpg

Fixes: #7284
Modify the on_connect() method of PGDialect_asyncpg to
gracefully degrade unsupported types instead of throwing a
ValueError. Useful for third-party dialects that derive
from PGDialect_asyncpg but whose databases do not support
all types (e.g., CockroachDB supports JSONB but not JSON).

Change-Id: Ibb7cc8c3de632d27b9716a93d83956a590b2a2b0

3 years agoMerge "ensure soft_close occurs for fetchmany with server side cursor" into main
mike bayer [Tue, 2 Nov 2021 21:42:05 +0000 (21:42 +0000)] 
Merge "ensure soft_close occurs for fetchmany with server side cursor" into main

3 years agoMerge "First round of removal of python 2" into main
mike bayer [Tue, 2 Nov 2021 20:51:28 +0000 (20:51 +0000)] 
Merge "First round of removal of python 2" into main

3 years agoensure soft_close occurs for fetchmany with server side cursor
Mike Bayer [Tue, 2 Nov 2021 14:58:01 +0000 (10:58 -0400)] 
ensure soft_close occurs for fetchmany with server side cursor

Fixed regression where the :meth:`_engine.CursorResult.fetchmany` method
would fail to autoclose a server-side cursor (i.e. when ``stream_results``
or ``yield_per`` is in use, either Core or ORM oriented results) when the
results were fully exhausted.

All :class:`_result.Result` objects will now consistently raise
:class:`_exc.ResourceClosedError` if they are used after a hard close,
which includes the "hard close" that occurs after calling "single row or
value" methods like :meth:`_result.Result.first` and
:meth:`_result.Result.scalar`. This was already the behavior of the most
common class of result objects returned for Core statement executions, i.e.
those based on :class:`_engine.CursorResult`, so this behavior is not new.
However, the change has been extended to properly accommodate for the ORM
"filtering" result objects returned when using 2.0 style ORM queries,
which would previously behave in "soft closed" style of returning empty
results, or wouldn't actually "soft close" at all and would continue
yielding from the underlying cursor.

As part of this change, also added :meth:`_result.Result.close` to the base
:class:`_result.Result` class and implemented it for the filtered result
implementations that are used by the ORM, so that it is possible to call
the :meth:`_engine.CursorResult.close` method on the underlying
:class:`_engine.CursorResult` when the the ``yield_per`` execution option
is in use to close a server side cursor before remaining ORM results have
been fetched. This was again already available for Core result sets but the
change makes it available for 2.0 style ORM results as well.

Fixes: #7274
Change-Id: Id4acdfedbcab891582a7f8edd2e2e7d20d868e53

3 years agoFixes: #7278
jonathan vanasco [Tue, 2 Nov 2021 17:35:44 +0000 (13:35 -0400)] 
Fixes: #7278
Correct a typo in the 1.4 changelog

Change-Id: Ib7d1fc75957ad2efb348fee9d862d75b06dbafef

3 years agouse full context manager flow for future.Engine.begin()
Mike Bayer [Mon, 1 Nov 2021 20:36:51 +0000 (16:36 -0400)] 
use full context manager flow for future.Engine.begin()

Fixed issue in future :class:`_future.Engine` where calling upon
:meth:`_future.Engine.begin` and entering the context manager would not
close the connection if the actual BEGIN operation failed for some reason,
such as an event handler raising an exception; this use case failed to be
tested for the future version of the engine. Note that the "future" context
managers which handle ``begin()`` blocks in Core and ORM don't actually run
the "BEGIN" operation until the context managers are actually entered. This
is different from the legacy version which runs the "BEGIN" operation up
front.

Fixes: #7272
Change-Id: I9667ac0861a9e007c4b3dfcf0fcf0829038a8711

3 years agoFirst round of removal of python 2
Federico Caselli [Sat, 30 Oct 2021 20:00:25 +0000 (22:00 +0200)] 
First round of removal of python 2

References: #4600
Change-Id: I61e35bc93fe95610ae75b31c18a3282558cd4ffe

3 years agoMerge "remove case_sensitive create_engine parameter" into main
mike bayer [Mon, 1 Nov 2021 19:07:43 +0000 (19:07 +0000)] 
Merge "remove case_sensitive create_engine parameter" into main

3 years agoremove case_sensitive create_engine parameter
Mike Bayer [Sun, 31 Oct 2021 16:54:23 +0000 (12:54 -0400)] 
remove case_sensitive create_engine parameter

Removed the previously deprecated ``case_sensitive`` parameter from
:func:`_sa.create_engine`, which would impact only the lookup of string
column names in Core-only result set rows; it had no effect on the behavior
of the ORM. The effective behavior of what ``case_sensitive`` refers
towards remains at its default value of ``True``, meaning that string names
looked up in ``row._mapping`` will match case-sensitively, just like any
other Python mapping.

Change-Id: I0dc4be3fac37d30202b1603db26fa10a110b618d

3 years agode-link LegacyRow, LegacyCursorResult
Mike Bayer [Mon, 1 Nov 2021 16:45:23 +0000 (12:45 -0400)] 
de-link LegacyRow, LegacyCursorResult

Change-Id: I4a9d210c3cb07fc1d59643463acef95f9cc9b12e

3 years agoMerge "Update psycopg2 dialect to use the DBAPI interface to execute two phase transa...
mike bayer [Mon, 1 Nov 2021 16:40:33 +0000 (16:40 +0000)] 
Merge "Update psycopg2 dialect to use the DBAPI interface to execute two phase transactions" into main

3 years agoRevise "literal parameters" FAQ section
Mike Bayer [Mon, 1 Nov 2021 16:06:32 +0000 (12:06 -0400)] 
Revise "literal parameters" FAQ section

based on feedback in #7271, the emphasis on TypeDecorator
as a solution to this problem is not very practical.  illustrate
a series of quick recipes that are useful for debugging purposes
to print out a repr() or simple stringify of a parameter
without the need to construct custom dialects or types.

Change-Id: I788ce1b5ea01d88dd0a22d03d06f35aabff5e5c8

3 years agoMerge "2.0 removals: LegacyRow, connectionless execution, close_with_result" into...
mike bayer [Sun, 31 Oct 2021 20:48:33 +0000 (20:48 +0000)] 
Merge "2.0 removals: LegacyRow, connectionless execution, close_with_result" into main

3 years ago2.0 removals: LegacyRow, connectionless execution, close_with_result
Mike Bayer [Sat, 30 Oct 2021 18:44:55 +0000 (14:44 -0400)] 
2.0 removals: LegacyRow, connectionless execution, close_with_result

in order to remove LegacyRow / LegacyResult, we have
to also lose close_with_result, which connectionless
execution relies upon.

also includes a new profiles.txt file that's all against
py310, as that's what CI is on now.  some result counts
changed by one function call which was enough to fail the
low-count result tests.

Replaces Connectable as the common interface between
Connection and Engine with EngineEventsTarget.  Engine
is no longer Connectable.  Connection and MockConnection
still are.

References: #7257
Change-Id: Iad5eba0313836d347e65490349a22b061356896a

3 years agoUpdate psycopg2 dialect to use the DBAPI interface to execute
Federico Caselli [Wed, 27 Oct 2021 20:52:39 +0000 (22:52 +0200)] 
Update psycopg2 dialect to use the DBAPI interface to execute
two phase transactions

Fixes: #7238
Change-Id: Ie4f5cf59d29b5bfc142ec2dfdecffb896ee7d708

3 years agoMerge "Remove deprecated dialects and drivers" into main
mike bayer [Sun, 31 Oct 2021 17:09:56 +0000 (17:09 +0000)] 
Merge "Remove deprecated dialects and drivers" into main

3 years agoRemove deprecated dialects and drivers
Federico Caselli [Sat, 30 Oct 2021 20:24:51 +0000 (22:24 +0200)] 
Remove deprecated dialects and drivers

Fixes: #7258
Change-Id: I3577f665eca04f2632b69bcb090f0a4ec9271db9

3 years agoThe ``has_table`` method now also checks views
Federico Caselli [Sun, 10 Oct 2021 08:41:13 +0000 (10:41 +0200)] 
The ``has_table`` method now also checks views

The :meth:`_engine.Inspector.has_table` method will now consistently check
for views of the given name as well as tables. Previously this behavior was
dialect dependent, with PostgreSQL, MySQL/MariaDB and SQLite supporting it,
and Oracle and SQL Server not supporting it. Third party dialects should
also seek to ensure their :meth:`_engine.Inspector.has_table` method
searches for views as well as tables for the given name.

Fixes: #7161
Change-Id: I9e523c76741b19596c81ef577dc6f0823e44183b

3 years agoremove ORM autocommit and public-facing subtransactions concept
Mike Bayer [Sun, 31 Oct 2021 00:45:26 +0000 (20:45 -0400)] 
remove ORM autocommit and public-facing subtransactions concept

In order to do LegacyRow we have to do Connection, which means
we lose close_with_result (hooray) which then means we
have to get rid of ORM session autocommit which relies on it, so
let's do that first.

Change-Id: I115f614733b1d0ba19f320ffa9a49f0d762db094

3 years agoMerge "initial 2.0 setup" into main
mike bayer [Sat, 30 Oct 2021 23:20:17 +0000 (23:20 +0000)] 
Merge "initial 2.0 setup" into main

3 years agoremove python2 from workflows
Federico Caselli [Sat, 30 Oct 2021 19:19:52 +0000 (21:19 +0200)] 
remove python2 from workflows

Change-Id: Ib2da811acbad291dc9bbe798c84f2309f5d0f21e

3 years agoinitial 2.0 setup
Mike Bayer [Thu, 11 Apr 2019 16:43:47 +0000 (12:43 -0400)] 
initial 2.0 setup

Adapted from 55e64f857daeb6057b85ff67297a774b when we
previously started a 2.0 branch.

Change-Id: Ib5af75df94b23104eebe0e918adcf979d798ea3b

3 years agowarnings removal, merge_result
Mike Bayer [Fri, 29 Oct 2021 21:36:26 +0000 (17:36 -0400)] 
warnings removal, merge_result

this is the last warning to remove.

Also fixes some mistakes I made with the new
Base20DeprecationWarning and LegacyAPIWarning classes created,
where functions in deprecations.py were still hardcoded to
RemovedIn20Warning.

Change-Id: I9a6045ac9b813fd2f9668c4bc518c46a7774c6ef

3 years agoMerge "warnings: session.autocommit, subtransactions" into main
mike bayer [Fri, 29 Oct 2021 21:56:38 +0000 (21:56 +0000)] 
Merge "warnings: session.autocommit, subtransactions" into main

3 years agoclarify order_by(None) for Core; improve wording
Mike Bayer [Fri, 29 Oct 2021 21:53:12 +0000 (17:53 -0400)] 
clarify order_by(None) for Core; improve wording

the order_by(None) convention was documented for orm.Query
but not Core select.

Change-Id: I0c1ad76c3eefba1cb54b1649cfd09169c17e2bba

3 years agowarnings: session.autocommit, subtransactions
Mike Bayer [Fri, 29 Oct 2021 15:12:13 +0000 (11:12 -0400)] 
warnings: session.autocommit, subtransactions

Change-Id: I7eb7c87c9656f8043ea90d53897958afad2b8fe9

3 years agowarnings: with_polymorphic()
Mike Bayer [Fri, 29 Oct 2021 16:10:37 +0000 (12:10 -0400)] 
warnings: with_polymorphic()

Also clarifies a behavior of None/False for the selectable
parameter to with_polymorphic()

Fixes: #7262
Change-Id: I58c4004e0af227d3995e9ae2461470440f97f252

3 years agoMerge "Modernize tests - session_query_get" into main
mike bayer [Fri, 29 Oct 2021 14:22:41 +0000 (14:22 +0000)] 
Merge "Modernize tests - session_query_get" into main

3 years agoModernize tests - session_query_get
Gord Thompson [Thu, 30 Sep 2021 23:39:05 +0000 (17:39 -0600)] 
Modernize tests - session_query_get

Co-authored-by: Mike Bayer <mike_mp@zzzcomputing.com>
Change-Id: I92013aad471baf32df1b51b756e86d95449b5cfd

3 years agowarnings: cascade_backrefs
Mike Bayer [Thu, 28 Oct 2021 21:10:15 +0000 (17:10 -0400)] 
warnings: cascade_backrefs

this one is a little different in that the thing changing
is the detection of a behavior, not an explicit API.

Change-Id: Id142943a2b901b39fe9053d0120c1e820dc1a6d0

3 years agoMerge "Improve array support on pg8000" into main
mike bayer [Thu, 28 Oct 2021 15:43:15 +0000 (15:43 +0000)] 
Merge "Improve array support on pg8000" into main

3 years agoImprove array support on pg8000
Federico Caselli [Tue, 16 Mar 2021 23:27:18 +0000 (00:27 +0100)] 
Improve array support on pg8000

References: #6023

Change-Id: I0f6cbc34b3c0bfc0b8c86b3ebe4531e23039b6c0

3 years agoMerge "deprecation warnings: with_parent, aliased, from_joinpoint" into main
mike bayer [Wed, 27 Oct 2021 17:11:18 +0000 (17:11 +0000)] 
Merge "deprecation warnings: with_parent, aliased, from_joinpoint" into main

3 years agoMerge "consider "inspect(_of_type)" to be the entity of a comparator" into main
mike bayer [Wed, 27 Oct 2021 15:56:16 +0000 (15:56 +0000)] 
Merge "consider "inspect(_of_type)" to be the entity of a comparator" into main

3 years agodeprecation warnings: with_parent, aliased, from_joinpoint
Mike Bayer [Tue, 26 Oct 2021 19:37:16 +0000 (15:37 -0400)] 
deprecation warnings: with_parent, aliased, from_joinpoint

most of the work for aliased / from_joinpoint has been done
already as I added all new tests for these and moved
most aliased/from_joinpoint to test/orm/test_deprecations.py
already

Change-Id: Ia23e332dec183de17b2fb9d89d946af8d5e89ae7

3 years agoMerge "Fixes: #5020" into main
mike bayer [Wed, 27 Oct 2021 15:23:35 +0000 (15:23 +0000)] 
Merge "Fixes: #5020" into main

3 years agoconsider "inspect(_of_type)" to be the entity of a comparator
Mike Bayer [Wed, 27 Oct 2021 15:14:50 +0000 (11:14 -0400)] 
consider "inspect(_of_type)" to be the entity of a comparator

Fixed 1.4 regression where :meth:`_orm.Query.filter_by` would not function
correctly when :meth:`_orm.Query.join` were joined to an entity which made
use of :meth:`_orm.PropComparator.of_type` to specify an aliased version of
the target entity. The issue also applies to future style ORM queries
constructed with :func:`_sql.select`.

Fixes: #7244
Change-Id: Ied28a03ce93201f932c7172d283cd4297be4d592

3 years agoMerge "Fixes: #4100" into main
mike bayer [Wed, 27 Oct 2021 14:22:14 +0000 (14:22 +0000)] 
Merge "Fixes: #4100" into main

3 years agoFixes: #5020
jonathan vanasco [Tue, 28 Sep 2021 13:15:37 +0000 (09:15 -0400)] 
Fixes: #5020
Add mike's example to docs

Change-Id: I96a79084cccca5c792bee697338422f3de0884fb

3 years agoMerge "add additional "oracle mode" reserved words" into main
mike bayer [Tue, 26 Oct 2021 21:20:45 +0000 (21:20 +0000)] 
Merge "add additional "oracle mode" reserved words" into main

3 years agoadd additional "oracle mode" reserved words
Mike Bayer [Tue, 26 Oct 2021 19:52:25 +0000 (15:52 -0400)] 
add additional "oracle mode" reserved words

despite mariadb's docs, the word "system" must be
quoted in plain mariadb 10.5, not sure if that's
"oracle mode" but it is > 10.3.   observed keystone
tests failing on a column of this name.

Fixes: #7167
Change-Id: I153b79809e7da007bcceecec96c1340d1641f0de

3 years agoMerge "Remove depractions:" into main
mike bayer [Tue, 26 Oct 2021 19:41:53 +0000 (19:41 +0000)] 
Merge "Remove depractions:" into main

3 years agoRemove depractions:
Federico Caselli [Sun, 24 Oct 2021 16:53:54 +0000 (18:53 +0200)] 
Remove depractions:

- Passing bind arguments to Session.execute
- This Session located a target engine via bound metadata

Change-Id: I916c8c4cff344ee5652fceac4dfd241dd8160f7b

3 years agodont pull filter_by from from_obj, entity is hopefully sufficient
Mike Bayer [Tue, 26 Oct 2021 15:28:42 +0000 (11:28 -0400)] 
dont pull filter_by from from_obj, entity is hopefully sufficient

Fixed 1.4 regression where :meth:`_orm.Query.filter_by` would not function
correctly on a :class:`_orm.Query` that was produced from
:meth:`_orm.Query.union`, :meth:`_orm.Query.from_self` or similar.

Fixes: #7239
Change-Id: I3a0c3fd71180b1bfb6bf855f436a29c729664082

3 years agoFixes: #4100
jonathan vanasco [Fri, 24 Sep 2021 18:55:59 +0000 (14:55 -0400)] 
Fixes: #4100
Add a warning, in two places, stating `with_for_update` will lock joinedload
tables, because at least one person did not expect the obvious to happen.

Also warn that eager loading techniques may not work with `with_for_update`
and combining the two is not officially supported or recommended.

Change-Id: Iedd609b56b3144d90a90fc2eea3cf5335a2d178a

3 years agoadd sections for ORM use with UNION
Mike Bayer [Tue, 26 Oct 2021 02:21:33 +0000 (22:21 -0400)] 
add sections for ORM use with UNION

this is a fairly non-obvious part of the new ORM
querying style and needs its own sections

Change-Id: Iacb176020d580066c1e0b7f2b40bfbbcb3587d76

3 years agowarnings: select_entity_from()
Mike Bayer [Fri, 22 Oct 2021 21:37:07 +0000 (17:37 -0400)] 
warnings: select_entity_from()

Change-Id: I8c259e61134c38a1fa907c308068337473c82914

3 years agodeprecation warnings: strings in loader options, join, with_parent
Mike Bayer [Wed, 20 Oct 2021 16:50:53 +0000 (12:50 -0400)] 
deprecation warnings: strings in loader options, join, with_parent

Repairs one in-library deprecation warning regarding
mapper propagation of options

raises maxfail to 250, as 25 is too low when we are trying
to address many errors at once.   the 25 was originally
due to the fact that our fixtures would be broken after
that many failures in most cases, which today should not
be the case nearly as often.

Change-Id: I26affddf42e2cae2aaf9561633e9b8cd431eb189

3 years agoadd full docs/notes for all TypeEngine/TypeDecorator interactions
Mike Bayer [Sun, 24 Oct 2021 00:36:41 +0000 (20:36 -0400)] 
add full docs/notes for all TypeEngine/TypeDecorator interactions

Added notes to all TypeEngine methods as to which should be
overridden by TypeDecorator implementations.  Made sure
docstrings are present for all TypeDecorator methods as some
were missing, and clarified which should be overridden, which
should not, as well as what phase each method is called within.

Change-Id: Ibd6e7fb0933ad3ca0927d8785d9087e3eddac90e
References: #7230

3 years agoMerge "use correct entity in path for aliased class relationship" into main
mike bayer [Fri, 22 Oct 2021 18:48:22 +0000 (18:48 +0000)] 
Merge "use correct entity in path for aliased class relationship" into main

3 years agouse correct entity in path for aliased class relationship
Mike Bayer [Fri, 22 Oct 2021 16:31:06 +0000 (12:31 -0400)] 
use correct entity in path for aliased class relationship

Fixed bug in "relationship to aliased class" feature introduced at
:ref:`relationship_aliased_class` where it was not possible to create a
loader strategy option targeting an attribute on the target using the
:func:`_orm.aliased` construct directly in a second loader option, such as
``selectinload(A.aliased_bs).joinedload(aliased_b.cs)``, without explicitly
qualifying using :meth:`_orm.PropComparator.of_type` on the preceding
element of the path. Additionally, targeting the non-aliased class directly
would be accepted (inappropriately), but would silently fail, such as
``selectinload(A.aliased_bs).joinedload(B.cs)``; this now raises an error
referring to the typing mismatch.

Fixes: #7224
Change-Id: I40857c7275667dcb64f1d1fd0c8072e48758e678

3 years agoApply minor update to async_orm example
Gord Thompson [Wed, 20 Oct 2021 21:15:37 +0000 (15:15 -0600)] 
Apply minor update to async_orm example

- Fixed import to avoid MovedIn20Warning.

- Separated drop_all() and create_all() into separate
context managers to avoid dropping and creating the
same table within the same transaction. Apparently
some databases (e.g., CockroachDB) don't allow that.

Change-Id: Id26d7d719871a75ffb78c6af589658666802fb2f

3 years agoFix wheels generation for python 3.10+
Federico Caselli [Wed, 20 Oct 2021 20:28:55 +0000 (22:28 +0200)] 
Fix wheels generation for python 3.10+

Change-Id: I0124bb1bb164fbf2eadf41be066773a2e316b3fe

3 years agoMerge "fix: Update reserved words list of MySQL / MariaDB dialect" into main
mike bayer [Wed, 20 Oct 2021 17:51:20 +0000 (17:51 +0000)] 
Merge "fix: Update reserved words list of MySQL / MariaDB dialect" into main

3 years agofix: Update reserved words list of MySQL / MariaDB dialect
Kevin Kirsche [Tue, 19 Oct 2021 21:22:03 +0000 (17:22 -0400)] 
fix: Update reserved words list of MySQL / MariaDB dialect

Reorganized the list of reserved words into two separate lists, one for
MySQL and one for MariaDB, so that these diverging sets of words can be
managed more accurately; adjusted the MySQL/MariaDB dialect to switch among
these lists based on either explicitly configured or
server-version-detected "MySQL" or "MariaDB" backend. Added all current
reserved words through MySQL 8 and current MariaDB versions including
recently added keywords like "lead" . Pull request courtesy Kevin Kirsche.

1. Move reserved words to it's own file.
2. Add missing reserved words from https://mariadb.com/kb/en/reserved-words/
    * Note: this only adds MariaDB though links to MySQL, it also does not
      include the reserved words for Oracle mode, as listed in the link.

Fixes: #7167
Supercedes: #7197
Closes: #7207
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/7207
Pull-request-sha: 5a682e331069520ccad9e6bf3cc5e4a77a889ef0

Change-Id: Ib25be8148568899f56b5c9b42d4f530ade8a04e3

3 years agoMerge "Add missing deprecation to ``MetaData.bind`` argument" into main
mike bayer [Wed, 20 Oct 2021 16:28:16 +0000 (16:28 +0000)] 
Merge "Add missing deprecation to ``MetaData.bind`` argument" into main

3 years agoremove _resolve_label and related attributes
Mike Bayer [Mon, 18 Oct 2021 20:35:21 +0000 (16:35 -0400)] 
remove _resolve_label and related attributes

these seem to date back to 0.9 and revs like #3148 but none
of it seems to be affecting things now, try removing it all
and seeing what fails.

we've noted that _resolve_label does not appear to be
needed, however allow_label_resolve remains relevant both
for non-column elements like text() as well as that it is
used explicitly by the joined eager loader.

Change-Id: Ic8a5d8001ef2a4133360f51a92a6f7b0cc389095

3 years agoVersion 1.4.27 placeholder
Mike Bayer [Tue, 19 Oct 2021 21:08:18 +0000 (17:08 -0400)] 
Version 1.4.27 placeholder

3 years ago- 1.4.26 rel_1_4_26
Mike Bayer [Tue, 19 Oct 2021 21:03:34 +0000 (17:03 -0400)] 
- 1.4.26

3 years agotypo fix
Mike Bayer [Tue, 19 Oct 2021 21:01:13 +0000 (17:01 -0400)] 
typo fix

Change-Id: Ic4a334e48e652d5bd561a04cc11c35433a429188

3 years agorevise _get_crud_kv_pairs from 18b4a3437
Mike Bayer [Tue, 19 Oct 2021 20:13:51 +0000 (16:13 -0400)] 
revise _get_crud_kv_pairs from 18b4a3437

submitted 18b4a3437a60fbfa0c25287d9a3b83d7c9d4f762 too soon
as @CaselIT found a great refinement for this method.

Change-Id: Id3818aa6bdc5938fc2f1395558aa8ead8ea6b319

3 years agoprocess bulk_update_tuples before cache key or compilation
Mike Bayer [Tue, 19 Oct 2021 18:07:32 +0000 (14:07 -0400)] 
process bulk_update_tuples before cache key or compilation

Fixed regression where the use of a :class:`_orm.hybrid_property` attribute
or a mapped :func:`_orm.composite` attribute as a key passed to the
:meth:`_dml.Update.values` method for an ORM-enabled :class:`_dml.Update`
statement, as well as when using it via the legacy
:meth:`_orm.Query.update` method, would be processed for incoming
ORM/hybrid/composite values within the compilation stage of the UPDATE
statement, which meant that in those cases where caching occurred,
subsequent invocations of the same statement would no longer receive the
correct values. This would include not only hybrids that use the
:meth:`_orm.hybrid_property.update_expression` method, but any use of a
plain hybrid attribute as well. For composites, the issue instead caused a
non-repeatable cache key to be generated, which would break caching and
could fill up the statement cache with repeated statements.

The :class:`_dml.Update` construct now handles the processing of key/value
pairs passed to :meth:`_dml.Update.values` and
:meth:`_dml.Update.ordered_values` up front when the construct is first
generated, before the cache key has been generated so that the key/value
pairs are processed each time, and so that the cache key is generated
against the individual column/value pairs that will ultimately be
used in the statement.

Fixes: #7209
Change-Id: I08f248d1d60ea9690b014c21439b775d951fb9e5

3 years agochangelog updates
Mike Bayer [Tue, 19 Oct 2021 13:57:27 +0000 (09:57 -0400)] 
changelog updates

Change-Id: I527dd71eb90b7c3e9e773f7c3ba79374806ffad7

3 years agoMerge "use coercions for label element, ensure propagate_attrs" into main
mike bayer [Mon, 18 Oct 2021 20:40:07 +0000 (20:40 +0000)] 
Merge "use coercions for label element, ensure propagate_attrs" into main

3 years agoMerge "Modernize tests - query_from_self" into main
mike bayer [Mon, 18 Oct 2021 20:22:31 +0000 (20:22 +0000)] 
Merge "Modernize tests - query_from_self" into main

3 years agoMerge "vendor asynccontextmanager outside of greenlet dependency" into main
mike bayer [Mon, 18 Oct 2021 20:00:11 +0000 (20:00 +0000)] 
Merge "vendor asynccontextmanager outside of greenlet dependency" into main

3 years agouse coercions for label element, ensure propagate_attrs
Mike Bayer [Mon, 18 Oct 2021 19:43:27 +0000 (15:43 -0400)] 
use coercions for label element, ensure propagate_attrs

Fixed bug where the ORM "plugin", necessary for features such as
:func:`_orm.with_loader_criteria` to work correctly, would not be applied
to a :func:`_sql.select` which queried from an ORM column expression if it
made use of the :meth:`_sql.ColumnElement.label` modifier.

Fixes: #7205
Change-Id: I72b84442e14df8b5ece33916f3c51ca3f358864b

3 years agoAdd missing deprecation to ``MetaData.bind`` argument
Federico Caselli [Sat, 16 Oct 2021 17:31:45 +0000 (19:31 +0200)] 
Add missing deprecation to ``MetaData.bind`` argument

Fixes: #7194
Change-Id: I9dacbb562aa55d9c408a43f8e57050db31dc8bfc

3 years agoAdd Firebolt to table of external dialects (#7206)
Kevin Marr [Mon, 18 Oct 2021 19:39:06 +0000 (14:39 -0500)] 
Add Firebolt to table of external dialects (#7206)

We recently built an external dialect for our data warehouse, Firebolt, and would like it to be listed in the documentation. Thanks!

3 years agovendor asynccontextmanager outside of greenlet dependency
Mike Bayer [Mon, 18 Oct 2021 18:31:40 +0000 (14:31 -0400)] 
vendor asynccontextmanager outside of greenlet dependency

Fixed installation issue where the ``sqlalchemy.dialects.mysql`` module
would not be importable if "greenlet" were not installed.

This was actually breaking the sphinx build for when greenlet
were not installed.

Fixes: #7204
Change-Id: Ia351c124a2f1ca44bafe20a97267ce20cb55808f

3 years agoDocument dynamic for asyncio
Federico Caselli [Thu, 30 Sep 2021 21:26:33 +0000 (23:26 +0200)] 
Document dynamic for asyncio

Change-Id: Ieedc748587288c30630a2453f20eb72001cb78ab
(cherry picked from commit aeb61f4bb7d0b6d3d550d0206046208d6d4d7e91)

3 years agoModernize tests - query_from_self
Gord Thompson [Sun, 17 Oct 2021 17:52:32 +0000 (11:52 -0600)] 
Modernize tests - query_from_self

Change-Id: Ic14fdb5b6c49b668698de146bbafbd996da3d843