]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/log
thirdparty/sqlalchemy/sqlalchemy.git
6 years agoA few doc tweaks for alias / order_by / group_by
Mike Bayer [Mon, 1 Jul 2019 17:09:44 +0000 (13:09 -0400)] 
A few doc tweaks for alias / order_by / group_by

Change-Id: Ib3b46b45735529d68ebfb3784de4de5d2d0f4abc
(cherry picked from commit 3b60ccaed4844d25617221c853b3e46a78fd7974)

6 years agoMerge "CAST bind values against SQL Server sys into NVARCHAR" into rel_1_3
mike bayer [Fri, 28 Jun 2019 17:24:00 +0000 (17:24 +0000)] 
Merge "CAST bind values against SQL Server sys into NVARCHAR" into rel_1_3

6 years agoTest for _ORMJoin and fix issue
Denis Kataev [Fri, 28 Jun 2019 13:57:47 +0000 (09:57 -0400)] 
Test for _ORMJoin and fix issue

Fixed an issue where the :meth:`.orm._ORMJoin.join` method, which is a
not-internally-used ORM-level method that exposes what is normally an
internal process of :meth:`.Query.join`, did not propagate the ``full`` and
``outerjoin`` keyword arguments correctly.  Pull request courtesy Denis
Kataev.

Fixes: #4713
Closes: #4744
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4744
Pull-request-sha: ac8870614947259320b5d000a59fadb8c2328a04

Change-Id: If9a30a4ca56c430ddd6fec29ad519556e9001c4b
(cherry picked from commit a02ed10d5f6aa0e30970305172f51b69e0c49165)

6 years agoCAST bind values against SQL Server sys into NVARCHAR
Mike Bayer [Fri, 28 Jun 2019 14:41:38 +0000 (10:41 -0400)] 
CAST bind values against SQL Server sys into NVARCHAR

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.

Fixes: #4745
Change-Id: I3056533bf1a1e8ef17742879d369ab13f8b704ea
(cherry picked from commit 345f2eb05b07713cec19c620b95ca2dfa1ca5aa0)

6 years agoAdd Load.options() for hierchical construction of loader options
Mike Bayer [Thu, 20 Jun 2019 19:37:59 +0000 (15:37 -0400)] 
Add Load.options() for hierchical construction of loader options

Added new loader option method :meth:`.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 :func:`.defaultload`
many times.  Thanks to Alessio Bogon for the idea.

Also applies a large pass to the loader option documentation which
needed improvement.

Fixes: #4736
Change-Id: I93c453e30a20c074f27e87cf7e95b13dd3f2b494
(cherry picked from commit f0d1a5364fa8a9585b709239f85c4092439c4cd8)

6 years agoUnwrap TIMESTAMP when doing an isinstance()
Mike Bayer [Thu, 27 Jun 2019 17:25:12 +0000 (13:25 -0400)] 
Unwrap TIMESTAMP when doing an isinstance()

Fixed bug where the special logic to render "NULL" for the
:class:`.TIMESTAMP` datatype when ``nullable=True`` would not work if the
column's datatype were a :class:`.TypeDecorator` or a :class:`.Variant`.
The logic now ensures that it unwraps down to the original
:class:`.TIMESTAMP` so that this special case NULL keyword is correctly
rendered when requested.

Fixes: #4743
Change-Id: I02b22dfa3db06daea37b044e2206a8569e2e5d22
(cherry picked from commit 401a2691fbeebd5a26341e732644584cb096bc58)

6 years agoRevert 1ed2f162151 black target version
Mike Bayer [Thu, 27 Jun 2019 20:28:06 +0000 (16:28 -0400)] 
Revert 1ed2f162151 black target version

Unfortunately target version py27 makes Black want to break
print functions, even if you put a "from __future__ import print_function"
at the top, so it is being inconsistent in its "we've decided this
is a python 2 file" logic and basically this thing really needs
command line arguments

Change-Id: Iefa62df4224b9620e764b16b1c390647f948e85f
(cherry picked from commit b0cacfdd4f380cf7e9e3d91458868733bf81f366)

6 years agoDisable black auto-version detection
Mike Bayer [Mon, 24 Jun 2019 17:20:26 +0000 (13:20 -0400)] 
Disable black auto-version detection

We're targeting Python 2.7 still so ensure black does not
add trailing commas

Change-Id: I9896b3a71de855d834f0133fd2d6213aae40fc9d
(cherry picked from commit 1ed2f1621510b48a6c46bedf3dd579c56bd89ccb)

6 years agoRegister pytest assertion rewriting on sqlalchemy.testing.assertions
Mike Bayer [Fri, 21 Jun 2019 19:23:52 +0000 (15:23 -0400)] 
Register pytest assertion rewriting on sqlalchemy.testing.assertions

Since our various eq_(), ne_() etc. functions use assert, pytest
can rewrite this module using its enhanced string reporting.
very helpful for comparing SQL strings

Change-Id: Ia71328401fd7965bcb14eb1ccea0dc48a8f2c3ea
(cherry picked from commit 6da5242953feffac7be29ecab256de372ffc1d31)

6 years agoEnable F841
Mike Bayer [Thu, 30 May 2019 15:31:03 +0000 (11:31 -0400)] 
Enable F841

This is a very useful assertion which prevents unused variables
from being set up allows code to be more readable and sometimes
even more efficient.  test suites seem to be where the most
problems are and there do not seem to be documentation examples
that are using this, or at least the linter is not taking effect
within rst blocks.

Change-Id: I2b3341d8dd14da34879d8425838e66a4b9f8e27d
(cherry picked from commit 190e0139e834e4271268652e058c280787ae69eb)

6 years agoAdd option for "sparse" backend tests and apply to memusage
Mike Bayer [Thu, 20 Jun 2019 21:18:59 +0000 (17:18 -0400)] 
Add option for "sparse" backend tests and apply to memusage

The memusage tests are extremely time and memory intensive,
and when CI runs against MySQL or Postgresql there are many
database/driver combinations for which the "backend" tests
repeatedly run; as these tests are more oriented towards
basic dialect interaction, add a new "sparse" backend option
that will run the tests only once per base dialect.

Change-Id: I312aa0332d7ec1ff4e2faa15f6b189d6f0f68393
(cherry picked from commit 0ad64da3971bd4ac42699cf891fd689e7291cd2f)

6 years agoVersion 1.3.6 placeholder
Mike Bayer [Mon, 17 Jun 2019 18:15:16 +0000 (14:15 -0400)] 
Version 1.3.6 placeholder

6 years ago- 1.3.5 rel_1_3_5
Mike Bayer [Mon, 17 Jun 2019 17:25:51 +0000 (13:25 -0400)] 
- 1.3.5

6 years agoFix typo in documentation examples
Emile Caron [Mon, 17 Jun 2019 14:25:21 +0000 (16:25 +0200)] 
Fix typo in documentation examples

(cherry picked from commit 12253707148910d8dafb79425c0fe7d651b9e151)

6 years agoMerge "Remove unused "time_func"" into rel_1_3
mike bayer [Mon, 17 Jun 2019 14:49:02 +0000 (14:49 +0000)] 
Merge "Remove unused "time_func"" into rel_1_3

6 years agoRemove unused "time_func"
Mike Bayer [Mon, 17 Jun 2019 13:11:01 +0000 (09:11 -0400)] 
Remove unused "time_func"

This compat name is not used and is also referring to a
deprecated API for the win32 case.

Fixes: #4731
Change-Id: I0f2b07347c15455b58c27e29a19fb55e159f332a
(cherry picked from commit 0fff647a8f1fb863ec99195a65cf6e64ce204445)

6 years agoPostgreSQL now reflects per-column sort order on indexes.
Eli Collins [Thu, 13 Jun 2019 14:37:16 +0000 (10:37 -0400)] 
PostgreSQL now reflects per-column sort order on indexes.

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.

Fixes: #4717
Closes: #4725
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4725
Pull-request-sha: 3cbb067bd46776fdb125553ba0ac192cb45d060c

Change-Id: I8b0617d68580cfe4ff79d758a077263f33e852c2
(cherry picked from commit b4be7ceb86baeb8e1db4de38911a8c9e7acdd532)

6 years agoMerge "Turn off the is_literal flag when proxying literal_column() to Label" into...
mike bayer [Mon, 17 Jun 2019 01:57:44 +0000 (01:57 +0000)] 
Merge "Turn off the is_literal flag when proxying literal_column() to Label" into rel_1_3

6 years agoTurn off the is_literal flag when proxying literal_column() to Label
Mike Bayer [Sat, 15 Jun 2019 22:06:50 +0000 (18:06 -0400)] 
Turn off the is_literal flag when proxying literal_column() to Label

Fixed a series of quoting issues which all stemmed from the concept of the
:func:`.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
:class:`.Label` were set up as a :class:`.quoted_name` construct.  Not
applying quoting to the text of the :class:`.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
:func:`.literal_column` which it may be applied towards.   The existing
behavior of a non-labeled :func:`.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.

Fixes: #4730
Change-Id: I300941f27872fc4298c74a1d1ed65aef1a5cdd82
(cherry picked from commit 009acc95b8804b5b62fbd43c6fdd61d6fd407ef7)

6 years agoConsult is_attrbute flag to determine descriptor; enable for assoc proxy
Mike Bayer [Sat, 15 Jun 2019 02:44:59 +0000 (22:44 -0400)] 
Consult is_attrbute flag to determine descriptor; enable for assoc proxy

Fixed bug where the :attr:`.Mapper.all_orm_descriptors` accessor would
return an entry for the :class:`.Mapper` itself under the declarative
``__mapper___`` key, when this is not a descriptor.  The ``.is_attribute``
flag that's present on all :class:`.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.

Fixes: #4729
Change-Id: Ia02388cc25d004e32d337140b62a587f3e5a0b7b
(cherry picked from commit 79d07c9abc7d4d3abb6bf2ca5ca66e87d3a11f08)

6 years agoRun PK/FK sync for multi-level inheritance w/ no intermediary update
Mike Bayer [Wed, 12 Jun 2019 17:15:59 +0000 (13:15 -0400)] 
Run PK/FK sync for multi-level inheritance w/ no intermediary update

Also fix DetectKeySwitch for intermediary class relationship

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.

Fixes: #4723
Change-Id: Idc408ead67702068e64d583a15149dd4beeefc24
(cherry picked from commit 3f7840c2ade87e415c24c69ac5d0494d294750e0)

6 years agoAccommodate value of None for ON DUPLICATE KEY UPDATE
Lukas Banic [Mon, 10 Jun 2019 15:24:53 +0000 (11:24 -0400)] 
Accommodate value of None for ON DUPLICATE KEY UPDATE

Fixed bug where MySQL ON DUPLICATE KEY UPDATE would not accommodate setting
a column to the value NULL.  Pull request courtesy Lukáš Banič.

Fixes: #4715
Closes: #4716
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4716
Pull-request-sha: bfad6e6bdfb7d6dd5176deaf30d875f3d0f15e06

Change-Id: Ia8831cc171d131bf3824be8db4fd1d231231bba3
(cherry picked from commit 59e9276f04beef4459571cba4226f9d4eaef6be9)

6 years agopsycopg2 NOTICE fixup
Mike Bayer [Sun, 9 Jun 2019 14:59:23 +0000 (10:59 -0400)] 
psycopg2 NOTICE fixup

- don't call relatively expensive isEnabledFor(), just call _log_notices
- don't reset the list if it's empty
- fix the test to use a custom function to definitely create a notice, confirmed
that PG seems to no longer create the "implicit sequence" notices
- assert that the reset of the notices works too
- update the docs to illustrate for folks who haven't worked with logging before

Change-Id: I7291e647c177d338e0ad673f3106b4d503e4b3ea
(cherry picked from commit b0bf421f1b12eeedd77ec6c39df8e5e6cc1fcc3f)

6 years ago- add --max-worker-restart to better tolerate oracle / python 3.8 crashes
Mike Bayer [Sat, 8 Jun 2019 15:23:25 +0000 (11:23 -0400)] 
- add --max-worker-restart to better tolerate oracle / python 3.8 crashes

Change-Id: I4f59cd69dc2319732acf64cb000946c09124ceff
(cherry picked from commit e2521b595ae8b5b4ca8147c5ee13e2fc0f597e63)

6 years agoRework Session transaction FAQs
Mike Bayer [Fri, 7 Jun 2019 18:50:22 +0000 (14:50 -0400)] 
Rework Session transaction FAQs

In preparation for #4712, add an errors.rst code to the Session's
exception about waiting to be rolled back and rework the FAQ entry
to be much more succinct.  When this FAQ was first written, I found
it hard to describe why flush worked this way but as the use case is
clearer now, and #4712 actually showed it being confusing when it doesn't
work this way, we can make a simpler and more definitive statement
about this behavior.   Additionally, language about "subtransactions"
is minimized as I might be removing or de-emphasizing this concept in
2.0 (though maybe not as it does seem to work well).

Change-Id: I557872aff255b07e14dd843aa024e027a017afb8
(cherry picked from commit 4bd3cf69b2a7f5b1977e7be2b8588fd5d3424d11)

6 years agoApply adaptation for most recent aliased=True first
Mike Bayer [Fri, 31 May 2019 20:47:19 +0000 (16:47 -0400)] 
Apply adaptation for most recent aliased=True first

Fixed regression in :meth:`.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.

Fixes: #4704
Change-Id: I69f76c97b11157100854d552b5a0ce0103642ec4
(cherry picked from commit e6572789bb6fec5f1ac07653908c0f29d7904ece)

6 years agoMerge "PostgreSQL enum with no elements returns NULL for the "label", skip this"...
mike bayer [Fri, 31 May 2019 12:03:41 +0000 (12:03 +0000)] 
Merge "PostgreSQL enum with no elements returns NULL for the "label", skip this" into rel_1_3

6 years agoPostgreSQL enum with no elements returns NULL for the "label", skip this
Mike Bayer [Fri, 31 May 2019 00:42:35 +0000 (20:42 -0400)] 
PostgreSQL enum with no elements returns NULL for the "label", skip this

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.

Fixes: #4701
Change-Id: I202bab19728862cbc64deae211d5ba6a103b8317
(cherry picked from commit 754e7f52cf64b72988bdf8211c603809b32c16de)

6 years agoRework AliasedClass __getattr__ to use top-level getattr()
Dmytro Starosud [Wed, 29 May 2019 13:47:13 +0000 (16:47 +0300)] 
Rework AliasedClass __getattr__ to use top-level getattr()

Reworked the attribute mechanics used by :class:`.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.

Fixes: #4694
Co-authored-by: Mike Bayer <mike_mp@zzzcomputing.com>
Change-Id: I28901e2472d3c21e881fe5cafa3b1d3af704fad8
(cherry picked from commit 5ac10699e1111283ae848f9d3a6dcc4e09d8c1ef)

6 years agoUse fully vendored getfullargspec
Mike Bayer [Wed, 29 May 2019 21:27:19 +0000 (17:27 -0400)] 
Use fully vendored getfullargspec

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.

Fixes: #4674
Change-Id: I1ab8729c4072634db80c79bb7bc44197dc5e7114
(cherry picked from commit df99e1ef5f334ce7f4c8118c3e0bdf2949f54de3)

6 years agoupdate LICENSE to be the exact MIT formatting
Mike Bayer [Tue, 28 May 2019 16:40:31 +0000 (12:40 -0400)] 
update LICENSE to be the exact MIT formatting

Change-Id: I9ee75862924cd8f95ea8d812ab2e2a0ff4e48a66
(cherry picked from commit e624c2cc70d970687cf027c4527fe6f9fa870bc0)

6 years agoReformat license name
Mike Bayer [Tue, 28 May 2019 13:46:20 +0000 (09:46 -0400)] 
Reformat license name

While we have the OSI classifier for "MIT License", it looks
like for the "license" field, this is normally just the word
"MIT" and not "MIT License".   While the pypa docs suggest we
only need it as the OSI classifier, keep it also in "license"
in order to appease common tooling.

Change-Id: Ife51bbc74d6c1b8ab9a736024818fbba35316e17
(cherry picked from commit fff65b814a16914aae41bd63cdef6bf55a676c67)

6 years agoVersion 1.3.5 placeholder
Mike Bayer [Tue, 28 May 2019 02:11:35 +0000 (22:11 -0400)] 
Version 1.3.5 placeholder

6 years ago- 1.3.4 rel_1_3_4
Mike Bayer [Tue, 28 May 2019 01:54:20 +0000 (21:54 -0400)] 
- 1.3.4

6 years agoAdjust test_concurrency failure modes
Mike Bayer [Tue, 28 May 2019 01:15:47 +0000 (21:15 -0400)] 
Adjust test_concurrency failure modes

The test added for #4686 can raise for "B" missing which
is normal and should not fail the test.  Also ensure mappers are
cleared to prevent subsequent tests elsewhere from being
affected.

Change-Id: I4c5791223e7fd21e04dcd095daa7d868e77dbd97
(cherry picked from commit 8b2eb2a2d0f4c7e283d96cf3e5263b5dd48e3b14)

6 years agoMerge "MYSQL: added support for drop check/constraint" into rel_1_3
mike bayer [Mon, 27 May 2019 22:36:50 +0000 (22:36 +0000)] 
Merge "MYSQL: added support for drop check/constraint" into rel_1_3

6 years agoAdd documentation / tracker URLs for pypi
Mike Bayer [Mon, 27 May 2019 21:26:35 +0000 (17:26 -0400)] 
Add documentation / tracker URLs for pypi

Change-Id: I379b3d9e59ff8cda17c2d738fde794249f105510
(cherry picked from commit 9feec16b149aaaadb5b55933c7bb020becca45f5)

6 years agoMYSQL: added support for drop check/constraint
Hannes Hansen [Thu, 23 May 2019 20:27:21 +0000 (16:27 -0400)] 
MYSQL: added support for drop check/constraint

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.

Fixes: #4650
Closes: #4659
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4659
Pull-request-sha: 5b654a55e23c2ca498ca3b1cae4f53859e93e8f7

Change-Id: I967710f890722f11cf1f40406adbb17464d16194
(cherry picked from commit c55023641d390b2b09601b10dbc5663e4bd5a466)

6 years agoUse py.test for versioned_history tests, nose no longer runs
Mike Bayer [Sat, 25 May 2019 13:14:45 +0000 (09:14 -0400)] 
Use py.test for versioned_history tests, nose no longer runs
without warnings under python 3

Fixes: #4697
Change-Id: I46d395d3b6642acd9317e27d6a5723ae5201e877
(cherry picked from commit 0694c7f272819d013b5e1931f1baf0ebfb05e666)

6 years agodoc grammar updates
Mengxi Zhang [Wed, 22 May 2019 19:46:16 +0000 (12:46 -0700)] 
doc grammar updates

(cherry picked from commit aabd369670fff4d99501c0be4632a9873372ba78)

6 years agoMerge "Include active_history when propagating attribute listeners" into rel_1_3
mike bayer [Thu, 23 May 2019 18:28:34 +0000 (18:28 +0000)] 
Merge "Include active_history when propagating attribute listeners" into rel_1_3

6 years ago- formatting fix
Mike Bayer [Thu, 23 May 2019 18:27:24 +0000 (14:27 -0400)] 
- formatting fix

Change-Id: I39593d2414ee9ec5e5ed1a9e2b00cbf9fe743b79
(cherry picked from commit 94d7457cb753d350640047e0ee39167383b797e7)

6 years agoInclude active_history when propagating attribute listeners
Mike Bayer [Thu, 23 May 2019 15:35:51 +0000 (11:35 -0400)] 
Include active_history when propagating attribute listeners

Fixed issue where the :paramref:`.AttributeEvents.active_history` flag
would not be set for an event listener that propgated to a subclass via the
:paramref:`.AttributeEvents.propagate` flag.   This bug has been present
for the full span of the :class:`.AttributeEvents` system.

Fixes: #4695
Change-Id: Ie384f4847f37c267d94b6d56e7538438efc1a54c
(cherry picked from commit 174ece15cb167b774d0b48aa2083e13837f99017)

6 years agoImprove docstrings for AtributeEvents re: propagate flag
Mike Bayer [Wed, 22 May 2019 15:43:01 +0000 (11:43 -0400)] 
Improve docstrings for AtributeEvents re: propagate flag

Make sure the flag is illustrated as well as that every event
has a seealso encouraging the user to look at the top level
listen options.

Fixes: #4691
Change-Id: I137bd74e5d93971bbd04758c7a022a026e13b423
(cherry picked from commit 999bd50753a46785d8031d080af661f608b867c5)

6 years agoAdd QueryableAttribute._impl_uses_objects accessor for AssociationProxy
Mike Bayer [Sun, 19 May 2019 16:38:14 +0000 (12:38 -0400)] 
Add QueryableAttribute._impl_uses_objects accessor for AssociationProxy

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 :class:`.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 :class:`.QueryableAttribute`,
to better detect if the descriptor ultimately serves mapped classes or
column expressions.

Fixes: #4690
Change-Id: I5b5300661291c94a23de53bcf92d747701720aa1
(cherry picked from commit c785a528ea200a8905d1b5d7ab4088d501606d2b)

6 years agoAdd .pre-commit-config.yaml
Mike Bayer [Sat, 18 May 2019 14:47:39 +0000 (10:47 -0400)] 
Add .pre-commit-config.yaml

See https://pre-commit.com/ for documentation on how to use
this file.

SQLAlchemy and related projects make use of Black and zimports
for code formatting, this hook allows for automated pre-commit
runs.

Change-Id: I4bbb49747e9f7fb52251dc61ecda98361cd036fd
(cherry picked from commit 69ebf2cc365baf82016c9d1672fe89e39594b523)

6 years agoMutex the declarative scan/map process against configure_mappers()
Mike Bayer [Thu, 16 May 2019 15:26:04 +0000 (11:26 -0400)] 
Mutex the declarative scan/map process against configure_mappers()

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.

Fixes: #4686
Change-Id: I0349036b8078bd42265ab40862cfbfe5bf9d5b44
(cherry picked from commit 5039c6f01d0bd1f58f950e80cddf7472444a70a4)

6 years agoDocument and test modification of .values in before_compile_update
Mike Bayer [Thu, 16 May 2019 00:27:30 +0000 (20:27 -0400)] 
Document and test modification of .values in before_compile_update

Change-Id: I2a694bcf24b06806dc98651015e7c7a8b090ff65
(cherry picked from commit 89e6beaf46ebdd626e292eb20f7b6ae0c3a9ae5c)

6 years agoRecognize message 20047 as disconnect event in MSDialect_pymssql
Jon Schuff [Tue, 14 May 2019 20:45:10 +0000 (16:45 -0400)] 
Recognize message 20047 as disconnect event in MSDialect_pymssql

Added error code 20047 to "is_disconnect" for pymssql.  Pull request
courtesy Jon Schuff.

Fixes: #4680
Closes: #4681
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4681
Pull-request-sha: bc81c935ec0e352734d9ad1b322caf6d08079c3d

Change-Id: Ifc7ffc4c933b08a34fad537dc48e05d2cfa66d42
(cherry picked from commit 02c18e753b26aa038ce47d0b46b8f0281093d88b)

6 years agoMerge "Resolve RST306 issues" into rel_1_3
mike bayer [Tue, 14 May 2019 14:49:58 +0000 (14:49 +0000)] 
Merge "Resolve RST306 issues" into rel_1_3

6 years agoContinue to assume None for un-accessed attribute on persistent
Mike Bayer [Mon, 13 May 2019 18:56:12 +0000 (14:56 -0400)] 
Continue to assume None for un-accessed attribute on persistent
object during m2o fetch

Fixed regression in new relationship m2o comparison logic first introduced
at :ref:`change_4359` 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.

Fixes: #4676
Change-Id: I17160c30131187c735f025a785ff0276a246f6bb
(cherry picked from commit b6619f267ba6a327d6bff1aa650dd3ab9b718b29)

6 years agoResolve RST306 issues
Mike Bayer [Mon, 13 May 2019 15:52:17 +0000 (11:52 -0400)] 
Resolve RST306 issues

The latest flake8 seems to look for these and they are in fact
correctable with a backslash.  Also need to add r to the strings
to avoid W605.

Change-Id: I8045309aa2ad29978ba7e99c45f75bc1457dff3d
(cherry picked from commit 663ed1a0772f6c6d53b1f4f9a2f652d0e5ce0b8a)

6 years agoFixes typo in core/connections.rst
Michael J Ward [Tue, 23 Apr 2019 20:44:06 +0000 (15:44 -0500)] 
Fixes typo in core/connections.rst

The generated sql was using the incorrect `user_schema` instead
of the correct `user_schema_one` translated table name.

(cherry picked from commit 9bba68a5a70d9e58bbc7490f7313c3b9dc2bb9ba)

6 years agoAdd autoincrement to test_orm AnnotatedOverheadTest for Oracle
Mike Bayer [Sat, 11 May 2019 15:40:56 +0000 (11:40 -0400)] 
Add autoincrement to test_orm AnnotatedOverheadTest for Oracle

Fixes: #4675
Change-Id: I593c3a891462818e7095a30bf6cd7795ca143ad1
(cherry picked from commit b26642e2364836fe9a8ee25c1cf4551901ce0c37)

6 years agoCorrect fix and tests for #4661
Mike Bayer [Sat, 11 May 2019 02:36:40 +0000 (22:36 -0400)] 
Correct fix and tests for #4661

For #4661 we need to still warn if we are only deleting one row,
even if sane multi rowcount is false.   Tests were failing for
pyodbc since the warning was removed for the single-row case.
the UPDATE logic raises if a single row doesn't match even
if sane multi rowcount is false, so this is now more consistent
with that.  Add tests for the UPDATE case also.  It is possible
there are already tests for this but as the DELETE case wasn't
well covered it's not clear.

Fixes: #4661
Change-Id: Ie57f765ff31bf806206837c5fbfe449b02ebf4be
(cherry picked from commit bdafff8982d9e7fbf9a39182f1fb8e65d475bbb9)

6 years agoMove initialize do_rollback() outside of the dialect
Matthew Wilkes [Thu, 9 May 2019 22:04:35 +0000 (18:04 -0400)] 
Move initialize do_rollback() outside of the dialect

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.

Fixes: #4663
Closes: #4664
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4664
Pull-request-sha: e544fe671d443ed06b210ba1cd1d7ba9c5653831

Change-Id: If40a15a1679b4eec0b8b8222f678697728009c30
(cherry picked from commit f601791a914d3181252493800871c458ad6c46d1)

6 years ago- fix long line
Mike Bayer [Fri, 10 May 2019 00:32:04 +0000 (20:32 -0400)] 
- fix long line

Change-Id: If44d364ae02da447169a3dc51b6514225578cf82
(cherry picked from commit 3abced7bd2842d41e17f438a65efc15aa71d4bb4)

6 years ago- remove references to nose
Mike Bayer [Thu, 9 May 2019 15:57:12 +0000 (11:57 -0400)] 
- remove references to nose

Change-Id: I970cc257dfb1c69413fa1c5593ba523ffc5070d4
(cherry picked from commit 1a3792c3b3af9b945862686b6d54a855342a5331)

6 years agoAdd documentation for MySQL optimizer hints using prefix_with
Mike Bayer [Wed, 8 May 2019 15:40:12 +0000 (11:40 -0400)] 
Add documentation for MySQL optimizer hints using prefix_with

Fixes: #4667
Change-Id: Iac3345319dc7c5a20bc7a6520492d2f341b64807
(cherry picked from commit c608c3f2f8af0e4cd9e2ffbd3b6f7f487e785282)

6 years agoMerge "Don't warn on multi delete rowcount if supports_sane_multi is False" into...
mike bayer [Tue, 7 May 2019 13:59:27 +0000 (13:59 +0000)] 
Merge "Don't warn on multi delete rowcount if supports_sane_multi is False" into rel_1_3

6 years agoMerge "Do not register the GenericFunction in sql.functions._registry" into rel_1_3
mike bayer [Tue, 7 May 2019 13:58:31 +0000 (13:58 +0000)] 
Merge "Do not register the GenericFunction in sql.functions._registry" into rel_1_3

6 years agoAdd support for filtered indexes for mssql dialect
mollardthomas [Fri, 3 May 2019 15:31:57 +0000 (11:31 -0400)] 
Add support for filtered indexes for mssql dialect

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.

Fixes: #4657
Closes: #4658
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4658
Pull-request-sha: cf609c19bccc74c0dba38d2fc4976df3a205f3f6

Change-Id: I9c61b97d0b0cb6f6d417da7b1875b40f8f918a3c
(cherry picked from commit 174f2ae33b5235d709b17f3371946a173defaa0d)

6 years agoDo not register the GenericFunction in sql.functions._registry
Adrien Berchet [Fri, 3 May 2019 16:02:17 +0000 (12:02 -0400)] 
Do not register the GenericFunction in sql.functions._registry

Fixed that the :class:`.GenericFunction` class was inadvertently
registering itself as one of the named functions.  Pull request courtesy
Adrien Berchet.

Fixes: #4653
Closes: #4654
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4654
Pull-request-sha: 1112b89f0d5af8cd5ba88cef744698a79dbdb963

Change-Id: Ia0d366d3bff44a763aa496287814278dff732a19
(cherry picked from commit 61c47cbdc6058c040b301caa0864710a8d85d3a4)

6 years agoDon't warn on multi delete rowcount if supports_sane_multi is False
Mike Bayer [Fri, 3 May 2019 22:07:06 +0000 (18:07 -0400)] 
Don't warn on multi delete rowcount if supports_sane_multi is False

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.

Fixes: #4661
Change-Id: I93aaf7f597b6083e860ab3cbcd620ba5621c57a8
(cherry picked from commit aa94afcdaf4faeacf13836de2475954e06a7fb67)

6 years agoOpen up mysql CHECK constraint detection to include new versions
Mike Bayer [Sat, 4 May 2019 17:19:10 +0000 (13:19 -0400)] 
Open up mysql CHECK constraint detection to include new versions

MySQL 8.0.16 introduces real CHECK constraints and MariaDB has also
added them into the 10.2 series sometime before 10.2.22.

Change-Id: Ia0f1be69f99df935aae069f63381bcc994f73cc7
(cherry picked from commit 1c3e92627362604472ca483055fc827a97942e6b)

6 years agoInclude GenericTypeCompiler in docs
Bjørnar Myrheim [Wed, 1 May 2019 07:39:26 +0000 (09:39 +0200)] 
Include GenericTypeCompiler in docs

Fixes: #4411
Change-Id: Ic60e78555651d05ff0492650bd7647685b867671
Closes: #4651
(cherry picked from commit cdd01a06f7cf5e9ce35544a02c182eca4015992c)

6 years agoAdd case insensitivity feature to GenericFunction.
Adrien Berchet [Mon, 15 Apr 2019 17:59:18 +0000 (13:59 -0400)] 
Add case insensitivity feature to GenericFunction.

The :class:`.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 :class:`.GenericFunction` now use a case
insensitive scheme,  however a deprecation case is supported which allows
two or more :class:`.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.

Fixes: #4569
Closes: #4570
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4570
Pull-request-sha: 37d4f3322b6bace88c99b959cb1916dbbc57610e

Change-Id: Ief07c6eb55bf398f6aad85b60ef13ee6d1173109
(cherry picked from commit ede0f2282fc44a6831abfcc562e1ae04661b5739)

6 years agoWarn on merge of already-pending object
Mike Bayer [Sun, 28 Apr 2019 16:40:31 +0000 (12:40 -0400)] 
Warn on merge of already-pending object

A warning is now emitted for the case where a transient object is being
merged into the session with :meth:`.Session.merge` when that object is
already transient in the :class:`.Session`.   This warns for the case where
the object would normally be double-inserted.

Fixes: #4647
Change-Id: Ie5223a59a2856664bf283017e962caf8c4230536
(cherry picked from commit 23a1c60982dc4799c76f0cec276a3bae8a24395b)

6 years ago- use correct rel_1_3 for gitreview branch
Mike Bayer [Sat, 27 Apr 2019 21:20:35 +0000 (17:20 -0400)] 
- use correct rel_1_3 for gitreview branch

Change-Id: Id649053727e62c9d18940e28abcc3df8ff2ea092

6 years agofix RST link format
Mike Bayer [Thu, 25 Apr 2019 22:26:57 +0000 (17:26 -0500)] 
fix RST link format

Change-Id: I52122759a92d2fa4bab93ac75c21a77f79eace5a

6 years agoremote_attr and local_attr refer to class bound attributes, not
Mike Bayer [Thu, 25 Apr 2019 22:23:12 +0000 (17:23 -0500)] 
remote_attr and local_attr refer to class bound attributes, not
MapperProperty

Change-Id: If5fee69474f295e8c4bef891f5360f6b54080bbf

6 years ago- formatting typo
Mike Bayer [Thu, 25 Apr 2019 22:16:43 +0000 (17:16 -0500)] 
- formatting typo

Change-Id: Ia34c2f9a6c3db83bbe0f0a06f82aa04c603cb521

6 years agoAdd ORM documentation for as_comparison()
Mike Bayer [Thu, 25 Apr 2019 15:46:31 +0000 (10:46 -0500)] 
Add ORM documentation for as_comparison()

In #3831 we added the ability for SQL functions to be used in
primaryjoin conditions as the source of comparison, however we
didn't add documentation from the main relationship docs so
nobody could find it unless they read the migration notes.
Since the two use cases that have come up for this are
materialized path with string functions, and geometry functions,
add the example based on the use case requested in
https://github.com/geoalchemy/geoalchemy2/issues/220#issuecomment-486709055

This example hasn't been tested yet and is subject to
revision.

Change-Id: I410d8ffade3f17cf616fc5056f27d7d32092207b

6 years agoMerge "negate True/False separately from other elements"
mike bayer [Tue, 23 Apr 2019 22:37:19 +0000 (22:37 +0000)] 
Merge "negate True/False separately from other elements"

6 years agoRemove sqla_nose.py from MANIFEST.in
Mike Bayer [Tue, 23 Apr 2019 19:47:40 +0000 (14:47 -0500)] 
Remove sqla_nose.py from MANIFEST.in

Removed errant "sqla_nose.py" symbol from MANIFEST.in which created an
undesirable warning message.

Fixes: #4625
Change-Id: I3784e82847d2ebfdd967dd9e2ab628d0ae5f415f

6 years ago- black -l79 update
Mike Bayer [Sun, 21 Apr 2019 01:23:55 +0000 (21:23 -0400)] 
- black -l79 update

Change-Id: I8e6211af91a322b3c212f16e77a0c0f6e9a5e019

6 years agonegate True/False separately from other elements
Mike Bayer [Thu, 18 Apr 2019 13:40:03 +0000 (09:40 -0400)] 
negate True/False separately from other elements

Fixed issue where double negation of a boolean column wouldn't reset
the "NOT" operator.

Fixes: #4618
Change-Id: Ica280a0d6b5b0870aa2d05c4d059a1e559e6b12a
(cherry picked from commit 18f25f50353d9736e6638266585b2cb3ef7b0ea4)

6 years agoUse "parent object" instead of "primary object" 4619/head
vpsx [Wed, 17 Apr 2019 23:48:40 +0000 (18:48 -0500)] 
Use "parent object" instead of "primary object"

6 years agocherry-pick changelog update for 1.2.20
Mike Bayer [Mon, 15 Apr 2019 16:29:31 +0000 (12:29 -0400)] 
cherry-pick changelog update for 1.2.20

6 years ago- 1.2.19
Mike Bayer [Mon, 15 Apr 2019 16:23:29 +0000 (12:23 -0400)] 
- 1.2.19

(cherry picked from commit f178bac2fdfa819c27d6b163e51582f6e75f0029)

6 years agoVersion 1.3.4 placeholder
Mike Bayer [Mon, 15 Apr 2019 16:08:01 +0000 (12:08 -0400)] 
Version 1.3.4 placeholder

6 years ago- 1.3.3 rel_1_3_3
Mike Bayer [Mon, 15 Apr 2019 15:46:47 +0000 (11:46 -0400)] 
- 1.3.3

6 years agoAdd 1.3.x versions to still unreleased 1.2 backport fixes
Mike Bayer [Mon, 15 Apr 2019 15:44:14 +0000 (11:44 -0400)] 
Add 1.3.x versions to still unreleased 1.2 backport fixes

Change-Id: Iee2a447c032575ff845eb4ba9d01de0be98065a2

6 years agoUse pytest items in custom collection
Mike Bayer [Sat, 13 Apr 2019 03:44:42 +0000 (23:44 -0400)] 
Use pytest items in custom collection

We have a custom test collection hook that did not take
node of the actual list of functions in items.  By looking
in this list we now support the class/function arguments
passed to the py.test command line.

Change-Id: I1238c7c5796a296037ab9ef3bedf0f619a730481

6 years agoBlack updates
Mike Bayer [Thu, 11 Apr 2019 18:23:29 +0000 (14:23 -0400)] 
Black updates

Updating for a few black adjustments

Change-Id: I9c8abadd1ccd6173e6d68dd62f14cec208cc304a

6 years agoMerge "Don't use and_() inside of Query.filter_by"
mike bayer [Thu, 11 Apr 2019 01:00:19 +0000 (01:00 +0000)] 
Merge "Don't use and_() inside of Query.filter_by"

6 years agoDon't use and_() inside of Query.filter_by
Mike Bayer [Wed, 10 Apr 2019 15:51:27 +0000 (11:51 -0400)] 
Don't use and_() inside of Query.filter_by

Adjusted the :meth:`.Query.filter_by` method to not call :func:`.and()`
internally against multiple criteria, instead passing it off to
:meth:`.Query.filter` as a series of criteria, instead of a single criteria.
This allows :meth:`.Query.filter_by` to defer to :meth:`.Query.filter`'s
treatment of variable numbers of clauses, including the case where the list
is empty.  In this case, the :class:`.Query` object will not have a
``.whereclause``, which allows subsequent "no whereclause" methods like
:meth:`.Query.select_from` to behave consistently.

Fixes: #4606
Change-Id: Ifc8cdbf13accca2236068ef70114a7c35ab159ff

6 years agoMerge "Add __reduce_ex__ to MutableList; add compat for older pickles"
mike bayer [Wed, 10 Apr 2019 01:14:57 +0000 (01:14 +0000)] 
Merge "Add __reduce_ex__ to MutableList; add compat for older pickles"

6 years agoAdd __reduce_ex__ to MutableList; add compat for older pickles
Mike Bayer [Tue, 9 Apr 2019 21:38:53 +0000 (17:38 -0400)] 
Add __reduce_ex__ to MutableList; add compat for older pickles

Fixed bug where using ``copy.copy()`` or ``copy.deepcopy()`` on
:class:`.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
:class:`.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.

Also modified sqlalchemy.testing.util.picklers to return picklers all the way through
pickle.HIGHEST_PROTOCOL.

Fixes: #4603
Change-Id: I7f78b9cfb89d59a706248536c553dc5e1d987b88

6 years agoPropagate query-arg-only URL to psycopg2; don't send blank host
Mike Bayer [Tue, 9 Apr 2019 13:16:16 +0000 (09:16 -0400)] 
Propagate query-arg-only URL to psycopg2; don't send blank host

Fixed regression from release 1.3.2 caused by :ticket:`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 :ticket:`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.

Fixes: #4601
Change-Id: Ic29a8b77bcf50ee996968bab25aaac7ae4bfc26f

6 years agoUpdate link for cx_Oracle
Mike Bayer [Fri, 5 Apr 2019 14:20:08 +0000 (10:20 -0400)] 
Update link for cx_Oracle

Fixes: #4596
Change-Id: I80205d51fe500520030f2c94c06363e1fb6f9c65

6 years agoImprove documentation for connection pool logging
jaskiratsingh [Fri, 5 Apr 2019 13:51:12 +0000 (09:51 -0400)] 
Improve documentation for connection pool logging

Also do a general pass for logging + doc formatting,
add more cross-linking and remove obsolete information such
as "echo_uow"/

Co-authored-by: Mike Bayer <mike_mp@zzzcomputing.com>
Fixes: #4571
Closes: #4583
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4583
Pull-request-sha: e98ad34eca7e9f59fb07cd8b7ec317c1cb989848

Change-Id: I03f7354a4ef55fd8b6a51d03a280579f36e8a06c

6 years agoEnhance documentation for string compilation use cases
Mike Bayer [Fri, 5 Apr 2019 01:43:12 +0000 (21:43 -0400)] 
Enhance documentation for string compilation use cases

- Add a web link for UnsupportedCompilationError
- Add new section to errors.rst
- add more detail and cross-linking to the FAQ
- include security caveats for parameter rendering

Fixes: #4595
Change-Id: I31ea57c18d65770cd2a51276bbe2847a9eb72bba

6 years agoMSSQL: only compile ORDER BY if it will be rendered
Matt Lewellyn [Wed, 3 Apr 2019 22:39:15 +0000 (18:39 -0400)] 
MSSQL: only compile ORDER BY if it will be rendered

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.

Fixes: #4587
Closes: #4588
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4588
Pull-request-sha: 2992a473e0f6d4fc27794cfd949ba20a81fad2ca

Change-Id: Ie709aefdb1babf810bb81526289448f8cc7a4cb1

6 years agoMerge "Restore use_threadlocal equivalent behavior to SingletonThreadPool"
mike bayer [Wed, 3 Apr 2019 21:15:07 +0000 (21:15 +0000)] 
Merge "Restore use_threadlocal equivalent behavior to SingletonThreadPool"

6 years agoMerge "Fold entities into existing joins when resolving FROM ambiguity"
mike bayer [Wed, 3 Apr 2019 14:37:09 +0000 (14:37 +0000)] 
Merge "Fold entities into existing joins when resolving FROM ambiguity"

6 years agoRestore use_threadlocal equivalent behavior to SingletonThreadPool
Mike Bayer [Wed, 3 Apr 2019 14:03:17 +0000 (10:03 -0400)] 
Restore use_threadlocal equivalent behavior to SingletonThreadPool

Fixed behavioral regression as a result of deprecating the "use_threadlocal"
flag for :class:`.Pool`, where the :class:`.SingletonThreadPool` no longer
makes use of this option which causes the "rollback on return" logic to take
place when the same :class:`.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 :class:`.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
:class:`.SingletonThreadPool` now implements its own version of the same
logic.

Fixes: #4585
Change-Id: I906293f2d0a5d14ed46cd9e64305a6481505a5a3

6 years agoFold entities into existing joins when resolving FROM ambiguity
Mike Bayer [Wed, 3 Apr 2019 02:12:09 +0000 (22:12 -0400)] 
Fold entities into existing joins when resolving FROM ambiguity

Fixed 1.3 regression in new "ambiguous FROMs" query logic introduced in
:ref:`change_4365` where a :class:`.Query` that explicitly places an entity
in the FROM clause with :meth:`.Query.select_from` and also joins to it
using :meth:`.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 :class:`.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.

Fixes: #4584
Change-Id: Ic62ca09c6d329695b21ed4f1be8621edcbb18e19

6 years agoVersion 1.3.3 placeholder
Mike Bayer [Tue, 2 Apr 2019 17:31:54 +0000 (13:31 -0400)] 
Version 1.3.3 placeholder

6 years ago- 1.3.2 rel_1_3_2
Mike Bayer [Tue, 2 Apr 2019 17:11:51 +0000 (13:11 -0400)] 
- 1.3.2