Age | Commit message (Collapse) | Author |
|
Changelog
=========
Merge remote-tracking branch 'origin/pr/257' (bde46e3)
Mention the correct way of adding multiple attributes which refer to the same column (2880f24)
Fix typo from "addreses" to "addresses" (c8db086)
Merge "- don't load deferred columns on unexpire for merge with load=False, fixes #3488" (829bd30)
- don't load deferred columns on unexpire for merge with load=False, fixes #3488 (bef15a9)
Merge remote-tracking branch 'origin/pr/255' (34be0bc)
- Move review to gerrit.sqlalchemy.org (be7322b)
Fix some broken links in docs (b1c9b3b)
- Add a git review file (fdb6ab6)
- callcount refresh due to negative indexes change for nocext (10def63)
- limit this to sqlite for now (fdb6574)
- move all resultproxy tests intio test_resultset (03d35a8)
- make sure negative row indexes are based on the size of the number of columns we're actually reporting on - add more tests for negative row index - changelog/migration (dd20f56)
Merge remote-tracking branch 'origin/pr/231' into pr231 (4df1e07)
Docstring Fix (4a3205d)
- changelog for #3629, fixes #3629 (5370f05)
Merge remote-tracking branch 'origin/pr/230' (e6cbf44)
redundant "using the by changing" -> "using the" (9bdbf19)
- Added :meth:`.Select.lateral` and related constructs to allow for the SQL standard LATERAL keyword, currently only supported by Postgresql. fixes #2857 (fb9d481)
- Added support for rendering "FULL OUTER JOIN" to both Core and ORM. Pull request courtesy Stefan Urbanek. fixes #1957 (d619191)
- remember to not reassign self.connection now that __connect() has no return value (63d2a48)
- Added connection pool events :meth:`ConnectionEvents.close`, :meth:`.ConnectionEvents.detach`, :meth:`.ConnectionEvents.close_detached`. (8a77612)
- oracle doesn't release savepoints (d594691)
- Further continuing on the common MySQL exception case of a savepoint being cancelled first covered in :ticket:`2696`, the failure mode in which the :class:`.Session` is placed when a SAVEPOINT vanishes before rollback has been improved to allow the :class:`.Session` to still function outside of that savepoint. It is assumed that the savepoint operation failed and was cancelled. fixes #3680 (0a29071)
Merge remote-tracking branch 'origin/pr/251' (2d5b7a1)
- Fixed bug where the negation of an EXISTS expression would not be properly typed as boolean in the result, and also would fail to be anonymously aliased in a SELECT list as is the case with a non-negated EXISTS construct. fixes #3682 (07a4b6c)
ReST fix: missing backtick (e3abb63)
Fix typo (732c613)
- ensure engine is restored even if we had a failure in cleanup for stray connection (edbb326)
- Added basic isolation level support to the SQL Server dialects via :paramref:`.create_engine.isolation_level` and :paramref:`.Connection.execution_options.isolation_level` parameters. fixes #3534 (4d147c3)
- changelog and docs for #3332, fixes #3332 - make docs for isolation level more consistent between postgresql and mysql - move mysql autocommit tests (31f96c2)
Merge branch 'master' into pr157 (224b03f)
- add notes for pyodbc limitations with rowcount fixes #3675 (8bc370e)
- Fixed bug where a newly inserted instance that is rolled back would still potentially cause persistence conflicts on the next transaction, because the instance would not be checked that it was expired. This fix will resolve a large class of cases that erronously cause the "New instance with identity X conflicts with persistent instance Y" error. fixes #3677 (af92f67)
Adds documentation to Query.slice(). (6e5e64e)
Update cascades.rst (f61194c)
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
same logic, but without the inner function (abeb762)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- properly handle negative indexes in RowProxy.__getitem__() (f84ef1f)
sqlite: reflect primary key constraint names, fixes #3629 (b3b3c68)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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)
Add 'native' autocommit support for mysql drivers (a87b3c2)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
Merge "- don't load deferred columns on unexpire for merge with load=False, fixes #3488" (829bd30)
- don't load deferred columns on unexpire for merge with load=False, fixes #3488 (bef15a9)
Merge remote-tracking branch 'origin/pr/255' (34be0bc)
- Move review to gerrit.sqlalchemy.org (be7322b)
Fix some broken links in docs (b1c9b3b)
- Add a git review file (fdb6ab6)
- callcount refresh due to negative indexes change for nocext (10def63)
- limit this to sqlite for now (fdb6574)
- move all resultproxy tests intio test_resultset (03d35a8)
- make sure negative row indexes are based on the size of the number of columns we're actually reporting on - add more tests for negative row index - changelog/migration (dd20f56)
Merge remote-tracking branch 'origin/pr/231' into pr231 (4df1e07)
Docstring Fix (4a3205d)
- changelog for #3629, fixes #3629 (5370f05)
Merge remote-tracking branch 'origin/pr/230' (e6cbf44)
redundant "using the by changing" -> "using the" (9bdbf19)
- Added :meth:`.Select.lateral` and related constructs to allow for the SQL standard LATERAL keyword, currently only supported by Postgresql. fixes #2857 (fb9d481)
- Added support for rendering "FULL OUTER JOIN" to both Core and ORM. Pull request courtesy Stefan Urbanek. fixes #1957 (d619191)
- remember to not reassign self.connection now that __connect() has no return value (63d2a48)
- Added connection pool events :meth:`ConnectionEvents.close`, :meth:`.ConnectionEvents.detach`, :meth:`.ConnectionEvents.close_detached`. (8a77612)
- oracle doesn't release savepoints (d594691)
- Further continuing on the common MySQL exception case of a savepoint being cancelled first covered in :ticket:`2696`, the failure mode in which the :class:`.Session` is placed when a SAVEPOINT vanishes before rollback has been improved to allow the :class:`.Session` to still function outside of that savepoint. It is assumed that the savepoint operation failed and was cancelled. fixes #3680 (0a29071)
Merge remote-tracking branch 'origin/pr/251' (2d5b7a1)
- Fixed bug where the negation of an EXISTS expression would not be properly typed as boolean in the result, and also would fail to be anonymously aliased in a SELECT list as is the case with a non-negated EXISTS construct. fixes #3682 (07a4b6c)
ReST fix: missing backtick (e3abb63)
Fix typo (732c613)
- ensure engine is restored even if we had a failure in cleanup for stray connection (edbb326)
- Added basic isolation level support to the SQL Server dialects via :paramref:`.create_engine.isolation_level` and :paramref:`.Connection.execution_options.isolation_level` parameters. fixes #3534 (4d147c3)
- changelog and docs for #3332, fixes #3332 - make docs for isolation level more consistent between postgresql and mysql - move mysql autocommit tests (31f96c2)
Merge branch 'master' into pr157 (224b03f)
- add notes for pyodbc limitations with rowcount fixes #3675 (8bc370e)
- Fixed bug where a newly inserted instance that is rolled back would still potentially cause persistence conflicts on the next transaction, because the instance would not be checked that it was expired. This fix will resolve a large class of cases that erronously cause the "New instance with identity X conflicts with persistent instance Y" error. fixes #3677 (af92f67)
Adds documentation to Query.slice(). (6e5e64e)
Update cascades.rst (f61194c)
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
same logic, but without the inner function (abeb762)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- properly handle negative indexes in RowProxy.__getitem__() (f84ef1f)
sqlite: reflect primary key constraint names, fixes #3629 (b3b3c68)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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)
Add 'native' autocommit support for mysql drivers (a87b3c2)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- Add a git review file (fdb6ab6)
- callcount refresh due to negative indexes change for nocext (10def63)
- limit this to sqlite for now (fdb6574)
- move all resultproxy tests intio test_resultset (03d35a8)
- make sure negative row indexes are based on the size of the number of columns we're actually reporting on - add more tests for negative row index - changelog/migration (dd20f56)
Merge remote-tracking branch 'origin/pr/231' into pr231 (4df1e07)
Docstring Fix (4a3205d)
- changelog for #3629, fixes #3629 (5370f05)
Merge remote-tracking branch 'origin/pr/230' (e6cbf44)
redundant "using the by changing" -> "using the" (9bdbf19)
- Added :meth:`.Select.lateral` and related constructs to allow for the SQL standard LATERAL keyword, currently only supported by Postgresql. fixes #2857 (fb9d481)
- Added support for rendering "FULL OUTER JOIN" to both Core and ORM. Pull request courtesy Stefan Urbanek. fixes #1957 (d619191)
- remember to not reassign self.connection now that __connect() has no return value (63d2a48)
- Added connection pool events :meth:`ConnectionEvents.close`, :meth:`.ConnectionEvents.detach`, :meth:`.ConnectionEvents.close_detached`. (8a77612)
- oracle doesn't release savepoints (d594691)
- Further continuing on the common MySQL exception case of a savepoint being cancelled first covered in :ticket:`2696`, the failure mode in which the :class:`.Session` is placed when a SAVEPOINT vanishes before rollback has been improved to allow the :class:`.Session` to still function outside of that savepoint. It is assumed that the savepoint operation failed and was cancelled. fixes #3680 (0a29071)
Merge remote-tracking branch 'origin/pr/251' (2d5b7a1)
- Fixed bug where the negation of an EXISTS expression would not be properly typed as boolean in the result, and also would fail to be anonymously aliased in a SELECT list as is the case with a non-negated EXISTS construct. fixes #3682 (07a4b6c)
ReST fix: missing backtick (e3abb63)
Fix typo (732c613)
- ensure engine is restored even if we had a failure in cleanup for stray connection (edbb326)
- Added basic isolation level support to the SQL Server dialects via :paramref:`.create_engine.isolation_level` and :paramref:`.Connection.execution_options.isolation_level` parameters. fixes #3534 (4d147c3)
- changelog and docs for #3332, fixes #3332 - make docs for isolation level more consistent between postgresql and mysql - move mysql autocommit tests (31f96c2)
Merge branch 'master' into pr157 (224b03f)
- add notes for pyodbc limitations with rowcount fixes #3675 (8bc370e)
- Fixed bug where a newly inserted instance that is rolled back would still potentially cause persistence conflicts on the next transaction, because the instance would not be checked that it was expired. This fix will resolve a large class of cases that erronously cause the "New instance with identity X conflicts with persistent instance Y" error. fixes #3677 (af92f67)
Adds documentation to Query.slice(). (6e5e64e)
Update cascades.rst (f61194c)
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
same logic, but without the inner function (abeb762)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- properly handle negative indexes in RowProxy.__getitem__() (f84ef1f)
sqlite: reflect primary key constraint names, fixes #3629 (b3b3c68)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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)
Add 'native' autocommit support for mysql drivers (a87b3c2)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
Docstring Fix (4a3205d)
- changelog for #3629, fixes #3629 (5370f05)
Merge remote-tracking branch 'origin/pr/230' (e6cbf44)
redundant "using the by changing" -> "using the" (9bdbf19)
- Added :meth:`.Select.lateral` and related constructs to allow for the SQL standard LATERAL keyword, currently only supported by Postgresql. fixes #2857 (fb9d481)
- Added support for rendering "FULL OUTER JOIN" to both Core and ORM. Pull request courtesy Stefan Urbanek. fixes #1957 (d619191)
- remember to not reassign self.connection now that __connect() has no return value (63d2a48)
- Added connection pool events :meth:`ConnectionEvents.close`, :meth:`.ConnectionEvents.detach`, :meth:`.ConnectionEvents.close_detached`. (8a77612)
- oracle doesn't release savepoints (d594691)
- Further continuing on the common MySQL exception case of a savepoint being cancelled first covered in :ticket:`2696`, the failure mode in which the :class:`.Session` is placed when a SAVEPOINT vanishes before rollback has been improved to allow the :class:`.Session` to still function outside of that savepoint. It is assumed that the savepoint operation failed and was cancelled. fixes #3680 (0a29071)
Merge remote-tracking branch 'origin/pr/251' (2d5b7a1)
- Fixed bug where the negation of an EXISTS expression would not be properly typed as boolean in the result, and also would fail to be anonymously aliased in a SELECT list as is the case with a non-negated EXISTS construct. fixes #3682 (07a4b6c)
ReST fix: missing backtick (e3abb63)
Fix typo (732c613)
- ensure engine is restored even if we had a failure in cleanup for stray connection (edbb326)
- Added basic isolation level support to the SQL Server dialects via :paramref:`.create_engine.isolation_level` and :paramref:`.Connection.execution_options.isolation_level` parameters. fixes #3534 (4d147c3)
- changelog and docs for #3332, fixes #3332 - make docs for isolation level more consistent between postgresql and mysql - move mysql autocommit tests (31f96c2)
Merge branch 'master' into pr157 (224b03f)
- add notes for pyodbc limitations with rowcount fixes #3675 (8bc370e)
- Fixed bug where a newly inserted instance that is rolled back would still potentially cause persistence conflicts on the next transaction, because the instance would not be checked that it was expired. This fix will resolve a large class of cases that erronously cause the "New instance with identity X conflicts with persistent instance Y" error. fixes #3677 (af92f67)
Adds documentation to Query.slice(). (6e5e64e)
Update cascades.rst (f61194c)
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
same logic, but without the inner function (abeb762)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
sqlite: reflect primary key constraint names, fixes #3629 (b3b3c68)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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)
Add 'native' autocommit support for mysql drivers (a87b3c2)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- Added support for rendering "FULL OUTER JOIN" to both Core and ORM. Pull request courtesy Stefan Urbanek. fixes #1957 (d619191)
- remember to not reassign self.connection now that __connect() has no return value (63d2a48)
- Added connection pool events :meth:`ConnectionEvents.close`, :meth:`.ConnectionEvents.detach`, :meth:`.ConnectionEvents.close_detached`. (8a77612)
- oracle doesn't release savepoints (d594691)
- Further continuing on the common MySQL exception case of a savepoint being cancelled first covered in :ticket:`2696`, the failure mode in which the :class:`.Session` is placed when a SAVEPOINT vanishes before rollback has been improved to allow the :class:`.Session` to still function outside of that savepoint. It is assumed that the savepoint operation failed and was cancelled. fixes #3680 (0a29071)
Merge remote-tracking branch 'origin/pr/251' (2d5b7a1)
- Fixed bug where the negation of an EXISTS expression would not be properly typed as boolean in the result, and also would fail to be anonymously aliased in a SELECT list as is the case with a non-negated EXISTS construct. fixes #3682 (07a4b6c)
ReST fix: missing backtick (e3abb63)
Fix typo (732c613)
- ensure engine is restored even if we had a failure in cleanup for stray connection (edbb326)
- Added basic isolation level support to the SQL Server dialects via :paramref:`.create_engine.isolation_level` and :paramref:`.Connection.execution_options.isolation_level` parameters. fixes #3534 (4d147c3)
- changelog and docs for #3332, fixes #3332 - make docs for isolation level more consistent between postgresql and mysql - move mysql autocommit tests (31f96c2)
Merge branch 'master' into pr157 (224b03f)
- add notes for pyodbc limitations with rowcount fixes #3675 (8bc370e)
- Fixed bug where a newly inserted instance that is rolled back would still potentially cause persistence conflicts on the next transaction, because the instance would not be checked that it was expired. This fix will resolve a large class of cases that erronously cause the "New instance with identity X conflicts with persistent instance Y" error. fixes #3677 (af92f67)
Adds documentation to Query.slice(). (6e5e64e)
Update cascades.rst (f61194c)
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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)
Add 'native' autocommit support for mysql drivers (a87b3c2)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- remember to not reassign self.connection now that __connect() has no return value (63d2a48)
- Added connection pool events :meth:`ConnectionEvents.close`, :meth:`.ConnectionEvents.detach`, :meth:`.ConnectionEvents.close_detached`. (8a77612)
- oracle doesn't release savepoints (d594691)
- Further continuing on the common MySQL exception case of a savepoint being cancelled first covered in :ticket:`2696`, the failure mode in which the :class:`.Session` is placed when a SAVEPOINT vanishes before rollback has been improved to allow the :class:`.Session` to still function outside of that savepoint. It is assumed that the savepoint operation failed and was cancelled. fixes #3680 (0a29071)
Merge remote-tracking branch 'origin/pr/251' (2d5b7a1)
- Fixed bug where the negation of an EXISTS expression would not be properly typed as boolean in the result, and also would fail to be anonymously aliased in a SELECT list as is the case with a non-negated EXISTS construct. fixes #3682 (07a4b6c)
ReST fix: missing backtick (e3abb63)
Fix typo (732c613)
- ensure engine is restored even if we had a failure in cleanup for stray connection (edbb326)
- Added basic isolation level support to the SQL Server dialects via :paramref:`.create_engine.isolation_level` and :paramref:`.Connection.execution_options.isolation_level` parameters. fixes #3534 (4d147c3)
- changelog and docs for #3332, fixes #3332 - make docs for isolation level more consistent between postgresql and mysql - move mysql autocommit tests (31f96c2)
Merge branch 'master' into pr157 (224b03f)
- add notes for pyodbc limitations with rowcount fixes #3675 (8bc370e)
- Fixed bug where a newly inserted instance that is rolled back would still potentially cause persistence conflicts on the next transaction, because the instance would not be checked that it was expired. This fix will resolve a large class of cases that erronously cause the "New instance with identity X conflicts with persistent instance Y" error. fixes #3677 (af92f67)
Adds documentation to Query.slice(). (6e5e64e)
Update cascades.rst (f61194c)
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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)
Add 'native' autocommit support for mysql drivers (a87b3c2)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- oracle doesn't release savepoints (d594691)
- Further continuing on the common MySQL exception case of a savepoint being cancelled first covered in :ticket:`2696`, the failure mode in which the :class:`.Session` is placed when a SAVEPOINT vanishes before rollback has been improved to allow the :class:`.Session` to still function outside of that savepoint. It is assumed that the savepoint operation failed and was cancelled. fixes #3680 (0a29071)
Merge remote-tracking branch 'origin/pr/251' (2d5b7a1)
- Fixed bug where the negation of an EXISTS expression would not be properly typed as boolean in the result, and also would fail to be anonymously aliased in a SELECT list as is the case with a non-negated EXISTS construct. fixes #3682 (07a4b6c)
ReST fix: missing backtick (e3abb63)
Fix typo (732c613)
- ensure engine is restored even if we had a failure in cleanup for stray connection (edbb326)
- Added basic isolation level support to the SQL Server dialects via :paramref:`.create_engine.isolation_level` and :paramref:`.Connection.execution_options.isolation_level` parameters. fixes #3534 (4d147c3)
- changelog and docs for #3332, fixes #3332 - make docs for isolation level more consistent between postgresql and mysql - move mysql autocommit tests (31f96c2)
Merge branch 'master' into pr157 (224b03f)
- add notes for pyodbc limitations with rowcount fixes #3675 (8bc370e)
- Fixed bug where a newly inserted instance that is rolled back would still potentially cause persistence conflicts on the next transaction, because the instance would not be checked that it was expired. This fix will resolve a large class of cases that erronously cause the "New instance with identity X conflicts with persistent instance Y" error. fixes #3677 (af92f67)
Adds documentation to Query.slice(). (6e5e64e)
Update cascades.rst (f61194c)
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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)
Add 'native' autocommit support for mysql drivers (a87b3c2)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- Further continuing on the common MySQL exception case of a savepoint being cancelled first covered in :ticket:`2696`, the failure mode in which the :class:`.Session` is placed when a SAVEPOINT vanishes before rollback has been improved to allow the :class:`.Session` to still function outside of that savepoint. It is assumed that the savepoint operation failed and was cancelled. fixes #3680 (0a29071)
Merge remote-tracking branch 'origin/pr/251' (2d5b7a1)
- Fixed bug where the negation of an EXISTS expression would not be properly typed as boolean in the result, and also would fail to be anonymously aliased in a SELECT list as is the case with a non-negated EXISTS construct. fixes #3682 (07a4b6c)
ReST fix: missing backtick (e3abb63)
Fix typo (732c613)
- ensure engine is restored even if we had a failure in cleanup for stray connection (edbb326)
- Added basic isolation level support to the SQL Server dialects via :paramref:`.create_engine.isolation_level` and :paramref:`.Connection.execution_options.isolation_level` parameters. fixes #3534 (4d147c3)
- changelog and docs for #3332, fixes #3332 - make docs for isolation level more consistent between postgresql and mysql - move mysql autocommit tests (31f96c2)
Merge branch 'master' into pr157 (224b03f)
- add notes for pyodbc limitations with rowcount fixes #3675 (8bc370e)
- Fixed bug where a newly inserted instance that is rolled back would still potentially cause persistence conflicts on the next transaction, because the instance would not be checked that it was expired. This fix will resolve a large class of cases that erronously cause the "New instance with identity X conflicts with persistent instance Y" error. fixes #3677 (af92f67)
Adds documentation to Query.slice(). (6e5e64e)
Update cascades.rst (f61194c)
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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)
Add 'native' autocommit support for mysql drivers (a87b3c2)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
Merge remote-tracking branch 'origin/pr/251' (2d5b7a1)
- Fixed bug where the negation of an EXISTS expression would not be properly typed as boolean in the result, and also would fail to be anonymously aliased in a SELECT list as is the case with a non-negated EXISTS construct. fixes #3682 (07a4b6c)
ReST fix: missing backtick (e3abb63)
Fix typo (732c613)
- ensure engine is restored even if we had a failure in cleanup for stray connection (edbb326)
- Added basic isolation level support to the SQL Server dialects via :paramref:`.create_engine.isolation_level` and :paramref:`.Connection.execution_options.isolation_level` parameters. fixes #3534 (4d147c3)
- changelog and docs for #3332, fixes #3332 - make docs for isolation level more consistent between postgresql and mysql - move mysql autocommit tests (31f96c2)
Merge branch 'master' into pr157 (224b03f)
- add notes for pyodbc limitations with rowcount fixes #3675 (8bc370e)
- Fixed bug where a newly inserted instance that is rolled back would still potentially cause persistence conflicts on the next transaction, because the instance would not be checked that it was expired. This fix will resolve a large class of cases that erronously cause the "New instance with identity X conflicts with persistent instance Y" error. fixes #3677 (af92f67)
Adds documentation to Query.slice(). (6e5e64e)
Update cascades.rst (f61194c)
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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)
Add 'native' autocommit support for mysql drivers (a87b3c2)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
Fix typo (732c613)
- ensure engine is restored even if we had a failure in cleanup for stray connection (edbb326)
- Added basic isolation level support to the SQL Server dialects via :paramref:`.create_engine.isolation_level` and :paramref:`.Connection.execution_options.isolation_level` parameters. fixes #3534 (4d147c3)
- changelog and docs for #3332, fixes #3332 - make docs for isolation level more consistent between postgresql and mysql - move mysql autocommit tests (31f96c2)
Merge branch 'master' into pr157 (224b03f)
- add notes for pyodbc limitations with rowcount fixes #3675 (8bc370e)
- Fixed bug where a newly inserted instance that is rolled back would still potentially cause persistence conflicts on the next transaction, because the instance would not be checked that it was expired. This fix will resolve a large class of cases that erronously cause the "New instance with identity X conflicts with persistent instance Y" error. fixes #3677 (af92f67)
Adds documentation to Query.slice(). (6e5e64e)
Update cascades.rst (f61194c)
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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)
Add 'native' autocommit support for mysql drivers (a87b3c2)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- ensure engine is restored even if we had a failure in cleanup for stray connection (edbb326)
- Added basic isolation level support to the SQL Server dialects via :paramref:`.create_engine.isolation_level` and :paramref:`.Connection.execution_options.isolation_level` parameters. fixes #3534 (4d147c3)
- changelog and docs for #3332, fixes #3332 - make docs for isolation level more consistent between postgresql and mysql - move mysql autocommit tests (31f96c2)
Merge branch 'master' into pr157 (224b03f)
- add notes for pyodbc limitations with rowcount fixes #3675 (8bc370e)
- Fixed bug where a newly inserted instance that is rolled back would still potentially cause persistence conflicts on the next transaction, because the instance would not be checked that it was expired. This fix will resolve a large class of cases that erronously cause the "New instance with identity X conflicts with persistent instance Y" error. fixes #3677 (af92f67)
Adds documentation to Query.slice(). (6e5e64e)
Update cascades.rst (f61194c)
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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)
Add 'native' autocommit support for mysql drivers (a87b3c2)
Merged zzzeek/sqlalchemy into master (efca4af)
|
|
Changelog
=========
- Fixed bug where a newly inserted instance that is rolled back would still potentially cause persistence conflicts on the next transaction, because the instance would not be checked that it was expired. This fix will resolve a large class of cases that erronously cause the "New instance with identity X conflicts with persistent instance Y" error. fixes #3677 (af92f67)
Adds documentation to Query.slice(). (6e5e64e)
Update cascades.rst (f61194c)
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
Adds documentation to Query.slice(). (6e5e64e)
Update cascades.rst (f61194c)
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
Update cascades.rst (f61194c)
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- skip GC tests here when coverage is enabled, seems to interfere (be7f8e0)
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- not sure why MySQL DROP DBs fail but we can't just ignore the error like this (0e7904e)
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- move out unconsumed names tests from test_compiler out to test_insert, test_update - establish consistent names between existing unconsumed names tests and new ones added per ref #3666 (6b7c207)
- changelog for #3666, fixes #3666 (3d83e16)
Add test for inserting multiple values (a1de176)
Raise exception when we have multiple values with an unknown column. Fixes #3666. (399f92c)
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- unfortunately calling upon "_label" here makes it unclear if we're trying to hit columns without names yet and such, to suit the bug right now just make it specific to FunctionElement (8a20d27)
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- Anonymous labeling is applied to a :attr:`.func` construct that is passed to :func:`.column_property`, so that if the same attribute is referred to as a column expression twice the names are de-duped, thus avoiding "ambiguous column" errors. Previously, the ``.label(None)`` would need to be applied in order for the name to be de-anonymized. fixes #3663 (0210695)
- An improvement to the workings of :meth:`.Query.correlate` such that when a "polymorphic" entity is used which represents a straight join of several tables, the statement will ensure that all the tables within the join are part of what's correlating. fixes #3662 (f891428)
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- additional adjustment to the fix made in 8ad968f33100baeb3b13c7e0b724b6b79ab4277f for ref #3657. The Oracle dialect makes more use of the "select_wraps_for" feature than SQL server because Oracle doesn't have "TOP" for a limit-only select, so tests are showing more happening here. In the case where the select() has some dupe columns, these are deduped from the .c collection so a positional match between the wrapper and original can't use .inner_columns, because these collections wont match. Using _columns_plus_names instead which is the deduped collection that determines the SELECT display, which definitely have to match up. (eff7b4f)
- Fixed bug in "to_list" conversion where a single bytes object would be turned into a list of individual characters. This would impact among other things using the :meth:`.Query.get` method on a primary key that's a bytes object. fixes #3660 (01809bd)
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- update the mssql autoincrement reflection test to accommodate the new behavior of the autoincrement flag as per ref #3216 (6713817)
- reworked the way the "select_wraps_for" expression is handled within visit_select(); this attribute was added in the 1.0 series to accommodate the subquery wrapping behavior of SQL Server and Oracle while also working with positional column targeting and no longer relying upon "key fallback" in order to target columns in such a statement. The IBM DB2 third-party dialect also has this use case, but its implementation is using regular expressions to rewrite the textual SELECT only and does not make use of a "wrapped" select at this time. The logic no longer attempts to reconcile proxy set collections as this was not deterministic, and instead assumes that the select() and the wrapper select() match their columns postionally, at least for the column positions they have in common, so it is now very simple and safe. fixes #3657. - as a side effect of #3657 it was also revealed that the strategy of calling upon a ResultProxy._getter was not correctly calling into NoSuchColumnError when an expected column was not present, and instead returned None up to loading.instances() to produce NoneType failures; added a raiseerr argument to _getter() which is called when we aren't expecting None, fixes #3658. (8ad968f)
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
Add release date for 1.0.12 to changelog (60a9d2d)
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- further edit the unnest() example to suit PG's esoteric requirements exactly (c97aa63)
- Fixed bug which would cause an eagerly loaded many-to-one attribute to not be loaded, if the joined eager load were from a row where the same entity were present multiple times, some calling for the attribute to be eagerly loaded and others not. The logic here is revised to take in the attribute even though a different loader path has handled the parent entity already. fixes #3431 (594a974)
- handle parameter sets that aren't correctly formed, so that for example an exception object made within a test suite can still repr (error seen in Keystone) (2965da0)
- do the trailing comma logic of tuple repr() exactly (bf1d03a)
- All string formatting of bound parameter sets and result rows for logging, exception, and ``repr()`` purposes now truncate very large scalar values within each collection, including an "N characters truncated" notation, similar to how the display for large multiple-parameter sets are themselves truncated. fixes #2837 (591e0cf)
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- add changelog, migration, version flags and some extra notes to the new MutableList and MutableSet classes, fixes #3297 (a99a32d)
Merge remote-tracking branch 'origin/pr/236' (c46b494)
- use same colname as the alias we give to the PG function here, fixes #3652 (e310a8e)
Add `sqlalchemy.ext.mutable.MutableSet` (f7354b4)
Add `sqlalchemy.ext.mutable.MutableList` (1b6422a)
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- Fixed bug in :meth:`.Session.merge` where an object with a composite primary key that has values for some but not all of the PK fields would emit a SELECT statement leaking the internal NEVER_SET symbol into the query, rather than detecting that this object does not have a searchable primary key and no SELECT should be emitted. fixes #3647 (366f97b)
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- CTE functionality has been expanded to support all DML, allowing INSERT, UPDATE, and DELETE statements to both specify their own WITH clause, as well as for these statements themselves to be CTE expressions when they include a RETURNING clause. fixes #2551 (e5f1a3f)
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- add more documentation to MutableDict explaining that this structure is only intended to track additions and removals from the dictionary, not recursive tracking of embedded changes. fixes #3646. (287aaa9)
- don't drop the ts1/ts2 databases without seeing the primary DB, because we never log in on the ts1/ts2. races against other runs and erases their DBs (3f1f189)
- Fixed bug in :func:`.expression.text` construct where a double-colon expression would not escape properly, e.g. ``some\:\:expr``, as is most commonly required when rendering Postgresql-style CAST expressions. fixes #3644 (29dcaa2)
- A refinement to the logic which adds columns to the resulting SQL when :meth:`.Query.distinct` is combined with :meth:`.Query.order_by` such that columns which are already present will not be added a second time, even if they are labeled with a different name. Regardless of this change, the extra columns added to the SQL have never been returned in the final result, so this change only impacts the string form of the statement as well as its behavior when used in a Core execution context. Additionally, columns are no longer added when the DISTINCT ON format is used, provided the query is not wrapped inside a subquery due to joined eager loading. fixes #3641 (ff3be95)
- switch to 2 workers for oracle (7d2bed6)
- Testing reveals that we have *no* weak references to any cx_Oracle connections at all, yet cx_Oracle still has open sessions that cannot be killed until process dies. Oracle wins! Add a completely separate DB reaper script that runs after py.test is done. (11a8440)
- use config-based test schema (00a05e3)
- attempt a different style of session kill (40c8361)
- fully hyperlink the docstring for make_transient - establish make_transient and make_transient_to_detached as special-use, advanced use only functions - list all conditions under make_transient() under which an attribute will not be loaded and establish that make_transient() does not attempt to load all attributes before detaching the object from its session, fixes #3640 (7eff4e8)
- additional fixes to get oracle + multiprocess to be reliable (7cb2a2d)
- py3k fix for enum feature (0f6d1b7)
- add missing __backend__ directives for SQL server (6831c67)
- add missing __backend__ directives so that oracle tests actually run with --backend-only (860d07f)
- detect "Enterprise" and assume compression stuff isn't available if not (308244a)
- adjust the MultiSchemaTest to handle multiple test_schemas / processes at the same time (8085305)
- adjust to allow dblink tests to work with multiprocess users. unfortunately the synonym doesn't work for SQL statements here when the dblink is on a different user, testing this is not really critical so just removed it. (7e619d0)
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- add a session killer for oracle provisioning (c70d722)
- add an impl for Enum to Oracle which has subclassing requirements on unicode. Enum would be better as a TypeDecorator at this point but then that becomes awkward with native enum types (Interval works that way, but we don't need the bind_processor for native interval...) (fd07c22)
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- more oracle fixes (93c5328)
- oracle requires GLOBAL here (c1316a2)
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- add multi-database provisioning for oracle (c01d119)
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
Fix typo in relationship persistance docs (d464933)
- add literal_binds for delete() statements in addition to insert()/update() - move tests to CRUDTest - changelog, fixes #3643 (150591f)
fix passing literal_binds flag through for update and insert (c9b03fa)
- changelog for #3621 fixes #3621 (9149fd0)
Merge branch 'master' of https://bitbucket.org/carlrivers/sqlalchemy (6d58934)
- test fixes for metadata.enums value now being a list - modernize those tests as well (ba1bfef)
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
Merged zzzeek/sqlalchemy into master (c6d630c)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
Merged in carlrivers/removed-entry-that-causes-attributeerror-1453541002643 (pull request #1) (2836504)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
Removed entry that causes AttributeError (#3621) - Oracle zxJDBC fails with AttributeError in object OracleCompiler_zxjdbc (edc0b86)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- add changelog and migration notes for new Enum features, fixes #3095, #3292 - reorganize enum constructor to again work with the MySQL ENUM type - add a new create_constraint flag to Enum to complement that of Boolean - reinstate the CHECK constraint tests for enum, these already fail /skip against the MySQL backend - simplify lookup rules in Enum, have them apply to all varieties of Enum equally (df55695)
- Initial implementation of support for PEP-435 enumerated types within the Enum type. (5401c4d)
- D rules seem to have been added overnight to the flake8 plugin I'm using and many of these seem contradictory and/or undesirable. block all until individual rules can be approved. (86660fe)
- Fixed issue where inadvertent use of the Python ``__contains__`` override with a column expression (e.g. by using ``'x' in col``) would cause an endless loop in the case of an ARRAY type, as Python defers this to ``__getitem__`` access which never raises for this type. Overall, all use of ``__contains__`` now raises NotImplementedError. fixes #3642 (e0a580b)
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- put a retry in for PG database provisioning as it locks on database use (c8b3d4e)
- The ``sqlalchemy.dialects.postgres`` module, long deprecated, is removed; this has emitted a warning for many years and projects should be calling upon ``sqlalchemy.dialects.postgresql``. Engine URLs of the form ``postgres://`` will still continue to function, however. (c59bf00)
- happy new year (859379e)
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- use a StaticPool for componentreflectiontest to ensure temp tables are reflectable on the same session they were created (14b1e6f)
- use schema argument correctly when we are dropping for a schema (13dfc53)
- using extras here has the effect of defeating the usedevelop flag since SQLAlchemy gets installed as develop and in the virtualenv (8d1579c)
- revert the change first made in a6fe4dc, as we are now generalizing the warning here to all safe_reraise() cases in Python 2. - Revisiting :ticket:`2696`, first released in 1.0.10, which attempts to work around Python 2's lack of exception context reporting by emitting a warning for an exception that was interrupted by a second exception when attempting to roll back the already-failed transaction; this issue continues to occur for MySQL backends in conjunction with a savepoint that gets unexpectedly lost, which then causes a "no such savepoint" error when the rollback is attempted, obscuring what the original condition was. (8a1e619)
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- experimental - try out a very open ended design for the factors, assume many more combinations of factors are possible and basically make them more akin to command options at the tox level. (086ad9c)
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- reinstate "dont set up integer index in keymap if we're on cexts", and this time also fix the cext itself to properly handle int vs. long on py2k (516a442)
- restore the use of PYTHONNOUSERSITE that was removed in df3f125bd84fc7ec5d45592c5774daf3a39d9bc9, this flag is explicitly checked within conftest.py and we need to continue to use it, otherwise a tox build inside of .tox that isn't usedevelop is ignored, including C extensions - rework the whole system of running with coverage, so that with coverage, we *are* using usedevelop, but also make sure we rm the .so files for nocext, make sure we --cov-append, etc. (49dfeda)
Revert "- dont set up integer index in keymap if we're on cexts" (8aa95fa)
- dont set up integer index in keymap if we're on cexts (de0d144)
fix %x string format to compatible with Python 3.5 (4b9f6f4)
fix %x string format to compatible with Python 3.5 (324e532)
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- unfortunately we need to match within join where col.key does not match what's given so we need to use a set() here. contains_column is not within any performance paths (5742e32)
- rework ColumnCollection to no longer persist "all_col_set"; we don't need this collection except in the extend/update uses where we create it ad-hoc. simplifies pickling. Compatibility with 1.0 should be OK as ColumnColleciton uses __getstate__ in any case and the __setstate__ contract hasn't changed. - Fixed bug in :class:`.Table` metadata construct which appeared around the 0.9 series where adding columns to a :class:`.Table` that was unpickled would fail to correctly establish the :class:`.Column` within the 'c' collection, leading to issues in areas such as ORM configuration. This could impact use cases such as ``extend_existing`` and others. fixes #3632 (8163de4)
- The workaround for right-nested joins on SQLite, where they are rewritten as subqueries in order to work around SQLite's lack of support for this syntax, is lifted when SQLite version 3.7.16 or greater is detected. fixes #3634 - The workaround for SQLite's unexpected delivery of column names as ``tablename.columnname`` for some kinds of queries is now disabled when SQLite version 3.10.0 or greater is detected. fixes #3633 (9d9fc93)
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
remove PYTHONNOUSERSITE, not sure why this was here, it apparently interferes with coverage (df3f125)
- another approach at coverage (d100bfc)
- try to improve the default coverage job (ebefbb3)
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- fix the deps for the last change (70e24ad)
- unfortunately we have to force the paths to be shorter due to https://github.com/pypa/virtualenv/issues/596 (0ad5599)
- add a new qualifier "native" vs. "dbapi" unicode to avoid profiling problems here - add extras_require to setup.py for the most common DBAPIs - rework tox.ini to use extras, specify a test matrix built in (6b05150)
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- fix array test that was essentially taking a weird guess at the primary key of a row based on other tests invoking around it (926784f)
- fix stray connection (2419bfe)
- restate the "secondary" / AssociationProxy warning more strongly. references #3638 (67a69da)
- use regex here, columns dont matter, keep coming up with different orderings (77a4794)
- use uuid fragments for provision names to enable multiple test suites per server (65010e9)
- native unicode expectations are too difficult to maintain w/ the number of drivers /DBURIs / python versions (d18d6d9)
- move out match compiler test to test_compiler - test_query isn't assertscompiledsql (2693132)
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- make this test deterministic (24bad4b)
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- add a forwards-test here as well (38958f7)
- documenation updates to clarify specific SQLite versions that have problems with right-nested joins and UNION column keys; references #3633 references #3634. backport from 1.1 to 0.9 announcing 1.1 as where these behaviors will be retired based on version-specific checks - fix test_resultset so that it passes when SQLite 3.10.0 is present, references #3633 (89fa087)
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- Added new parameter :paramref:`.orm.mapper.passive_deletes` to available mapper options. This allows a DELETE to proceed for a joined-table inheritance mapping against the base table only, while allowing for ON DELETE CASCADE to handle deleting the row from the subclass tables. fixes #2349 (963aa30)
- The unsupported Sybase dialect now raises ``NotImplementedError`` when attempting to compile a query that includes "offset"; Sybase has no straightforward "offset" feature. fixes #2278 (61016f1)
- generalize the verbiage on LargeBinary so that it doesn't create confusion for inherited classes such as BYTEA, fixes (47d8858)
- update oracle JDBC driver URL, fixes #3554 (24dba71)
- cross link for concrete helper classes - remove redundant concrete helper docs from declarative docs, two places is enough (a53bd6f)
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- typo (baabf3b)
- redo the docs for concrete inheritance to more strongly favor declarative, fixes #2890 (632c4f2)
- clarify the "Adding" section also illustrates updates, fixes #2942 (02271ef)
- add a note that the literal_binds flag should be used when cross-compiling from DDL to SQL, fixes #3615 (165fa15)
Fix ArrayOfEnum's handling of empty arrays. (a2badb7)
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- the order in which _generate_backref() for different mappers is called is random; therefore it may be called against the subclass mapper first, so need to check .concrete on both sides, references #3630 (5a279e7)
- calling str() on a core sql construct has been made more "friendly", when the construct contains non-standard sql elements such as returning, array index operations, or dialect-specific or custom datatypes. a string is now returned in these cases rendering an approximation of the construct (typically the postgresql-style version of it) rather than raising an error. fixes #3631 - add within_group to top-level imports - add eq_ignore_whitespace to sqlalchemy.testing imports (3983768)
- Fixed issue where two same-named relationships that refer to a base class and a concrete-inherited subclass would raise an error if those relationships were set up using "backref", while setting up the identical configuration using relationship() instead with the conflicting names would succeed, as is allowed in the case of a concrete mapping. fixes #3630 (b7bc704)
- The ``str()`` call for :class:`.Query` will now take into account the :class:`.Engine` to which the :class:`.Session` is bound, when generating the string form of the SQL, so that the actual SQL that would be emitted to the database is shown, if possible. Previously, only the engine associated with the :class:`.MetaData` to which the mappings are associated would be used, if present. If no bind can be located either on the :class:`.Session` or on the :class:`.MetaData` to which the mappings are associated, then the "default" dialect is used to render the SQL, as was the case previously. fixes #3081 (2a7f37b)
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- Fixed bug where some exception re-raise scenarios would attach the exception to itself as the "cause"; while the Python 3 interpreter is OK with this, it could cause endless loops in iPython. fixes #3625 - add tests for reraise, raise_from_cause - raise_from_cause is the same on py2k/3k, use just one function (d4d9a65)
Merge remote-tracking branch 'origin/pr/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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/227' (b985483)
- fix People -> Person , fixes #3628 (66560ce)
Fix typo in relationships docs (f9b2185)
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- update (a7cc296)
- illustrate these using the newer exception doctest format. unfortunately we can't show the SQL unless we filtered it out from doctest...not worth it (7bb578b)
- A deep improvement to the recently added :meth:`.TextClause.columns` method, and its interaction with result-row processing, now allows the columns passed to the method to be positionally matched with the result columns in the statement, rather than matching on name alone. The advantage to this includes that when linking a textual SQL statement to an ORM or Core table model, no system of labeling or de-duping of common column names needs to occur, which also means there's no need to worry about how label names match to ORM columns and so-forth. In addition, the :class:`.ResultProxy` has been further enhanced to map column and string keys to a row with greater precision in some cases. fixes #3501 - reorganize the initialization of ResultMetaData for readability and complexity; use the name "cursor_description", define the task of "merging" cursor_description with compiled column information as its own function, and also define "name extraction" as a separate task. - fully change the name we use in the "ambiguous column" error to be the actual name that was ambiguous, modify the C ext also (1f7a1f7)
- there was a DATEPART test after all, fix format (0ff3f95)
- fix some old verbiage that refers to text() as an "implicit" thing for SQL fragments; we've deprecated that in 1.0 and its a good idea to document like this for 0.9 as well. (d5d7284)
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- convert keys to str for None not sortable against str on py3k (f2b00f1)
- changelog for pr bitbucket:70, fixes #3624 (215167d)
Remove quote on first DATEPART paramater (c4f415d)
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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
=========
- reorganize schema_translate_map to be succinct and gain the performance back by using an attrgetter for the default case (6fbfadc)
- refactor a bit the loader options system to make it a bit more intelligible, given the fixes for ref #3623. unfortunately the system is still quite weird even though it was rewritten to be... less weird (b301f00)
- 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)
|