]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/log
thirdparty/sqlalchemy/sqlalchemy.git
6 years agoFix dependency_for final argument
Joe Urciuoli [Wed, 19 Sep 2018 17:40:23 +0000 (13:40 -0400)] 
Fix dependency_for final argument

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.

Per the submitter: "The fourth argument provided to `__import__`  (which
`import_` feeds in to) is supposed to be a a list of strings, but this code is
passing a single string. This was causing the sqlalchemy `import_` function to
break the string (for example 'interfaces') into an array of single characters
['i', 'n', ...], which causes the actual `__import__` to not find the module
`sqlalchemy.orm.i` (since it's trying to import `sqlalchemy.orm.i` and
`sqlalchemy.orm.n` .. etc)"

No issue could be reproduced locally as it seems you can put anything non-
empty/None into that last argument, even a list like ``['X']``, and  all the
sub-modules seem to appear.  Omit it, and then the sub-modules aren't present.
Perhaps it just runs the module or not if this attribute is present.

Change-Id: Ia15c74620f24d24f0df4882f9b36a04e2c3725b8
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/473

6 years agoMerge "Adapt right side in join if lateral detected"
mike bayer [Wed, 19 Sep 2018 13:30:34 +0000 (09:30 -0400)] 
Merge "Adapt right side in join if lateral detected"

6 years agoMerge "Add LIFO for connection pooling"
mike bayer [Wed, 19 Sep 2018 03:29:34 +0000 (23:29 -0400)] 
Merge "Add LIFO for connection pooling"

6 years agoAdd LIFO for connection pooling
Taem Park [Tue, 21 Aug 2018 14:54:45 +0000 (10:54 -0400)] 
Add LIFO for connection pooling

Added new "lifo" mode to :class:`.QueuePool`, typically enabled by setting
the flag :paramref:`.create_engine.pool_use_lifo` to True.   "lifo" mode
means the same connection just checked in will be the first to be checked
out again, allowing excess connections to be cleaned up from the server
side during periods of the pool being only partially utilized.  Pull request
courtesy Taem Park.

Change-Id: Idb5e299c5082b3e6b547bd03022acf65fdc34f35
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/467

6 years agoAdapt right side in join if lateral detected
Mike Bayer [Mon, 17 Sep 2018 15:38:52 +0000 (11:38 -0400)] 
Adapt right side in join if lateral detected

Fixed bug where use of :class:`.Lateral` construct in conjunction with
:meth:`.Query.join` as well as :meth:`.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.

Fixes: #4334
Change-Id: I3631e562092769d30069a2aa5e50a580f4661a23

6 years agoLook for dict builtin in InstanceState cleanup
Romuald Brunet [Mon, 17 Sep 2018 15:44:50 +0000 (11:44 -0400)] 
Look for dict builtin in InstanceState cleanup

Added a check within the weakref cleanup for the :class:`.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.

Change-Id: If27b94d50a32767de8b4147c09fa423f71596004
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/472

6 years agoUse cx_Oracle dml_ret_array_val
Mike Bayer [Mon, 17 Sep 2018 18:05:46 +0000 (14:05 -0400)] 
Use cx_Oracle dml_ret_array_val

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.

Fixes: #4335
Change-Id: Ia60f5514803a505898c1ac9252355990c6203dda

6 years agoMerge remote-tracking branch 'origin/pr/471'
Mike Bayer [Mon, 17 Sep 2018 13:20:39 +0000 (09:20 -0400)] 
Merge remote-tracking branch 'origin/pr/471'

Change-Id: I1ddafb5d145c892d86fa130a6fed2402d3e388bb

6 years agoDon't list 1.2.x bugfixes as 1.3.0b1 bugfixes
Mike Bayer [Thu, 13 Sep 2018 23:43:12 +0000 (17:43 -0600)] 
Don't list 1.2.x bugfixes as 1.3.0b1 bugfixes

We will still list features in 1.3 as backported but
it is too verbose to have all of 1.2.x's bugfixes listed as part
of 1.3.0b1 also.

Change-Id: Icb09050734af86a66a72b3f92a6bd60ee3e2f6ee

6 years agoAdd explicit note about @hybrid_property mutators re: method name
Mike Bayer [Wed, 12 Sep 2018 15:44:57 +0000 (09:44 -0600)] 
Add explicit note about @hybrid_property mutators re: method name

Fixes: #4332
Change-Id: I7c52140d3a3055a71b192fea020c795a57356d90

6 years agoFix doc type
Wouter Overmeire [Tue, 11 Sep 2018 12:17:02 +0000 (14:17 +0200)] 
Fix doc type

6 years agominor spelling correction
Glyph [Thu, 6 Sep 2018 22:58:12 +0000 (15:58 -0700)] 
minor spelling correction

6 years agoClarify init_scalar event use case
Mike Bayer [Thu, 6 Sep 2018 14:44:09 +0000 (10:44 -0400)] 
Clarify init_scalar event use case

Since I didn't even realize what this was for when reading the docs,
make it clearer that this is to mirror a Column default and remove
the extra verbiage about the mechanics of INSERTs.

Change-Id: Id2c6a29800f7b723573610e4707aec7e6ea38f5f

6 years agoMariaDB 10.3 updates
Mike Bayer [Thu, 30 Aug 2018 21:12:58 +0000 (17:12 -0400)] 
MariaDB 10.3 updates

MariaDB seems to handle some additional UPDATE/DELETE FROM
syntaxes as well as some forms of INTERSECT and EXCEPT. Open
up tests that expect failure for MySQL to allow success for
MariaDB 10.3.

Change-Id: Ia9341a82485ef7201bb8130d8dbf4a9b6976035a

6 years agoFix links and update verbiage for reset_on_return
Mike Bayer [Tue, 28 Aug 2018 18:58:05 +0000 (14:58 -0400)] 
Fix links and update verbiage for reset_on_return

Change-Id: I642056b78570b44fdefe7f0874a8e4c720389f14

6 years agoMerge "Add option to sort into inserts/updates to bulk_save_objects"
mike bayer [Tue, 28 Aug 2018 13:26:11 +0000 (09:26 -0400)] 
Merge "Add option to sort into inserts/updates to bulk_save_objects"

6 years agoMerge "Add python_requires and update classifiers"
mike bayer [Tue, 28 Aug 2018 13:03:15 +0000 (09:03 -0400)] 
Merge "Add python_requires and update classifiers"

6 years agoAdd option to sort into inserts/updates to bulk_save_objects
Alessandro Cucci [Sat, 25 Aug 2018 13:14:22 +0000 (09:14 -0400)] 
Add option to sort into inserts/updates to bulk_save_objects

Added new flag :paramref:`.Session.bulk_save_objects.preserve_order` to the
:meth:`.Session.bulk_save_objects` method, which defaults to True. When set
to False, the given mappings will be grouped into inserts and updates per
each object type, to allow for greater opportunities to batch common
operations together.  Pull request courtesy Alessandro Cucci.

Change-Id: I0d041f7696cf733655a74beeceee3fa80640efd7
Pull-request: https://bitbucket.org/zzzeek/sqlalchemy/pull-requests/6

6 years agoAdd BakedQuery.to_query() method
Mike Bayer [Mon, 27 Aug 2018 15:07:48 +0000 (11:07 -0400)] 
Add BakedQuery.to_query() method

Added new feature :meth:`.BakedQuery.to_query`, which allows for a
clean way of using one :class:`.BakedQuery` as a subquery inside of another
:class:`.BakedQuery` without needing to refer explicitly to a
:class:`.Session`.

Fixes: #4318
Change-Id: I528056c7d140036c27b95500d7a60dcd14784016

6 years agodocument expanding bound parameters, in_(), and baked query use cases
Mike Bayer [Mon, 27 Aug 2018 18:51:59 +0000 (14:51 -0400)] 
document expanding bound parameters, in_(), and baked query use cases

Change-Id: I09ccd73ebabbea4b5098ba5b170786ac065444c8

6 years ago- pep8 cleanup
Mike Bayer [Mon, 27 Aug 2018 15:11:04 +0000 (11:11 -0400)] 
- pep8 cleanup

Change-Id: I1d6eaf91c069bd5dd55a40ddd38e2f440b259fea

6 years agofix link typos
Mike Bayer [Mon, 27 Aug 2018 14:25:59 +0000 (10:25 -0400)] 
fix link typos

Change-Id: I49233bf67caadf5ba69aa3b686f0ef6e5df3f15b

6 years agoCorrect expanding docs to support empty lists
Mike Bayer [Mon, 27 Aug 2018 14:18:15 +0000 (10:18 -0400)] 
Correct expanding docs to support empty lists

Change-Id: I9375b2055602216f9f25d32b2f7c035ae4280bd0

6 years agoInclude Session._query_cls as part of the cache key
Mike Bayer [Sun, 26 Aug 2018 16:35:59 +0000 (12:35 -0400)] 
Include Session._query_cls as part of the cache key

Fixed issue where :class:`.BakedQuery` did not include the specific query
class used by the :class:`.Session` as part of the cache key, leading to
incompatibilities when using custom query classes, in particular the
:class:`.ShardedQuery` which has some different argument signatures.

Fixes: #4328
Change-Id: I829c2a8b09c91e91c8dc8ea5476c0d7aa47028bd

6 years agoAdd python_requires and update classifiers
Hugo [Sun, 26 Aug 2018 17:50:12 +0000 (13:50 -0400)] 
Add python_requires and update classifiers

- bump minimum Python 3 version to 3.4 in docs
- set up setup.py classifiers to cover 2.7, 3.4, 3.5, 3.6, 3.7 explicitly
- add python_requires

These are also the ones supported by the core Python team.
https://en.wikipedia.org/wiki/CPython#Version_history

Change-Id: I2ffa632c73c39bf38ba9d8b5dcc86d552b61aa68
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/468

6 years agoMerge "Unwrap Proxy objects when scanning declared_attr"
mike bayer [Thu, 23 Aug 2018 21:58:04 +0000 (17:58 -0400)] 
Merge "Unwrap Proxy objects when scanning declared_attr"

6 years agoUnwrap Proxy objects when scanning declared_attr
Mike Bayer [Thu, 23 Aug 2018 16:40:26 +0000 (12:40 -0400)] 
Unwrap Proxy objects when scanning declared_attr

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 :attr:`.Mapper.all_orm_descriptors`.

Fixes: #4326
Change-Id: I582d03f05c3768b3344f93e3791240e9e69b9d1e

6 years agoDon't run postfetch_post_update for a DELETE
Mike Bayer [Thu, 23 Aug 2018 15:55:13 +0000 (11:55 -0400)] 
Don't run postfetch_post_update for a DELETE

Fixed 1.2 regression caused by :ticket:`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
:ticket:`3472` is now skipped entirely for an object that ultimately is to
be deleted.

Fixes: #4327
Change-Id: Ieac845348979df296bcf7e785c0353bdc6074220

6 years agoPropagate **kw in postgresql distinct on compilation
Mike Bayer [Wed, 22 Aug 2018 21:18:48 +0000 (17:18 -0400)] 
Propagate **kw in postgresql distinct on compilation

Fixed bug in PostgreSQL dialect where compiler keyword arguments such as
``literal_binds=True`` were not being propagated to a DISTINCT ON
expression.

Fixes: #4325
Change-Id: I9949387dceb7fabe889799f42e92423572368b29

6 years agoPass desired array type from pg.array_agg to functions.array_agg
Mike Bayer [Wed, 22 Aug 2018 15:13:54 +0000 (11:13 -0400)] 
Pass desired array type from pg.array_agg to functions.array_agg

Fixed the :func:`.postgresql.array_agg` function, which is a slightly
altered version of the usual :func:`.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 :ticket:`4107`.

Fixes: #4324
Change-Id: I399a29f59c945a217cdd22c65ff0325edea8ea65

6 years agoStrip quotes from format_type in addition to other characters
Mike Bayer [Wed, 22 Aug 2018 00:59:04 +0000 (20:59 -0400)] 
Strip quotes from format_type in addition to other characters

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.

Fixes: #4323
Change-Id: I668f3acccc578e58f23b70c82d31d5c1ec194913

6 years agocherry-pick changelog update for 1.2.12
Mike Bayer [Mon, 20 Aug 2018 21:00:53 +0000 (17:00 -0400)] 
cherry-pick changelog update for 1.2.12

6 years agocherry-pick changelog from 1.2.11
Mike Bayer [Mon, 20 Aug 2018 21:00:53 +0000 (17:00 -0400)] 
cherry-pick changelog from 1.2.11

6 years agoAdd missing range_ / rows parameters to additional over() methods
Mike Bayer [Mon, 20 Aug 2018 02:19:59 +0000 (22:19 -0400)] 
Add missing range_ / rows parameters to additional over() methods

Added missing window function parameters
:paramref:`.WithinGroup.over.range_` and :paramref:`.WithinGroup.over.rows`
parameters to the :meth:`.WithinGroup.over` and
:meth:`.FunctionFilter.over` methods, to correspond to the range/rows
feature added to the "over" method of SQL functions as part of
:ticket:`3049` in version 1.1.

Fixes: #4322
Change-Id: I77dcdac65c699a4b52a3fc3ee09a100ffb4fc20e

6 years agoDocument binary_prefix for mysqlclient and PyMySQL
Mike Bayer [Fri, 17 Aug 2018 23:25:20 +0000 (19:25 -0400)] 
Document binary_prefix for mysqlclient and PyMySQL

Also, remove the section on "use_unicode=0", there is no reason
anyone should be using that now.

Fixes: #4216
Change-Id: I5b8b53e40903adf339af2934a4f2d8b068818ebf

6 years agoMerge "Accommodate for classically mapped base classes in declarative"
mike bayer [Fri, 17 Aug 2018 18:55:26 +0000 (14:55 -0400)] 
Merge "Accommodate for classically mapped base classes in declarative"

6 years agoMerge "Add concept of "implicit boolean", treat as native"
mike bayer [Fri, 17 Aug 2018 15:51:22 +0000 (11:51 -0400)] 
Merge "Add concept of "implicit boolean", treat as native"

6 years agoAccommodate for classically mapped base classes in declarative
Mike Bayer [Fri, 17 Aug 2018 15:37:30 +0000 (11:37 -0400)] 
Accommodate for classically mapped base classes in declarative

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.

Fixes: #4321
Change-Id: I8604ecfd170d2589d9d1b1c87ba303762071fc30

6 years agoAdd test support for #4036
Mike Bayer [Wed, 15 Aug 2018 20:36:30 +0000 (16:36 -0400)] 
Add test support for #4036

Add a test that asserts MySQL can't implicitly treat a decimal
bound parameter without context and everyone else can.

Change-Id: I40e24a463d6eb03fd677195895891e73624776c3

6 years agoAdd concept of "implicit boolean", treat as native
Mike Bayer [Wed, 15 Aug 2018 21:11:14 +0000 (17:11 -0400)] 
Add concept of "implicit boolean", treat as native

Fixed issue that is closely related to :ticket:`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 :meth:`.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.

Fixes: #4320
Change-Id: Iae0a65e5c01bd576e64733c3651e1e1a1a1b240c

6 years agoAdd ability to preserve order in MySQL ON DUPLICATE KEY UPDATE.
Maxim Bublis [Wed, 18 Jul 2018 18:06:07 +0000 (14:06 -0400)] 
Add ability to preserve order in MySQL ON DUPLICATE KEY UPDATE.

Added support for the parameters in an ON DUPLICATE KEY UPDATE statement on
MySQL to be ordered, since parameter order in a MySQL UPDATE clause is
significant, in a similar manner as that described at
:ref:`updates_order_parameters`.  Pull request courtesy Maxim Bublis.

Pull-request: https://github.com/zzzeek/sqlalchemy/pull/462
Change-Id: If508d8e26dbd3c55ab1e83cf573fb4021e9d091e

6 years agoCorrect for the INSERT statement, typos
Mike Bayer [Thu, 9 Aug 2018 18:35:52 +0000 (14:35 -0400)] 
Correct for the INSERT statement, typos

Change-Id: I036f3eb9b5e591515920678bc9a76f707fda142c

6 years agoWrite a much better section about server defaults
Mike Bayer [Thu, 9 Aug 2018 17:34:03 +0000 (13:34 -0400)] 
Write a much better section about server defaults

Include information about eager_defaults etc.  These
docs were written before we had all the features
we do now.

Change-Id: Ie62e58c5986698824f717e9f8c802b07a27517d4
Fixes: #4317
6 years agoFixed issue with :meth:`.TypeEngine.bind_expression` and
Mike Bayer [Tue, 7 Aug 2018 22:59:05 +0000 (18:59 -0400)] 
Fixed issue with :meth:`.TypeEngine.bind_expression` and
:meth:`.TypeEngine.column_expression` methods where these methods would not
work if the target type were part of a :class:`.Variant`, or other target
type of a :class:`.TypeDecorator`.  Additionally, the SQL compiler now
calls upon the dialect-level implementation when it renders these methods
so that dialects can now provide for SQL-level processing for built-in
types.

Change-Id: Ic7b39575184db582e628e6ecee48dcda7d03a817
Fixes: #3981
6 years agoAdd support of empty list in exanding of bindparam
Nicolas Rolin [Fri, 25 May 2018 17:27:22 +0000 (13:27 -0400)] 
Add support of empty list in exanding of bindparam

Added new logic to the "expanding IN" bound parameter feature whereby if
the given list is empty, a special "empty set" expression that is specific
to different backends is generated, thus allowing IN expressions to be
fully dynamic including empty IN expressions.

Fixes: #4271
Change-Id: Icc3c73bbd6005206b9d06baaeb14a097af5edd36
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/432

6 years agoInclude UPDATE/DELETE extra_froms in correlation
Mike Bayer [Sat, 4 Aug 2018 17:45:07 +0000 (13:45 -0400)] 
Include UPDATE/DELETE extra_froms in correlation

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
:meth:`.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 :meth:`.Select.correlate` explicitly to
resolve.

Change-Id: Ie11eaad7e49af3f59df11691b104d6359341bdae
Fixes: #4313
6 years agoMerge "Handle association proxy delete and provide for scalar delete cascade"
mike bayer [Thu, 2 Aug 2018 03:20:01 +0000 (23:20 -0400)] 
Merge "Handle association proxy delete and provide for scalar delete cascade"

6 years agoMerge "Bind Integers to int for cx_Oracle"
mike bayer [Thu, 2 Aug 2018 03:18:58 +0000 (23:18 -0400)] 
Merge "Bind Integers to int for cx_Oracle"

6 years agoBind Integers to int for cx_Oracle
Mike Bayer [Wed, 1 Aug 2018 18:12:49 +0000 (14:12 -0400)] 
Bind Integers to int for cx_Oracle

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.

Change-Id: I4c6b2cca490aff5b98b7ceff3414715202881c89
Fixes: #4309
6 years agoHandle association proxy delete and provide for scalar delete cascade
Mike Bayer [Wed, 1 Aug 2018 16:01:59 +0000 (12:01 -0400)] 
Handle association proxy delete and provide for scalar delete cascade

Fixed multiple issues regarding de-association of scalar objects with the
association proxy.  ``del`` now works, and additionally a new flag
:paramref:`.AssociationProxy.cascade_scalar_deletes` is added, which when
set to True indicates that setting a scalar attribute to ``None`` or
deleting via ``del`` will also set the source association to ``None``.

Change-Id: I1580d761571d63eb03a7e8df078cef97d265b85c
Fixes: #4308
6 years agoMerge "Fix collections ABC access before Python 3.8"
mike bayer [Wed, 1 Aug 2018 21:39:58 +0000 (17:39 -0400)] 
Merge "Fix collections ABC access before Python 3.8"

6 years agoMention Properties keys in __dir__
Korn, Uwe [Mon, 9 Jul 2018 15:54:38 +0000 (11:54 -0400)] 
Mention Properties keys in __dir__

The Python builtin ``dir()`` is now supported for a SQLAlchemy "properties"
object, such as that of a Core columns collection (e.g. ``.c``),
``mapper.attrs``, etc.  Allows iPython autocompletion to work as well.
Pull request courtesy Uwe Korn.

Change-Id: I8696729542d1b74a566642a3a63fd500f64588cd
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/458

Mention Properties keys in __dir__

Change-Id: I88939955857c8df5eed0b87bc27c45357780b17d

6 years agoFix collections ABC access before Python 3.8
Nathaniel Knight [Wed, 1 Aug 2018 01:59:47 +0000 (21:59 -0400)] 
Fix collections ABC access before Python 3.8

Started importing "collections" from "collections.abc" under Python 3.3 and
greater for Python 3.8 compatibility.  Pull request courtesy Nathaniel
Knight.

In Python 3.3, the abstract base classes (Iterable, Mapping, etc.)
were moved from the `collections` module and put in the
`collections.abc` module. They remain in the `collections` module for
backwards compatibility, and will until Python 3.8.

This commit adds a variable (`collections_abc`) to the `util/compat`
module, which will be the `collections` module for Python < 3.3 and
before, or the `collections.abc` module for Python >= 3.3. It also
uses the new variable, getting rid of some deprecation warnings that
were seen when running under Python 3.7.

Change-Id: I2d1c0ef97c8ecac7af152cc56263422a40faa6bb
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/464

6 years agoCorrect sharding tests for provisioned follower
Mike Bayer [Wed, 1 Aug 2018 16:27:22 +0000 (12:27 -0400)] 
Correct sharding tests for provisioned follower

The sharding tests created named sqlite databases that were
shared across test suites.  It is unknown why these suddenly
started failing and were not failing before.

Change-Id: If2044f914ddaea0db594aa18b9278e24e2c818ea

6 years agoDo some pep8 and other cruft removal around association proxy
Mike Bayer [Wed, 1 Aug 2018 16:13:33 +0000 (12:13 -0400)] 
Do some pep8 and other cruft removal around association proxy

Change-Id: I33130022a7e223318b65388620828d539f6dacfd

6 years agoMerge branch 'migration-12-typo-fix' of https://bitbucket.org/nbasu02/sqlalchemy
Mike Bayer [Wed, 1 Aug 2018 02:11:22 +0000 (22:11 -0400)] 
Merge branch 'migration-12-typo-fix' of https://bitbucket.org/nbasu02/sqlalchemy

Change-Id: I4682c1f7f94f25b813be686fdce0a2e0839412fe

6 years agoAdd comma in migration-12
Neil Basu [Tue, 31 Jul 2018 21:27:18 +0000 (14:27 -0700)] 
Add comma in migration-12

7 years agoReplace 'with' with 'which'
Kevin Horn [Fri, 27 Jul 2018 16:06:50 +0000 (11:06 -0500)] 
Replace 'with' with 'which'

7 years agoMerge "Fix quoting schemas in _get_table_sql for the SQLite backend"
mike bayer [Wed, 18 Jul 2018 18:00:33 +0000 (14:00 -0400)] 
Merge "Fix quoting schemas in _get_table_sql for the SQLite backend"

7 years agoFix quoting schemas in _get_table_sql for the SQLite backend
Phillip Cloud [Mon, 16 Jul 2018 14:10:55 +0000 (10:10 -0400)] 
Fix quoting schemas in _get_table_sql for the SQLite backend

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.

Change-Id: I2770788c1f094a7743209250ec26b5ef5fb2d9e8
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/463

7 years agoAdd `postgresql_psycopg2binary` install extra that installs `psycopg2-binary`
Alex Rothberg [Wed, 18 Jul 2018 14:40:52 +0000 (10:40 -0400)] 
Add `postgresql_psycopg2binary` install extra that installs `psycopg2-binary`

Fixes: #4306
Change-Id: I26edc1a4ac8a7f9f3f258bb03009ebfa4cc00e1a
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/465

7 years agoDon't apply no-traverse to query.statement
Mike Bayer [Sat, 14 Jul 2018 16:26:29 +0000 (12:26 -0400)] 
Don't apply no-traverse to query.statement

Fixed long-standing issue in :class:`.Query` where a scalar subquery such
as produced by :meth:`.Query.exists`, :meth:`.Query.as_scalar` and other
derivations from :attr:`.Query.statement` would not correctly be adapted
when used in a new :class:`.Query` that required entity adaptation, such as
when the query were turned into a union, or a from_self(), etc. The change
removes the "no adaptation" annotation from the :func:`.select` object
produced by the :attr:`.Query.statement` accessor.

Change-Id: I554e0e909ac6ee785ec3b3b14aaec9d235aa28cf
Fixes: #4304
7 years agocherry-pick changelog update for 1.2.11
Mike Bayer [Fri, 13 Jul 2018 23:03:48 +0000 (19:03 -0400)] 
cherry-pick changelog update for 1.2.11

7 years agocherry-pick changelog from 1.2.10
Mike Bayer [Fri, 13 Jul 2018 23:03:48 +0000 (19:03 -0400)] 
cherry-pick changelog from 1.2.10

7 years agoUse exprs for bundle __clause_element__
Mike Bayer [Fri, 13 Jul 2018 16:58:21 +0000 (12:58 -0400)] 
Use exprs for bundle __clause_element__

Fixed bug in :class:`.Bundle` construct where placing two columns of the
same name would be de-duplicated, when the :class:`.Bundle` were used as
part of the rendered SQL, such as in the ORDER BY or GROUP BY of the statement.

Change-Id: Ia528c9fbb399a6beb5ea7cdd3a8a83ad530f5831
Fixes: #4295
7 years agoCorrect the bug number for :ticket:`4288`, which was erroneously
Mike Bayer [Fri, 13 Jul 2018 16:44:50 +0000 (12:44 -0400)] 
Correct the bug number for :ticket:`4288`, which was erroneously
given as :ticket:`4228`.

Change-Id: I6525560c1bcf3f3d861d6254723f5facdba6adae
Fixes: #4288
7 years ago- fix typo
Mike Bayer [Fri, 13 Jul 2018 16:41:04 +0000 (12:41 -0400)] 
- fix typo

Change-Id: I78692e821e34afe654c1131cd3465e4a6dfe773f

7 years agoCorrect fastexecutemany test for lower pyodbc version
Mike Bayer [Fri, 13 Jul 2018 02:55:01 +0000 (22:55 -0400)] 
Correct fastexecutemany test for lower pyodbc version

some builds on CI have a pyodbc that is < 4.0.19, make
the check more specific

Change-Id: I69b33c2367d4a03adb00bcf52fb6d1483b0327f8

7 years agoMerge "Don't null FK for collection-removed item with passive_deletes='all'"
mike bayer [Thu, 12 Jul 2018 21:41:25 +0000 (17:41 -0400)] 
Merge "Don't null FK for collection-removed item with passive_deletes='all'"

7 years agoDon't null FK for collection-removed item with passive_deletes='all'
Mike Bayer [Wed, 28 Feb 2018 16:50:17 +0000 (11:50 -0500)] 
Don't null FK for collection-removed item with passive_deletes='all'

Fixed issue regarding passive_deletes="all", where the foreign key
attribute of an object is maintained with its value even after the object
is removed from its parent collection.  Previously, the unit of work would
set this to NULL even though passive_deletes indicated it should not be
modified.

Change-Id: I5ba98bc388cbdd6323d255b764e02506c2e66896
Fixes: #3844
7 years agoMerge "Drop default-related structures after the Table is dropped."
mike bayer [Wed, 11 Jul 2018 13:30:17 +0000 (09:30 -0400)] 
Merge "Drop default-related structures after the Table is dropped."

7 years agoAdd pyodbc fast_executemany
Mike Bayer [Wed, 11 Jul 2018 03:47:05 +0000 (23:47 -0400)] 
Add pyodbc fast_executemany

Added ``fast_executemany=True`` parameter to the SQL Server pyodbc dialect,
which enables use of pyodbc's new performance feature of the same name
when using Microsoft ODBC drivers.

Change-Id: I743fa7280e8f709addd330cfc7682623701cbb2e
Fixes: #4158
7 years agoMerge "Add all "like", "between", "is" operators as comparison operators"
mike bayer [Wed, 11 Jul 2018 03:15:33 +0000 (23:15 -0400)] 
Merge "Add all "like", "between", "is" operators as comparison operators"

7 years agoDrop default-related structures after the Table is dropped.
Mike Bayer [Tue, 10 Jul 2018 13:41:21 +0000 (09:41 -0400)] 
Drop default-related structures after the Table is dropped.

Fixed bug where a :class:`.Sequence` would be dropped explicitly before any
:class:`.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 :meth:`.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.

Change-Id: I185f2cc76d2011ad4dd3ba9bde5d8aef0ec335ae
Fixes: #4300
7 years agoSqlite json
Ilja Everilä [Thu, 15 Mar 2018 14:18:13 +0000 (10:18 -0400)] 
Sqlite json

Added support for SQLite's json functionality via the new
SQLite implementation for :class:`.sqltypes.JSON`, :class:`.sqlite.JSON`.
The name used for the type is ``JSON``, following an example found at
SQLite's own documentation. Pull request courtesy Ilja Everilä.

Fixes: #3850
Change-Id: I3d2714fb8655343a99d13dc751b16b93d05d7dda
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/434

7 years agoAdd all "like", "between", "is" operators as comparison operators
Mike Bayer [Tue, 10 Jul 2018 21:00:21 +0000 (17:00 -0400)] 
Add all "like", "between", "is" operators as comparison operators

Added "like" based operators as "comparison" operators, including
:meth:`.ColumnOperators.startswith` :meth:`.ColumnOperators.endswith`
:meth:`.ColumnOperators.ilike` :meth:`.ColumnOperators.notilike` among many
others, so that all of these operators can be the basis for an ORM
"primaryjoin" condition.

Change-Id: Idb13961f0c74462a139fc3444626e042f798ff08
Fixes: #4302
7 years agoDocument sticky behavior of loader options
Mike Bayer [Tue, 10 Jul 2018 17:30:05 +0000 (13:30 -0400)] 
Document sticky behavior of loader options

References #4301

Change-Id: If921e3b8369e2cd5312b5964a99bcf7731b3ecfc

7 years agoMerge "Use MySQL protocol-level ping."
mike bayer [Tue, 10 Jul 2018 01:51:58 +0000 (21:51 -0400)] 
Merge "Use MySQL protocol-level ping."

7 years agoMerge "Expire memoizations on setattr/delattr, check in delattr"
mike bayer [Tue, 10 Jul 2018 01:51:10 +0000 (21:51 -0400)] 
Merge "Expire memoizations on setattr/delattr, check in delattr"

7 years agosupport functions "as binary comparison"
Mike Bayer [Mon, 9 Jul 2018 19:47:14 +0000 (15:47 -0400)] 
support functions "as binary comparison"

Added new feature :meth:`.FunctionElement.as_comparison` which allows a SQL
function to act as a binary comparison operation that can work within the
ORM.

Change-Id: I07018e2065d09775c0406cabdd35fc38cc0da699
Fixes: #3831
7 years agoMerge "Refactor pool.py into a package"
mike bayer [Mon, 9 Jul 2018 22:38:27 +0000 (18:38 -0400)] 
Merge "Refactor pool.py into a package"

7 years agoExpire memoizations on setattr/delattr, check in delattr
Mike Bayer [Mon, 9 Jul 2018 22:24:12 +0000 (18:24 -0400)] 
Expire memoizations on setattr/delattr, check in delattr

Fixed bug where declarative would not update the state of the
:class:`.Mapper` as far as what attributes were present, when additional
attributes were added or removed after the mapper attribute collections had
already been called and memoized.  Addtionally, a ``NotImplementedError``
is now raised if a fully mapped attribute (e.g. column, relationship, etc.)
is deleted from a class that is currently mapped, since the mapper will not
function correctly if the attribute has been removed.

Change-Id: Idaca8e0237b31aa1d6564d94c3a179d7dc6b5df9
Fixes: #4133
7 years agoUse MySQL protocol-level ping.
Maxim Bublis [Mon, 2 Jul 2018 16:34:32 +0000 (12:34 -0400)] 
Use MySQL protocol-level ping.

Utilizes MySQL protocol-level pings for disconnection detection.
This is just a 5-byte packet followed by a 7-byte response.

Affects MySQLdb, MySQL Connector and PyMySQL dialects.

Change-Id: I672f75e3746878d88987a31750444dde0cf8eb9b
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/460

7 years ago- add docs for PG REGCLASS
Mike Bayer [Mon, 9 Jul 2018 21:44:31 +0000 (17:44 -0400)] 
- add docs for PG REGCLASS
- remove __init__ docs for types without an init

Change-Id: I254ecb3763eaeb29aa71743c87ce2e021507fe28

7 years ago- add changelog 13 and links
Mike Bayer [Mon, 9 Jul 2018 21:37:06 +0000 (17:37 -0400)] 
- add changelog 13 and links

Change-Id: I658a5958c0b053a26308aba213d9da3a67b75a1c

7 years agoRefactor pool.py into a package
Mike Bayer [Wed, 13 Jun 2018 20:19:23 +0000 (16:19 -0400)] 
Refactor pool.py into a package

for better separation of concerns split out the
core pooling constructs from the implementations.  also
makes more room for new pool classes should we decide to
add them.  The DBProxy feature is never used so remove it
from documentation and split it out.

Change-Id: I04c9d7ae1882b17f3cf5c37ed05b781b05ef88fa
Fixes: #4255
7 years agoCheck tokens in chop path for inspectionattr before calling is_mapper
Mike Bayer [Sun, 8 Jul 2018 23:10:36 +0000 (19:10 -0400)] 
Check tokens in chop path for inspectionattr before calling is_mapper

Fixed regression in 1.2.9 due to :ticket:`4287` where using a
:class::`.Load` option in conjunction with a string wildcard would result
in a TypeError.

Change-Id: I2997ead0b8b9fa0edd009aa6f3161f4618fab97b
Fixes: #4298
7 years ago- add some context to the declarative section indicating this is not
Mike Bayer [Thu, 5 Jul 2018 04:05:42 +0000 (00:05 -0400)] 
- add some context to the declarative section indicating this is not
the introductory material for these topics

Change-Id: I358ba8c32520ce3950a727216bc019e33377e7b9

7 years agoblock cx_Oracle 6.4
Mike Bayer [Thu, 5 Jul 2018 03:33:16 +0000 (23:33 -0400)] 
block cx_Oracle 6.4

Prevents https://github.com/oracle/python-cx_Oracle/issues/199

Change-Id: I0f94bde38919a027f094ca016621c1364e845332

7 years ago- fix linking for the query.rst page
Mike Bayer [Wed, 4 Jul 2018 21:48:31 +0000 (17:48 -0400)] 
- fix linking for the query.rst page

Change-Id: I269fdd72e372e1bf4f0f85e9fc8e6938adc4f686

7 years ago- add "leaks memory" to documented issues w/ mysqlconnector,
Mike Bayer [Sat, 30 Jun 2018 22:30:25 +0000 (18:30 -0400)] 
- add "leaks memory" to documented issues w/ mysqlconnector,
references #4296

Change-Id: I5b663d3444d3732a83a32443c128faffe62f11d9

7 years agocherry-pick changelog update for 1.2.10
Mike Bayer [Fri, 29 Jun 2018 17:45:17 +0000 (13:45 -0400)] 
cherry-pick changelog update for 1.2.10

7 years agocherry-pick changelog from 1.2.9
Mike Bayer [Fri, 29 Jun 2018 17:45:16 +0000 (13:45 -0400)] 
cherry-pick changelog from 1.2.9

7 years agoMerge "Add unique_constraint_name to MSSQL FK reflection"
mike bayer [Fri, 29 Jun 2018 16:26:29 +0000 (12:26 -0400)] 
Merge "Add unique_constraint_name to MSSQL FK reflection"

7 years agoMerge remote-tracking branch 'origin/pr/456'
Mike Bayer [Fri, 29 Jun 2018 15:08:23 +0000 (11:08 -0400)] 
Merge remote-tracking branch 'origin/pr/456'

Change-Id: Id1d26d756f26e8cece921f476bc3f49689a3b782

7 years agoAdd unique_constraint_name to MSSQL FK reflection
Sean Dunn [Fri, 29 Jun 2018 14:26:57 +0000 (10:26 -0400)] 
Add unique_constraint_name to MSSQL FK reflection

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.

Fixes: #4228
Change-Id: I7dabaaee0944e1030048826ba39fc574b0d63031
Pull-request: https://github.com/zzzeek/sqlalchemy/pull/457

7 years agoUpdate URL for PyMySQL documentation
Logan Rosen [Thu, 28 Jun 2018 20:04:27 +0000 (16:04 -0400)] 
Update URL for PyMySQL documentation

7 years agoReflect ASC/DESC in MySQL index columns
Mike Bayer [Thu, 28 Jun 2018 18:33:14 +0000 (14:33 -0400)] 
Reflect ASC/DESC in MySQL index columns

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.

Change-Id: I21f64984ade690aac8c87dbe3aad0c1ee8e9727f
Fixes: #4293
7 years agoMerge "Vendor python3 formatargspec"
mike bayer [Thu, 28 Jun 2018 17:41:18 +0000 (13:41 -0400)] 
Merge "Vendor python3 formatargspec"

7 years agoVendor python3 formatargspec
Mike Bayer [Thu, 28 Jun 2018 15:49:02 +0000 (11:49 -0400)] 
Vendor python3 formatargspec

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.

Change-Id: I751652fac7f605a3a10b547ba8c5f34fef1de945
Fixes: #4291