Subject: CVS commit: pkgsrc/databases/py-sqlalchemy
From: Adam Ciarcinski
Date: 2020-04-10 09:58:17
Message id: 20200410075817.3067AFB27@cvs.NetBSD.org

Log Message:
py-sqlalchemy: updated to 1.3.16

1.3.16

orm

[orm] [bug]
Fixed bug in orm.selectinload() loading option where two or more loaders that \ 
represent different relationships with the same string key name as referenced \ 
from a single orm.with_polymorphic() construct with multiple subclass mappers \ 
would fail to invoke each subqueryload separately, instead making use of a \ 
single string-based slot that would prevent the other loaders from being \ 
invoked.

[orm] [bug]
Fixed issue where a lazyload that uses session-local “get” against a target \ 
many-to-one relationship where an object with the correct primary key is \ 
present, however it’s an instance of a sibling class, does not correctly \ 
return None as is the case when the lazy loader actually emits a load for that \ 
row.

[orm] [performance]
Modified the queries used by subqueryload and selectinload to no longer ORDER BY \ 
the primary key of the parent entity; this ordering was there to allow the rows \ 
as they come in to be copied into lists directly with a minimal level of \ 
Python-side collation. However, these ORDER BY clauses can negatively impact the \ 
performance of the query as in many scenarios these columns are derived from a \ 
subquery or are otherwise not actual primary key columns such that SQL planners \ 
cannot make use of indexes. The Python-side collation uses the native \ 
itertools.group_by() to collate the incoming rows, and has been modified to \ 
allow multiple row-groups-per-parent to be assembled together using \ 
list.extend(), which should still allow for relatively fast Python-side \ 
performance. There will still be an ORDER BY present for a relationship that \ 
includes an explicit order_by parameter, however this is the only ORDER BY that \ 
will be added to the query for both kinds of loading.

orm declarative

[bug] [declarative] [orm]
The string argument accepted as the first positional argument by the \ 
relationship() function when using the Declarative API is no longer interpreted \ 
using the Python eval() function; instead, the name is dot separated and the \ 
names are looked up directly in the name resolution dictionary without treating \ 
the value as a Python expression. However, passing a string argument to the \ 
other relationship() parameters that necessarily must accept Python expressions \ 
will still use eval(); the documentation has been clarified to ensure that there \ 
is no ambiguity that this is in use.
See also
Evaluation of relationship arguments - details on string evaluation

sql

[sql] [types]
Add ability to literal compile a DateTime, Date or :class:”Time” when using \ 
the string dialect for debugging purposes. This change does not impact real \ 
dialect implementation that retain their current behavior.

schema

[schema] [reflection]
Added support for reflection of “computed” columns, which are now returned \ 
as part of the structure returned by Inspector.get_columns(). When reflecting \ 
full Table objects, computed columns will be represented using the Computed \ 
construct.

postgresql

[postgresql] [bug]
Fixed issue where a “covering” index, e.g. those which have an INCLUDE \ 
clause, would be reflected including all the columns in INCLUDE clause as \ 
regular columns. A warning is now emitted if these additional columns are \ 
detected indicating that they are currently ignored. Note that full support for \ 
“covering” indexes is part of 4458. Pull request courtesy Marat \ 
Sharafutdinov.

mysql

[mysql] [bug]
Fixed issue in MySQL dialect when connecting to a psuedo-MySQL database such as \ 
that provided by ProxySQL, the up front check for isolation level when it \ 
returns no row will not prevent the dialect from continuing to connect. A \ 
warning is emitted that the isolation level could not be detected.

sqlite

[sqlite] [usecase]
Implemented AUTOCOMMIT isolation level for SQLite when using pysqlite.

mssql

[mssql] [usecase] [mysql] [oracle]
Added support for ColumnOperators.is_distinct_from() and \ 
ColumnOperators.isnot_distinct_from() to SQL Server, MySQL, and Oracle.

oracle

[oracle] [usecase]
Implemented AUTOCOMMIT isolation level for Oracle when using cx_Oracle. Also \ 
added a fixed default isolation level of READ COMMITTED for Oracle.

[oracle] [bug] [reflection]
Fixed regression / incorrect fix caused by fix for 5146 where the Oracle dialect \ 
reads from the “all_tab_comments” view to get table comments but fails to \ 
accommodate for the current owner of the table being requested, causing it to \ 
read the wrong comment if multiple tables of the same name exist in multiple \ 
schemas.

misc

[bug] [tests]
Fixed an issue that prevented the test suite from running with the recently \ 
released py.test 5.4.0.

[enum] [types]
The Enum type now supports the parameter Enum.length to specify the length of \ 
the VARCHAR column to create when using non native enums by setting \ 
Enum.native_enum to False

[installer]
Ensured that the “pyproject.toml” file is not included in builds, as the \ 
presence of this file indicates to pip that a pep-517 installation process \ 
should be used. As this mode of operation appears to be not well supported by \ 
current tools / distros, these problems are avoided within the scope of \ 
SQLAlchemy installation by omitting the file.

1.3.15

orm

[orm] [bug]
Adjusted the error message emitted by Query.join() when a left hand side can’t \ 
be located that the Query.select_from() method is the best way to resolve the \ 
issue. Also, within the 1.3 series, used a deterministic ordering when \ 
determining the FROM clause from a given column entity passed to Query so that \ 
the same expression is determined each time.

[orm] [bug]
Fixed regression in 1.3.14 due to 4849 where a sys.exc_info() call failed to be \ 
invoked correctly when a flush error would occur. Test coverage has been added \ 
for this exception case.

1.3.14

general

[general] [bug] [py3k]
Applied an explicit “cause” to most if not all internally raised exceptions \ 
that are raised from within an internal exception catch, to avoid misleading \ 
stacktraces that suggest an error within the handling of an exception. While it \ 
would be preferable to suppress the internally caught exception in the way that \ 
the __suppress_context__ attribute would, there does not as yet seem to be a way \ 
to do this without suppressing an enclosing user constructed context, so for now \ 
it exposes the internally caught exception as the cause so that full information \ 
about the context of the error is maintained.

orm

[orm] [usecase]
Added a new flag InstanceEvents.restore_load_context and \ 
SessionEvents.restore_load_context which apply to the InstanceEvents.load(), \ 
InstanceEvents.refresh(), and SessionEvents.loaded_as_persistent() events, which \ 
when set will restore the “load context” of the object after the event hook \ 
has been called. This ensures that the object remains within the “loader \ 
context” of the load operation that is already ongoing, rather than the object \ 
being transferred to a new load context due to refresh operations which may have \ 
occurred in the event. A warning is now emitted when this condition occurs, \ 
which recommends use of the flag to resolve this case. The flag is “opt-in” \ 
so that there is no risk introduced to existing applications.
The change additionally adds support for the raw=True flag to session lifecycle \ 
events.

[orm] [bug]
Fixed regression caused in 1.3.13 by 5056 where a refactor of the ORM path \ 
registry system made it such that a path could no longer be compared to an empty \ 
tuple, which can occur in a particular kind of joined eager loading path. The \ 
“empty tuple” use case has been resolved so that the path registry is \ 
compared to a path registry in all cases; the PathRegistry object itself now \ 
implements __eq__() and __ne__() methods which will take place for all equality \ 
comparisons and continue to succeed in the not anticipated case that a non- \ 
PathRegistry object is compared, while emitting a warning that this object \ 
should not be the subject of the comparison.

[orm] [bug]
Setting a relationship to viewonly=True which is also the target of a \ 
back_populates or backref configuration will now emit a warning and eventually \ 
be disallowed. back_populates refers specifically to mutation of an attribute or \ 
collection, which is disallowed when the attribute is subject to viewonly=True. \ 
The viewonly attribute is not subject to persistence behaviors which means it \ 
will not reflect correct results when it is locally mutated.

[orm] [bug]
Fixed an additional regression in the same area as that of 5080 introduced in \ 
1.3.0b3 via 4468 where the ability to create a joined option across a \ 
with_polymorphic() into a relationship against the base class of that \ 
with_polymorphic, and then further into regular mapped relationships would fail \ 
as the base class component would not add itself to the load path in a way that \ 
could be located by the loader strategy. The changes applied in 5080 have been \ 
further refined to also accommodate this scenario.

engine

[engine] [bug]
Expanded the scope of cursor/connection cleanup when a statement is executed to \ 
include when the result object fails to be constructed, or an \ 
after_cursor_execute() event raises an error, or autocommit / autoclose fails. \ 
This allows the DBAPI cursor to be cleaned up on failure and for connectionless \ 
execution allows the connection to be closed out and returned to the connection \ 
pool, where previously it waiting until garbage collection would trigger a pool \ 
return.

sql

[sql] [bug] [postgresql]
Fixed bug where a CTE of an INSERT/UPDATE/DELETE that also uses RETURNING could \ 
then not be SELECTed from directly, as the internal state of the compiler would \ 
try to treat the outer SELECT as a DELETE statement itself and access \ 
nonexistent state.

postgresql

[postgresql] [bug]
Fixed issue where the “schema_translate_map” feature would not work with a \ 
PostgreSQL native enumeration type (i.e. Enum, postgresql.ENUM) in that while \ 
the “CREATE TYPE” statement would be emitted with the correct schema, the \ 
schema would not be rendered in the CREATE TABLE statement at the point at which \ 
the enumeration was referenced.

[postgresql] [bug] [reflection]
Fixed bug where PostgreSQL reflection of CHECK constraints would fail to parse \ 
the constraint if the SQL text contained newline characters. The regular \ 
expression has been adjusted to accommodate for this case. Pull request courtesy \ 
Eric Borczuk.

mysql

[mysql] [bug]
Fixed issue in MySQL mysql.Insert.on_duplicate_key_update() construct where \ 
using a SQL function or other composed expression for a column argument would \ 
not properly render the VALUES keyword surrounding the column itself.

mssql

[mssql] [bug]
Fixed issue where the mssql.DATETIMEOFFSET type would not accommodate for the \ 
None value, introduced as part of the series of fixes for this type first \ 
introduced in 4983, 5045. Additionally, added support for passing a \ 
backend-specific date formatted string through this type, as is typically \ 
allowed for date/time types on most other DBAPIs.

oracle

[oracle] [bug]
Fixed a reflection bug where table comments could only be retrieved for tables \ 
actually owned by the user but not for tables visible to the user but owned by \ 
someone else. Pull request courtesy Dave Hirschfeld.

misc

[usecase] [ext]
Added keyword arguments to the MutableList.sort() function so that a key \ 
function as well as the “reverse” keyword argument can be provided.

[bug] [performance]
Revised an internal change to the test system added as a result of 5085 where a \ 
testing-related module per dialect would be loaded unconditionally upon making \ 
use of that dialect, pulling in SQLAlchemy’s testing framework as well as the \ 
ORM into the module import space. This would only impact initial startup time \ 
and memory to a modest extent, however it’s best that these additional modules \ 
aren’t reverse-dependent on straight Core usage.

[bug] [installation]
Vendored the inspect.formatannotation function inside of sqlalchemy.util.compat, \ 
which is needed for the vendored version of inspect.formatargspec. The function \ 
is not documented in cPython and is not guaranteed to be available in future \ 
Python versions.

Files:
RevisionActionfile
1.61modifypkgsrc/databases/py-sqlalchemy/Makefile
1.19modifypkgsrc/databases/py-sqlalchemy/PLIST
1.55modifypkgsrc/databases/py-sqlalchemy/distinfo