2020-12-18 09:19:28 by Adam Ciarcinski | Files touched by this commit (2) | |
Log message:
py-sqlalchemy: updated to 1.3.21
1.3.21
orm
[orm] [bug]
Added a comprehensive check and an informative error message for the case where \
a mapped class, or a string mapped class name, is passed to \
relationship.secondary. This is an extremely common error which warrants a clear \
message.
Additionally, added a new rule to the class registry resolution such that with \
regards to the relationship.secondary parameter, if a mapped class and its table \
are of the identical string name, the Table will be favored when resolving this \
parameter. In all other cases, the class continues to be favored if a class and \
table share the identical name.
[orm] [bug]
Fixed bug in Query.update() where objects in the _ormsession.Session that were \
already expired would be unnecessarily SELECTed individually when they were \
refreshed by the “evaluate”synchronize strategy.
[orm] [bug]
Fixed bug involving the restore_load_context option of ORM events such as \
InstanceEvents.load() such that the flag would not be carried along to \
subclasses which were mapped after the event handler were first established.
sql
[sql] [bug]
A warning is emmitted if a returning() method such as Insert.returning() is \
called multiple times, as this does not yet support additive operation. Version \
1.4 will support additive operation for this. Additionally, any combination of \
the Insert.returning() and ValuesBase.return_defaults() methods now raises an \
error as these methods are mutually exclusive; previously the operation would \
fail silently.
[sql] [bug]
Fixed structural compiler issue where some constructs such as MySQL / PostgreSQL \
“on conflict / on duplicate key” would rely upon the state of the Compiler \
object being fixed against their statement as the top level statement, which \
would fail in cases where those statements are branched from a different \
context, such as a DDL construct linked to a SQL statement.
postgresql
[postgresql] [usecase]
Added new parameter ExcludeConstraint.ops to the ExcludeConstraint object, to \
support operator class specification with this constraint. Pull request courtesy \
Alon Menczer.
[postgresql] [bug] [mysql]
Fixed regression introduced in 1.3.2 for the PostgreSQL dialect, also copied out \
to the MySQL dialect’s feature in 1.3.18, where usage of a non Table construct \
such as text() as the argument to Select.with_for_update.of would fail to be \
accommodated correctly within the PostgreSQL or MySQL compilers.
mysql
[mysql] [bug] [reflection]
Fixed issue where reflecting a server default on MariaDB only that contained a \
decimal point in the value would fail to be reflected correctly, leading towards \
a reflected table that lacked any server default.
[mysql] [sql]
Added missing keywords to the RESERVED_WORDS list for the MySQL dialect: action, \
level, mode, status, text, time. Pull request courtesy Oscar Batori.
sqlite
[sqlite] [usecase]
Added sqlite_with_rowid=False dialect keyword to enable creating tables as \
CREATE TABLE … WITHOUT ROWID. Patch courtesy Sean Anderson.
mssql
[mssql] [bug]
Fixed bug where a CREATE INDEX statement was rendered incorrectly when both \
mssql-include and mssql_where were specified. Pull request courtesy @Adiorz.
[mssql] [bug]
Added SQL Server code “01000” to the list of disconnect codes.
[mssql] [reflection] [sqlite]
Fixed issue with composite primary key columns not being reported in the correct \
order. Patch courtesy @fulpm.
oracle
[oracle] [usecase]
Implemented support for the SERIALIZABLE isolation level for Oracle databases, \
as well as a real implementation for Connection.get_isolation_level().
|
2020-10-21 10:58:38 by Adam Ciarcinski | Files touched by this commit (3) | |
Log message:
py-sqlalchemy: updated to 1.3.20
1.3.20
Released: October 12, 2020
orm
[orm] [bug]
An ArgumentError with more detail is now raised if the target parameter for \
Query.join() is set to an unmapped object. Prior to this change a less detailed \
AttributeError was raised. Pull request courtesy Ramon Williams.
[orm] [bug]
Fixed issue where using a loader option against a string attribute name that is \
not actually a mapped attribute, such as a plain Python descriptor, would raise \
an uninformative AttributeError; a descriptive error is now raised.
engine
[engine] [bug]
Fixed issue where a non-string object sent to SQLAlchemyError or a subclass, as \
occurs with some third party dialects, would fail to stringify correctly. Pull \
request courtesy Andrzej Bartosiński.
[engine] [bug]
Repaired a function-level import that was not using SQLAlchemy’s standard \
late-import system within the sqlalchemy.exc module.
sql
[sql] [bug]
Fixed issue where the pickle.dumps() operation against Over construct would \
produce a recursion overflow.
[sql] [bug]
Fixed bug where an error was not raised in the case where a column() were added \
to more than one table() at a time. This raised correctly for the Column and \
Table objects. An ArgumentError is now raised when this occurs.
postgresql
[postgresql] [usecase]
The psycopg2 dialect now support PostgreSQL multiple host connections, by \
passing host/port combinations to the query string. Pull request courtesy Ramon \
Williams.
See also
Specfiying multiple fallback hosts
[postgresql] [bug]
Adjusted the Comparator.any() and Comparator.all() methods to implement a \
straight “NOT” operation for negation, rather than negating the comparison \
operator.
[postgresql] [bug]
Fixed issue where the ENUM type would not consult the schema translate map when \
emitting a CREATE TYPE or DROP TYPE during the test to see if the type exists or \
not. Additionally, repaired an issue where if the same enum were encountered \
multiple times in a single DDL sequence, the “check” query would run \
repeatedly rather than relying upon a cached value.
mysql
[mysql] [usecase]
Adjusted the MySQL dialect to correctly parenthesize functional index \
expressions as accepted by MySQL 8. Pull request courtesy Ramon Williams.
[mysql] [bug]
The “skip_locked” keyword used with with_for_update() will emit a warning \
when used on MariaDB backends, and will then be ignored. This is a deprecated \
behavior that will raise in SQLAlchemy 1.4, as an application that requests \
“skip locked” is looking for a non-blocking operation which is not available \
on those backends.
[mysql] [bug]
Fixed bug where an UPDATE statement against a JOIN using MySQL multi-table \
format would fail to include the table prefix for the target table if the \
statement had no WHERE clause, as only the WHERE clause were scanned to detect a \
“multi table update” at that particular point. The target is now also \
scanned if it’s a JOIN to get the leftmost table as the primary table and the \
additional entries as additional FROM entries.
[mysql] [change]
Add new MySQL reserved words: cube, lateral added in MySQL 8.0.1 and 8.0.14, \
respectively; this indicates that these terms will be quoted if used as table or \
column identifier names.
mssql
[mssql] [bug]
Fixed issue where a SQLAlchemy connection URI for Azure DW with \
authentication=ActiveDirectoryIntegrated (and no username+password) was not \
constructing the ODBC connection string in a way that was acceptable to the \
Azure DW instance.
misc
[bug] [pool]
Fixed issue where the following pool parameters were not being propagated to the \
new pool created when Engine.dispose() were called: pre_ping, use_lifo. \
Additionally the recycle and reset_on_return parameter is now propagated for the \
AssertionPool class.
[bug] [associationproxy] [ext]
An informative error is now raised when attempting to use an association proxy \
element as a plain column expression to be SELECTed from or used in a SQL \
function; this use case is not currently supported.
[bug] [tests]
Fixed incompatibilities in the test suite when running against Pytest 6.x.
|
2020-09-10 11:19:16 by Adam Ciarcinski | Files touched by this commit (2) | |
Log message:
py-sqlalchemy: updated to 1.3.19
1.3.19
orm
[orm] [usecase]
Adjusted the workings of the Mapper.all_orm_descriptors() accessor to represent \
the attributes in the order that they are located in a deterministic way, \
assuming the use of Python 3.6 or higher which maintains the sorting order of \
class attributes based on how they were declared. This sorting is not guaranteed \
to match the declared order of attributes in all cases however; see the method \
documentation for the exact scheme.
orm declarative
[usecase] [declarative] [orm]
The name of the virtual column used when using the AbstractConcreteBase and \
ConcreteBase classes can now be customized, to allow for models that have a \
column that is actually named type. Pull request courtesy Jesse-Bakker.
sql
[sql] [bug]
Repaired an issue where the “ORDER BY” clause rendering a label name rather \
than a complete expression, which is particularly important for SQL Server, \
would fail to occur if the expression were enclosed in a parenthesized grouping \
in some cases. This case has been added to test support. The change additionally \
adjusts the “automatically add ORDER BY columns when DISTINCT is present” \
behavior of ORM query, deprecated in 1.4, to more accurately detect column \
expressions that are already present.
[sql] [bug] [datatypes]
The LookupError message will now provide the user with up to four possible \
values that a column is constrained to via the Enum. Values longer than 11 \
characters will be truncated and replaced with ellipses. Pull request courtesy \
Ramon Williams.
[sql] [bug]
Fixed issue where the Connection.execution_options.schema_translate_map feature \
would not take effect when the Sequence.next_value() function function for a \
Sequence were used in the Column.server_default parameter and the create table \
DDL were emitted.
postgresql
[postgresql] [bug]
Fixed issue where the return type for the various RANGE comparison operators \
would itself be the same RANGE type rather than BOOLEAN, which would cause an \
undesirable result in the case that a TypeDecorator that defined \
result-processing behavior were in use. Pull request courtesy Jim Bosch.
mysql
[mysql] [usecase]
The MySQL dialect will render FROM DUAL for a SELECT statement that has no FROM \
clause but has a WHERE clause. This allows things like “SELECT 1 WHERE EXISTS \
(subquery)” kinds of queries to be used as well as other use cases.
[mysql] [bug]
Fixed an issue where CREATE TABLE statements were not specifying the COLLATE \
keyword correctly.
[mysql] [bug]
Added MariaDB code 1927 to the list of “disconnect” codes, as recent MariaDB \
versions apparently use this code when the database server was stopped.
sqlite
[sqlite] [bug] [mssql] [reflection]
Applied a sweep through all included dialects to ensure names that contain \
single or double quotes are properly escaped when querying system tables, for \
all Inspector methods that accept object names as an argument (e.g. table names, \
view names, etc). SQLite and MSSQL contained two quoting issues that were \
repaired.
mssql
[mssql] [bug] [sql]
Fixed bug where the mssql dialect incorrectly escaped object names that \
contained ‘]’ character(s).
misc
[usecase] [py3k]
Added a **kw argument to the DeclarativeMeta.__init__() method. This allows a \
class to support the PEP 487 metaclass hook __init_subclass__.
|
2020-07-08 16:40:26 by Adam Ciarcinski | Files touched by this commit (2) | |
Log message:
py-sqlalchemy: updated to 1.3.18
1.3.18
orm
[orm] [usecase]
Improve error message when using Query.filter_by() in a query where the first \
entity is not a mapped class.
[orm] [usecase]
Added a new parameter query_expression.default_expr to the query_expression() \
construct, which will be appled to queries automatically if the \
with_expression() option is not used. Pull request courtesy Haoyu Sun.
engine
[engine] [bug]
Further refinements to the fixes to the “reset” agent fixed in 5326, which \
now emits a warning when it is not being correctly invoked and corrects for the \
behavior. Additional scenarios have been identified and fixed where this warning \
was being emitted.
[engine] [bug]
Fixed issue in URL object where stringifying the object would not URL encode \
special characters, preventing the URL from being re-consumable as a real URL. \
Pull request courtesy Miguel Grinberg.
sql
[sql] [usecase]
Added a “.schema” parameter to the table() construct, allowing ad-hoc table \
expressions to also include a schema name. Pull request courtesy Dylan Modesitt.
[sql] [bug]
Correctly apply self_group in type_coerce element.
The type coerce element did not correctly apply grouping rules when using in an \
expression
[sql] [bug]
Added Select.with_hint() output to the generic SQL string that is produced when \
calling str() on a statement. Previously, this clause would be omitted under the \
assumption that it was dialect specific. The hint text is presented within \
brackets to indicate the rendering of such hints varies among backends.
[sql] [schema]
Introduce IdentityOptions to store common parameters for sequences and identity \
columns.
[sql] [change] [sybase]
Added .offset support to sybase dialect. Pull request courtesy Alan D. Snow.
schema
[schema] [bug]
Fixed issue where dialect_options were omitted when a database object (e.g., \
Table) was copied using tometadata().
mysql
[mysql] [usecase]
Implemented row-level locking support for mysql. Pull request courtesy Quentin \
Somerville.
sqlite
[sqlite] [usecase]
SQLite 3.31 added support for computed column. This change enables their support \
in SQLAlchemy when targeting SQLite.
[sqlite] [bug]
Added “exists” to the list of reserved words for SQLite so that this word \
will be quoted when used as a label or column name. Pull request courtesy \
Thodoris Sotiropoulos.
mssql
[mssql] [bug]
Refined the logic used by the SQL Server dialect to interpret multi-part schema \
names that contain many dots, to not actually lose any dots if the name does not \
have bracking or quoting used, and additionally to support a “dbname” token \
that has many parts including that it may have multiple, independently-bracketed \
sections.
[mssql] [bug] [pyodbc]
Fixed an issue in the pyodbc connector such that a warning about pyodbc \
“drivername” would be emitted when using a totally empty URL. Empty URLs are \
normal when producing a non-connected dialect object or when using the \
“creator” argument to create_engine(). The warning now only emits if the \
driver name is missing but other parameters are still present.
[mssql] [bug]
Fixed issue with assembling the ODBC connection string for the pyodbc DBAPI. \
Tokens containing semicolons and/or braces “{}” were not being correctly \
escaped, causing the ODBC driver to misinterpret the connection string \
attributes.
[mssql] [bug]
Fixed issue where datetime.time parameters were being converted to \
datetime.datetime, making them incompatible with comparisons like >= against \
an actual TIME column.
[mssql] [bug]
Fixed an issue where the is_disconnect function in the SQL Server pyodbc dialect \
was incorrectly reporting the disconnect state when the exception messsage had a \
substring that matched a SQL Server ODBC error code.
[mssql] [change]
Moved the supports_sane_rowcount_returning = False requirement from the \
PyODBCConnector level to the MSDialect_pyodbc since pyodbc does work properly in \
some circumstances.
oracle
[oracle] [bug] [reflection]
Fixed bug in Oracle dialect where indexes that contain the full set of primary \
key columns would be mistaken as the primary key index itself, which is omitted, \
even if there were multiples. The check has been refined to compare the name of \
the primary key constraint against the index name itself, rather than trying to \
guess based on the columns present in the index.
misc
[change] [examples]
Added new option --raw to the examples.performance suite which will dump the raw \
profile test for consumption by any number of profiling visualizer tools. \
Removed the “runsnake” option as runsnake is very hard to build at this \
point;
|
2020-05-18 12:43:22 by Adam Ciarcinski | Files touched by this commit (2) | |
Log message:
py-sqlalchemy: updated to 1.3.17
1.3.17
orm
[orm] [usecase]
Added an accessor Comparator.expressions which provides access to the group of \
columns mapped under a multi-column ColumnProperty attribute.
[orm] [usecase]
Introduce relationship.sync_backref flag in a relationship to control if the \
synchronization events that mutate the in-Python attributes are added. This \
supersedes the previous change 5149, which warned that viewonly=True \
relationship target of a back_populates or backref configuration would be \
disallowed.
[orm] [bug]
Fixed bug where using with_polymorphic() as the target of a join via \
RelationshipComparator.of_type() on a mapper that already has a subquery-based \
with_polymorphic setting that’s equivalent to the one requested would not \
correctly alias the ON clause in the join.
[orm] [bug]
Fixed issue in the area of where loader options such as selectinload() interact \
with the baked query system, such that the caching of a query is not supposed to \
occur if the loader options themselves have elements such as with_polymorphic() \
objects in them that currently are not cache-compatible. The baked loader could \
sometimes not fully invalidate itself in these some of these scenarios leading \
to missed eager loads.
[orm] [bug]
Modified the internal “identity set” implementation, which is a set that \
hashes objects on their id() rather than their hash values, to not actually call \
the __hash__() method of the objects, which are typically user-mapped objects. \
Some methods were calling this method as a side effect of the implementation.
[orm] [bug]
An informative error message is raised when an ORM many-to-one comparison is \
attempted against an object that is not an actual mapped instance. Comparisons \
such as those to scalar subqueries aren’t supported; generalized comparison \
with subqueries is better achieved using Comparator.has().
engine
[engine] [bug]
Fixed fairly critical issue where the DBAPI connection could be returned to the \
connection pool while still in an un-rolled-back state. The reset agent \
responsible for rolling back the connection could be corrupted in the case that \
the transaction was “closed” without being rolled back or committed, which \
can occur in some scenarios when using ORM sessions and emitting .close() in a \
certain pattern involving savepoints. The fix ensures that the reset agent is \
always active.
schema
[schema] [bug]
Fixed issue where an Index that is deferred in being associated with a table, \
such as as when it contains a Column that is not associated with any Table yet, \
would fail to attach correctly if it also contained a non table-oriented \
expession.
[schema] [bug]
A warning is emitted when making use of the MetaData.sorted_tables attribute as \
well as the sort_tables() function, and the given tables cannot be correctly \
sorted due to a cyclic dependency between foreign key constraints. In this case, \
the functions will no longer sort the involved tables by foreign key, and a \
warning will be emitted. Other tables that are not part of the cycle will still \
be returned in dependency order. Previously, the sorted_table routines would \
return a collection that would unconditionally omit all foreign keys when a \
cycle was detected, and no warning was emitted.
[schema]
Add comment attribute to Column __repr__ method.
postgresql
[postgresql] [usecase]
Added support for columns or type ARRAY of Enum, JSON or JSONB in PostgreSQL. \
Previously a workaround was required in these use cases.
[postgresql] [usecase]
Raise an explicit CompileError when adding a table with a column of type ARRAY \
of Enum configured with Enum.native_enum set to False when \
Enum.create_constraint is not set to False
mssql
[mssql] [bug] [reflection]
Fix a regression introduced by the reflection of computed column in MSSQL when \
using the legacy TDS version 4.2. The dialect will try to detect the protocol \
version of first connect and run in compatibility mode if it cannot detect it.
[mssql] [bug] [reflection]
Fix a regression introduced by the reflection of computed column in MSSQL when \
using SQL server versions before 2012, which does not support the concat \
function.
oracle
[oracle] [bug]
Some modifications to how the cx_oracle dialect sets up per-column outputtype \
handlers for LOB and numeric datatypes to adjust for potential changes coming in \
cx_Oracle 8.
[oracle] [bug] [performance]
Changed the implementation of fetching CLOB and BLOB objects to use \
cx_Oracle’s native implementation which fetches CLOB/BLOB objects inline with \
other result columns, rather than performing a separate fetch. As always, this \
can be disabled by setting auto_convert_lobs to False.
As part of this change, the behavior of a CLOB that was given a blank string on \
INSERT now returns None on SELECT, which is now consistent with that of VARCHAR \
on Oracle.
firebird
[firebird] [change]
Adjusted dialect loading for firebird:// URIs so the external \
sqlalchemy-firebird dialect will be used if it has been installed, otherwise \
fall back to the (now deprecated) internal Firebird dialect.
|
2020-04-10 09:58:17 by Adam Ciarcinski | Files touched by this commit (3) | |
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.
|
2020-03-22 23:45:24 by Roland Illig | Files touched by this commit (1) |
Log message:
databases/py-sqlalchemy: remove nonexistent file
The test runner has apparently been replaced with a test suite.
|
2020-02-04 17:57:21 by Adam Ciarcinski | Files touched by this commit (2) | |
Log message:
py-sqlalchemy: updated to 1.3.13
1.3.13
[orm] [bug] [engine]
Added test support and repaired a wide variety of unnecessary reference cycles \
created for short-lived objects, mostly in the area of ORM queries. Thanks much \
to Carson Ip for the help on this.
[orm] [bug]
Fixed regression in loader options introduced in 1.3.0b3 via 4468 where the \
ability to create a loader option using PropComparator.of_type() targeting an \
aliased entity that is an inheriting subclass of the entity which the preceding \
relationship refers to would fail to produce a matching path. See also 5082 \
fixed in this same release which involves a similar kind of issue.
[orm] [bug]
Fixed regression in joined eager loading introduced in 1.3.0b3 via 4468 where \
the ability to create a joined option across a with_polymorphic() into a \
polymorphic subclass using RelationshipProperty.of_type() and then further along \
regular mapped relationships would fail as the polymorphic subclass would not \
add itself to the load path in a way that could be located by the loader \
strategy. A tweak has been made to resolve this scenario.
[orm] [bug]
Repaired a warning in the ORM flush process that was not covered by test \
coverage when deleting objects that use the “version_id” feature. This \
warning is generally unreachable unless using a dialect that sets the \
“supports_sane_rowcount” flag to False, which is not typically the case \
however is possible for some MySQL configurations as well as older Firebird \
drivers, and likely some third party dialects.
[orm] [bug]
Fixed bug where usage of joined eager loading would not properly wrap the query \
inside of a subquery when Query.group_by() were used against the query. When any \
kind of result-limiting approach is used, such as DISTINCT, LIMIT, OFFSET, \
joined eager loading embeds the row-limited query inside of a subquery so that \
the collection results are not impacted. For some reason, the presence of GROUP \
BY was never included in this criterion, even though it has a similar effect as \
using DISTINCT. Additionally, the bug would prevent using GROUP BY at all for a \
joined eager load query for most database platforms which forbid non-aggregated, \
non-grouped columns from being in the query, as the additional columns for the \
joined eager load would not be accepted by the database.
[orm] [performance]
Identified a performance issue in the system by which a join is constructed \
based on a mapped relationship. The clause adaption system would be used for the \
majority of join expressions including in the common case where no adaptation is \
needed. The conditions under which this adaptation occur have been refined so \
that average non-aliased joins along a simple relationship without a \
“secondary” table use about 70% less function calls.
[engine] [bug]
Fixed issue where the collection of value processors on a Compiled object would \
be mutated when “expanding IN” parameters were used with a datatype that has \
bind value processors; in particular, this would mean that when using statement \
caching and/or baked queries, the same compiled._bind_processors collection \
would be mutated concurrently. Since these processors are the same function for \
a given bind parameter namespace every time, there was no actual negative effect \
of this issue, however, the execution of a Compiled object should never be \
causing any changes in its state, especially given that they are intended to be \
thread-safe and reusable once fully constructed.
[sql] [usecase]
A function created using GenericFunction can now specify that the name of the \
function should be rendered with or without quotes by assigning the quoted_name \
construct to the .name element of the object. Prior to 1.3.4, quoting was never \
applied to function names, and some quoting was introduced in 4467 but no means \
to force quoting for a mixed case name was available. Additionally, the \
quoted_name construct when used as the name will properly register its lowercase \
name in the function registry so that the name continues to be available via the \
func. registry.
[postgresql] [usecase]
Added support for prefixes to the CTE construct, to allow support for Postgresql \
12 “MATERIALIZED” and “NOT MATERIALIZED” phrases. Pull request courtesy \
Marat Sharafutdinov.
[postgresql] [bug]
Fixed issue where the PostgreSQL dialect would fail to parse a reflected CHECK \
constraint that was a boolean-valued function (as opposed to a boolean-valued \
expression).
[postgresql] [tests]
Improved detection of two phase transactions requirement for the PostgreSQL \
database by testing that max_prepared_transactions is set to a value greater \
than 0. Pull request courtesy Federico Caselli.
[mssql] [bug]
Fixed issue where a timezone-aware datetime value being converted to string for \
use as a parameter value of a mssql.DATETIMEOFFSET column was omitting the \
fractional seconds.
[bug] [ext]
Fixed bug in sqlalchemy.ext.serializer where a unique BindParameter object could \
conflict with itself if it were present in the mapping itself, as well as the \
filter condition of the query, as one side would be used against the \
non-deserialized version and the other side would use the deserialized version. \
Logic is added to BindParameter similar to its “clone” method which will \
uniquify the parameter name upon deserialize so that it doesn’t conflict with \
its original.
[bug] [tests]
Fixed a few test failures which would occur on Windows due to SQLite file \
locking issues, as well as some timing issues in connection pool related tests; \
pull request courtesy Federico Caselli.
1.3.12
[orm] [bug]
Fixed issue involving lazy="raise" strategy where an ORM delete of an \
object would raise for a simple “use-get” style many-to-one relationship \
that had lazy=”raise” configured. This is inconsistent vs. the change \
introduced in 1.3 as part of 4353, where it was established that a history \
operation that does not expect emit SQL should bypass the lazy="raise" \
check, and instead effectively treat it as lazy="raise_on_sql" for \
this case. The fix adjusts the lazy loader strategy to not raise for the case \
where the lazy load was instructed that it should not emit SQL if the object \
were not present.
[orm] [bug]
Fixed regression introduced in 1.3.0 related to the association proxy refactor \
in 4351 that prevented composite() attributes from working in terms of an \
association proxy that references them.
[orm] [bug]
Setting persistence-related flags on relationship() while also setting \
viewonly=True will now emit a regular warning, as these flags do not make sense \
for a viewonly=True relationship. In particular, the “cascade” settings have \
their own warning that is generated based on the individual values, such as \
“delete, delete-orphan”, that should not apply to a viewonly relationship. \
Note however that in the case of “cascade”, these settings are still \
erroneously taking effect even though the relationship is set up as \
“viewonly”. In 1.4, all persistence-related cascade settings will be \
disallowed on a viewonly=True relationship in order to resolve this issue.
[orm] [bug] [py3k]
Fixed issue where when assigning a collection to itself as a slice, the mutation \
operation would fail as it would first erase the assigned collection \
inadvertently. As an assignment that does not change the contents should not \
generate events, the operation is now a no-op. Note that the fix only applies to \
Python 3; in Python 2, the __setitem__ hook isn’t called in this case; \
__setslice__ is used instead which recreates the list item-by-item in all cases.
[orm] [bug]
Fixed issue where by if the “begin” of a transaction failed at the Core \
engine/connection level, such as due to network error or database is locked for \
some transactional recipes, within the context of the Session procuring that \
connection from the conneciton pool and then immediately returning it, the ORM \
Session would not close the connection despite this connection not being stored \
within the state of that Session. This would lead to the connection being \
cleaned out by the connection pool weakref handler within garbage collection \
which is an unpreferred codepath that in some special configurations can emit \
errors in standard error.
[sql] [bug]
Fixed bug where “distinct” keyword passed to select() would not treat a \
string value as a “label reference” in the same way that the \
select.distinct() does; it would instead raise unconditionally. This keyword \
argument and the others passed to select() will ultimately be deprecated for \
SQLAlchemy 2.0.
[sql] [bug]
Changed the text of the exception for “Can’t resolve label reference” to \
include other kinds of label coercions, namely that “DISTINCT” is also in \
this category under the PostgreSQL dialect.
[sqlite] [bug]
Fixed issue to workaround SQLite’s behavior of assigning “numeric” \
affinity to JSON datatypes, first described at Support for SQLite JSON Added, \
which returns scalar numeric JSON values as a number and not as a string that \
can be JSON deserialized. The SQLite-specific JSON deserializer now gracefully \
degrades for this case as an exception and bypasses deserialization for single \
numeric values, as from a JSON perspective they are already deserialized.
[mssql] [bug]
Repaired support for the mssql.DATETIMEOFFSET datatype on PyODBC, by adding \
PyODBC-level result handlers as it does not include native support for this \
datatype. This includes usage of the Python 3 “timezone” tzinfo subclass in \
order to set up a timezone, which on Python 2 makes use of a minimal backport of \
“timezone” in sqlalchemy.util.
|
2019-12-03 19:19:58 by Adam Ciarcinski | Files touched by this commit (2) | |
Log message:
py-sqlalchemy: updated to 1.3.11
Release 1.3.11 has a significant number of bug fixes across all areas as well as \
new use case additions. While it is a "point release", it contains a \
few use case additions that amount to new features, as they are needed sooner \
than the 1.4 series will be ready. This includes new scalar accessors for JSON \
index expressions that work across all JSON-supporting backends as well as \
cross-dialect support for the "GENERATED ALWAYS AS" SQL construct, \
which allows for an automatically updated expression to be established within \
DDL in the database server.
|
2019-10-10 20:22:49 by Adam Ciarcinski | Files touched by this commit (2) | |
Log message:
py-sqlalchemy: updated to 1.3.10
1.3.10
mssql
[mssql] [bug]
Fixed bug in SQL Server dialect with new “max_identifier_length” feature \
where the mssql dialect already featured this flag, and the implementation did \
not accommodate for the new initialization hook correctly.
oracle
[oracle] [bug]
Fixed regression in Oracle dialect that was inadvertently using max identifier \
length of 128 characters on Oracle server 12.2 and greater even though the \
stated contract for the remainder of the 1.3 series is that this value stays at \
30 until version SQLAlchemy 1.4. Also repaired issues with the retrieval of the \
“compatibility” version, and removed the warning emitted when the \
“v$parameter” view was not accessible as this was causing user confusion.
1.3.9
orm
[orm] [bug]
Fixed regression in selectinload loader strategy caused by 4775 (released in \
version 1.3.6) where a many-to-one attribute of None would no longer be \
populated by the loader. While this was usually not noticeable due to the \
lazyloader populating None upon get, it would lead to a detached instance error \
if the object were detached.
[orm] [bug]
Passing a plain string expression to Session.query() is deprecated, as all \
string coercions were removed in 4481 and this one should have been included. \
The literal_column() function may be used to produce a textual column \
expression.
[orm] [bug]
A warning is emitted for a condition in which the Session may implicitly swap an \
object out of the identity map for another one with the same primary key, \
detaching the old one, which can be an observed result of load operations which \
occur within the SessionEvents.after_flush() hook. The warning is intended to \
notify the user that some special condition has caused this to happen and that \
the previous object may not be in the expected state.
engine
[engine] [usecase]
Added new create_engine() parameter create_engine.max_identifier_length. This \
overrides the dialect-coded “max identifier length” in order to accommodate \
for databases that have recently changed this length and the SQLAlchemy dialect \
has not yet been adjusted to detect for that version. This parameter interacts \
with the existing create_engine.label_length parameter in that it establishes \
the maximum (and default) value for anonymously generated labels. Additionally, \
post-connection detection of max identifier lengths has been added to the \
dialect system. This feature is first being used by the Oracle dialect.
sql
[sql] [bug]
Characters that interfere with “pyformat” or “named” formats in bound \
parameters, namely %, (, ) and the space character, as well as a few other \
typically undesirable characters, are stripped early for a bindparam() that is \
using an anonymized name, which is typically generated automatically from a \
named column which itself includes these characters in its name and does not use \
a .key, so that they do not interfere either with the SQLAlchemy compiler’s \
use of string formatting or with the driver-level parsing of the parameter, both \
of which could be demonstrated before the fix. The change only applies to \
anonymized parameter names that are generated and consumed internally, not \
end-user defined names, so the change should have no impact on any existing \
code. Applies in particular to the psycopg2 driver which does not otherwise \
quote special parameter names, but also strips leading underscores to suit \
Oracle (but not yet leading numbers, as some anon parameters are c
urrently entirely numeric/underscore based); Oracle in any case continues to \
quote parameter names that include special characters.
[sql] [usecase]
Added an explicit error message for the case when objects passed to Table are \
not SchemaItem objects, rather than resolving to an attribute error.
sqlite
[sqlite] [usecase]
Added support for sqlite “URI” connections, which allow for sqlite-specific \
flags to be passed in the query string such as “read only” for Python \
sqlite3 drivers that support this.
mssql
[mssql] [bug]
Added identifier quoting to the schema name applied to the “use” statement \
which is invoked when a SQL Server multipart schema name is used within a Table \
that is being reflected, as well as for Inspector methods such as \
Inspector.get_table_names(); this accommodates for special characters or spaces \
in the database name. Additionally, the “use” statement is not emitted if \
the current database matches the target owner database name being passed.
oracle
[oracle] [bug]
Restored adding cx_Oracle.DATETIME to the setinputsizes() call when a SQLAlchemy \
Date, DateTime or Time datatype is used, as some complex queries require this to \
be present. This was removed in the 1.2 series for arbitrary reasons.
[oracle] [usecase]
The Oracle dialect now emits a warning if Oracle version 12.2 or greater is \
used, and the create_engine.max_identifier_length parameter is not set. The \
version in this specific case defaults to that of the “compatibility” \
version set in the Oracle server configuration, not the actual server version. \
In version 1.4, the default max_identifier_length for 12.2 or greater will move \
to 128 characters. In order to maintain forwards compatibility, applications \
should set create_engine.max_identifier_length to 30 in order to maintain the \
same length behavior, or to 128 in order to test the upcoming behavior. This \
length determines among other things how generated constraint names are \
truncated for statements like CREATE CONSTRAINT and DROP CONSTRAINT, which means \
a the new length may produce a name-mismatch against a name that was generated \
with the old length, impacting database migrations.
misc
[bug] [tests]
Fixed unit test regression released in 1.3.8 that would cause failure for \
Oracle, SQL Server and other non-native ENUM platforms due to new enumeration \
tests added as part of 4285 enum sortability in the unit of work; the \
enumerations created constraints that were duplicated on name.
|