Index index by Group index by Distribution index by Vendor index by creation date index by Name Mirrors Help Search

python3-SQLAlchemy-1.3.22-2.1 RPM for ppc64le

From OpenSuSE Leap 15.5 for ppc64le

Name: python3-SQLAlchemy Distribution: SUSE Linux Enterprise 15
Version: 1.3.22 Vendor: SUSE LLC <>
Release: 2.1 Build date: Tue Mar 30 00:16:59 2021
Group: Unspecified Build host: xinomavro
Size: 13210105 Source RPM: python-SQLAlchemy-1.3.22-2.1.src.rpm
Summary: Database Abstraction Library
SQLAlchemy is an Object Relational Mappper (ORM) that provides a flexible,
high-level interface to SQL databases.  Database and domain concepts are
decoupled, allowing both sides maximum flexibility and power. SQLAlchemy
provides a powerful mapping layer that can work as automatically or as manually
as you choose, determining relationships based on foreign keys or letting you
define the join conditions explicitly, to bridge the gap between database and






* Fri Mar 26 2021
  - add sqlalchemy-7293b3dc0e9eb3dae84ffd831494b85355df8e73.patch
    fix from upstream for a test breakage at
    test_pyodbc_extra_connect_azure (bsc#1184038)
* Wed Jan 20 2021
  - Skip one failing test on Python 3.6
* Sat Dec 19 2020
  - update to 1.3.22:
    * Fixed regression which occured due to #5755 which implemented isolation
    level support for Oracle
    * bugfixes for various engines, see
* Mon Oct 19 2020
  - added gpg pub key for source validation
  - Update to version 1.3.20
    pytest_depr_from_parent.patch is obsolete again
    * 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.  References: #4428
    * 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.  References: #4589
    * 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.
      References: #5599
    * Repaired a function-level import that was not using SQLAlchemy’s
      standard late-import system within the sqlalchemy.exc module.
      References: #5632
    * Fixed issue where the pickle.dumps() operation against Over construct
      would produce a recursion overflow.  References: #5644
    * 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.  References: #5618
    * The psycopg2 dialect now support PostgreSQL multiple host connections,
      by passing host/port combinations to the query string.
      References: #4392
    * Adjusted the Comparator.any() and Comparator.all() methods to implement
      a straight “NOT” operation for negation, rather than negating the
      comparison operator.  References: #5518
    * 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.
      References: #5520
    * Adjusted the MySQL dialect to correctly parenthesize functional index
      expressions as accepted by MySQL 8. Pull request courtesy Ramon Williams.
      References: #5462
    * 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.
      References: #5568
    * 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.
      References: #5617
    * 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.
      References: #5539
* Fri Oct 09 2020
  - Replace pytest_depr_from_parent.patch with the upstream commit resolving
    same issue (gh#sqlalchemy/sqlalchemy#commit40cdb9c0bf4d).
* Thu Oct 08 2020
  - Add pytest_depr_from_parent.patch to fix FTBGS with pytest 6.*
* Thu Aug 20 2020
  - update to 1.3.19
    * Adjusted the workings of the Mapper.all_orm_descriptors()
    * The name of the virtual column used when using the AbstractConcreteBase
      and ConcreteBase classes can now be customized
    * Repaired an issue where the “ORDER BY” clause rendering a label name rather
      than a complete expression
    * The LookupError message will now provide the user with up to four possible
      values that a column is constrained to via the Enum
    * Fixed issue where the Connection.execution_options.schema_translate_map
      feature would not take effect when the Sequence.next_value() function
      for a Sequence were used in the Column.server_default parameter
      and the create table DDL were emitted.
    * Added a **kw argument to the DeclarativeMeta.__init__() method
* Sun Jun 28 2020
  - update to version 1.3.18:
    * orm
      + Improve error message when using Query.filter_by() in a query
      where the first entity is not a mapped class.  References: #5326
      + 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.  References: #5198
    * engine
      + 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.
      References: #5326
      + 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.  References: #5341
    * sql
      + Added a “.schema” parameter to the table() construct, allowing
      ad-hoc table expressions to also include a schema name. Pull
      request courtesy Dylan Modesitt.  References: #5309
      + Correctly apply self_group in type_coerce element.  The type
      coerce element did not correctly apply grouping rules when using
      in an expression References: #5344
      + 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.  References:
      + Introduce IdentityOptions to store common parameters for
      sequences and identity columns.  References: #5324
      + Added .offset support to sybase dialect. Pull request courtesy
      Alan D. Snow.  References: #5294
    * schema
      + Fixed issue where dialect_options were omitted when a database
      object (e.g., Table) was copied using tometadata().  References:
    * mysql
      + Implemented row-level locking support for mysql. Pull request
      courtesy Quentin Somerville.  References: #4860
    * sqlite
      + SQLite 3.31 added support for computed column. This change
      enables their support in SQLAlchemy when targeting SQLite.
      References: #5297
      + 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.  References:
    * mssql
      + 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.  References: #5364, #5366
      + 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.  References:
      + 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.  References:
      + Fixed issue where datetime.time parameters were being converted
      to datetime.datetime, making them incompatible with comparisons
      like >= against an actual TIME column.  References: #5339
      + 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.  References: #5359
      + Moved the supports_sane_rowcount_returning = False requirement
      from the PyODBCConnector level to the MSDialect_pyodbc since
      pyodbc does work properly in some circumstances.  References:
    * oracle
      + 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.
      References: #5421
    * misc
      + 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;
* Sat May 23 2020
  - update to version 1.3.17:
    * orm
      + Added an accessor Comparator.expressions which provides access
      to the group of columns mapped under a multi-column
      ColumnProperty attribute.  References: #5262
      + 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.
      References: #5237
      + 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.  References: #5288
      + 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.
      References: #5303
      + 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.
      References: #5304
      + 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().  References: #5269
    * engine
      + 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.  References:
    * schema
      + 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.  References:
      + 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.  References:
      + Add comment attribute to Column __repr__ method.  References:
    * postgresql
      + Added support for columns or type ARRAY of Enum, JSON or JSONB
      in PostgreSQL. Previously a workaround was required in these use
      cases.  References: #5265
      + 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
      References: #5266
    * mssql
      + 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.  References: #5255
      + 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.  References: #5271
    * oracle
      + 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.  References:
      + 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.  References: #5314
    * firebird
      + 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.  References: #5278
* Thu Apr 09 2020
  - update to version 1.3.16:
    * orm
      + 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.  References: #5228
      + 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.
      References: #5210
      + 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.  References:
    * orm declarative
      + 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 References: #5238
    * sql
      + 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.  References: #5052
    * schema
      + 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.  References: #5063
    * postgresql
      + 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.
      References: #5205
    * mysql
      + 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.  References: #5239
    * sqlite
      + Implemented AUTOCOMMIT isolation level for SQLite when using
      pysqlite.  References: #5164
    * mssql
      + Added support for ColumnOperators.is_distinct_from() and
      ColumnOperators.isnot_distinct_from() to SQL Server, MySQL, and
      Oracle.  References: #5137
    * oracle
      + Implemented AUTOCOMMIT isolation level for Oracle when using
      cx_Oracle. Also added a fixed default isolation level of READ
      COMMITTED for Oracle.  References: #5200
      + 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.
      References: #5146
    * misc
      + Fixed an issue that prevented the test suite from running with
      the recently released py.test 5.4.0.  References: #5201
      + 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 References: #5183
      + 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.  References: #5207
* Sat Mar 14 2020
  - update to 1.3.15:
    * Adjusted the error message emitted by :meth:`.Query.join` when a left hand
      side can't be located that the :meth:`.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 :class:`.Query` so that the same expression is determined
      each time.
    * Fixed regression in 1.3.14 due to :ticket:`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.
    * 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.
    * Fixed regression caused in 1.3.13 by :ticket:`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;
  - Fix build for older distributions by buildrequiring a new-enough pytest
* Thu Mar 12 2020
  - Fix build without python2
* Sun Jan 26 2020
  - specfile:
    * update copyright year
  - update to version 1.3.13:
    * orm
      + 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.  References: #5050, #5056, #5071
      + 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.  References: #5107
      + 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.  References: #5082
      + 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.  References: #5068
      + 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.  References: #5065
      + 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
      + 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.
      References: #5048
    * sql
      + 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.  See also GenericFunction References: #5079
    * postgresql
      + Added support for prefixes to the CTE construct, to allow
      support for Postgresql 12 “MATERIALIZED” and “NOT MATERIALIZED”
      phrases. Pull request courtesy Marat Sharafutdinov.  See also:
      HasCTE.cte() References: #5040
      + 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).  References: #5039
      + 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.  References: #5057
    * mssql
      + 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.
      References: #5045
    * misc
      + 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.
      References: #5086
      + 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. References: #4946
* Fri Dec 20 2019
  - update to version 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 [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.
* Sat Nov 16 2019
  - update to version 1.3.11:
    * orm
      + [orm] [bug] The relationship.omit_join flag was not intended to
      be manually set to True, and will now emit a warning when this
      occurs. The omit_join optimization is detected automatically,
      and the omit_join flag was only intended to disable the
      optimization in the hypothetical case that the optimization may
      have interfered with correct results, which has not been
      observed with the modern version of this feature. Setting the
      flag to True when it is not automatically detected may cause the
      selectin load feature to not work correctly when a non-default
      primary join condition is in use.  References: #4954
      + [orm] [bug] A warning is emitted if a primary key value is
      passed to Query.get() that consists of None for all primary key
      column positions. Previously, passing a single None outside of a
      tuple would raise a TypeError and passing a composite None
      (tuple of None values) would silently pass through. The fix now
      coerces the single None into a tuple where it is handled
      consistently with the other None conditions. Thanks to Lev
      Izraelit for the help with this.  References: #4915
      + [orm] [bug] The BakedQuery will not cache a query that was
      modified by a QueryEvents.before_compile() event, so that
      compilation hooks that may be applying ad-hoc modifications to
      queries will take effect on each run. In particular this is
      helpful for events that modify queries used in lazy loading as
      well as eager loading such as “select in” loading. In order to
      re-enable caching for a query modified by this event, a new flag
      bake_ok is added; see Using the before_compile event for
      details.  A longer term plan to provide a new form of SQL
      caching should solve this kind of issue more comprehensively.
      References: #4947
      + [orm] [bug] Fixed ORM bug where a “secondary” table that
      referred to a selectable which in some way would refer to the
      local primary table would apply aliasing to both sides of the
      join condition when a relationship-related join, either via
      Query.join() or by joinedload(), were generated. The “local”
      side is now excluded.  References: #4974
      + [orm] [usecase] Added accessor Query.is_single_entity() to
      Query, which will indicate if the results returned by this Query
      will be a list of ORM entities, or a tuple of entities or column
      expressions. SQLAlchemy hopes to improve upon the behavior of
      single entity / tuples in future releases such that the behavior
      would be explicit up front, however this attribute should be
      helpful with the current behavior. Pull request courtesy Patrick
      Hayes.  References: #4934
    * engine
      + [engine] [bug] Fixed bug where parameter repr as used in logging
      and error reporting needs additional context in order to
      distinguish between a list of parameters for a single statement
      and a list of parameter lists, as the “list of lists” structure
      could also indicate a single parameter list where the first
      parameter itself is a list, such as for an array parameter. The
      engine/connection now passes in an additional boolean indicating
      how the parameters should be considered. The only SQLAlchemy
      backend that expects arrays as parameters is that of psycopg2
      which uses pyformat parameters, so this issue has not been too
      apparent, however as other drivers that use positional gain more
      features it is important that this be supported. It also
      eliminates the need for the parameter repr function to guess
      based on the parameter structure passed.  References: #4902
      + [engine] [bug] [postgresql] Fixed bug in Inspector where the
      cache key generation did not take into account arguments passed
      in the form of tuples, such as the tuple of view name styles to
      return for the PostgreSQL dialect. This would lead the inspector
      to cache too generally for a more specific set of criteria. The
      logic has been adjusted to include every keyword element in the
      cache, as every argument is expected to be appropriate for a
      cache else the caching decorator should be bypassed by the
      dialect.  References: #4955
    * sql
      + [sql] [bug] [py3k] Changed the repr() of the quoted_name
      construct to use regular string repr() under Python 3, rather
      than running it through “backslashreplace” escaping, which can
      be misleading.  References: #4931
      + [sql] [usecase] Added new accessors to expressions of type JSON
      to allow for specific datatype access and comparison, covering
      strings, integers, numeric, boolean elements. This revises the
      documented approach of CASTing to string when comparing values,
      instead adding specific functionality into the PostgreSQL,
      SQlite, MySQL dialects to reliably deliver these basic types in
      all cases.  See also: JSON, JSON.Comparator.as_string(),
      JSON.Comparator.as_boolean(), JSON.Comparator.as_float(),
      JSON.Comparator.as_integer(), References: #4276
      + [sql] [usecase] The text() construct now supports “unique” bound
      parameters, which will dynamically uniquify themselves on
      compilation thus allowing multiple text() constructs with the
      same bound parameter names to be combined together.  References:
    * schema
      + [schema] [bug] Fixed bug where a table that would have a column
      label overlap with a plain column name, such as “ AS
      foo_id” vs. “foo.foo_id”, would prematurely generate the ._label
      attribute for a column before this overlap could be detected due
      to the use of the index=True or unique=True flag on the column
      in conjunction with the default naming convention of
      "column_0_label". This would then lead to failures when ._label
      were used later to generate a bound parameter name, in
      particular those used by the ORM when generating the WHERE
      clause for an UPDATE statement. The issue has been fixed by
      using an alternate ._label accessor for DDL generation that does
      not affect the state of the Column. The accessor also bypasses
      the key-deduplication step as it is not necessary for DDL, the
      naming is now consistently "<tablename>_<columnname>" without
      any subsequent numeric symbols when used in DDL.  References:
      + [schema] [usecase] Added DDL support for “computed columns”;
      these are DDL column specifications for columns that have a
      server-computed value, either upon SELECT (known as “virtual”)
      or at the point of which they are INSERTed or UPDATEd (known as
      “stored”). Support is established for Postgresql, MySQL, Oracle
      SQL Server and Firebird. Thanks to Federico Caselli for lots of
      work on this one.  See also: Computed (GENERATED ALWAYS AS)
      Columns References: #4894
    * mysql
      + [mysql] [bug] Added “Connection was killed” message interpreted
      from the base pymysql.Error class in order to detect closed
      connection, based on reports that this message is arriving via a
      pymysql.InternalError() object which indicates pymysql is not
      handling it correctly.  References: #4945
    * mssql
      + [mssql] [bug] Fixed issue in MSSQL dialect where an
      expression-based OFFSET value in a SELECT would be rejected,
      even though the dialect can render this expression inside of a
      ROW NUMBER-oriented LIMIT/OFFSET construct.  References: #4973
      + [mssql] [bug] Fixed an issue in the Engine.table_names() method
      where it would feed the dialect’s default schema name back into
      the dialect level table function, which in the case of SQL
      Server would interpret it as a dot-tokenized schema name as
      viewed by the mssql dialect, which would cause the method to
      fail in the case where the database username actually had a dot
      inside of it. In 1.3, this method is still used by the
      MetaData.reflect() function so is a prominent codepath. In 1.4,
      which is the current master development branch, this issue
      doesn’t exist, both because MetaData.reflect() isn’t using this
      method nor does the method pass the default schema name
      explicitly. The fix nonetheless guards against the default
      server name value returned by the dialect from being interpreted
      as dot-tokenized name under any circumstances by wrapping it in
      quoted_name().  References: #4923
    * oracle
      + [oracle] [bug] [firebird] Modified the approach of “name
      normalization” for the Oracle and Firebird dialects, which
      converts from the UPPERCASE-as-case-insensitive convention of
      these dialects into lowercase-as-case-insensitive for
      SQLAlchemy, to not automatically apply the quoted_name construct
      to a name that matches itself under upper or lower case
      conversion, as is the case for many non-european characters. All
      names used within metadata structures are converted to
      quoted_name objects in any case; the change here would only
      affect the output of some inspection functions.  References:
      + [oracle] [bug] The sqltypes.NCHAR datatype will now bind to the
      cx_Oracle.FIXED_NCHAR DBAPI data bindings when used in a bound
      parameter, which supplies proper comparison behavior against a
      variable-length string. Previously, the sqltypes.NCHAR datatype
      would bind to cx_oracle.NCHAR which is not fixed length; the
      sqltypes.CHAR datatype already binds to cx_Oracle.FIXED_CHAR so
      it is now consistent that sqltypes.NCHAR binds to
      cx_Oracle.FIXED_NCHAR.  References: #4913
      + [oracle] [usecase] Added dialect-level flag encoding_errors to
      the cx_Oracle dialect, which can be specified as part of
      create_engine(). This is passed to SQLAlchemy’s unicode decoding
      converter under Python 2, and to cx_Oracle’s cursor.var() object
      as the encodingErrors parameter under Python 3, for the very
      unusual case that broken encodings are present in the target
      database which cannot be fetched unless error handling is
      relaxed. The value is ultimately one of the Python “encoding
      errors” parameters passed to decode().  References: #4799
    * firebird
      + [firebird] [bug] Added additional “disconnect” message “Error
      writing data to the connection” to Firebird disconnection
      detection. Pull request courtesy lukens.  References: #4903
    * misc
      + [bug] [tests] Fixed test failures which would occur with newer
      SQLite as of version 3.30 or greater, due to their addition of
      nulls ordering syntax as well as new restrictions on aggregate
      functions. Pull request courtesy Nils Philippsen.  References:
      + [bug] [installation] [windows] Added a workaround for a
      setuptools-related failure that has been observed as occurring
      on Windows installations, where setuptools is not correctly
      reporting a build error when the MSVC build dependencies are not
      installed and therefore not allowing graceful degradation into
      non C extensions builds.  References: #4967
* Thu Nov 14 2019
  - This package needs full fledged python on runtime so make sure
    we require it
* Wed Oct 30 2019
  - Update to 1.3.10:
    * Fixed regression in selectinload loader strategy
    * Passing a plain string expression to Session.query() is deprecated
    * 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
* Sat Aug 31 2019
  - update to version 1.3.8:
    * orm
      + Fixed bug where Load objects were not pickleable due to
      mapper/relationship state in the internal context
      dictionary. These objects are now converted to picklable using
      similar techniques as that of other elements within the loader
      option system that have long been serializable.  References:
      + Added support for the use of an Enum datatype using Python
      pep-435 enumeration objects as values for use as a primary key
      column mapped by the ORM. As these values are not inherently
      sortable, as required by the ORM for primary keys, a new
      TypeEngine.sort_key_function attribute is added to the typing
      system which allows any SQL type to implement a sorting for
      Python objects of its type which is consulted by the unit of
      work. The Enum type then defines this using the database value
      of a given enumeration. The sorting scheme can be also be
      redefined by passing a callable to the Enum.sort_key_function
      parameter. Pull request courtesy Nicolas Caniart.  References:
    * engine
      + Added new parameter create_engine.hide_parameters which when set
      to True will cause SQL parameters to no longer be logged, nor
      rendered in the string representation of a StatementError
      object.  References: #4815
      + Fixed an issue whereby if the dialect “initialize” process which
      occurs on first connect would encounter an unexpected exception,
      the initialize process would fail to complete and then no longer
      attempt on subsequent connection attempts, leaving the dialect
      in an un-initialized, or partially initialized state, within the
      scope of parameters that need to be established based on
      inspection of a live connection. The “invoke once” logic in the
      event system has been reworked to accommodate for this
      occurrence using new, private API features that establish an
      “exec once” hook that will continue to allow the initializer to
      fire off on subsequent connections, until it completes without
      raising an exception. This does not impact the behavior of the
      existing once=True flag within the event system.  References:
    * postgresql
      + Revised the approach for the just added support for the psycopg2
      “execute_values()” feature added in 1.3.7 for #4623. The
      approach relied upon a regular expression that would fail to
      match for a more complex INSERT statement such as one which had
      subqueries involved. The new approach matches exactly the string
      that was rendered as the VALUES clause.  References: #4623
      + Fixed bug where Postgresql operators such as
      postgresql.ARRAY.Comparator.contains() and
      postgresql.ARRAY.Comparator.contained_by() would fail to
      function correctly for non-integer values when used against a
      postgresql.array object, due to an erroneous assert statement.
      References: #4822
      + Added support for reflection of CHECK constraints that include
      the special PostgreSQL qualifier “NOT VALID”, which can be
      present for CHECK constraints that were added to an exsiting
      table with the directive that they not be applied to existing
      data in the table. The PostgreSQL dictionary for CHECK
      constraints as returned by Inspector.get_check_constraints() may
      include an additional entry dialect_options which within will
      contain an entry "not_valid": True if this symbol is
      detected. Pull request courtesy Bill Finn.  References: #4824
    * sqlite
      + Fixed bug where a FOREIGN KEY that was set up to refer to the
      parent table by table name only without the column names would
      not correctly be reflected as far as setting up the “referred
      columns”, since SQLite’s PRAGMA does not report on these columns
      if they weren’t given explicitly. For some reason this was
      harcoded to assume the name of the local column, which might
      work for some cases but is not correct. The new approach
      reflects the primary key of the referred table and uses the
      constraint columns list as the referred columns list, if the
      remote column(s) aren’t present in the reflected pragma
      directly.  References: #4810
* Sun Aug 25 2019
  - update to version 1.3.7:
    * orm
      + Fixed regression caused by new selectinload for many-to-one
      logic where a primaryjoin condition not based on real foreign
      keys would cause KeyError if a related object did not exist for
      a given key value on the parent object.  References: #4777
      + Fixed bug where using Query.first() or a slice expression in
      conjunction with a query that has an expression based “offset”
      applied would raise TypeError, due to an “or” conditional
      against “offset” that did not expect it to be a SQL expression
      as opposed to an integer or None.  References: #4803
    * sql
      + Fixed issue where Index object which contained a mixture of
      functional expressions which were not resolvable to a particular
      column, in combination with string-based column names, would
      fail to initialize its internal state correctly leading to
      failures during DDL compilation.  References: #4778
      + Fixed bug where TypeEngine.column_expression() method would not
      be applied to subsequent SELECT statements inside of a UNION or
      other CompoundSelect, even though the SELECT statements are
      rendered at the topmost level of the statement. New logic now
      differentiates between rendering the column expression, which is
      needed for all SELECTs in the list, vs. gathering the returned
      data type for the result row, which is needed only for the first
      SELECT.  References: #4787
      + Fixed issue where internal cloning of SELECT constructs could
      lead to a key error if the copy of the SELECT changed its state
      such that its list of columns changed. This was observed to be
      occurring in some ORM scenarios which may be unique to 1.3 and
      above, so is partially a regression fix.  References: #4780
    * postgresql
      + Added new dialect flag for the psycopg2 dialect,
      executemany_mode which supersedes the previous experimental
      use_batch_mode flag. executemany_mode supports both the “execute
      batch” and “execute values” functions provided by psycopg2, the
      latter which is used for compiled insert() constructs. Pull
      request courtesy Yuval Dinari.  See also: Psycopg2 Fast
      Execution Helpers; References: #4623
    * mysql
      + The MySQL dialects will emit “SET NAMES” at the start of a
      connection when charset is given to the MySQL driver, to appease
      an apparent behavior observed in MySQL 8.0 that raises a
      collation error when a UNION includes string columns unioned
      against columns of the form CAST(NULL AS CHAR(..)), which is
      what SQLAlchemy’s polymorphic_union function does. The issue
      seems to have affected PyMySQL for at least a year, however has
      recently appeared as of mysqlclient 1.4.4 based on changes in
      how this DBAPI creates a connection. As the presence of this
      directive impacts three separate MySQL charset settings which
      each have intricate effects based on their presense, SQLAlchemy
      will now emit the directive on new connections to ensure correct
      behavior.  References: #4804
      + Added another fix for an upstream MySQL 8 issue where a case
      sensitive table name is reported incorrectly in foreign key
      constraint reflection, this is an extension of the fix first
      added for #4344 which affects a case sensitive column name. The
      new issue occurs through MySQL 8.0.17, so the general logic of
      the 88718 fix remains in place.  See also: - upstream bug;
      References: #4751
      + Added reserved words ARRAY and MEMBER to the MySQL reserved
      words list, as MySQL 8.0 has now made these reserved.
      References: #4783
    * sqlite
      + The dialects that support json are supposed to take arguments
      json_serializer and json_deserializer at the create_engine()
      level, however the SQLite dialect calls them _json_serilizer and
      _json_deserilalizer. The names have been corrected, the old
      names are accepted with a change warning, and these parameters
      are now documented as create_engine.json_serializer and
      create_engine.json_deserializer.  References: #4798
      + Fixed bug where usage of “PRAGMA table_info” in SQLite dialect
      meant that reflection features to detect for table existence,
      list of table columns, and list of foreign keys, would default
      to any table in any attached database, when no schema name was
      given and the table did not exist in the base schema. The fix
      explicitly runs PRAGMA for the ‘main’ schema and then the ‘temp’
      schema if the ‘main’ returned no rows, to maintain the behavior
      of tables + temp tables in the “no schema” namespace, attached
      tables only in the “schema” namespace.  References: #4793
    * mssql
      + Added new mssql.try_cast() construct for SQL Server which emits
      “TRY_CAST” syntax. Pull request courtesy Leonel Atencio.
      References: #4782
    * misc
      + Fixed issue in event system where using the once=True flag with
      dynamically generated listener functions would cause event
      registration of future events to fail if those listener
      functions were garbage collected after they were used, due to an
      assumption that a listened function is strongly referenced. The
      “once” wrapped is now modified to strongly reference the inner
      function persistently, and documentation is updated that using
      “once” does not imply automatic de-registration of listener
      functions.  References: #4794
* Mon Jul 22 2019
  - update to version 1.3.6
    + orm
    * [feature] Added new loader option method Load.options()
      which allows loader options to be constructed hierarchically,
      so that many sub-options can be applied to a particular path
      without needing to call defaultload() many times.
    * [bug] Fixed regression caused by #4365 where a join from an
      entity to itself without using aliases no longer raises an
      informative error message, instead failing on an assertion.
      The informative error condition has been restored.
    * [bug] Fixed an issue where the orm._ORMJoin.join() method,
      which is a not-internally-used ORM-level method that exposes
      what is normally an internal process of Query.join(), did
      not propagate the full and outerjoin keyword arguments
    * [bug] Fixed bug where a many-to-one relationship that
      specified uselist=True would fail to update correctly during
      a primary key change where a related column needs to change.
    * [bug] Fixed bug where the detection for many-to-one or
      one-to-one use with a “dynamic” relationship, which is an
      invalid configuration, would fail to raise if the
      relationship were configured with uselist=True. The current
      fix is that it warns, instead of raises, as this would
      otherwise be backwards incompatible, however in a future
      release it will be a raise.
    * [bug] Fixed bug where a synonym created against a mapped
      attribute that does not exist yet, as is the case when it
      refers to backref before mappers are configured, would raise
      recursion errors when trying to test for attributes on it
      which ultimately don’t exist (as occurs when the classes are
      run through Sphinx autodoc), as the unconfigured state of
      the synonym would put it into an attribute not found loop.
    * [performance] The optimzation applied to selectin loading
      in #4340 where a JOIN is not needed to eagerly load related
      items is now applied to many-to-one relationships as well,
      so that only the related table is queried for a simple join
      condition. In this case, the related items are queried based
      on the value of a foreign key column on the parent; if these
      columns are deferred or otherwise not loaded on any of the
      parent objects in the collection, the loader falls back to the
      JOIN method.
    + engine
    * [bug] Fixed bug where using reflection function such as
      MetaData.reflect() with an Engine object that had execution
      options applied to it would fail, as the resulting
      OptionEngine proxy object failed to include a .engine
      attribute used within the reflection routines.
    + sql
    * [bug] Adjusted the initialization for Enum to minimize how
      often it invokes the .__members__ attribute of a given
      PEP-435 enumeration object, to suit the case where this
      attribute is expensive to invoke, as is the case for some
      popular third party enumeration libraries.
    * [bug] [postgresql] Fixed issue where the array_agg construct
      in combination with FunctionElement.filter() would not
      produce the correct operator precedence in combination
      with the array index operator.
    * [bug] Fixed an unlikely issue where the “corresponding
      column” routine for unions and other CompoundSelect objects
      could return the wrong column in some overlapping column
      situtations, thus potentially impacting some ORM operations
      when set operations are in use, if the underlying select()
      constructs were used previously in other similar kinds of
      routines, due to a cached value not being cleared.
    + postgresql
    * [usecase] Added support for reflection of indexes on
      PostgreSQL partitioned tables, which was added to PostgreSQL
      as of version 11.
    * [usecase] Added support for multidimensional Postgresql array
      literals via nesting the postgresql.array object within
      another one. The multidimensional array type is detected
    + mysql
    * [bug] Fixed bug where the special logic to render “NULL” for
      the TIMESTAMP datatype when nullable=True would not work if the
      column’s datatype were a TypeDecorator or a Variant. The logic
      now ensures that it unwraps down to the original TIMESTAMP so
      that this special case NULL keyword is correctly rendered when
    * [bug] Enhanced MySQL/MariaDB version string parsing to
      accommodate for exotic MariaDB version strings where the
      “MariaDB” word is embedded among other alphanumeric
      characters such as “MariaDBV1”. This detection is critical
      in order to correctly accommodate for API features that have
      split between MySQL and MariaDB such as the
      “transaction_isolation” system variable.
    + sqlite
    * [usecase] Added support for composite (tuple) IN operators
      with SQLite, by rendering the VALUES keyword for this backend.
      As other backends such as DB2 are known to use the same syntax,
      the syntax is enabled in the base compiler using a dialect-level
      flag tuple_in_values. The change also includes support for
      “empty IN tuple” expressions for SQLite when using “in_()”
      between a tuple value and an empty set.
    + mssql
    * [bug] Ensured that the queries used to reflect indexes and
      view definitions will explicitly CAST string parameters into
      NVARCHAR, as many SQL Server drivers frequently treat string
      values, particularly those with non-ascii characters or
      larger string values, as TEXT which often don’t compare
      correctly against VARCHAR characters in SQL Server’s
      information schema tables for some reason. These CAST
      operations already take place for reflection queries against
      SQL Server information_schema. tables but were missing from
      three additional queries that are against sys.tables.
* Mon Jun 24 2019
  - update to version 1.3.5:
    * orm
      + Fixed a series of related bugs regarding joined table
      inheritance more than two levels deep, in conjunction with
      modification to primary key values, where those primary key
      columns are also linked together in a foreign key relationship
      as is typical for joined table inheritance. The intermediary
      table in a three-level inheritance hierachy will now get its
      UPDATE if only the primary key value has changed and
      passive_updates=False (e.g. foreign key constraints not being
      enforced), whereas before it would be skipped; similarly, with
      passive_updates=True (e.g. ON UPDATE CASCADE in effect), the
      third-level table will not receive an UPDATE statement as was
      the case earlier which would fail since CASCADE already modified
      it. In a related issue, a relationship linked to a three-level
      inheritance hierarchy on the primary key of an intermediary
      table of a joined-inheritance hierarchy will also correctly have
      its foreign key column updated when the parent object’s primary
      key is modified, even if that parent object is a subclass of the
      linked parent class, whereas before these classes would not be
      counted.  References: #4723
      + Fixed bug where the Mapper.all_orm_descriptors accessor would
      return an entry for the Mapper itself under the declarative
      __mapper___ key, when this is not a descriptor. The
      .is_attribute flag that’s present on all InspectionAttr objects
      is now consulted, which has also been modified to be True for an
      association proxy, as it was erroneously set to False for this
      object.  References: #4729
      + Fixed regression in Query.join() where the aliased=True flag
      would not properly apply clause adaptation to filter criteria,
      if a previous join were made to the same entity. This is because
      the adapters were placed in the wrong order. The order has been
      reversed so that the adapter for the most recent aliased=True
      call takes precedence as was the case in 1.2 and earlier. This
      broke the “elementtree” examples among other things.
      References: #4704
      + Replaced the Python compatbility routines for getfullargspec()
      with a fully vendored version from Python 3.3. Originally,
      Python was emitting deprecation warnings for this function in
      Python 3.8 alphas. While this change was reverted, it was
      observed that Python 3 implementations for getfullargspec() are
      an order of magnitude slower as of the 3.4 series where it was
      rewritten against Signature. While Python plans to improve upon
      this situation, SQLAlchemy projects for now are using a simple
      replacement to avoid any future issues.  References: #4674
      + Reworked the attribute mechanics used by AliasedClass to no
      longer rely upon calling __getattribute__ on the MRO of the
      wrapped class, and to instead resolve the attribute normally on
      the wrapped class using getattr(), and then unwrap/adapt
      that. This allows a greater range of attribute styles on the
      mapped class including special __getattr__() schemes; but it
      also makes the code simpler and more resilient in general.
      References: #4694
    * sql
      + Fixed a series of quoting issues which all stemmed from the
      concept of the literal_column() construct, which when being
      “proxied” through a subquery to be referred towards by a label
      that matches its text, the label would not have quoting rules
      applied to it, even if the string in the Label were set up as a
      quoted_name construct. Not applying quoting to the text of the
      Label is a bug because this text is strictly a SQL identifier
      name and not a SQL expression, and the string should not have
      quotes embedded into it already unlike the literal_column()
      which it may be applied towards. The existing behavior of a
      non-labeled literal_column() being propagated as is on the
      outside of a subquery is maintained in order to help with manual
      quoting schemes, although it’s not clear if valid SQL can be
      generated for such a construct in any case.  References: #4730
    * postgresql
      + Fixed bug where PostgreSQL dialect could not correctly reflect
      an ENUM datatype that has no members, returning a list with None
      for the get_enums() call and raising a TypeError when reflecting
      a column which has such a datatype. The inspection now returns
      an empty list.  References: #4701
      + Added support for column sorting flags when reflecting indexes
      for PostgreSQL, including ASC, DESC, NULLSFIRST, NULLSLAST. Also
      adds this facility to the reflection system in general which can
      be applied to other dialects in future releases. Pull request
      courtesy Eli Collins.  References: #4717
    * mysql
      + Fixed bug where MySQL ON DUPLICATE KEY UPDATE would not
      accommodate setting a column to the value NULL. Pull request
      courtesy Lukáš Banič.  References: #4715
* Sun Jun 09 2019
  - update to version 1.3.4:
    * orm
      + Fixed issue where the AttributeEvents.active_history flag would
      not be set for an event listener that propgated to a subclass
      via the AttributeEvents.propagate flag. This bug has been
      present for the full span of the AttributeEvents system.
      References: #4695
      + Fixed regression where new association proxy system was still
      not proxying hybrid attributes when they made use of the
      @hybrid_property.expression decorator to return an alternate SQL
      expression, or when the hybrid returned an arbitrary
      PropComparator, at the expression level. This involved futher
      generalization of the heuristics used to detect the type of
      object being proxied at the level of QueryableAttribute, to
      better detect if the descriptor ultimately serves mapped classes
      or column expressions.  References: #4690
      + Applied the mapper “configure mutex” against the declarative
      class mapping process, to guard against the race which can occur
      if mappers are used while dynamic module import schemes are
      still in the process of configuring mappers for related
      classes. This does not guard against all possible race
      conditions, such as if the concurrent import has not yet
      encountered the dependent classes as of yet, however it guards
      against as much as possible within the SQLAlchemy declarative
      process.  References: #4686
      + A warning is now emitted for the case where a transient object
      is being merged into the session with Session.merge() when that
      object is already transient in the Session. This warns for the
      case where the object would normally be double-inserted.
      References: #4647
      + Fixed regression in new relationship m2o comparison logic first
      introduced at Improvement to the behavior of many-to-one query
      expressions when comparing to an attribute that is persisted as
      NULL and is in an un-fetched state in the mapped instance. Since
      the attribute has no explicit default, it needs to default to
      NULL when accessed in a persistent setting.  References: #4676
    * engine
      + Moved the “rollback” which occurs during dialect initialization
      so that it occurs after additional dialect-specific initialize
      steps, in particular those of the psycopg2 dialect which would
      inadvertently leave transactional state on the first new
      connection, which could interfere with some psycopg2-specific
      APIs which require that no transaction is started. Pull request
      courtesy Matthew Wilkes.  References: #4663
    * sql
      + Fixed that the GenericFunction class was inadvertently
      registering itself as one of the named functions. Pull request
      courtesy Adrien Berchet.  References: #4653
      + Fixed issue where double negation of a boolean column wouldn’t
      reset the “NOT” operator.  References: #4618
      + The GenericFunction namespace is being migrated so that function
      names are looked up in a case-insensitive manner, as SQL
      functions do not collide on case sensitive differences nor is
      this something which would occur with user-defined functions or
      stored procedures. Lookups for functions declared with
      GenericFunction now use a case insensitive scheme, however a
      deprecation case is supported which allows two or more
      GenericFunction objects with the same name of different cases to
      exist, which will cause case sensitive lookups to occur for that
      particular name, while emitting a warning at function
      registration time. Thanks to Adrien Berchet for a lot of work on
      this complicated feature.  References: #4569
    * postgresql
      + Fixed an issue where the “number of rows matched” warning would
      emit even if the dialect reported
      “supports_sane_multi_rowcount=False”, as is the case for
      psycogp2 with use_batch_mode=True and others.  References: #4661
    * mysql
      + Added support for DROP CHECK constraint which is required by
      MySQL 8.0.16 to drop a CHECK constraint; MariaDB supports plain
      DROP CONSTRAINT. The logic distinguishes between the two
      syntaxes by checking the server version string for MariaDB
      presence. Alembic migrations has already worked around this
      issue by implementing its own DROP for MySQL / MariaDB CHECK
      constraints, however this change implements it straight in Core
      so that its available for general use. Pull request courtesy
      Hannes Hansen.  References: #4650
    * mssql
      + Added support for SQL Server filtered indexes, via the
      mssql_where parameter which works similarly to that of the
      postgresql_where index function in the PostgreSQL dialect.  See
      also: Filtered Indexes References: #4657
      + Added error code 20047 to “is_disconnect” for pymssql. Pull
      request courtesy Jon Schuff.  References: #4680
    * misc
      + Removed errant “” symbol from which
      created an undesirable warning message.  References: #4625
* Sun Apr 21 2019
  - update to version 1.3.3:
    * orm
      + Fixed 1.3 regression in new “ambiguous FROMs” query logic
      introduced in Query.join() handles ambiguity in deciding the
      “left” side more explicitly where a Query that explicitly places
      an entity in the FROM clause with Query.select_from() and also
      joins to it using Query.join() would later cause an “ambiguous
      FROM” error if that entity were used in additional joins, as the
      entity appears twice in the “from” list of the Query. The fix
      resolves this ambiguity by folding the standalone entity into
      the join that it’s already a part of in the same way that
      ultimately happens when the SELECT statement is rendered.
      References: #4584
      + Adjusted the Query.filter_by() method to not call and()
      internally against multiple criteria, instead passing it off to
      Query.filter() as a series of criteria, instead of a single
      criteria. This allows Query.filter_by() to defer to
      Query.filter()’s treatment of variable numbers of clauses,
      including the case where the list is empty. In this case, the
      Query object will not have a .whereclause, which allows
      subsequent “no whereclause” methods like Query.select_from() to
      behave consistently.  References: #4606
    * postgresql
      + Fixed regression from release 1.3.2 caused by #4562 where a URL
      that contained only a query string and no hostname, such as for
      the purposes of specifying a service file with connection
      information, would no longer be propagated to psycopg2
      properly. The change in #4562 has been adjusted to further suit
      psycopg2’s exact requirements, which is that if there are any
      connection parameters whatsoever, the “dsn” parameter is no
      longer required, so in this case the query string parameters are
      passed alone.  References: #4601
    * mssql
      + Fixed issue in SQL Server dialect where if a bound parameter
      were present in an ORDER BY expression that would ultimately not
      be rendered in the SQL Server version of the statement, the
      parameters would still be part of the execution parameters,
      leading to DBAPI-level errors. Pull request courtesy Matt
      Lewellyn.  References: #4587
    * misc
      + Fixed behavioral regression as a result of deprecating the
      “use_threadlocal” flag for Pool, where the SingletonThreadPool
      no longer makes use of this option which causes the “rollback on
      return” logic to take place when the same Engine is used
      multiple times in the context of a transaction to connect or
      implicitly execute, thereby cancelling the transaction. While
      this is not the recommended way to work with engines and
      connections, it is nonetheless a confusing behavioral change as
      when using SingletonThreadPool, the transaction should stay open
      regardless of what else is done with the same engine in the same
      thread. The use_threadlocal flag remains deprecated however the
      SingletonThreadPool now implements its own version of the same
      logic.  References: #4585
      + Fixed bug where using copy.copy() or copy.deepcopy() on
      MutableList would cause the items within the list to be
      duplicated, due to an inconsistency in how Python pickle and
      copy both make use of __getstate__() and __setstate__()
      regarding lists. In order to resolve, a __reduce_ex__ method had
      to be added to MutableList. In order to maintain backwards
      compatibility with existing pickles based on __getstate__(), the
      __setstate__() method remains as well; the test suite asserts
      that pickles made against the old version of the class can still
      be deserialized by the pickle module.  References: #4603
* Wed Apr 10 2019
  - update to version 1.3.2:
    * orm
      + [orm] [bug] [ext] Restored instance-level support for plain
      Python descriptors, e.g. @property objects, in conjunction with
      association proxies, in that if the proxied object is not within
      ORM scope at all, it gets classified as “ambiguous” but is
      proxed directly. For class level access, a basic class
      level"__get__()" now returns the
      AmbiguousAssociationProxyInstance directly, rather than raising
      its exception, which is the closest approximation to the
      previous behavior that returned the AssociationProxy itself
      that’s possible. Also improved the stringification of these
      objects to be more descriptive of current state.  References:
      [#4573], #4574
      + [orm] [bug] Fixed bug where use of with_polymorphic() or other
      aliased construct would not properly adapt when the aliased
      target were used as the Select.correlate_except() target of a
      subquery used inside of a column_property(). This required a fix
      to the clause adaption mechanics to properly handle a selectable
      that shows up in the “correlate except” list, in a similar
      manner as which occurs for selectables that show up in the
      “correlate” list. This is ultimately a fairly fundamental bug
      that has lasted for a long time but it is hard to come across
      it.  References: #4537
      + [orm] [bug] Fixed regression where a new error message that was
      supposed to raise when attempting to link a relationship option
      to an AliasedClass without using PropComparator.of_type() would
      instead raise an AttributeError. Note that in 1.3, it is no
      longer valid to create an option path from a plain mapper
      relationship to an AliasedClass without using
      PropComparator.of_type().  References: #4566
    * sql
      + [sql] [bug] [documentation] Thanks to TypeEngine methods
      bind_expression, column_expression work with Variant,
      type-specific types, we no longer need to rely on recipes that
      subclass dialect-specific types directly, TypeDecorator can now
      handle all cases. Additionally, the above change made it
      slightly less likely that a direct subclass of a base SQLAlchemy
      type would work as expected, which could be
      misleading. Documentation has been updated to use TypeDecorator
      for these examples including the PostgreSQL “ArrayOfEnum”
      example datatype and direct support for the “subclass a type
      directly” has been removed.  References: #4580
    * postgresql
      + [postgresql] [feature] Added support for parameter-less
      connection URLs for the psycopg2 dialect, meaning, the URL can
      be passed to create_engine() as "postgresql+psycopg2://" with no
      additional arguments to indicate an empty DSN passed to libpq,
      which indicates to connect to “localhost” with no username,
      password, or database given. Pull request courtesy Julian
      Mehnle.  References: #4562
      + [postgresql] [bug] Modified the Select.with_for_update.of
      parameter so that if a join or other composed selectable is
      passed, the individual Table objects will be filtered from it,
      allowing one to pass a join() object to the parameter, as occurs
      normally when using joined table inheritance with the ORM. Pull
      request courtesy Raymond Lu.  References: #4550
* Sun Mar 10 2019
  - specfile:
    * removed test.patch (included upstream)
  - update to version 1.3.1:
    * orm
      + [orm] [bug] [ext] Fixed regression where an association proxy
      linked to a synonym would no longer work, both at instance level
      and at class level.  References: #4522
    * mssql
      + [mssql] [bug] A commit() is emitted after an isolation level
      change to SNAPSHOT, as both pyodbc and pymssql open an implicit
      transaction which blocks subsequent SQL from being emitted in
      the current transaction.  References: #4536
      + [mssql] [bug] Fixed regression in SQL Server reflection due to
      [#4393] where the removal of open-ended **kw from the Float
      datatype caused reflection of this type to fail due to a “scale”
      argument being passed.  References: #4525
* Wed Mar 06 2019
  - Add patch to fix test failure from upstream test.patch
* Wed Mar 06 2019
  - Update to versrion 1.3.0 (bsc#1124593, CVE-2019-7164, CVE-2019-7548):
    * See
      for deprecation list with this version
    * For the changes see
* Fri Feb 22 2019
  - Re-add build dependency on python-devel, removed December 2018,
    used for optional C extensions, and
  - update to v1.2.18
    Bugfix releases, find details at
* Thu Feb 21 2019
  - version update to 1.2.17
* Sat Feb 09 2019
  - update to version 1.2.16:
    Bugfix releases, find details at
  - 1.2.16 includes the fix to maintain compiled_params / replacement_expressions
    within expanding IN (bsc#1176953)
* Tue Dec 04 2018
  - Remove superfluous devel dependency for noarch package
* Mon Nov 12 2018
  - update to version 1.2.14:
    * orm
      + [orm] [bug] Fixed bug in Session.bulk_update_mappings() where
      alternate mapped attribute names would result in the primary key
      column of the UPDATE statement being included in the SET clause,
      as well as the WHERE clause; while usually harmless, for SQL
      Server this can raise an error due to the IDENTITY column. This
      is a continuation of the same bug that was fixed in #3849, where
      testing was insufficient to catch this additional flaw.
      References: #4357
      + [orm] [bug] Fixed a minor performance issue which could in some
      cases add unnecessary overhead to result fetching, involving the
      use of ORM columns and entities that include those same columns
      at the same time within a query. The issue has to do with hash /
      eq overhead when referring to the column in different ways.
      References: #4347
    * mysql
      + [mysql] [bug] Fixed regression caused by #4344 released in
      1.2.13, where the fix for MySQL 8.0’s case sensitivity problem
      with referenced column names when reflecting foreign key
      referents is worked around using the information_schema.columns
      view. The workaround was failing on OSX /
      lower_case_table_names=2 which produces non-matching casing for
      the information_schema.columns vs. that of SHOW CREATE TABLE, so
      in case-insensitive SQL modes case-insensitive matching is now
      used.  References: #4361
* Thu Nov 01 2018
  - update to version 1.2.13:
    * orm
      + [orm] [bug] Fixed bug where “dynamic” loader needs to explicitly
      set the “secondary” table in the FROM clause of the query, to
      suit the case where the secondary is a join object that is
      otherwise not pulled into the query from its columns alone.
      References: #4349
    * orm declarative
      + [bug] [declarative] [orm] Fixed regression caused by #4326 in
      version 1.2.12 where using declared_attr with a mixin in
      conjunction with orm.synonym() would fail to map the synonym
      properly to an inherited subclass.  References: #4350
      + [bug] [declarative] [orm] The column conflict resolution
      technique discussed at Resolving Column Conflicts is now
      functional for a Column that is also a primary key
      column. Previously, a check for primary key columns declared on
      a single-inheritance subclass would occur before the column copy
      were allowed to pass.  References: #4352
    * sql
      + [sql] [feature] Refactored SQLCompiler to expose a
      SQLCompiler.group_by_clause() method similar to the
      SQLCompiler.order_by_clause() and SQLCompiler.limit_clause()
      methods, which can be overridden by dialects to customize how
      GROUP BY renders. Pull request courtesy Samuel Chou.
      + [sql] [bug] Fixed bug where the Enum.create_constraint flag on
      the Enum datatype would not be propagated to copies of the type,
      which affects use cases such as declarative mixins and abstract
      bases.  References: #4341
    * postgresql
      + [postgresql] [bug] Added support for the aggregate_order_by
      function to receive multiple ORDER BY elements, previously only
      a single element was accepted.  References: #4337
    * mysql
      + [mysql] [bug] Added word function to the list of reserved words
      for MySQL, which is now a keyword in MySQL 8.0 References: #4348
      + [mysql] [bug] Added a workaround for a MySQL bug #88718
      introduced in the 8.0 series, where the reflection of a foreign
      key constraint is not reporting the correct case sensitivity for
      the referred column, leading to errors during use of the
      reflected constraint such as when using the automap
      extension. The workaround emits an additional query to the
      information_schema tables in order to retrieve the correct case
      sensitive name.  References: #4344
    * misc
      + [misc] [bug] Fixed issue where part of the utility language
      helper internals was passing the wrong kind of argument to the
      Python __import__ builtin as the list of modules to be
      imported. The issue produced no symptoms within the core library
      but could cause issues with external applications that redefine
      the __import__ builtin or otherwise instrument it. Pull request
      courtesy Joe Urciuoli.
      + [misc] [bug] [py3k] Fixed additional warnings generated by
      Python 3.7 due to changes in the organization of the Python
      collections and packages. Previous collections
      warnings were fixed in version 1.2.11. Pull request courtesy
      xtreak.  References: #4339
      + [bug] [ext] Added missing .index() method to list-based
      association collections in the association proxy extension.
* Sat Sep 22 2018
  - update to version 1.2.12:
    * orm
      + [orm] [bug] Added a check within the weakref cleanup for the
      InstanceState object to check for the presence of the dict
      builtin, in an effort to reduce error messages generated when
      these cleanups occur during interpreter shutdown. Pull request
      courtesy Romuald Brunet.
      + [orm] [bug] Fixed bug where use of Lateral construct in
      conjunction with Query.join() as well as
      Query.select_entity_from() would not apply clause adaption to
      the right side of the join. “lateral” introduces the use case of
      the right side of a join being correlatable. Previously,
      adaptation of this clause wasn’t considered. Note that in 1.2
      only, a selectable introduced by Query.subquery() is still not
      adapted due to #4304; the selectable needs to be produced by the
      select() function to be the right side of the “lateral” join.
      References: #4334
      + [orm] [bug] Fixed 1.2 regression caused by #3472 where the
      handling of an “updated_at” style column within the context of a
      post-update operation would also occur for a row that is to be
      deleted following the update, meaning both that a column with a
      Python-side value generator would show the now-deleted value
      that was emitted for the UPDATE before the DELETE (which was not
      the previous behavor), as well as that a SQL- emitted value
      generator would have the attribute expired, meaning the previous
      value would be unreachable due to the row having been deleted
      and the object detached from the session.The “postfetch” logic
      that was added as part of #3472 is now skipped entirely for an
      object that ultimately is to be deleted.  References: #4327
    * orm declarative
      + [bug] [declarative] [orm] Fixed bug where the declarative scan
      for attributes would receive the expression proxy delivered by a
      hybrid attribute at the class level, and not the hybrid
      attribute itself, when receiving the descriptor via the
      @declared_attr callable on a subclass of an already-mapped
      class. This would lead to an attribute that did not report
      itself as a hybrid when viewed within
      Mapper.all_orm_descriptors.  References: #4326
    * postgresql
      + [postgresql] [bug] Fixed bug in PostgreSQL dialect where
      compiler keyword arguments such as literal_binds=True were not
      being propagated to a DISTINCT ON expression.  References: #4325
      + [postgresql] [bug] Fixed the postgresql.array_agg() function,
      which is a slightly altered version of the usual
      functions.array_agg() function, to also accept an incoming
      “type” argument without forcing an ARRAY around it, essentially
      the same thing that was fixed for the generic function in 1.1 in
      [#4107].  References: #4324
      + [postgresql] [bug] Fixed bug in PostgreSQL ENUM reflection where
      a case-sensitive, quoted name would be reported by the query
      including quotes, which would not match a target column during
      table reflection as the quotes needed to be stripped off.
      References: #4323
    * oracle
      + [oracle] [bug] Fixed issue for cx_Oracle 7.0 where the behavior
      of Oracle param.getvalue() now returns a list, rather than a
      single scalar value, breaking autoincrement logic throughout the
      Core and ORM. The dml_ret_array_val compatibility flag is used
      for cx_Oracle 6.3 and 6.4 to establish compatible behavior with
      7.0 and forward, for cx_Oracle 6.2.1 and prior a version number
      check falls back to the old logic.  References: #4335
    * misc
      + [bug] [ext] Fixed issue where BakedQuery did not include the
      specific query class used by the Session as part of the cache
      key, leading to incompatibilities when using custom query
      classes, in particular the ShardedQuery which has some different
      argument signatures.  References: #4328
* Sat Aug 25 2018
  - update to version 1.2.11:
    * orm declarative
      + [bug] [declarative] [orm] Fixed issue in previously untested use
      case, allowing a declarative mapped class to inherit from a
      classically-mapped class outside of the declarative base,
      including that it accommodates for unmapped intermediate
      classes. An unmapped intermediate class may specify
      __abstract__, which is now interpreted correctly, or the
      intermediate class can remain unmarked, and the classically
      mapped base class will be detected within the hierarchy
      regardless. In order to anticipate existing scenarios which may
      be mixing in classical mappings into existing declarative
      hierarchies, an error is now raised if multiple mapped bases are
      detected for a given class.   References: #4321
    * sql
      + [sql] [bug] Fixed issue that is closely related to #3639 where
      an expression rendered in a boolean context on a non-native
      boolean backend would be compared to 1/0 even though it is
      already an implcitly boolean expression, when
      ColumnElement.self_group() were used. While this does not affect
      the user-friendly backends (MySQL, SQLite) it was not handled by
      Oracle (and possibly SQL Server). Whether or not the expression
      is implicitly boolean on any database is now determined up front
      as an additional check to not generate the integer comparison
      within the compliation of the statement.  References: #4320
      + [sql] [bug] Added missing window function parameters
      WithinGroup.over.range_ and WithinGroup.over.rows parameters to
      the WithinGroup.over() and FunctionFilter.over() methods, to
      correspond to the range/rows feature added to the “over” method
      of SQL functions as part of #3049 in version 1.1.  References:
      + [sql] [bug] Fixed bug where the multi-table support for UPDATE
      and DELETE statements did not consider the additional FROM
      elements as targets for correlation, when a correlated SELECT
      were also combined with the statement. This change now includes
      that a SELECT statement in the WHERE clause for such a statement
      will try to auto-correlate back to these additional tables in
      the parent UPDATE/DELETE or unconditionally correlate if
      Select.correlate() is used. Note that auto-correlation raises an
      error if the SELECT statement would have no FROM clauses as a
      result, which can now occur if the parent UPDATE/DELETE
      specifies the same tables in its additional set of tables;
      specify Select.correlate() explicitly to resolve.  References:
    * oracle
      + [oracle] [bug] For cx_Oracle, Integer datatypes will now be
      bound to “int”, per advice from the cx_Oracle
      developers. Previously, using cx_Oracle.NUMBER caused a loss in
      precision within the cx_Oracle 6.x series.  References: #4309
    * misc
      + [bug] [py3k] Started importing “collections” from
      “” under Python 3.3 and greater for Python 3.8
      compatibility. Pull request courtesy Nathaniel Knight.
      + Fixed issue where the “schema” name used for a SQLite database
      within table reflection would not quote the schema name
      correctly. Pull request courtesy Phillip Cloud.
* Sat Jul 14 2018
  - update to version 1.2.10:
    * orm
      + [orm] [bug] Fixed bug in Bundle construct where placing two
      columns of the same name would be de-duplicated, when the Bundle
      were used as part of the rendered SQL, such as in the ORDER BY
      or GROUP BY of the statement.  References: #4295
      + [orm] [bug] Fixed regression in 1.2.9 due to #4287 where using a
      Load option in conjunction with a string wildcard would result
      in a TypeError.  References: #4298
    * sql
      + [sql] [bug] Fixed bug where a Sequence would be dropped
      explicitly before any Table that refers to it, which breaks in
      the case when the sequence is also involved in a server-side
      default for that table, when using MetaData.drop_all(). The step
      which processes sequences to be dropped via non server-side
      column default functions is now invoked after the table itself
      is dropped.  References: #4300
* Sun Jul 01 2018
  - removed patch fix_test_reflection.patch (included upstream)
  - update to version 1.2.9:
    * orm
      + [orm] [bug] Fixed issue where chaining multiple join elements
      inside of Query.join() might not correctly adapt to the previous
      left-hand side, when chaining joined inheritance classes that
      share the same base class.
      References: #3505
      + [orm] [bug] Fixed bug in cache key generation for baked queries
      which could cause a too-short cache key to be generated for the
      case of eager loads across subclasses. This could in turn cause
      the eagerload query to be cached in place of a non-eagerload
      query, or vice versa, for a polymorhic “selectin” load, or
      possibly for lazy loads or selectin loads as well.
      References: #4287
      + [orm] [bug] Fixed bug in new polymorphic selectin loading where
      the BakedQuery used internally would be mutated by the given
      loader options, which would both inappropriately mutate the
      subclass query as well as carry over the effect to subsequent
      References: #4286
      + [orm] [bug] Fixed regression caused by #4256 (itself a
      regression fix for #4228) which breaks an undocumented behavior
      which converted for a non-sequence of entities passed directly
      to the Query constructor into a single-element sequence. While
      this behavior was never supported or documented, it’s already in
      use so has been added as a behavioral contract to Query.
      References: #4269
      + [orm] [bug] Fixed an issue that was both a performance
      regression in 1.2 as well as an incorrect result regarding the
      “baked” lazy loader, involving the generation of cache keys from
      the original Query object’s loader options. If the loader
      options were built up in a “branched” style using common base
      elements for multiple options, the same options would be
      rendered into the cache key repeatedly, causing both a
      performance issue as well as generating the wrong cache
      key. This is fixed, along with a performance improvement when
      such “branched” options are applied via Query.options() to
      prevent the same option objects from being applied repeatedly.
      References: #4270
    * sql
      + [sql] [bug] Fixed regression in 1.2 due to #4147 where a Table
      that has had some of its indexed columns redefined with new
      ones, as would occur when overriding columns during reflection
      or when using Table.extend_existing, such that the
      Table.tometadata() method would fail when attempting to copy
      those indexes as they still referred to the replaced column. The
      copy logic now accommodates for this condition.
      References: #4279
    * mysql
      + [mysql] [bug] Fixed percent-sign doubling in
      mysql-connector-python dialect, which does not require
      de-doubling of percent signs. Additionally, the mysql-
      connector-python driver is inconsistent in how it passes the
      column names in cursor.description, so a workaround decoder has
      been added to conditionally decode these
      randomly-sometimes-bytes values to unicode only if needed. Also
      improved test support for mysql-connector-python, however it
      should be noted that this driver still has issues with unicode
      that continue to be unresolved as of yet.
      + [mysql] [bug] Fixed bug in index reflection where on MySQL 8.0
      an index that includes ASC or DESC in an indexed column
      specfication would not be correctly reflected, as MySQL 8.0
      introduces support for returning this information in a table
      definition string.
      References: #4293
      + [mysql] [bug] Fixed bug in MySQLdb dialect and variants such as
      PyMySQL where an additional “unicode returns” check upon
      connection makes explicit use of the “utf8” character set, which
      in MySQL 8.0 emits a warning that utf8mb4 should be used. This
      is now replaced with a utf8mb4 equivalent. Documentation is also
      updated for the MySQL dialect to specify utf8mb4 in all
      examples. Additional changes have been made to the test suite to
      use utf8mb3 charsets and databases (there seem to be collation
      issues in some edge cases with utf8mb4), and to support
      configuration default changes made in MySQL 8.0 such as
      explicit_defaults_for_timestamp as well as new errors raised for
      invalid MyISAM indexes.
      References: #4283
      + [mysql] [bug] The Update construct now accommodates a Join
      object as supported by MySQL for UPDATE..FROM. As the construct
      already accepted an alias object for a similar purpose, the
      feature of UPDATE against a non-table was already implied so
      this has been added.
      References: #3645
    * sqlite
      + [sqlite] [bug] Fixed issue in test suite where SQLite 3.24 added
      a new reserved word that conflicted with a usage in
      TypeReflectionTest. Pull request courtesy Nils Philippsen.
    * mssql
      + [mssql] [bug] Fixed bug in MSSQL reflection where when two
      same-named tables in different schemas had same-named primary
      key constraints, foreign key constraints referring to one of the
      tables would have their columns doubled, causing errors. Pull
      request courtesy Sean Dunn.
      References: #4228
      + [mssql] [bug] [py3k] Fixed issue within the SQL Server dialect
      under Python 3 where when running against a non-standard SQL
      server database that does not contain either the
      “sys.dm_exec_sessions” or “sys.dm_pdw_nodes_exec_sessions”
      views, leading to a failure to fetch the isolation level, the
      error raise would fail due to an UnboundLocalError.
      References: #4273
    * oracle
      + [oracle] [feature] Added a new event currently used only by the
      cx_Oracle dialect, DialectEvents.setiputsizes(). The event
      passes a dictionary of BindParameter objects to DBAPI-specific
      type objects that will be passed, after conversion to parameter
      names, to the cx_Oracle cursor.setinputsizes() method. This
      allows both visibility into the setinputsizes process as well as
      the ability to alter the behavior of what datatypes are passed
      to this method.
      See als Fine grained control over cx_Oracle data binding and performance with setinputsizes
      References: #4290
      + [oracle] [bug] [mysql] Fixed INSERT FROM SELECT with CTEs for
      the Oracle and MySQL dialects, where the CTE was being placed
      above the entire statement as is typical with other databases,
      however Oracle and MariaDB 10.2 wants the CTE underneath the
      “INSERT” segment. Note that the Oracle and MySQL dialects don’t
      yet work when a CTE is applied to a subquery inside of an UPDATE
      or DELETE statement, as the CTE is still applied to the top
      rather than inside the subquery.
      References: #4275
    * misc
      + [feature] [ext] Added new attribute Query.lazy_loaded_from which
      is populated with an InstanceState that is using this Query in
      order to lazy load a relationship. The rationale for this is
      that it serves as a hint for the horizontal sharding feature to
      use, such that the identity token of the state can be used as
      the default identity token to use for the query within
      References: #4243
      + [bug] [py3k] Replaced the usage of inspect.formatargspec() with
      a vendored version copied from the Python standard library, as
      inspect.formatargspec() is deprecated and as of Python 3.7.0 is
      emitting a warning.
      References: #4291
* Tue Jun 26 2018
  - add upstream fix_test_reflection.patch to fix tests with new sqlite
* Fri Jun 22 2018
  - update to version 1.2.8:
    * orm
      + [orm] [bug] Fixed regression in 1.2.7 caused by #4228, which
      itself was fixing a 1.2-level regression, where the query_cls
      callable passed to a Session was assumed to be a subclass of
      Query with class method availability, as opposed to an
      arbitrary callable. In particular, the dogpile caching example
      illustrates query_cls as a function and not a Query subclass.
      References: #4256
      + [orm] [bug] Fixed a long-standing regression that occurred in
      version 1.0, which prevented the use of a custom MapperOption
      that alters the _params of a Query object for a lazy load,
      since the lazy loader itself would overwrite those parameters.
      This applies to the “temporal range” example on the wiki. Note
      however that the Query.populate_existing() method is now
      required in order to rewrite the mapper options associated with
      an object already loaded in the identity map.
      As part of this change, a custom defined MapperOption will now
      cause lazy loaders related to the target object to use a non-
      baked query by default unless the
      MapperOption._generate_cache_key() method is implemented. In
      particular, this repairs one regression which occured when
      using the dogpile.cache “advanced” example, which was not
      returning cached results and instead emitting SQL due to an
      incompatibility with the baked query loader; with the change,
      the RelationshipCache option included for many releases in the
      dogpile example will disable the “baked” query altogether. Note
      that the dogpile example is also modernized to avoid both of
      these issues as part of issue #4258.  References: #4128
      + [orm] [bug] Fixed bug where the new
      baked.Result.with_post_criteria() method would not interact
      with a subquery-eager loader correctly, in that the “post
      criteria” would not be applied to embedded subquery
      eager loaders. This is related to #4128 in that the post
      criteria feature is now used by the lazy loader.
      + [orm] [bug] Updated the dogpile.caching example to include new
      structures that accommodate for the “baked” query system, which
      is used by default within lazy loaders and some eager
      relationship loaders. The dogpile.caching “relationship_caching”
      and “advanced” examples were also broken due to #4256. The
      issue here is also worked-around by the fix in #4128.
      References: #4258
    * engine
      + [engine] [bug] Fixed connection pool issue whereby if a
      disconnection error were raised during the connection pool’s
      “reset on return” sequence in conjunction with an explicit
      transaction opened against the enclosing Connection object
      (such as from calling Session.close() without a rollback or
      commit, or calling Connection.close() without first closing a
      transaction declared with Connection.begin()), a double-checkin
      would result, which could then lead towards concurrent
      checkouts of the same connection. The double-checkin condition
      is now prevented overall by an assertion, as well as the
      specific double-checkin scenario has been fixed.
      References: #4252
      + [engine] [bug] Fixed a reference leak issue where the values of
      the parameter dictionary used in a statement execution would
      remain referenced by the “compiled cache”, as a result of
      storing the key view used by Python 3 dictionary keys(). Pull
      request courtesy Olivier Grisel.
    * sql
      + [sql] [bug] Fixed issue where the “ambiguous literal” error
      message used when interpreting literal values as SQL expression
      values would encounter a tuple value, and fail to format the
      message properly. Pull request courtesy Miguel Ventura.
    * mssql
      + [mssql] [bug] Fixed a 1.2 regression caused by #4061 where the
      SQL Server “BIT” type would be considered to be “native
      boolean”. The goal here was to avoid creating a CHECK
      constraint on the column, however the bigger issue is that the
      BIT value does not behave like a true/false constant and cannot
      be interpreted as a standalone expression, e.g.  “WHERE
      <column>”. The SQL Server dialect now goes back to being non-
      native boolean, but with an extra flag that still avoids
      creating the CHECK constraint.  References: #4250
    * oracle
      + [oracle] [bug] The Oracle BINARY_FLOAT and BINARY_DOUBLE
      datatypes now participate within cx_Oracle.setinputsizes(),
      passing along NATIVE_FLOAT, so as to support the NaN value.
      Additionally, oracle.BINARY_FLOAT, oracle.BINARY_DOUBLE and
      oracle.DOUBLE_PRECISION now subclass Float, since these are
      floating point datatypes, not decimal. These datatypes were
      already defaulting the Float.asdecimal flag to False in line
      with what Float already does.  References: #4264
      + [oracle] [bug] Added reflection capabilities for the
      oracle.BINARY_FLOAT, oracle.BINARY_DOUBLE datatypes.
      + [oracle] [bug] Altered the Oracle dialect such that when an
      Integer type is in use, the cx_Oracle.NUMERIC type is set up
      for setinputsizes(). In SQLAlchemy 1.1 and earlier,
      cx_Oracle.NUMERIC was passed for all numeric types
      unconditionally, and in 1.2 this was removed to allow for
      better numeric precision. However, for integers, some
      database/client setups will fail to coerce boolean values
      True/False into integers which introduces regressive behavior
      when using SQLAlchemy 1.2. Overall, the setinputsizes logic
      seems like it will need a lot more flexibility going forward so
      this is a start for that.  References: #4259
    * misc
      + [bug] [ext] The horizontal sharding extension now makes use of
      the identity token added to ORM identity keys as part of #4137,
      when an object refresh or column-based deferred load or
      unexpiration operation occurs.  Since we know the “shard” that
      the object originated from, we make use of this value when
      refreshing, thereby avoiding queries against other shards that
      don’t match this object’s identity in any case.
      References: #4247
      + [bug] [ext] Fixed a race condition which could occur if automap
      AutomapBase.prepare() were used within a multi-threaded context
      against other threads which may call configure_mappers() as a
      result of use of other mappers. The unfinished mapping work of
      automap is particularly sensitive to being pulled in by a
      configure_mappers() step leading to errors.  References: #4266
      + [bug] [tests] Fixed a bug in the test suite where if an
      external dialect returned None for server_version_info, the
      exclusion logic would raise an AttributeError.
      References: #4249
* Sat Apr 21 2018
  - update to version 1.2.7:
    * orm
      + [orm] [bug] Fixed regression in 1.2 within sharded query feature
      where the new “identity_token” element was not being correctly
      considered within the scope of a lazy load operation, when
      searching the identity map for a related many-to-one
      element. The new behavior will allow for making use of the
      “id_chooser” in order to determine the best identity key to
      retrieve from the identity map. In order to achieve this, some
      refactoring of 1.2’s “identity_token” approach has made some
      slight changes to the implementation of ShardedQuery which
      should be noted for other derivations of this class.
      References: #4228
      + [orm] [bug] Fixed issue in single-inheritance loading where the
      use of an aliased entity against a single-inheritance subclass
      in conjunction with the Query.select_from() method would cause
      the SQL to be rendered with the unaliased table mixed in to the
      query, causing a cartesian product. In particular this was
      affecting the new “selectin” loader when used against a
      single-inheritance subclass.  References: #4241
    * sql
      + [sql] [bug] Fixed issue where the compilation of an INSERT
      statement with the “literal_binds” option that also uses an
      explicit sequence and “inline” generation, as on Postgresql and
      Oracle, would fail to accommodate the extra keyword argument
      within the sequence processing routine.  References: #4231
    * postgresql
      + [postgresql] [feature] Added new PG type postgresql.REGCLASS
      which assists in casting table names to OID values. Pull request
      courtesy Sebastian Bank.  References: #4160
      + [postgresql] [bug] Fixed bug where the special “not equals”
      operator for the Postgresql “range” datatypes such as DATERANGE
      would fail to render “IS NOT NULL” when compared to the Python
      None value.  References: #4229
    * mssql
      + [mssql] [bug] Fixed 1.2 regression caused by #4060 where the
      query used to reflect SQL Server cross-schema foreign keys was
      limiting the criteria incorrectly.  References: #4234
    * oracle
      + [oracle] [bug] The Oracle NUMBER datatype is reflected as
      INTEGER if the precision is NULL and the scale is zero, as this
      is how INTEGER values come back when reflected from Oracle’s
      tables. Pull request courtesy Kent Bower.
* Sun Apr 01 2018
  - specfile:
    * run spec-cleaner
  - update to version 1.2.6:
    * orm
      + [orm] [bug] Fixed bug where using Mutable.associate_with() or
      Mutable.as_mutable() in conjunction with a class that has non-
      primary mappers set up with alternatively-named attributes would
      produce an attribute error. Since non-primary mappers are not
      used for persistence, the mutable extension now excludes
      non-primary mappers from its instrumentation steps.  References:
    * engine
      + [engine] [bug] Fixed bug in connection pool where a connection
      could be present in the pool without all of its “connect” event
      handlers called, if a previous “connect” handler threw an
      exception; note that the dialects themselves have connect
      handlers that emit SQL, such as those which set transaction
      isolation, which can fail if the database is in a non-available
      state, but still allows a connection. The connection is now
      invalidated first if any of the connect handlers fail.
      References: #4225
    * sql
      + [sql] [bug] Fixed a regression that occurred from the previous
      fix to #4204 in version 1.2.5, where a CTE that refers to itself
      after the CTE.alias() method has been called would not refer to
      iself correctly.  References: #4204
    * postgresql
      + [postgresql] [feature] Added support for “PARTITION BY” in
      Postgresql table definitions, using
      “postgresql_partition_by”. Pull request courtesy Vsevolod
    * mssql
      + [mssql] [bug] Adjusted the SQL Server version detection for
      pyodbc to only allow for numeric tokens, filtering out
      non-integers, since the dialect does tuple- numeric comparisons
      with this value. This is normally true for all known SQL Server
      / pyodbc drivers in any case.  References: #4227
    * oracle
      + [oracle] [bug] The minimum cx_Oracle version supported is 5.2
      (June 2015). Previously, the dialect asserted against version
      5.0 but as of 1.2.2 we are using some symbols that did not
      appear until 5.2.  References: #4211
    * misc
      + [bug] [declarative] Removed a warning that would be emitted when
      calling upon __table_args__, __mapper_args__ as named with a
      @declared_attr method, when called from a non-mapped declarative
      mixin. Calling these directly is documented as the approach to
      use when one is overidding one of these methods on a mapped
      class. The warning still emits for regular attribute names.
      References: #4221
* Thu Mar 08 2018
  - update to version 1.2.5:
    * orm
      + [orm] [feature] Added new feature
      Query.only_return_tuples(). Causes the Query object to return
      keyed tuple objects unconditionally even if the query is against
      a single entity. Pull request courtesy Eric Atkin.
      + [orm] [bug] Fixed bug in new “polymorphic selectin” loading when
      a selection of polymorphic objects were to be partially loaded
      from a relationship lazy loader, leading to an “empty IN”
      condition within the load that raises an error for the “inline”
      form of “IN”. References: #4199
      + [orm] [bug] Fixed 1.2 regression where a mapper option that
      contains an AliasedClass object, as is typical when using the
      QueryableAttribute.of_type() method, could not be pickled. 1.1’s
      behavior was to omit the aliased class objects from the path, so
      this behavior is restored.  References: #4209
    * sql
      + [sql] [bug] Fixed bug in :class:.`CTE` construct along the same
      lines as that of #4204 where a CTE that was aliased would not
      copy itself correctly during a “clone” operation as is frequent
      within the ORM as well as when using the ClauseElement.params()
      method.  References: #4210
      + [sql] [bug] Fixed bug in CTE rendering where a CTE that was also
      turned into an Alias would not render its “ctename AS aliasname”
      clause appropriately if there were more than one reference to
      the CTE in a FROM clause.  References: #4204
      + [sql] [bug] Fixed bug in new “expanding IN parameter” feature
      where the bind parameter processors for values wasn’t working at
      all, tests failed to cover this pretty basic case which includes
      that ENUM values weren’t working.  References: #4198
    * postgresql
      + [postgresql] [bug] [py3k] Fixed bug in Postgresql COLLATE /
      ARRAY adjustment first introduced in #4006 where new behaviors
      in Python 3.7 regular expressions caused the fix to fail.  This
      change is also backported to: 1.1.18 References: #4208
    * mysql
      + [mysql] [bug] MySQL dialects now query the server version using
      SELECT @@version explicitly to the server to ensure we are
      getting the correct version information back. Proxy servers like
      MaxScale interfere with the value that is passed to the DBAPI’s
      connection.server_version value so this is no longer reliable.
      This change is also backported to: 1.1.18 References: #4205
* Sat Feb 24 2018
  - update to version 1.2.4:
    * orm
      + [orm] [bug] Fixed 1.2 regression in ORM versioning feature where
      a mapping against a select() or alias() that also used a
      versioning column against the underlying table would fail due to
      the check added as part of #3673.  References: #4193
    * engine
      + [engine] [bug] Fixed regression caused in 1.2.3 due to fix from
      [#4181] where the changes to the event system involving Engine and
      OptionEngine did not accommodate for event removals, which would
      raise an AttributeError when invoked at the class level.
      References: #4190
    * sql
      + [sql] [bug] Fixed bug where CTE expressions would not have their
      name or alias name quoted when the given name is case sensitive
      or otherwise requires quoting. Pull request courtesy Eric Atkin.
      References: #4197
* Sun Feb 18 2018
  - update to version 1.2.3:
    * orm
      + [orm] [feature] Added new argument
      attributes.set_attribute.inititator to the
      attributes.set_attribute() function, allowing an event token
      received from a listener function to be propagated to subsequent
      set events.
      + [orm] [bug] Fixed issue in post_update feature where an UPDATE
      is emitted when the parent object has been deleted but the
      dependent object is not. This issue has existed for a long time
      however since 1.2 now asserts rows matched for post_update, this
      was raising an error.  This change is also backported to: 1.1.16
      References: #4187
      + [orm] [bug] Fixed regression caused by fix for issue #4116
      affecting versions 1.2.2 as well as 1.1.15, which had the effect
      of mis-calculation of the “owning class” of an AssociationProxy
      as the NoneType class in some declarative mixin/inheritance
      situations as well as if the association proxy were accessed off
      of an un-mapped class. The “figure out the owner” logic has been
      replaced by an in-depth routine that searches through the
      complete mapper hierarchy assigned to the class or subclass to
      determine the correct (we hope) match; will not assign the owner
      if no match is found. An exception is now raised if the proxy is
      used against an un-mapped instance.  This change is also
      backported to: 1.1.16 References: #4185
      + [orm] [bug] Fixed bug where the Bundle object did not correctly
      report upon the primary Mapper object represened by the bundle,
      if any. An immediate side effect of this issue was that the new
      selectinload loader strategy wouldn’t work with the horizontal
      sharding extension.  References: #4175
      + [orm] [bug] Fixed bug in concrete inheritance mapping where
      user-defined attributes such as hybrid properties that mirror
      the names of mapped attributes from sibling classes would be
      overwritten by the mapper as non-accessible at the instance
      level. Additionally ensured that user-bound descriptors are not
      implicitly invoked at the class level during the mapper
      configuration stage.  References: #4188
      + [orm] [bug] Fixed bug where the orm.reconstructor() event helper
      would not be recognized if it were applied to the __init__()
      method of the mapped class.  References: #4178
    * engine
      + [engine] [bug] Fixed bug where events associated with an Engine
      at the class level would be doubled when the
      Engine.execution_options() method were used. To achieve this,
      the semi-private class OptionEngine no longer accepts events
      directly at the class level and will raise an error; the class
      only propagates class-level events from its parent
      Engine. Instance-level events continue to work as before.
      References: #4181
      + [engine] [bug] The URL object now allows query keys to be
      specified multiple times where their values will be joined into
      a list. This is to support the plugins feature documented at
      CreateEnginePlugin which documents that “plugin” can be passed
      multiple times. Additionally, the plugin names can be passed to
      create_engine() outside of the URL using the new
      create_engine.plugins parameter.  References: #4170
    * sql
      + [sql] [feature] Added support for Enum to persist the values of
      the enumeration, rather than the keys, when using a Python
      pep-435 style enumerated object. The user supplies a callable
      function that will return the string values to be
      persisted. This allows enumerations against non-string values to
      be value-persistable as well. Pull request courtesy Jon Snyder.
      References: #3906
      + [sql] [bug] Fixed bug where the Enum type wouldn’t handle enum
      “aliases” correctly, when more than one key refers to the same
      value. Pull request courtesy Daniel Knell.  References: #4180
    * postgresql
      + [postgresql] [bug] Added “SSL SYSCALL error: Operation timed
      out” to the list of messages that trigger a “disconnect”
      scenario for the psycopg2 driver. Pull request courtesy André
      Cruz.  This change is also backported to: 1.1.16
      + [postgresql] [bug] Added “TRUNCATE” to the list of keywords
      accepted by the Postgresql dialect as an “autocommit”-triggering
      keyword. Pull request courtesy Jacob Hayes.  This change is also
      backported to: 1.1.16
    * sqlite
      + [sqlite] [bug] Fixed the import error raised when a platform has
      neither pysqlite2 nor sqlite3 installed, such that the
      sqlite3-related import error is raised, not the pysqlite2 one
      which is not the actual failure mode. Pull request courtesy
    * oracle
      + [oracle] [feature] The ON DELETE options for foreign keys are
      now part of Oracle reflection. Oracle does not support ON UPDATE
      cascades. Pull request courtesy Miroslav Shubernetskiy.
      + [oracle] [bug] Fixed bug in cx_Oracle disconnect detection, used
      by pre_ping and other features, where an error could be raised
      as DatabaseError which includes a numeric error code; previously
      we weren’t checking in this case for a disconnect code.
      References: #4182
    * misc
      + [bug] [pool] Fixed a fairly serious connection pool bug where a
      connection that is acquired after being refreshed as a result of
      a user-defined DisconnectionError or due to the 1.2-released
      “pre_ping” feature would not be correctly reset if the
      connection were returned to the pool by weakref cleanup
      (e.g. the front-facing object is garbage collected); the weakref
      would still refer to the previously invalidated DBAPI connection
      which would have the reset operation erroneously called upon it
      instead. This would lead to stack traces in the logs and a
      connection being checked into the pool without being reset,
      which can cause locking issues.  This change is also backported
      to: 1.1.16 References: #4184
      + [bug] [tests] A test added in 1.2 thought to confirm a Python
      2.7 behavior turns out to be confirming the behavior only as of
      Python 2.7.8. Python bug #8743 still impacts set comparison in
      Python 2.7.7 and earlier, so the test in question involving
      AssociationSet no longer runs for these older Python 2.7
      versions.  References: #3265
* Sun Jan 28 2018
  - update to version 1.2.2:
    * orm
      + [orm] [bug] Fixed 1.2 regression regarding new bulk_replace
      event where a backref would fail to remove an object from the
      previous owner when a bulk-assignment assigned the object to a
      new owner.  References: #4171
    * mysql
      + [mysql] [bug] Added more MySQL 8.0 reserved words to the MySQL
      dialect for quoting purposes. Pull request courtesy Riccardo
    * mssql
      + [mssql] [bug] Added ODBC error code 10054 to the list of error
      codes that count as a disconnect for ODBC / MSSQL server.
      References: #4164
    * oracle
      + [oracle] [bug] The cx_Oracle dialect now calls setinputsizes()
      with cx_Oracle.NCHAR unconditionally when the NVARCHAR2
      datatype, in SQLAlchemy corresponding to sqltypes.Unicode(), is
      in use. Per cx_Oracle’s author this allows the correct
      conversions to occur within the Oracle client regardless of the
      setting for NLS_NCHAR_CHARACTERSET.  References: #4163
* Wed Jan 17 2018
  - update to version 1.2.1:
    * orm
      + [orm] [bug] Fixed bug where an object that is expunged during a
      rollback of a nested or subtransaction which also had its
      primary key mutated would not be correctly removed from the
      session, causing subsequent issues in using the session.
      + [orm] [bug] Fixed regression where pickle format of a Load /
      _UnboundLoad object (e.g. loader options) changed and
      __setstate__() was raising an UnboundLocalError for an object
      received from the legacy format, even though an attempt was made
      to do so. tests are now added to ensure this works.
      + [orm] [bug] Fixed regression caused by new lazyload caching
      scheme in #3954 where a query that makes use of loader options
      with of_type would cause lazy loads of unrelated paths to fail
      with a TypeError.
      + [orm] [bug] Fixed bug in new “selectin” relationship loader
      where the loader could try to load a non-existent relationship
      when loading a collection of polymorphic objects, where only
      some of the mappers include that relationship, typically when
      PropComparator.of_type() is being used.
    * sql
      + [sql] [bug] Fixed bug in Insert.values() where using the
      “multi-values” format in combination with Column objects as keys
      rather than strings would fail. Pull request courtesy Aubrey
    * mssql
      + [mssql] [bug] Fixed regression in 1.2 where newly repaired
      quoting of collation names in #3785 breaks SQL Server, which
      explicitly does not understand a quoted collation name. Whether
      or not mixed-case collation names are quoted or not is now
      deferred down to a dialect-level decision so that each dialect
      can prepare these identifiers directly.
    * oracle
      + [oracle] [bug] Fixed regression where the removal of most
      setinputsizes rules from cx_Oracle dialect impacted the
      TIMESTAMP datatype’s ability to retrieve fractional seconds.
      + [oracle] [bug] Fixed regression in Oracle imports where a
      missing comma caused an undefined symbol to be present. Pull
      request courtesy Miroslav Shubernetskiy.
    * misc
      + [bug] [ext] Fixed regression in association proxy due to #3769
      (allow for chained any() / has()) where contains() against an
      association proxy chained in the form (o2m relationship,
      associationproxy(m2o relationship, m2o relationship)) would
      raise an error regarding the re-application of contains() on the
      final link of the chain.
      + [bug] [tests] Removed an oracle-specific requirements rule from
      the public test suite that was interfering with third party
      dialect suites.
      + [bug] [tests] Added a new exclusion rule
      group_by_complex_expression which disables tests that use “GROUP
      BY <expr>”, which seems to be not viable for at least two third
      party dialects.
* Wed Jan 03 2018
  - specfile:
    * updated test requirements
* Sun Dec 31 2017
  - update to version 1.2.0:
    * See
* Mon Sep 25 2017
  - update to version 1.1.14:
    * orm
      + [orm] [bug] Fixed bug in Session.merge() following along similar
      lines as that of #4030, where an internal check for a target
      object in the identity map could lead to an error if it were to
      be garbage collected immediately before the merge routine
      actually retrieves the object. References: #4069
      + [orm] [bug] Fixed bug where an undefer_group() option would not
      be recognized if it extended from a relationship that was
      loading using joined eager loading. Additionally, as the bug led
      to excess work being performed, Python function call counts are
      also improved by 20% within the initial calculation of result
      set columns, complementing the joined eager load improvements of
      [#3915].    References: #4048
      + [orm] [bug] Fixed race condition in ORM identity map which would
      cause objects to be inappropriately removed during a load
      operation, causing duplicate object identities to occur,
      particularly under joined eager loading which involves
      deduplication of objects. The issue is specific to garbage
      collection of weak references and is observed only under the
      Pypy interpreter.    References: #4068
      + [orm] [bug] Fixed bug in Session.merge() where objects in a
      collection that had the primary key attribute set to None for a
      key that is typically autoincrementing would be considered to be
      a database-persisted key for part of the internal deduplication
      process, causing only one object to actually be inserted in the
      database.    References: #4056
      + [orm] [bug] An InvalidRequestError is raised when a synonym() is
      used against an attribute that is not against a MapperProperty,
      such as an association proxy. Previously, a recursion overflow
      would occur trying to locate non-existent attributes.  References: #4067
    * sql
      + [sql] [bug] Altered the range specification for window functions
      to allow for two of the same PRECEDING or FOLLOWING keywords in
      a range by allowing for the left side of the range to be
      positive and for the right to be negative, e.g. (1, 3) is “1
      FOLLOWING AND 3 FOLLOWING”.    References: #4053
  - changes from version 1.1.13:
    * oracle
      + [oracle] [bug] [py2k] [performance] Fixed performance regression
      caused by the fix for #3937 where cx_Oracle as of version 5.3
      dropped the .UNICODE symbol from its namespace, which was
      interpreted as cx_Oracle’s “WITH_UNICODE” mode being turned on
      unconditionally, which invokes functions on the SQLAlchemy side
      which convert all strings to unicode unconditionally and causing
      a performance impact. In fact, per cx_Oracle’s author the
      “WITH_UNICODE” mode has been removed entirely as of 5.1, so the
      expensive unicode conversion functions are no longer necessary
      and are disabled if cx_Oracle 5.1 or greater is detected under
      Python 2. The warning against “WITH_UNICODE” mode that was
      removed under #3937 is also restored.
      This change is also backported to: 1.0.19
      References: #4035
* Tue Aug 08 2017
  - update to 1.1.12:
    * See
* Fri Jul 07 2017
  - Update to 1.1.11:
    * See
  - Update to 1.1.10:
    * See
* Sat May 06 2017
  - Don't provide python2-sqlalchemy, singlespec packages should use
    correct name.
* Mon May 01 2017
  - Add literal python-sqlalchemy provides.
* Tue Apr 18 2017
  - Update to 1.1.9:
    * See
  - Update to 1.1.8:
    * See
  - Update to 1.1.7:
    * See
  - Update to 1.1.6:
    * See
  - Update to 1.1.5:
    * See
  - Update to 1.1.4:
    * See
  - Update to 1.1.3:
    * See
  - Update to 1.1.2:
    * See
  - Update to 1.1.1:
    * See
  - Update to 1.1.0:
    * See
  - Update to 1.0.18:
    * See
  - Update to 1.0.17:
    * See
  - Update to 1.0.16:
    * See
  - Implement single-spec version.
* Fri Sep 16 2016
  - Update to 1.0.15:
    * See
* Mon Jun 06 2016
  - fix source url
* Fri Jun 03 2016
  - update to 1.0.13:
    * see
    Remove 0001-fix-sqlite3.10.0-test.patch. Applied upstream.
* Thu Feb 11 2016
  - Add 0001-fix-sqlite3.10.0-test.patch
    Backport fix after SQLite3.10 upgrade
* Mon Jan 11 2016
  - update to 1.0.11:
    * see
* Sun Oct 04 2015
  - update to 1.0.8:
    * see
* Mon Jun 15 2015
  - update to version 1.0.5:
    * see
* Sun May 24 2015
  - update to 1.0.4:
    + see
    + see
* Wed Apr 22 2015
  - update to 0.9.9:
    + See
* Thu Jan 08 2015
  - Update to version 0.9.8:
    + See



Generated by rpm2html 1.8.1

Fabrice Bellet, Fri Mar 10 00:45:08 2023