Age | Commit message (Collapse) | Author |
|
Changelog
=========
- fix link to types in metadata, fixes #3618 - fix "version" got whacked into "f" in core tutorial - fix short underline in automap - fix unmatched boldface in session events (d03477d)
Merge remote-tracking branch 'origin/pr/225' (ddba8b0)
Merge remote-tracking branch 'origin/pr/226' (536e5ce)
- ensure we use a Connection for effective schema here since Engine doesn't have it; keep it simple (331caf1)
Fix typo in session docs (bb29449)
- Fixed regression since 0.9 where the 0.9 style loader options system failed to accommodate for multiple :func:`.undefer_group` loader options in a single query. Multiple :func:`.undefer_group` options will now be taken into account even against the same entity. fixes #3623 (c7ae0da)
- Multi-tenancy schema translation for :class:`.Table` objects is added. This supports the use case of an application that uses the same set of :class:`.Table` objects in many schemas, such as schema-per-user. A new execution option :paramref:`.Connection.execution_options.schema_translate_map` is added. fixes #2685 - latest tox doesn't like the {posargs} in the profile rerunner (89facbe)
- fix docstrings (777e256)
Merged in jvanasco/sqlalchemy-alt/issue_docs_scoped_session (pull request #50) (1539268)
- pg8000 fixes for json (ff803b1)
- add a do-nothing for mock url _instantiate_plugins (cd8adfe)
- add limiting criteria to the JSON tests so that we don't attempt integer indexed access from a key/value object nor string access from an integer-indexed array, as earlier Postgresql versions (prior to 9.4) don't allow this (5c8bdca)
- Added a new entrypoint system to the engine to allow "plugins" to be stated in the query string for a URL. Custom plugins can be written which will be given the chance up front to alter and/or consume the engine's URL and keyword arguments, and then at engine create time will be given the engine itself to allow additional modifications or event registration. Plugins are written as a subclass of :class:`.CreateEnginePlugin`; see that class for details. fixes #3536 (c8b7729)
- long line (cfb631e)
- add a few JSON tests specific to MySQL, including basic reflection (93d71b8)
- Added :class:`.mysql.JSON` for MySQL 5.7. The JSON type provides persistence of JSON values in MySQL as well as basic operator support of "getitem" and "getpath", making use of the ``JSON_EXTRACT`` function in order to refer to individual paths in a JSON structure. fixes #3547 - Added a new type to core :class:`.types.JSON`. This is the base of the PostgreSQL :class:`.postgresql.JSON` type as well as that of the new :class:`.mysql.JSON` type, so that a PG/MySQL-agnostic JSON column may be used. The type features basic index and path searching support. fixes #3619 - reorganization of migration docs etc. to try to refer both to the fixes to JSON that helps Postgresql while at the same time indicating these are new features of the new base JSON type. - a rework of the Array/Indexable system some more, moving things that are specific to Array out of Indexable. - new operators for JSON indexing added to core so that these can be compiled by the PG and MySQL dialects individually - rename sqltypes.Array to sqltypes.ARRAY - as there is no generic Array implementation, this is an uppercase type for now, consistent with the new sqltypes.JSON type that is also not a generic implementation. There may need to be some convention change to handle the case of datatypes that aren't generic, rely upon DB-native implementations, but aren't necessarily all named the same thing. (a80bb4e)
- dont forwards-report tons of 1.0.x changes in the unreleased 1.1; only when a 1.1.x is released would we want to capture what's still sitting in a 1.0.x changelog (16746dd)
- Fixed 1.0 regression where the eager fetch of cursor.rowcount was no longer called for an UPDATE or DELETE statement emitted via plain text or via the :func:`.text` construct, affecting those drivers that erase cursor.rowcount once the cursor is closed such as SQL Server ODBC and Firebird drivers. fixes #3622 (197ffa2)
- break out mysql/base into modules as it's getting huge with more to come (04b1a52)
Update SQLAlchemy-Migrate link to the new repo (56b76ce)
- Fixed an assertion that would raise somewhat inappropriately if a :class:`.Index` were associated with a :class:`.Column` that is associated with a lower-case-t :class:`.TableClause`; the association should be ignored for the purposes of associating the index with a :class:`.Table`. fixes #3616 (c7d6c66)
- release date for 1.0.11 (93b48e6)
- An adjustment to the regular expression used to parse MySQL views, such that we no longer assume the "ALGORITHM" keyword is present in the reflected view source, as some users have reported this not being present in some Amazon RDS environments. fixes #3613 (8c54b14)
- changelog for pullreq github:222 (5c7ade2)
Merge remote-tracking branch 'origin/pr/222' (e95c344)
- varchar requires a length (0c8242b)
- add the test from ref #3614 as well for testing ref #3611 (4b708c4)
- just use *arg straight without "key" for pop (5e5b8a9)
- Further fixes to :ticket:`3605`, pop method on :class:`.MutableDict`, where the "default" argument was not included. fixes #3605 (913858c)
Make docs listing of param order for event.listen match the code (30be49c)
some spelling fixes (738d515)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (ce25ac1)
- remove errant pdb, references #3612 (03ee22f)
- Fixed bug in baked loader system where the systemwide monkeypatch for setting up baked lazy loaders would interfere with other loader strategies that rely on lazy loading as a fallback, e.g. joined and subquery eager loaders, leading to ``IndexError`` exceptions at mapper configuration time. fixes #3612 (a22b208)
- hyperlink default-related parameters (8a24da6)
- Fixed regression caused in 1.0.10 by the fix for :ticket:`3593` where the check added for a polymorphic joinedload from a poly_subclass->class->poly_baseclass connection would fail for the scenario of class->poly_subclass->class. fixes #3611 (a8ec349)
- add some more oracle skips (c42725e)
- a few tweaks to allow "server_defaults" to be a little more linkable; remove "undoc members" that was putting some random server_default atributes from ColumnClause (80bbf13)
- since we are mutating the statement in a loop, start with the same cached starting statement each time. no issue has been observed with the former but it could perhaps have issues w/ versioning or eager_defaults (d0fc726)
- Fixed bug where :meth:`.Session.bulk_update_mappings` and related would not bump a version id counter when in use. The experience here is still a little rough as the original version id is required in the given dictionaries and there's not clean error reporting on that yet. fixes #3610 (26ed90a)
- Fixed bug in :meth:`.Update.return_defaults` which would cause all insert-default holding columns not otherwise included in the SET clause (such as primary key cols) to get rendered into the RETURNING even though this is an UPDATE. (0e4c4d7)
Add new reserved words for MySQL 5.7. (03ee4bb)
- Fixed bug where use of the :meth:`.Query.select_from` method would cause a subsequent call to the :meth:`.Query.with_parent` method to fail. fixes #3606 - add mark-as-fail test for #3607 (7d96ad4)
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (0a5dcdc)
updated sphinx tageting (a0612a4)
updates to scoping docs to make `.session_factory` appear public (47e775b)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (6de3d49)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
Merge remote-tracking branch 'origin/pr/226' (536e5ce)
- ensure we use a Connection for effective schema here since Engine doesn't have it; keep it simple (331caf1)
Fix typo in session docs (bb29449)
- Fixed regression since 0.9 where the 0.9 style loader options system failed to accommodate for multiple :func:`.undefer_group` loader options in a single query. Multiple :func:`.undefer_group` options will now be taken into account even against the same entity. fixes #3623 (c7ae0da)
- Multi-tenancy schema translation for :class:`.Table` objects is added. This supports the use case of an application that uses the same set of :class:`.Table` objects in many schemas, such as schema-per-user. A new execution option :paramref:`.Connection.execution_options.schema_translate_map` is added. fixes #2685 - latest tox doesn't like the {posargs} in the profile rerunner (89facbe)
- fix docstrings (777e256)
Merged in jvanasco/sqlalchemy-alt/issue_docs_scoped_session (pull request #50) (1539268)
- pg8000 fixes for json (ff803b1)
- add a do-nothing for mock url _instantiate_plugins (cd8adfe)
- add limiting criteria to the JSON tests so that we don't attempt integer indexed access from a key/value object nor string access from an integer-indexed array, as earlier Postgresql versions (prior to 9.4) don't allow this (5c8bdca)
- Added a new entrypoint system to the engine to allow "plugins" to be stated in the query string for a URL. Custom plugins can be written which will be given the chance up front to alter and/or consume the engine's URL and keyword arguments, and then at engine create time will be given the engine itself to allow additional modifications or event registration. Plugins are written as a subclass of :class:`.CreateEnginePlugin`; see that class for details. fixes #3536 (c8b7729)
- long line (cfb631e)
- add a few JSON tests specific to MySQL, including basic reflection (93d71b8)
- Added :class:`.mysql.JSON` for MySQL 5.7. The JSON type provides persistence of JSON values in MySQL as well as basic operator support of "getitem" and "getpath", making use of the ``JSON_EXTRACT`` function in order to refer to individual paths in a JSON structure. fixes #3547 - Added a new type to core :class:`.types.JSON`. This is the base of the PostgreSQL :class:`.postgresql.JSON` type as well as that of the new :class:`.mysql.JSON` type, so that a PG/MySQL-agnostic JSON column may be used. The type features basic index and path searching support. fixes #3619 - reorganization of migration docs etc. to try to refer both to the fixes to JSON that helps Postgresql while at the same time indicating these are new features of the new base JSON type. - a rework of the Array/Indexable system some more, moving things that are specific to Array out of Indexable. - new operators for JSON indexing added to core so that these can be compiled by the PG and MySQL dialects individually - rename sqltypes.Array to sqltypes.ARRAY - as there is no generic Array implementation, this is an uppercase type for now, consistent with the new sqltypes.JSON type that is also not a generic implementation. There may need to be some convention change to handle the case of datatypes that aren't generic, rely upon DB-native implementations, but aren't necessarily all named the same thing. (a80bb4e)
- dont forwards-report tons of 1.0.x changes in the unreleased 1.1; only when a 1.1.x is released would we want to capture what's still sitting in a 1.0.x changelog (16746dd)
- Fixed 1.0 regression where the eager fetch of cursor.rowcount was no longer called for an UPDATE or DELETE statement emitted via plain text or via the :func:`.text` construct, affecting those drivers that erase cursor.rowcount once the cursor is closed such as SQL Server ODBC and Firebird drivers. fixes #3622 (197ffa2)
- break out mysql/base into modules as it's getting huge with more to come (04b1a52)
- Fixed an assertion that would raise somewhat inappropriately if a :class:`.Index` were associated with a :class:`.Column` that is associated with a lower-case-t :class:`.TableClause`; the association should be ignored for the purposes of associating the index with a :class:`.Table`. fixes #3616 (c7d6c66)
- release date for 1.0.11 (93b48e6)
- An adjustment to the regular expression used to parse MySQL views, such that we no longer assume the "ALGORITHM" keyword is present in the reflected view source, as some users have reported this not being present in some Amazon RDS environments. fixes #3613 (8c54b14)
- changelog for pullreq github:222 (5c7ade2)
Merge remote-tracking branch 'origin/pr/222' (e95c344)
- varchar requires a length (0c8242b)
- add the test from ref #3614 as well for testing ref #3611 (4b708c4)
- just use *arg straight without "key" for pop (5e5b8a9)
- Further fixes to :ticket:`3605`, pop method on :class:`.MutableDict`, where the "default" argument was not included. fixes #3605 (913858c)
Make docs listing of param order for event.listen match the code (30be49c)
some spelling fixes (738d515)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (ce25ac1)
- remove errant pdb, references #3612 (03ee22f)
- Fixed bug in baked loader system where the systemwide monkeypatch for setting up baked lazy loaders would interfere with other loader strategies that rely on lazy loading as a fallback, e.g. joined and subquery eager loaders, leading to ``IndexError`` exceptions at mapper configuration time. fixes #3612 (a22b208)
- hyperlink default-related parameters (8a24da6)
- Fixed regression caused in 1.0.10 by the fix for :ticket:`3593` where the check added for a polymorphic joinedload from a poly_subclass->class->poly_baseclass connection would fail for the scenario of class->poly_subclass->class. fixes #3611 (a8ec349)
- add some more oracle skips (c42725e)
- a few tweaks to allow "server_defaults" to be a little more linkable; remove "undoc members" that was putting some random server_default atributes from ColumnClause (80bbf13)
- since we are mutating the statement in a loop, start with the same cached starting statement each time. no issue has been observed with the former but it could perhaps have issues w/ versioning or eager_defaults (d0fc726)
- Fixed bug where :meth:`.Session.bulk_update_mappings` and related would not bump a version id counter when in use. The experience here is still a little rough as the original version id is required in the given dictionaries and there's not clean error reporting on that yet. fixes #3610 (26ed90a)
- Fixed bug in :meth:`.Update.return_defaults` which would cause all insert-default holding columns not otherwise included in the SET clause (such as primary key cols) to get rendered into the RETURNING even though this is an UPDATE. (0e4c4d7)
Add new reserved words for MySQL 5.7. (03ee4bb)
- Fixed bug where use of the :meth:`.Query.select_from` method would cause a subsequent call to the :meth:`.Query.with_parent` method to fail. fixes #3606 - add mark-as-fail test for #3607 (7d96ad4)
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (0a5dcdc)
updated sphinx tageting (a0612a4)
updates to scoping docs to make `.session_factory` appear public (47e775b)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (6de3d49)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- Multi-tenancy schema translation for :class:`.Table` objects is added. This supports the use case of an application that uses the same set of :class:`.Table` objects in many schemas, such as schema-per-user. A new execution option :paramref:`.Connection.execution_options.schema_translate_map` is added. fixes #2685 - latest tox doesn't like the {posargs} in the profile rerunner (89facbe)
- fix docstrings (777e256)
Merged in jvanasco/sqlalchemy-alt/issue_docs_scoped_session (pull request #50) (1539268)
- pg8000 fixes for json (ff803b1)
- add a do-nothing for mock url _instantiate_plugins (cd8adfe)
- add limiting criteria to the JSON tests so that we don't attempt integer indexed access from a key/value object nor string access from an integer-indexed array, as earlier Postgresql versions (prior to 9.4) don't allow this (5c8bdca)
- Added a new entrypoint system to the engine to allow "plugins" to be stated in the query string for a URL. Custom plugins can be written which will be given the chance up front to alter and/or consume the engine's URL and keyword arguments, and then at engine create time will be given the engine itself to allow additional modifications or event registration. Plugins are written as a subclass of :class:`.CreateEnginePlugin`; see that class for details. fixes #3536 (c8b7729)
- long line (cfb631e)
- add a few JSON tests specific to MySQL, including basic reflection (93d71b8)
- Added :class:`.mysql.JSON` for MySQL 5.7. The JSON type provides persistence of JSON values in MySQL as well as basic operator support of "getitem" and "getpath", making use of the ``JSON_EXTRACT`` function in order to refer to individual paths in a JSON structure. fixes #3547 - Added a new type to core :class:`.types.JSON`. This is the base of the PostgreSQL :class:`.postgresql.JSON` type as well as that of the new :class:`.mysql.JSON` type, so that a PG/MySQL-agnostic JSON column may be used. The type features basic index and path searching support. fixes #3619 - reorganization of migration docs etc. to try to refer both to the fixes to JSON that helps Postgresql while at the same time indicating these are new features of the new base JSON type. - a rework of the Array/Indexable system some more, moving things that are specific to Array out of Indexable. - new operators for JSON indexing added to core so that these can be compiled by the PG and MySQL dialects individually - rename sqltypes.Array to sqltypes.ARRAY - as there is no generic Array implementation, this is an uppercase type for now, consistent with the new sqltypes.JSON type that is also not a generic implementation. There may need to be some convention change to handle the case of datatypes that aren't generic, rely upon DB-native implementations, but aren't necessarily all named the same thing. (a80bb4e)
- dont forwards-report tons of 1.0.x changes in the unreleased 1.1; only when a 1.1.x is released would we want to capture what's still sitting in a 1.0.x changelog (16746dd)
- Fixed 1.0 regression where the eager fetch of cursor.rowcount was no longer called for an UPDATE or DELETE statement emitted via plain text or via the :func:`.text` construct, affecting those drivers that erase cursor.rowcount once the cursor is closed such as SQL Server ODBC and Firebird drivers. fixes #3622 (197ffa2)
- break out mysql/base into modules as it's getting huge with more to come (04b1a52)
- Fixed an assertion that would raise somewhat inappropriately if a :class:`.Index` were associated with a :class:`.Column` that is associated with a lower-case-t :class:`.TableClause`; the association should be ignored for the purposes of associating the index with a :class:`.Table`. fixes #3616 (c7d6c66)
- release date for 1.0.11 (93b48e6)
- An adjustment to the regular expression used to parse MySQL views, such that we no longer assume the "ALGORITHM" keyword is present in the reflected view source, as some users have reported this not being present in some Amazon RDS environments. fixes #3613 (8c54b14)
- changelog for pullreq github:222 (5c7ade2)
Merge remote-tracking branch 'origin/pr/222' (e95c344)
- varchar requires a length (0c8242b)
- add the test from ref #3614 as well for testing ref #3611 (4b708c4)
- just use *arg straight without "key" for pop (5e5b8a9)
- Further fixes to :ticket:`3605`, pop method on :class:`.MutableDict`, where the "default" argument was not included. fixes #3605 (913858c)
Make docs listing of param order for event.listen match the code (30be49c)
some spelling fixes (738d515)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (ce25ac1)
- remove errant pdb, references #3612 (03ee22f)
- Fixed bug in baked loader system where the systemwide monkeypatch for setting up baked lazy loaders would interfere with other loader strategies that rely on lazy loading as a fallback, e.g. joined and subquery eager loaders, leading to ``IndexError`` exceptions at mapper configuration time. fixes #3612 (a22b208)
- hyperlink default-related parameters (8a24da6)
- Fixed regression caused in 1.0.10 by the fix for :ticket:`3593` where the check added for a polymorphic joinedload from a poly_subclass->class->poly_baseclass connection would fail for the scenario of class->poly_subclass->class. fixes #3611 (a8ec349)
- add some more oracle skips (c42725e)
- a few tweaks to allow "server_defaults" to be a little more linkable; remove "undoc members" that was putting some random server_default atributes from ColumnClause (80bbf13)
- since we are mutating the statement in a loop, start with the same cached starting statement each time. no issue has been observed with the former but it could perhaps have issues w/ versioning or eager_defaults (d0fc726)
- Fixed bug where :meth:`.Session.bulk_update_mappings` and related would not bump a version id counter when in use. The experience here is still a little rough as the original version id is required in the given dictionaries and there's not clean error reporting on that yet. fixes #3610 (26ed90a)
- Fixed bug in :meth:`.Update.return_defaults` which would cause all insert-default holding columns not otherwise included in the SET clause (such as primary key cols) to get rendered into the RETURNING even though this is an UPDATE. (0e4c4d7)
Add new reserved words for MySQL 5.7. (03ee4bb)
- Fixed bug where use of the :meth:`.Query.select_from` method would cause a subsequent call to the :meth:`.Query.with_parent` method to fail. fixes #3606 - add mark-as-fail test for #3607 (7d96ad4)
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (0a5dcdc)
updated sphinx tageting (a0612a4)
updates to scoping docs to make `.session_factory` appear public (47e775b)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (6de3d49)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
Merged in jvanasco/sqlalchemy-alt/issue_docs_scoped_session (pull request #50) (1539268)
- pg8000 fixes for json (ff803b1)
- add a do-nothing for mock url _instantiate_plugins (cd8adfe)
- add limiting criteria to the JSON tests so that we don't attempt integer indexed access from a key/value object nor string access from an integer-indexed array, as earlier Postgresql versions (prior to 9.4) don't allow this (5c8bdca)
- Added a new entrypoint system to the engine to allow "plugins" to be stated in the query string for a URL. Custom plugins can be written which will be given the chance up front to alter and/or consume the engine's URL and keyword arguments, and then at engine create time will be given the engine itself to allow additional modifications or event registration. Plugins are written as a subclass of :class:`.CreateEnginePlugin`; see that class for details. fixes #3536 (c8b7729)
- long line (cfb631e)
- add a few JSON tests specific to MySQL, including basic reflection (93d71b8)
- Added :class:`.mysql.JSON` for MySQL 5.7. The JSON type provides persistence of JSON values in MySQL as well as basic operator support of "getitem" and "getpath", making use of the ``JSON_EXTRACT`` function in order to refer to individual paths in a JSON structure. fixes #3547 - Added a new type to core :class:`.types.JSON`. This is the base of the PostgreSQL :class:`.postgresql.JSON` type as well as that of the new :class:`.mysql.JSON` type, so that a PG/MySQL-agnostic JSON column may be used. The type features basic index and path searching support. fixes #3619 - reorganization of migration docs etc. to try to refer both to the fixes to JSON that helps Postgresql while at the same time indicating these are new features of the new base JSON type. - a rework of the Array/Indexable system some more, moving things that are specific to Array out of Indexable. - new operators for JSON indexing added to core so that these can be compiled by the PG and MySQL dialects individually - rename sqltypes.Array to sqltypes.ARRAY - as there is no generic Array implementation, this is an uppercase type for now, consistent with the new sqltypes.JSON type that is also not a generic implementation. There may need to be some convention change to handle the case of datatypes that aren't generic, rely upon DB-native implementations, but aren't necessarily all named the same thing. (a80bb4e)
- dont forwards-report tons of 1.0.x changes in the unreleased 1.1; only when a 1.1.x is released would we want to capture what's still sitting in a 1.0.x changelog (16746dd)
- Fixed 1.0 regression where the eager fetch of cursor.rowcount was no longer called for an UPDATE or DELETE statement emitted via plain text or via the :func:`.text` construct, affecting those drivers that erase cursor.rowcount once the cursor is closed such as SQL Server ODBC and Firebird drivers. fixes #3622 (197ffa2)
- break out mysql/base into modules as it's getting huge with more to come (04b1a52)
- Fixed an assertion that would raise somewhat inappropriately if a :class:`.Index` were associated with a :class:`.Column` that is associated with a lower-case-t :class:`.TableClause`; the association should be ignored for the purposes of associating the index with a :class:`.Table`. fixes #3616 (c7d6c66)
- release date for 1.0.11 (93b48e6)
- An adjustment to the regular expression used to parse MySQL views, such that we no longer assume the "ALGORITHM" keyword is present in the reflected view source, as some users have reported this not being present in some Amazon RDS environments. fixes #3613 (8c54b14)
- changelog for pullreq github:222 (5c7ade2)
Merge remote-tracking branch 'origin/pr/222' (e95c344)
- varchar requires a length (0c8242b)
- add the test from ref #3614 as well for testing ref #3611 (4b708c4)
- just use *arg straight without "key" for pop (5e5b8a9)
- Further fixes to :ticket:`3605`, pop method on :class:`.MutableDict`, where the "default" argument was not included. fixes #3605 (913858c)
Make docs listing of param order for event.listen match the code (30be49c)
some spelling fixes (738d515)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (ce25ac1)
- remove errant pdb, references #3612 (03ee22f)
- Fixed bug in baked loader system where the systemwide monkeypatch for setting up baked lazy loaders would interfere with other loader strategies that rely on lazy loading as a fallback, e.g. joined and subquery eager loaders, leading to ``IndexError`` exceptions at mapper configuration time. fixes #3612 (a22b208)
- hyperlink default-related parameters (8a24da6)
- Fixed regression caused in 1.0.10 by the fix for :ticket:`3593` where the check added for a polymorphic joinedload from a poly_subclass->class->poly_baseclass connection would fail for the scenario of class->poly_subclass->class. fixes #3611 (a8ec349)
- add some more oracle skips (c42725e)
- a few tweaks to allow "server_defaults" to be a little more linkable; remove "undoc members" that was putting some random server_default atributes from ColumnClause (80bbf13)
- since we are mutating the statement in a loop, start with the same cached starting statement each time. no issue has been observed with the former but it could perhaps have issues w/ versioning or eager_defaults (d0fc726)
- Fixed bug where :meth:`.Session.bulk_update_mappings` and related would not bump a version id counter when in use. The experience here is still a little rough as the original version id is required in the given dictionaries and there's not clean error reporting on that yet. fixes #3610 (26ed90a)
- Fixed bug in :meth:`.Update.return_defaults` which would cause all insert-default holding columns not otherwise included in the SET clause (such as primary key cols) to get rendered into the RETURNING even though this is an UPDATE. (0e4c4d7)
Add new reserved words for MySQL 5.7. (03ee4bb)
- Fixed bug where use of the :meth:`.Query.select_from` method would cause a subsequent call to the :meth:`.Query.with_parent` method to fail. fixes #3606 - add mark-as-fail test for #3607 (7d96ad4)
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (0a5dcdc)
updated sphinx tageting (a0612a4)
updates to scoping docs to make `.session_factory` appear public (47e775b)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (6de3d49)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- add limiting criteria to the JSON tests so that we don't attempt integer indexed access from a key/value object nor string access from an integer-indexed array, as earlier Postgresql versions (prior to 9.4) don't allow this (5c8bdca)
- Added a new entrypoint system to the engine to allow "plugins" to be stated in the query string for a URL. Custom plugins can be written which will be given the chance up front to alter and/or consume the engine's URL and keyword arguments, and then at engine create time will be given the engine itself to allow additional modifications or event registration. Plugins are written as a subclass of :class:`.CreateEnginePlugin`; see that class for details. fixes #3536 (c8b7729)
- long line (cfb631e)
- add a few JSON tests specific to MySQL, including basic reflection (93d71b8)
- Added :class:`.mysql.JSON` for MySQL 5.7. The JSON type provides persistence of JSON values in MySQL as well as basic operator support of "getitem" and "getpath", making use of the ``JSON_EXTRACT`` function in order to refer to individual paths in a JSON structure. fixes #3547 - Added a new type to core :class:`.types.JSON`. This is the base of the PostgreSQL :class:`.postgresql.JSON` type as well as that of the new :class:`.mysql.JSON` type, so that a PG/MySQL-agnostic JSON column may be used. The type features basic index and path searching support. fixes #3619 - reorganization of migration docs etc. to try to refer both to the fixes to JSON that helps Postgresql while at the same time indicating these are new features of the new base JSON type. - a rework of the Array/Indexable system some more, moving things that are specific to Array out of Indexable. - new operators for JSON indexing added to core so that these can be compiled by the PG and MySQL dialects individually - rename sqltypes.Array to sqltypes.ARRAY - as there is no generic Array implementation, this is an uppercase type for now, consistent with the new sqltypes.JSON type that is also not a generic implementation. There may need to be some convention change to handle the case of datatypes that aren't generic, rely upon DB-native implementations, but aren't necessarily all named the same thing. (a80bb4e)
- dont forwards-report tons of 1.0.x changes in the unreleased 1.1; only when a 1.1.x is released would we want to capture what's still sitting in a 1.0.x changelog (16746dd)
- Fixed 1.0 regression where the eager fetch of cursor.rowcount was no longer called for an UPDATE or DELETE statement emitted via plain text or via the :func:`.text` construct, affecting those drivers that erase cursor.rowcount once the cursor is closed such as SQL Server ODBC and Firebird drivers. fixes #3622 (197ffa2)
- break out mysql/base into modules as it's getting huge with more to come (04b1a52)
- Fixed an assertion that would raise somewhat inappropriately if a :class:`.Index` were associated with a :class:`.Column` that is associated with a lower-case-t :class:`.TableClause`; the association should be ignored for the purposes of associating the index with a :class:`.Table`. fixes #3616 (c7d6c66)
- release date for 1.0.11 (93b48e6)
- An adjustment to the regular expression used to parse MySQL views, such that we no longer assume the "ALGORITHM" keyword is present in the reflected view source, as some users have reported this not being present in some Amazon RDS environments. fixes #3613 (8c54b14)
- changelog for pullreq github:222 (5c7ade2)
Merge remote-tracking branch 'origin/pr/222' (e95c344)
- varchar requires a length (0c8242b)
- add the test from ref #3614 as well for testing ref #3611 (4b708c4)
- just use *arg straight without "key" for pop (5e5b8a9)
- Further fixes to :ticket:`3605`, pop method on :class:`.MutableDict`, where the "default" argument was not included. fixes #3605 (913858c)
Make docs listing of param order for event.listen match the code (30be49c)
some spelling fixes (738d515)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (ce25ac1)
- remove errant pdb, references #3612 (03ee22f)
- Fixed bug in baked loader system where the systemwide monkeypatch for setting up baked lazy loaders would interfere with other loader strategies that rely on lazy loading as a fallback, e.g. joined and subquery eager loaders, leading to ``IndexError`` exceptions at mapper configuration time. fixes #3612 (a22b208)
- hyperlink default-related parameters (8a24da6)
- Fixed regression caused in 1.0.10 by the fix for :ticket:`3593` where the check added for a polymorphic joinedload from a poly_subclass->class->poly_baseclass connection would fail for the scenario of class->poly_subclass->class. fixes #3611 (a8ec349)
- add some more oracle skips (c42725e)
- a few tweaks to allow "server_defaults" to be a little more linkable; remove "undoc members" that was putting some random server_default atributes from ColumnClause (80bbf13)
- since we are mutating the statement in a loop, start with the same cached starting statement each time. no issue has been observed with the former but it could perhaps have issues w/ versioning or eager_defaults (d0fc726)
- Fixed bug where :meth:`.Session.bulk_update_mappings` and related would not bump a version id counter when in use. The experience here is still a little rough as the original version id is required in the given dictionaries and there's not clean error reporting on that yet. fixes #3610 (26ed90a)
- Fixed bug in :meth:`.Update.return_defaults` which would cause all insert-default holding columns not otherwise included in the SET clause (such as primary key cols) to get rendered into the RETURNING even though this is an UPDATE. (0e4c4d7)
Add new reserved words for MySQL 5.7. (03ee4bb)
- Fixed bug where use of the :meth:`.Query.select_from` method would cause a subsequent call to the :meth:`.Query.with_parent` method to fail. fixes #3606 - add mark-as-fail test for #3607 (7d96ad4)
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (0a5dcdc)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (6de3d49)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- long line (cfb631e)
- add a few JSON tests specific to MySQL, including basic reflection (93d71b8)
- Added :class:`.mysql.JSON` for MySQL 5.7. The JSON type provides persistence of JSON values in MySQL as well as basic operator support of "getitem" and "getpath", making use of the ``JSON_EXTRACT`` function in order to refer to individual paths in a JSON structure. fixes #3547 - Added a new type to core :class:`.types.JSON`. This is the base of the PostgreSQL :class:`.postgresql.JSON` type as well as that of the new :class:`.mysql.JSON` type, so that a PG/MySQL-agnostic JSON column may be used. The type features basic index and path searching support. fixes #3619 - reorganization of migration docs etc. to try to refer both to the fixes to JSON that helps Postgresql while at the same time indicating these are new features of the new base JSON type. - a rework of the Array/Indexable system some more, moving things that are specific to Array out of Indexable. - new operators for JSON indexing added to core so that these can be compiled by the PG and MySQL dialects individually - rename sqltypes.Array to sqltypes.ARRAY - as there is no generic Array implementation, this is an uppercase type for now, consistent with the new sqltypes.JSON type that is also not a generic implementation. There may need to be some convention change to handle the case of datatypes that aren't generic, rely upon DB-native implementations, but aren't necessarily all named the same thing. (a80bb4e)
- dont forwards-report tons of 1.0.x changes in the unreleased 1.1; only when a 1.1.x is released would we want to capture what's still sitting in a 1.0.x changelog (16746dd)
- Fixed 1.0 regression where the eager fetch of cursor.rowcount was no longer called for an UPDATE or DELETE statement emitted via plain text or via the :func:`.text` construct, affecting those drivers that erase cursor.rowcount once the cursor is closed such as SQL Server ODBC and Firebird drivers. fixes #3622 (197ffa2)
- break out mysql/base into modules as it's getting huge with more to come (04b1a52)
- Fixed an assertion that would raise somewhat inappropriately if a :class:`.Index` were associated with a :class:`.Column` that is associated with a lower-case-t :class:`.TableClause`; the association should be ignored for the purposes of associating the index with a :class:`.Table`. fixes #3616 (c7d6c66)
- release date for 1.0.11 (93b48e6)
- An adjustment to the regular expression used to parse MySQL views, such that we no longer assume the "ALGORITHM" keyword is present in the reflected view source, as some users have reported this not being present in some Amazon RDS environments. fixes #3613 (8c54b14)
- changelog for pullreq github:222 (5c7ade2)
Merge remote-tracking branch 'origin/pr/222' (e95c344)
- varchar requires a length (0c8242b)
- add the test from ref #3614 as well for testing ref #3611 (4b708c4)
- just use *arg straight without "key" for pop (5e5b8a9)
- Further fixes to :ticket:`3605`, pop method on :class:`.MutableDict`, where the "default" argument was not included. fixes #3605 (913858c)
Make docs listing of param order for event.listen match the code (30be49c)
some spelling fixes (738d515)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (ce25ac1)
- remove errant pdb, references #3612 (03ee22f)
- Fixed bug in baked loader system where the systemwide monkeypatch for setting up baked lazy loaders would interfere with other loader strategies that rely on lazy loading as a fallback, e.g. joined and subquery eager loaders, leading to ``IndexError`` exceptions at mapper configuration time. fixes #3612 (a22b208)
- hyperlink default-related parameters (8a24da6)
- Fixed regression caused in 1.0.10 by the fix for :ticket:`3593` where the check added for a polymorphic joinedload from a poly_subclass->class->poly_baseclass connection would fail for the scenario of class->poly_subclass->class. fixes #3611 (a8ec349)
- add some more oracle skips (c42725e)
- a few tweaks to allow "server_defaults" to be a little more linkable; remove "undoc members" that was putting some random server_default atributes from ColumnClause (80bbf13)
- since we are mutating the statement in a loop, start with the same cached starting statement each time. no issue has been observed with the former but it could perhaps have issues w/ versioning or eager_defaults (d0fc726)
- Fixed bug where :meth:`.Session.bulk_update_mappings` and related would not bump a version id counter when in use. The experience here is still a little rough as the original version id is required in the given dictionaries and there's not clean error reporting on that yet. fixes #3610 (26ed90a)
- Fixed bug in :meth:`.Update.return_defaults` which would cause all insert-default holding columns not otherwise included in the SET clause (such as primary key cols) to get rendered into the RETURNING even though this is an UPDATE. (0e4c4d7)
Add new reserved words for MySQL 5.7. (03ee4bb)
- Fixed bug where use of the :meth:`.Query.select_from` method would cause a subsequent call to the :meth:`.Query.with_parent` method to fail. fixes #3606 - add mark-as-fail test for #3607 (7d96ad4)
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (0a5dcdc)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (6de3d49)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- dont forwards-report tons of 1.0.x changes in the unreleased 1.1; only when a 1.1.x is released would we want to capture what's still sitting in a 1.0.x changelog (16746dd)
- Fixed 1.0 regression where the eager fetch of cursor.rowcount was no longer called for an UPDATE or DELETE statement emitted via plain text or via the :func:`.text` construct, affecting those drivers that erase cursor.rowcount once the cursor is closed such as SQL Server ODBC and Firebird drivers. fixes #3622 (197ffa2)
- break out mysql/base into modules as it's getting huge with more to come (04b1a52)
- Fixed an assertion that would raise somewhat inappropriately if a :class:`.Index` were associated with a :class:`.Column` that is associated with a lower-case-t :class:`.TableClause`; the association should be ignored for the purposes of associating the index with a :class:`.Table`. fixes #3616 (c7d6c66)
- release date for 1.0.11 (93b48e6)
- An adjustment to the regular expression used to parse MySQL views, such that we no longer assume the "ALGORITHM" keyword is present in the reflected view source, as some users have reported this not being present in some Amazon RDS environments. fixes #3613 (8c54b14)
- changelog for pullreq github:222 (5c7ade2)
Merge remote-tracking branch 'origin/pr/222' (e95c344)
- varchar requires a length (0c8242b)
- add the test from ref #3614 as well for testing ref #3611 (4b708c4)
- just use *arg straight without "key" for pop (5e5b8a9)
- Further fixes to :ticket:`3605`, pop method on :class:`.MutableDict`, where the "default" argument was not included. fixes #3605 (913858c)
Make docs listing of param order for event.listen match the code (30be49c)
some spelling fixes (738d515)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (ce25ac1)
- remove errant pdb, references #3612 (03ee22f)
- Fixed bug in baked loader system where the systemwide monkeypatch for setting up baked lazy loaders would interfere with other loader strategies that rely on lazy loading as a fallback, e.g. joined and subquery eager loaders, leading to ``IndexError`` exceptions at mapper configuration time. fixes #3612 (a22b208)
- hyperlink default-related parameters (8a24da6)
- Fixed regression caused in 1.0.10 by the fix for :ticket:`3593` where the check added for a polymorphic joinedload from a poly_subclass->class->poly_baseclass connection would fail for the scenario of class->poly_subclass->class. fixes #3611 (a8ec349)
- add some more oracle skips (c42725e)
- a few tweaks to allow "server_defaults" to be a little more linkable; remove "undoc members" that was putting some random server_default atributes from ColumnClause (80bbf13)
- since we are mutating the statement in a loop, start with the same cached starting statement each time. no issue has been observed with the former but it could perhaps have issues w/ versioning or eager_defaults (d0fc726)
- Fixed bug where :meth:`.Session.bulk_update_mappings` and related would not bump a version id counter when in use. The experience here is still a little rough as the original version id is required in the given dictionaries and there's not clean error reporting on that yet. fixes #3610 (26ed90a)
- Fixed bug in :meth:`.Update.return_defaults` which would cause all insert-default holding columns not otherwise included in the SET clause (such as primary key cols) to get rendered into the RETURNING even though this is an UPDATE. (0e4c4d7)
Add new reserved words for MySQL 5.7. (03ee4bb)
- Fixed bug where use of the :meth:`.Query.select_from` method would cause a subsequent call to the :meth:`.Query.with_parent` method to fail. fixes #3606 - add mark-as-fail test for #3607 (7d96ad4)
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (0a5dcdc)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (6de3d49)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- Fixed an assertion that would raise somewhat inappropriately if a :class:`.Index` were associated with a :class:`.Column` that is associated with a lower-case-t :class:`.TableClause`; the association should be ignored for the purposes of associating the index with a :class:`.Table`. fixes #3616 (c7d6c66)
- release date for 1.0.11 (93b48e6)
- An adjustment to the regular expression used to parse MySQL views, such that we no longer assume the "ALGORITHM" keyword is present in the reflected view source, as some users have reported this not being present in some Amazon RDS environments. fixes #3613 (8c54b14)
- changelog for pullreq github:222 (5c7ade2)
Merge remote-tracking branch 'origin/pr/222' (e95c344)
- varchar requires a length (0c8242b)
- add the test from ref #3614 as well for testing ref #3611 (4b708c4)
- just use *arg straight without "key" for pop (5e5b8a9)
- Further fixes to :ticket:`3605`, pop method on :class:`.MutableDict`, where the "default" argument was not included. fixes #3605 (913858c)
Make docs listing of param order for event.listen match the code (30be49c)
some spelling fixes (738d515)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (ce25ac1)
- remove errant pdb, references #3612 (03ee22f)
- Fixed bug in baked loader system where the systemwide monkeypatch for setting up baked lazy loaders would interfere with other loader strategies that rely on lazy loading as a fallback, e.g. joined and subquery eager loaders, leading to ``IndexError`` exceptions at mapper configuration time. fixes #3612 (a22b208)
- hyperlink default-related parameters (8a24da6)
- Fixed regression caused in 1.0.10 by the fix for :ticket:`3593` where the check added for a polymorphic joinedload from a poly_subclass->class->poly_baseclass connection would fail for the scenario of class->poly_subclass->class. fixes #3611 (a8ec349)
- add some more oracle skips (c42725e)
- a few tweaks to allow "server_defaults" to be a little more linkable; remove "undoc members" that was putting some random server_default atributes from ColumnClause (80bbf13)
- since we are mutating the statement in a loop, start with the same cached starting statement each time. no issue has been observed with the former but it could perhaps have issues w/ versioning or eager_defaults (d0fc726)
- Fixed bug where :meth:`.Session.bulk_update_mappings` and related would not bump a version id counter when in use. The experience here is still a little rough as the original version id is required in the given dictionaries and there's not clean error reporting on that yet. fixes #3610 (26ed90a)
- Fixed bug in :meth:`.Update.return_defaults` which would cause all insert-default holding columns not otherwise included in the SET clause (such as primary key cols) to get rendered into the RETURNING even though this is an UPDATE. (0e4c4d7)
Add new reserved words for MySQL 5.7. (03ee4bb)
- Fixed bug where use of the :meth:`.Query.select_from` method would cause a subsequent call to the :meth:`.Query.with_parent` method to fail. fixes #3606 - add mark-as-fail test for #3607 (7d96ad4)
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (0a5dcdc)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (6de3d49)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- release date for 1.0.11 (93b48e6)
- An adjustment to the regular expression used to parse MySQL views, such that we no longer assume the "ALGORITHM" keyword is present in the reflected view source, as some users have reported this not being present in some Amazon RDS environments. fixes #3613 (8c54b14)
- changelog for pullreq github:222 (5c7ade2)
Merge remote-tracking branch 'origin/pr/222' (e95c344)
- varchar requires a length (0c8242b)
- add the test from ref #3614 as well for testing ref #3611 (4b708c4)
- just use *arg straight without "key" for pop (5e5b8a9)
- Further fixes to :ticket:`3605`, pop method on :class:`.MutableDict`, where the "default" argument was not included. fixes #3605 (913858c)
Make docs listing of param order for event.listen match the code (30be49c)
some spelling fixes (738d515)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (ce25ac1)
- remove errant pdb, references #3612 (03ee22f)
- Fixed bug in baked loader system where the systemwide monkeypatch for setting up baked lazy loaders would interfere with other loader strategies that rely on lazy loading as a fallback, e.g. joined and subquery eager loaders, leading to ``IndexError`` exceptions at mapper configuration time. fixes #3612 (a22b208)
- hyperlink default-related parameters (8a24da6)
- Fixed regression caused in 1.0.10 by the fix for :ticket:`3593` where the check added for a polymorphic joinedload from a poly_subclass->class->poly_baseclass connection would fail for the scenario of class->poly_subclass->class. fixes #3611 (a8ec349)
- add some more oracle skips (c42725e)
- a few tweaks to allow "server_defaults" to be a little more linkable; remove "undoc members" that was putting some random server_default atributes from ColumnClause (80bbf13)
- since we are mutating the statement in a loop, start with the same cached starting statement each time. no issue has been observed with the former but it could perhaps have issues w/ versioning or eager_defaults (d0fc726)
- Fixed bug where :meth:`.Session.bulk_update_mappings` and related would not bump a version id counter when in use. The experience here is still a little rough as the original version id is required in the given dictionaries and there's not clean error reporting on that yet. fixes #3610 (26ed90a)
- Fixed bug in :meth:`.Update.return_defaults` which would cause all insert-default holding columns not otherwise included in the SET clause (such as primary key cols) to get rendered into the RETURNING even though this is an UPDATE. (0e4c4d7)
Add new reserved words for MySQL 5.7. (03ee4bb)
- Fixed bug where use of the :meth:`.Query.select_from` method would cause a subsequent call to the :meth:`.Query.with_parent` method to fail. fixes #3606 - add mark-as-fail test for #3607 (7d96ad4)
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (0a5dcdc)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (6de3d49)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- An adjustment to the regular expression used to parse MySQL views, such that we no longer assume the "ALGORITHM" keyword is present in the reflected view source, as some users have reported this not being present in some Amazon RDS environments. fixes #3613 (8c54b14)
- changelog for pullreq github:222 (5c7ade2)
Merge remote-tracking branch 'origin/pr/222' (e95c344)
- varchar requires a length (0c8242b)
- add the test from ref #3614 as well for testing ref #3611 (4b708c4)
- just use *arg straight without "key" for pop (5e5b8a9)
- Further fixes to :ticket:`3605`, pop method on :class:`.MutableDict`, where the "default" argument was not included. fixes #3605 (913858c)
Make docs listing of param order for event.listen match the code (30be49c)
some spelling fixes (738d515)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (ce25ac1)
- remove errant pdb, references #3612 (03ee22f)
- Fixed bug in baked loader system where the systemwide monkeypatch for setting up baked lazy loaders would interfere with other loader strategies that rely on lazy loading as a fallback, e.g. joined and subquery eager loaders, leading to ``IndexError`` exceptions at mapper configuration time. fixes #3612 (a22b208)
- hyperlink default-related parameters (8a24da6)
- Fixed regression caused in 1.0.10 by the fix for :ticket:`3593` where the check added for a polymorphic joinedload from a poly_subclass->class->poly_baseclass connection would fail for the scenario of class->poly_subclass->class. fixes #3611 (a8ec349)
- add some more oracle skips (c42725e)
- a few tweaks to allow "server_defaults" to be a little more linkable; remove "undoc members" that was putting some random server_default atributes from ColumnClause (80bbf13)
- since we are mutating the statement in a loop, start with the same cached starting statement each time. no issue has been observed with the former but it could perhaps have issues w/ versioning or eager_defaults (d0fc726)
- Fixed bug where :meth:`.Session.bulk_update_mappings` and related would not bump a version id counter when in use. The experience here is still a little rough as the original version id is required in the given dictionaries and there's not clean error reporting on that yet. fixes #3610 (26ed90a)
- Fixed bug in :meth:`.Update.return_defaults` which would cause all insert-default holding columns not otherwise included in the SET clause (such as primary key cols) to get rendered into the RETURNING even though this is an UPDATE. (0e4c4d7)
Add new reserved words for MySQL 5.7. (03ee4bb)
- Fixed bug where use of the :meth:`.Query.select_from` method would cause a subsequent call to the :meth:`.Query.with_parent` method to fail. fixes #3606 - add mark-as-fail test for #3607 (7d96ad4)
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (0a5dcdc)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (6de3d49)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- just use *arg straight without "key" for pop (5e5b8a9)
- Further fixes to :ticket:`3605`, pop method on :class:`.MutableDict`, where the "default" argument was not included. fixes #3605 (913858c)
Make docs listing of param order for event.listen match the code (30be49c)
some spelling fixes (738d515)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (ce25ac1)
- remove errant pdb, references #3612 (03ee22f)
- Fixed bug in baked loader system where the systemwide monkeypatch for setting up baked lazy loaders would interfere with other loader strategies that rely on lazy loading as a fallback, e.g. joined and subquery eager loaders, leading to ``IndexError`` exceptions at mapper configuration time. fixes #3612 (a22b208)
- hyperlink default-related parameters (8a24da6)
- Fixed regression caused in 1.0.10 by the fix for :ticket:`3593` where the check added for a polymorphic joinedload from a poly_subclass->class->poly_baseclass connection would fail for the scenario of class->poly_subclass->class. fixes #3611 (a8ec349)
- add some more oracle skips (c42725e)
- a few tweaks to allow "server_defaults" to be a little more linkable; remove "undoc members" that was putting some random server_default atributes from ColumnClause (80bbf13)
- since we are mutating the statement in a loop, start with the same cached starting statement each time. no issue has been observed with the former but it could perhaps have issues w/ versioning or eager_defaults (d0fc726)
- Fixed bug where :meth:`.Session.bulk_update_mappings` and related would not bump a version id counter when in use. The experience here is still a little rough as the original version id is required in the given dictionaries and there's not clean error reporting on that yet. fixes #3610 (26ed90a)
- Fixed bug in :meth:`.Update.return_defaults` which would cause all insert-default holding columns not otherwise included in the SET clause (such as primary key cols) to get rendered into the RETURNING even though this is an UPDATE. (0e4c4d7)
- Fixed bug where use of the :meth:`.Query.select_from` method would cause a subsequent call to the :meth:`.Query.with_parent` method to fail. fixes #3606 - add mark-as-fail test for #3607 (7d96ad4)
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (0a5dcdc)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (6de3d49)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
some spelling fixes (738d515)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (ce25ac1)
- remove errant pdb, references #3612 (03ee22f)
- Fixed bug in baked loader system where the systemwide monkeypatch for setting up baked lazy loaders would interfere with other loader strategies that rely on lazy loading as a fallback, e.g. joined and subquery eager loaders, leading to ``IndexError`` exceptions at mapper configuration time. fixes #3612 (a22b208)
- hyperlink default-related parameters (8a24da6)
- Fixed regression caused in 1.0.10 by the fix for :ticket:`3593` where the check added for a polymorphic joinedload from a poly_subclass->class->poly_baseclass connection would fail for the scenario of class->poly_subclass->class. fixes #3611 (a8ec349)
- add some more oracle skips (c42725e)
- a few tweaks to allow "server_defaults" to be a little more linkable; remove "undoc members" that was putting some random server_default atributes from ColumnClause (80bbf13)
- since we are mutating the statement in a loop, start with the same cached starting statement each time. no issue has been observed with the former but it could perhaps have issues w/ versioning or eager_defaults (d0fc726)
- Fixed bug where :meth:`.Session.bulk_update_mappings` and related would not bump a version id counter when in use. The experience here is still a little rough as the original version id is required in the given dictionaries and there's not clean error reporting on that yet. fixes #3610 (26ed90a)
- Fixed bug in :meth:`.Update.return_defaults` which would cause all insert-default holding columns not otherwise included in the SET clause (such as primary key cols) to get rendered into the RETURNING even though this is an UPDATE. (0e4c4d7)
- Fixed bug where use of the :meth:`.Query.select_from` method would cause a subsequent call to the :meth:`.Query.with_parent` method to fail. fixes #3606 - add mark-as-fail test for #3607 (7d96ad4)
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (0a5dcdc)
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy (6de3d49)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- Fixed regression caused in 1.0.10 by the fix for :ticket:`3593` where the check added for a polymorphic joinedload from a poly_subclass->class->poly_baseclass connection would fail for the scenario of class->poly_subclass->class. fixes #3611 (a8ec349)
- add some more oracle skips (c42725e)
- a few tweaks to allow "server_defaults" to be a little more linkable; remove "undoc members" that was putting some random server_default atributes from ColumnClause (80bbf13)
- since we are mutating the statement in a loop, start with the same cached starting statement each time. no issue has been observed with the former but it could perhaps have issues w/ versioning or eager_defaults (d0fc726)
- Fixed bug where :meth:`.Session.bulk_update_mappings` and related would not bump a version id counter when in use. The experience here is still a little rough as the original version id is required in the given dictionaries and there's not clean error reporting on that yet. fixes #3610 (26ed90a)
- Fixed bug in :meth:`.Update.return_defaults` which would cause all insert-default holding columns not otherwise included in the SET clause (such as primary key cols) to get rendered into the RETURNING even though this is an UPDATE. (0e4c4d7)
- Fixed bug where use of the :meth:`.Query.select_from` method would cause a subsequent call to the :meth:`.Query.with_parent` method to fail. fixes #3606 - add mark-as-fail test for #3607 (7d96ad4)
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- Fixed bug where use of the :meth:`.Query.select_from` method would cause a subsequent call to the :meth:`.Query.with_parent` method to fail. fixes #3606 - add mark-as-fail test for #3607 (7d96ad4)
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
1.0.10 (d67d04c)
- Added support for the ``dict.pop()`` and ``dict.popitem()`` methods to the :class:`.mutable.MutableDict` class. fixes #3605 (5710a1e)
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- convert ORM tutorial and basic_relationships to favor back_populates while still maintaining great familiarity w/ backref so as not to confuse people. fixes #3390 (741b8af)
- The ORM and Core tutorials, which have always been in doctest format, are now exercised within the normal unit test suite in both Python 2 and Python 3. - remove the old testdocs.py runner and replace with test/base/test_tutorials.py - use pytest's unicode fixer so that we can test for unicode strings in both py2k/3k - use py3k format overall for prints, exceptions - add other fixers to guarantee deterministic results - add skips and ellipses to outputs that aren't worth matching (d533b8e)
Merge remote-tracking branch 'origin/pr/220' (fb44319)
- refactor of adapt_like_to_iterable(), fixes #3457. Includes removal of adapt_like_to_iterable() as well as _set_iterable(), uses __slots__ for collectionadapter, does much less duck typing of collections. (b606e47)
- Fixed issue within the :meth:`.Insert.from_select` construct whereby the :class:`.Select` construct would have its ``._raw_columns`` collection mutated in-place when compiling the :class:`.Insert` construct, when the target :class:`.Table` has Python-side defaults. The :class:`.Select` construct would compile standalone with the erroneous column present subsequent to compilation of the :class:`.Insert`, and the the :class:`.Insert` statement itself would fail on a second compile attempt due to duplicate bound parameters. fixes #3603 (e57bf79)
fix some typos (7e6f331)
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- fix changelog for #3602 - add version switch for backend fsp test (f4a1129)
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- make this DROP conditional, attempting to isolate why jenkins has an issue with just one test (7df4054)
- Fixed bug in MySQL reflection where the "fractional sections portion" of the :class:`.mysql.DATETIME`, :class:`.mysql.TIMESTAMP` and :class:`.mysql.TIME` types would be incorrectly placed into the ``timestamp`` attribute, which is unused by MySQL, instead of the ``fsp`` attribute. fixes #3602 (3f42743)
- flake8 test_reflection and rework the type-based tests into individual categories w/ modernized fixtures, assert attributes within type objects. (d7eae8c)
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- write a real inline documentation section for from_self(), building on the example of query.join(). Ideally all the methods in Query would have this kind of thing. fixes #3544 (8fa62d6)
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- and NLS_LANG.... (077f26a)
- add ORACLE_HOME to passenv allowing oracle to work w/ tox 2.0 (7f423e8)
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- fix loading.py merge_result for new _merge() argument (012f385)
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- The :meth:`.Session.merge` method now tracks pending objects by primary key before emitting an INSERT, and merges distinct objects with duplicate primary keys together as they are encountered, which is essentially semi-deterministic at best. This behavior matches what happens already with persistent objects. fixes #3601 (3ec9b9f)
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- Fixed issue where post_update on a many-to-one relationship would fail to emit an UPDATE in the case where the attribute were set to None and not previously loaded. fixes #3599 (935bc34)
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- Fixed bug where CREATE TABLE with a no-column table, but a constraint such as a CHECK constraint would render an erroneous comma in the definition; this scenario can occur such as with a Postgresql INHERITS table that has no columns of its own. fixes #3598 (9695faf)
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- Added the error "20006: Write to the server failed" to the list of disconnect errors for the pymssql driver, as this has been observed to render a connection unusable. fixes #3585 (ab69467)
- changelog for #3573, fixes #3573 (f4cb3f8)
Merge remote-tracking branch 'origin/pr/216' (9c2c247)
- changelog for pullreq github:215 (c3fbfa8)
Merge remote-tracking branch 'origin/pr/215' (a09fc97)
Merge remote-tracking branch 'origin/pr/217' (954aafa)
Merge remote-tracking branch 'origin/pr/214' (38e043a)
- restore 'declarative' classifier (be24b3e)
py2k: accept unicode literals on :func:`backref`, too (ef85a0d)
Merge remote-tracking branch 'origin/pr/212' (d5fd26b)
- update changelog for all the py3.5/3.6 related prs at once (2c5ba60)
Merge remote-tracking branch 'origin/pr/211' (a058233)
- A descriptive ValueError is now raised in the event that SQL server returns an invalid date or time format from a DATE or TIME column, rather than failing with a NoneType error. Pull request courtesy Ed Avis. pullreq github:206 (03a3b5f)
- update changelog to accommodate pr github:218 (8145100)
Merge remote-tracking branch 'origin/pr/218' (2b39f09)
Fix _assert_unorderable_types on py36. (d917832)
- changelog for pr github:210 (d59e951)
Merge remote-tracking branch 'origin/pr/210' (e45e4aa)
- make inserted_primary_key a link and be more clear what happens here (86e5419)
- close the session (4fcd93a)
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
Fix a typo in the disconnect handling code example (0438065)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
py2k: accept unicode literals on :func:`backref`, too (58f73d2)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- Postgres: Do not prefix table with schema in: "FOR UPDATE of <table>" (fd47fea)
fix postgresql exclude contraint to check when= against None rather than __bool__ eval (0921a6a)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
Fix typo: wtihin --> within (11e190e)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
Change generator termination from StopIteration to return. (6ab1205)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
Update usages of getargspec to compat version. (e8a5ed9)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- Fixed an issue in baked queries where the .get() method, used either directly or within lazy loads, didn't consider the mapper's "get clause" as part of the cache key, causing bound parameter mismatches if the clause got re-generated. This clause is cached by mappers on the fly but in highly concurrent scenarios may be generated more than once when first accessed. fixes #3597 (b0308a7)
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- Added support for parameter-ordered SET clauses in an UPDATE statement. This feature is available by passing the :paramref:`~.sqlalchemy.sql.expression.update.preserve_parameter_order` flag either to the core :class:`.Update` construct or alternatively adding it to the :paramref:`.Query.update.update_args` dictionary at the ORM-level, also passing the parameters themselves as a list of 2-tuples. Thanks to Gorka Eguileor for implementation and tests. adapted from pullreq github:200 (c90f0a4)
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- Fixed bug which is actually a regression that occurred between versions 0.8.0 and 0.8.1, due :ticket:`2714`. The case where joined eager loading needs to join out over a subclass-bound relationship when "with_polymorphic" were also used would fail to join from the correct entity. fixes #3593 (1202e14)
- support declarativemappedtest with per-test setup (2a2be6a)
- add an ignore for N806 (2743b67)
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- Change "expr" to "entity" for example illustrating an event that intercepts a query and adds entity-oriented criteria (054b22c)
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- add py35 (f7943db)
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- set explicit encoding settings for default mysql driver (f967971)
- Fixed joinedload bug which would occur when a. the query includes limit/offset criteria that forces a subquery b. the relationship uses "secondary" c. the primaryjoin of the relationship refers to a column that is either not part of the primary key, or is a PK col in a joined-inheritance subclass table that is under a different attribute name than the parent table's primary key column d. the query defers the columns that are present in the primaryjoin, typically via not being included in load_only(); the necessary column(s) would not be present in the subquery and produce invalid SQL. fixes #3592 (60c36ca)
- don't create tables on compile-only tests (068d370)
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- try to get this to skip for oracle (ef9a4cb)
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- A rare case which occurs when a :meth:`.Session.rollback` fails in the scope of a :meth:`.Session.flush` operation that's raising an exception, as has been observed in some MySQL SAVEPOINT cases, prevents the original database exception from being observed when it was emitted during flush, but only on Py2K because Py2K does not support exception chaining; on Py3K the originating exception is chained. As a workaround, a warning is emitted in this specific case showing at least the string message of the original database error before we proceed to raise the rollback-originating exception. fixes #2696 (a6fe4dc)
- add documentation that describes, then proceeds to warn about the many caveats and confusing effects of, the popular approach of using contains_eager() to alter the natural result of a related collection. I'm not a fan of this technique as it changes the semantics of a relationship in such a way that the rest of the ORM isn't aware of and it also can be undone very easily; hence the section needs as much text for warnings as for describing the technique itself. fixes #3563 (1dc805d)
- Fixed the ``.python_type`` attribute of :class:`.postgresql.INTERVAL` to return ``datetime.timedelta`` in the same way as that of :obj:`.types.Interval.python_type`, rather than raising ``NotImplementedError``. fixes #3571 (9ed36c2)
- rewrite the docs and add a test for the bake_queries=True relationship flag; this flag *does* have an effect when the baked lazy loader plugin has been invoked. clarify the intent of this flag as an "opt out" but only has an effect when the baked system is loaded anyway. fixes #3572 (c7f9aa2)
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- Added support for reflecting the source of materialized views to the Postgresql version of the :meth:`.Inspector.get_view_definition` method. fixes #3587 (1449836)
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- extend pullreq github:213 to also include DATETIMEOFFSET and TIME, which also accept zero precision - extend test case here to include a backend-agnostic suite - changelog for MSSQL date fix (0847097)
Merge remote-tracking branch 'origin/pr/213' into pr213 (ac9ded3)
Pass precision value to mssql.DATETIME2 when it is 0 (80ce23f)
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- fix missing argument in TypeDecorator.copy(), fixes #3584, references #2919 (37565d2)
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- correct the commit from ref #3582 to refer to the correct sub-element (3370cbd)
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- Fixed bug where the "single table inheritance" criteria would be added onto the end of a query in some inappropriate situations, such as when querying from an exists() of a single-inheritance subclass. (33c378f)
Merge branch 'jeffwidman/update-links-in-sqlalchemy-docs-that-poi-1446667164356' of https://bitbucket.org/jeffwidman/sqlalchemy (d51a363)
Merge branch 'jeffwidman/fix-typo-foriegn-foreign-1446862160653' of https://bitbucket.org/jeffwidman/sqlalchemy-1 into typos (1dbd3a0)
fix typo: Explcitly -> Explicitly (887edc4)
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
Fix typo: foriegn --> foreign (8660883)
Updated PostgreSQL links to point to "current" rather than hardcoded version (a2e83db)
Update links in SQLAlchemy docs that point to postgres docs to use 'devel' rather than hardcoded version (0d3ab31)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- fix ambiguous documentation re: after_flush_postexec(), the looping nature of it only occurs within the context of a commit. (5d8bb1f)
- fix broken link to loader behavior (2d54e38)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- fix broken link to loader behavior (2d54e38)
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- cross-linking for pool recycle feature (07a199d)
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
Merge branch 'pr204' (382950b)
- convert wrap_callable() to a general purpose update_wrapper-like function; the caller still passes in the "wrapper" - move tests for wrap_callable() to be generic util tests - changelog for pullreq github:204 (e31211c)
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- wrap ColumnDefault empty arg callables like functools.wraps, setting __name__, __doc__, and __module__ (c7d04be)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- add a JSON warning for coerce_compared_value (98c1dcc)
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
Merge remote-tracking branch 'origin/pr/196' into pr196 (c2c4fc1)
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
Link to maintained redshift dialect (e4bfe2a)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- update the pool pessimistic invalidation recipe to refer to the engine_connect event, allowing easy detection of disconnects and full invalidation of the pool (2daaace)
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- release date for 1.0.9 (8a4a1fd)
- try to make this language more succinct and fix links (13278d1)
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- use is_() here to more clearly show what's going wrong on occasional pypy test runs (5bc5adb)
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- adjust 4f54607923a11669961b53f where we still allow_multirow as long as versioning isn't needed, fixes test_unitofworkv2->test_update_multi_missing_broken_multi_rowcount (8e9a81a)
- Fixed regression in 1.0 where new feature of using "executemany" for UPDATE statements in the ORM (e.g. :ref:`feature_updatemany`) would break on Postgresql and other RETURNING backends when using server-side version generation schemes, as the server side value is retrieved via RETURNING which is not supported with executemany. fixes #3556 (1e0afd5)
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- exclude this from unpredictable gc (322f8f1)
- modernize some very old global-engine tests w/ bad teardowns (affcfd1)
- repair flake8 issues (e6779d8)
- repair laziness about setting time zone here, which is leaking out depending on connection pool state (2a8a06e)
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|
|
Changelog
=========
- Added the :paramref:`.AssociationProxy.info` parameter to the :class:`.AssociationProxy` constructor, to suit the :attr:`.AssociationProxy.info` accessor that was added in :ticket:`2971`. This is possible because :class:`.AssociationProxy` is constructed explicitly, unlike a hybrid which is constructed implicitly via the decorator syntax. fixes #3551 (9d08c6a)
Merge remote-tracking branch 'origin/pr/203' (78a7bbd)
- this was supposed to be client-side SQL default not server side (a47e863)
Merge remote-tracking branch 'origin/pr/205' (2ef7c5e)
- open up autoincrement for columns that have a default; autoinc is usually "auto" now so True can indicate the dialect would support this (8455002)
Merge remote-tracking branch 'origin/pr/208' (956c26d)
- for DB's w/o a real "autoincrement", reflection should be returning "auto", doesn't matter if there's a default here (21b5d35)
Update base.py (f8eb7c2)
- The system by which a :class:`.Column` considers itself to be an "auto increment" column has been changed, such that autoincrement is no longer implicitly enabled for a :class:`.Table` that has a composite primary key. In order to accommodate being able to enable autoincrement for a composite PK member column while at the same time maintaining SQLAlchemy's long standing behavior of enabling implicit autoincrement for a single integer primary key, a third state has been added to the :paramref:`.Column.autoincrement` parameter ``"auto"``, which is now the default. fixes #3216 - The MySQL dialect no longer generates an extra "KEY" directive when generating CREATE TABLE DDL for a table using InnoDB with a composite primary key with AUTO_INCREMENT on a column that isn't the first column; to overcome InnoDB's limitation here, the PRIMARY KEY constraint is now generated with the AUTO_INCREMENT column placed first in the list of columns. (414af7b)
- Fixed bug in Oracle dialect where reflection of tables and other symbols with names quoted to force all-lower-case would not be identified properly in reflection queries. The :class:`.quoted_name` construct is now applied to incoming symbol names that detect as forced into all-lower-case within the "name normalize" process. fixes #3548 (4578ab5)
- add an additional note regarding select_from, fixes #3546 (d84dea6)
- remove ambiguous use of the phrase "joined together by AND" as this may be construed as the Python "and" keyword - add notes to ORM tutorial for beginners that Python "and" keyword is not to be used fixes #3545 (ac08920)
- bzzt, fix the base _post_configure_engine() call to not fail (7393ee8)
- limit the search for schemas to not include "temp", which is sort of an implicit schema - repair the CREATE INDEX ddl for schemas - update provisioning to include support for setting up ATTACH DATABASE up front for the test_schema; enable "schemas" testing for SQLite - changelog / migration notes for new SQLite schema support - include the "schema" as the "remote_schema" when we reflect SQLite FKs (5bb2536)
Merge remote-tracking branch 'origin/pr/198' into pr198 (e4d445c)
Doc fix (febe0c0)
Remplement Query.one() in terms of .one_or_none() (2e5e6ff)
- fix bool test (1704eac)
- break out critical aspects of test_query into their own tests finally, test_resultset and test_insert_exec. Update all idioms within these. (a8e1d33)
Fix sqlalchemy.ext.baked.Result.one_or_none() exception message (9125561)
- replicate Query.one_or_none to BakedQuery - changelog / version note finishing (5b71858)
Add Query.one_or_none() (a9b5fb3)
Add a lot more detail (0854f82)
Add some markup (f29be1e)
A few minor rewordings (1195155)
- Fixed rare TypeError which could occur when stringifying certain kinds of internal column loader options within internal logging. fixes #3539 (47fcb1d)
- The ``legacy_schema_aliasing`` flag, introduced in version 1.0.5 as part of :ticket:`3424` to allow disabling of the MSSQL dialect's attempts to create aliases for schema-qualified tables, now defaults to False; the old behavior is now disabled unless explicitly turned on. fixes #3434 (3dfcb10)
- Added a new type-level modifier :meth:`.TypeEngine.evaluates_none` which indicates to the ORM that a positive set of None should be persisted as the value NULL, instead of omitting the column from the INSERT statement. This feature is used both as part of the implementation for :ticket:`3514` as well as a standalone feature available on any type. fixes #3250 - add new documentation section illustrating the "how to force null" use case of #3250 - alter our change from #3514 so that the class-level flag is now called "should_evaluate_none"; so that "evaluates_none" is now a generative method. (80aeba3)
- The use of a :class:`.postgresql.ARRAY` object that refers to a :class:`.types.Enum` or :class:`.postgresql.ENUM` subtype will now emit the expected "CREATE TYPE" and "DROP TYPE" DDL when the type is used within a "CREATE TABLE" or "DROP TABLE". fixes #2729 (371f1a8)
- fixes for the ORM side test for #3531. (53defcc)
- The :func:`.type_coerce` construct is now a fully fledged Core expression element which is late-evaluated at compile time. Previously, the function was only a conversion function which would handle different expression inputs by returning either a :class:`.Label` of a column-oriented expression or a copy of a given :class:`.BindParameter` object, which in particular prevented the operation from being logically maintained when an ORM-level expression transformation would convert a column to a bound parameter (e.g. for lazy loading). fixes #3531 (24a7241)
- fix incorrect example in inheritance docs (7eb34ba)
- add new entry for sharing of Engine across process boundaries (fe41e39)
- call it deque, since you can really pop from either side (ad28e22)
- add a new FAQ recipe for "walk all objects", replacing the need to use mapper.cascade_iterator() for this purpose as it was not really designed for that use case. Add docs to cascade_iterator() pointing to the recipe. fixes #3498 (03797b7)
Correcting the Hybrid Property Example (db824b5)
Support get_schema_names for SQLite (4d53b31)
Support get_schema_names for SQLite (8174e72)
- profile update (be54869)
Merged in bsmithgall/sqlalchemy/event-doc-link-fix (pull request #60) (f5b1379)
Merge pull request #197 from davidjb/master (74781d8)
- Internal calls to "bookkeeping" functions within :meth:`.Session.bulk_save_objects` and related bulk methods have been scaled back to the extent that this functionality is not currently used, e.g. checks for column default values to be fetched after an INSERT or UPDATE statement. fixes #3526 (0997e84)
- Fixed bug in :meth:`.Session.bulk_save_objects` where a mapped column that had some kind of "fetch on update" value and was not locally present in the given object would cause an AttributeError within the operation. fixes #3525 (68a6701)
fix typo in session events docs (2fb3bb3)
- update moved link, fixes #3351 (176ac6a)
- rewrite some profiles that went *down*! woop (67a4210)
- reduce some callcounts within the new events (7699bd7)
Merge branch 'ticket_2677' (606135d)
- The :class:`.SessionEvents` suite now includes events to allow unambiguous tracking of all object lifecycle state transitions in terms of the :class:`.Session` itself, e.g. pending, transient, persistent, detached. The state of the object within each event is also defined. fixes #2677 - Added a new session lifecycle state :term:`deleted`. This new state represents an object that has been deleted from the :term:`persistent` state and will move to the :term:`detached` state once the transaction is committed. This resolves the long-standing issue that objects which were deleted existed in a gray area between persistent and detached. The :attr:`.InstanceState.persistent` accessor will **no longer** report on a deleted object as persistent; the :attr:`.InstanceState.deleted` accessor will instead be True for these objects, until they become detached. - The :paramref:`.Session.weak_identity_map` parameter is deprecated. See the new recipe at :ref:`session_referencing_behavior` for an event-based approach to maintaining strong identity map behavior. references #3517 (108c60f)
- add new documentation that applies to all modern SQLA versions, detailing ORM event recipes across the board. (8be93c2)
- add a note about DISTINCT in query w/ ORDER BY, references #3518 (6d0c099)
- Fixed regression in 1.0-released default-processor for multi-VALUES insert statement, :ticket:`3288`, where the column type for the default-holding column would not be propagated to the compiled statement in the case where the default was being used, leading to bind-level type handlers not being invoked. fixes #3520 (c39ff99)
Minor grammar fix for capitalisation in session docs (3bd58fa)
- use consistent and descriptive language in all cases where we refer to the "weak_identity_map" option, and add additional exposition in the session documentation which refers to it. fixes #3517 (956907a)
- The :class:`.TypeDecorator` type extender will now work in conjunction with a :class:`.SchemaType` implementation, typically :class:`.Enum` or :class:`.Boolean` with regards to ensuring that the per-table events are propagated from the implementation type to the outer type. These events are used to ensure that the constraints or Postgresql types (e.g. ENUM) are correctly created (and possibly dropped) along with the parent table. fixes #2919 (ed53564)
- reword and update documentation on passive_updates=False; as virtually all DBs now support ON UPDATE CASCADE other than Oracle, there's no need to try to reimplement more functionality here and users should be encouraged to forego natural PKs unless their target platform supports them. references #2666 (d459afa)
- add a postgresql-specific form of array_agg() that injects the ARRAY type, references #3132 (410be19)
- consolidate "constraints.py" into the more general "ext.py", for all assorted PG SQL extensions (e2209f7)
- add PG-specific aggregate_order_by(), references #3132 (5295a68)
Merge branch 'ticket_3516' (4d63b47)
- Added support for "set-aggregate" functions of the form ``<function> WITHIN GROUP (ORDER BY <criteria>)``, using the method :class:`.FunctionElement.within_group`. A series of common set-aggregate functions with return types derived from the set have been added. This includes functions like :class:`.percentile_cont`, :class:`.dense_rank` and others. fixes #1370 - make sure we use func.name for all _literal_as_binds in functions.py so we get consistent naming behavior for parameters. (7c4512c)
- Added support for the SQL-standard function :class:`.array_agg`, which automatically returns an :class:`.Array` of the correct type and supports index / slice operations. As arrays are only supported on Postgresql at the moment, only actually works on Postgresql. fixes #3132 (cfae9c2)
- build out a new base type for Array, as well as new any/all operators - any/all work for Array as well as subqueries, accepted by MySQL - Postgresql ARRAY now subclasses Array - fixes #3516 (7024745)
- re-document and fully cross link all of configure_mappers(), mapper_configured(), after_configured(), and before_configured(). (0127ac6)
- Fixed two issues in the "history_meta" example where history tracking could encounter empty history, and where a column keyed to an alternate attribute name would fail to track properly. Fixes courtesy Alex Fraser. (d57e5ed)
- repair the inspection hook in sqltypes to not be fooled by mock and other __getattr__ impostors (03e47a8)
- Added new checks for the common error case of passing mapped classes or mapped instances into contexts where they are interpreted as SQL bound parameters; a new exception is raised for this. fixes #3321 (8712ef2)
- rework the "controlling DDL sequences" documentation to refer mostly to the DDL object; this system is primarily useful in that case, and not for built-in objects. Reference that the built-in case is not really viable right now. References #3442. (e0a8030)
- some cleanups in compiler.py (acda2e7)
- forgot to implement py3k logic for JSON.NULL (871330c)
- fix the postgresql_jsonb requirement to include the 9.4 requirement - new test for json col['x']['y']['z'] seems to fail pre PG 9.4, fails on comparisons for non-compatible data instead of not matching - no need to call SpecPredicate(db) directly in exclusion functions, by using Predicate.as_predicate() the spec strings can have version comparisons (b653fed)
- as the Concatenable mixin was changed to support calling down to "super" instead of hardcoding to "self.type" for the default return value, the base Comparator was returning other_comparator.type. It's not clear what the rationale for this was, though in theory the base Comparator should possibly even throw an exception if the two types aren't the same (or of the same affinity?) . - mysql.SET was broken on this because the bitwise version adds "0" to the value to force an integer within column_expression, we are doing type_coerces here now in any case so that there is no type ambiguity for this operation (3f8f1f1)
- document workaround type for ARRAY of ENUM, fixes #3467 (ba1e959)
- merge of ticket_3514 None-handling branch - Fixes to the ORM and to the postgresql JSON type regarding the ``None`` constant in conjunction with the Postgresql :class:`.JSON` type. When the :paramref:`.JSON.none_as_null` flag is left at its default value of ``False``, the ORM will now correctly insert the Json "'null'" string into the column whenever the value on the ORM object is set to the value ``None`` or when the value ``None`` is used with :meth:`.Session.bulk_insert_mappings`, **including** if the column has a default or server default on it. This makes use of a new type-level flag "evaluates_none" which is implemented by the JSON type based on the none_as_null flag. fixes #3514 - Added a new constant :attr:`.postgresql.JSON.NULL`, indicating that the JSON NULL value should be used for a value regardless of other settings. part of fixes #3514 (d14a4b4)
- merge of ticket_3499 indexed access branch - The "hashable" flag on special datatypes such as :class:`.postgresql.ARRAY`, :class:`.postgresql.JSON` and :class:`.postgresql.HSTORE` is now set to False, which allows these types to be fetchable in ORM queries that include entities within the row. fixes #3499 - The Postgresql :class:`.postgresql.ARRAY` type now supports multidimensional indexed access, e.g. expressions such as ``somecol[5][6]`` without any need for explicit casts or type coercions, provided that the :paramref:`.postgresql.ARRAY.dimensions` parameter is set to the desired number of dimensions. fixes #3487 - The return type for the :class:`.postgresql.JSON` and :class:`.postgresql.JSONB` when using indexed access has been fixed to work like Postgresql itself, and returns an expression that itself is of type :class:`.postgresql.JSON` or :class:`.postgresql.JSONB`. Previously, the accessor would return :class:`.NullType` which disallowed subsequent JSON-like operators to be used. part of fixes #3503 - The :class:`.postgresql.JSON`, :class:`.postgresql.JSONB` and :class:`.postgresql.HSTORE` datatypes now allow full control over the return type from an indexed textual access operation, either ``column[someindex].astext`` for a JSON type or ``column[someindex]`` for an HSTORE type, via the :paramref:`.postgresql.JSON.astext_type` and :paramref:`.postgresql.HSTORE.text_type` parameters. also part of fixes #3503 - The :attr:`.postgresql.JSON.Comparator.astext` modifier no longer calls upon :meth:`.ColumnElement.cast` implicitly, as PG's JSON/JSONB types allow cross-casting between each other as well. Code that makes use of :meth:`.ColumnElement.cast` on JSON indexed access, e.g. ``col[someindex].cast(Integer)``, will need to be changed to call :attr:`.postgresql.JSON.Comparator.astext` explicitly. This is part of the refactor in references #3503 for consistency in operator use. (ceeb033)
- correct this, need brackets (10cacef)
- make these failure cases more specific to catch Oracle. Would be nice to fix Oracle here (e1129b2)
- add tests for InstanceEvents.init, InstanceEvents.init_failure - ensure that kwargs can be modified in-place within InstanceEvents.init and that these take effect for the __init__ method. - improve documentation for these and related events, including that kwargs can be modified in-place. (b00b430)
Tell Wheel to generate platform and interpreter specific wheels (39517d1)
- we can again use setuptools.find_packages since we require setuptools - clean up other things we aren't using anymore (4442042)
- The behavior of the :func:`.union` construct and related constructs such as :meth:`.Query.union` now handle the case where the embedded SELECT statements need to be parenthesized due to the fact that they include LIMIT, OFFSET and/or ORDER BY. These queries **do not work on SQLite**, and will fail on that backend as they did before, but should now work on all other backends. fixes #2528 (8874955)
- Fixed 1.0 regression where the "noload" loader strategy would fail to function for a many-to-one relationship. The loader used an API to place "None" into the dictionary which no longer actually writes a value; this is a side effect of :ticket:`3061`. - remove InstanceState._initialize() totally, it's used nowhere else and no longer does what it says it does - fill in fowards-port version ids throughout the changes for 1.0.9 (5198b1d)
- pep8 test/orm/test_mapper (669a42c)
- Fixed two issues regarding Sybase reflection, allowing tables without primary keys to be reflected as well as ensured that a SQL statement involved in foreign key detection is pre-fetched up front to avoid driver issues upon nested queries. Fixes here courtesy Eugene Zapolsky; note that we cannot currently test Sybase to locally verify these changes. fixes #3508 fixes #3509 (a7d7941)
Merge pull request #192 from halfcrazy/patch-1 (e99dbe1)
fix typo int->into (51870dd)
Merge pull request #191 from leorochael/leorochael-remove_dead_variable (838ce5b)
Remove useless code (69fcabb)
- add a note clarifying query.with_labels(), fixes #3506 (292f5be)
- Fixed issue where the SQL Server dialect would reflect a string- or other variable-length column type with unbounded length by assigning the token ``"max"`` to the length attribute of the string. While using the ``"max"`` token explicitly is supported by the SQL Server dialect, it isn't part of the normal contract of the base string types, and instead the length should just be left as None. The dialect now assigns the length to None on reflection of the type so that the type behaves normally in other contexts. fixes #3504 (dd6110e)
- Fixed support for cx_Oracle version 5.2, which was tripping up SQLAlchemy's version detection under Python 3 and inadvertently not using the correct unicode mode for Python 3. This would cause issues such as bound variables mis-interpreted as NULL and rows silently not being returned. fixes #3491 (d8efa22)
- fix typo in suffix_with() docs, fixes #3502 (2e52f87)
- work to bridge between core/ORM tutorials regarding the text() construct (4f51fa9)
- remove "completely raw", whatever that is (7d268d4)
- typo (2997d39)
- add an example of text.columns - correct the scalar() example output (d73ffaa)
- remove "distutils-only" mode, use setuptools only - add first-class "pytest" runner to setup.py, fixes #3489 - remove references to setuptools Feature and mark that "--without-cextensions" is removed, fixes #3500 (5ab9ab7)
- Organize the tree for 1.1 (3180f15)
- An adjustment to the new Postgresql feature of reflecting storage options and USING of :ticket:`3455` released in 1.0.6, to disable the feature for Postgresql versions < 8.2 where the ``reloptions`` column is not provided; this allows Amazon Redshift to again work as it is based on an 8.0.x version of Postgresql. Fix courtesy Pete Hollobon. references #3455 (9e092e3)
|