1.4.22
Released: July 21, 2021
orm
-
[orm] [bug] Fixed issue in new
_schema.Table.table_valued()
method where the
resulting_sql.TableValuedColumn
construct would not respond
correctly to alias adaptation as is used throughout the ORM, such as for
eager loading, polymorphic loading, etc.References: #6775
-
[orm] [bug] Fixed issue where usage of the
_result.Result.unique()
method with an
ORM result that included column expressions with unhashable types, such as
JSON
orARRAY
using non-tuples would silently fall back to using
theid()
function, rather than raising an error. This now raises an
error when the_result.Result.unique()
method is used in a 2.0 style
ORM query. Additionally, hashability is assumed to be True for result
values of unknown type, such as often happens when using SQL functions of
unknown return type; if values are truly not hashable then thehash()
itself will raise.For legacy ORM queries, since the legacy
_orm.Query
object
uniquifies in all cases, the old rules remain in place, which is to use
id()
for result values of unknown type as this legacy uniquing is
mostly for the purpose of uniquing ORM entities and not column values.References: #6769
-
[orm] [bug] Fixed an issue where clearing of mappers during things like test suite
teardowns could cause a "dictionary changed size" warning during garbage
collection, due to iteration of a weak-referencing dictionary. Alist()
has been applied to prevent concurrent GC from affecting this operation.References: #6771
-
[orm] [bug] [regression] Fixed critical caching issue where the ORM's persistence feature using
INSERT..RETURNING would cache an incorrect query when mixing the "bulk
save" and standard "flush" forms of INSERT.References: #6793
engine
-
[engine] [bug] Added some guards against
KeyError
in the event system to accommodate
the case that the interpreter is shutting down at the same time
_engine.Engine.dispose()
is being called, which would cause stack
trace warnings.References: #6740
sql
-
[sql] [bug] Fixed issue where use of the
_sql.case.whens
parameter passing
a dictionary positionally and not as a keyword argument would emit a 2.0
deprecation warning, referring to the deprecation of passing a list
positionally. The dictionary format of "whens", passed positionally, is
still supported and was accidentally marked as deprecated.References: #6786
-
[sql] [bug] Fixed issue where type-specific bound parameter handlers would not be
called upon in the case of using the_sql.Insert.values()
method with
the PythonNone
value; in particular, this would be noticed when using
the_types.JSON
datatype as well as related PostgreSQL specific
types such as_postgresql.JSONB
which would fail to encode the
PythonNone
value into JSON null, however the issue was generalized to
any bound parameter handler in conjunction with this specific method of
_sql.Insert
.References: #6770