diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-09-17 15:03:15 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-09-17 15:03:15 -0500 |
commit | 9910256a512da1aae0ef7d3ab580d76b2fcf0ff2 (patch) | |
tree | 8437686cb67d2ad16feb60c489dbdeab1c1d59d7 | |
parent | 5a6895471fb6bf9afe9bdf017f1fa2c6246ae303 (diff) | |
download | sqlalchemy-9910256a512da1aae0ef7d3ab580d76b2fcf0ff2.tar.gz |
render "backports"/ "forward ports" automatically, only write out
changelog once
-rw-r--r-- | doc/build/builder/changelog.py | 88 | ||||
-rw-r--r-- | doc/build/changelog/changelog_07.rst | 14 | ||||
-rw-r--r-- | doc/build/changelog/changelog_08.rst | 147 | ||||
-rw-r--r-- | doc/build/changelog/changelog_09.rst | 482 |
4 files changed, 137 insertions, 594 deletions
diff --git a/doc/build/builder/changelog.py b/doc/build/builder/changelog.py index 41a403ad0..f96fd559e 100644 --- a/doc/build/builder/changelog.py +++ b/doc/build/builder/changelog.py @@ -31,11 +31,13 @@ class EnvDirective(object): def env(self): return self.state.document.settings.env + @classmethod + def changes(cls, env): + return env.temp_data['ChangeLogDirective_changes'] + class ChangeLogDirective(EnvDirective, Directive): has_content = True - type_ = "change" - default_section = 'misc' def _organize_by_section(self, changes): @@ -45,6 +47,8 @@ class ChangeLogDirective(EnvDirective, Directive): bysection = collections.defaultdict(list) all_sections = set() for rec in changes: + if self.version not in rec['versions']: + continue inner_tag = rec['tags'].intersection(self.inner_tag_sort) if inner_tag: inner_tag = inner_tag.pop() @@ -68,26 +72,29 @@ class ChangeLogDirective(EnvDirective, Directive): bysection[(self.default_section, inner_tag)].append(rec) return bysection, all_sections - @classmethod - def changes(cls, env): - return env.temp_data['ChangeLogDirective_%s_changes' % cls.type_] - def _setup_run(self): self.sections = self.env.config.changelog_sections self.inner_tag_sort = self.env.config.changelog_inner_tag_sort + [""] - self.env.temp_data['ChangeLogDirective_%s_changes' % self.type_] = [] + if 'ChangeLogDirective_changes' not in self.env.temp_data: + self.env.temp_data['ChangeLogDirective_changes'] = [] self._parsed_content = _parse_content(self.content) + self.version = version = self._parsed_content.get('version', '') + self.env.temp_data['ChangeLogDirective_version'] = version + p = nodes.paragraph('', '',) self.state.nested_parse(self.content[1:], 0, p) def run(self): self._setup_run() + + if 'ChangeLogDirective_includes' in self.env.temp_data: + return [] + changes = self.changes(self.env) output = [] - self.version = version = self._parsed_content.get('version', '') - id_prefix = "%s-%s" % (self.type_, version) + id_prefix = "change-%s" % (self.version, ) topsection = self._run_top(id_prefix) output.append(topsection) @@ -161,7 +168,7 @@ class ChangeLogDirective(EnvDirective, Directive): text = _text_rawsource_from_node(para) to_hash = "%s %s" % (self.version, text[0:100]) - targetid = "%s-%s" % (self.type_, + targetid = "change-%s" % ( md5.md5(to_hash.encode('ascii', 'ignore') ).hexdigest()) targetnode = nodes.target('', '', ids=[targetid]) @@ -173,6 +180,16 @@ class ChangeLogDirective(EnvDirective, Directive): ) para.append(permalink) + if len(rec['versions']) > 1: + + backported_changes = rec['sorted_versions'][rec['sorted_versions'].index(self.version) + 1:] + if backported_changes: + backported = nodes.paragraph('') + backported.append(nodes.Text("This change is also ", "")) + backported.append(nodes.strong("", "backported")) + backported.append(nodes.Text(" to: %s" % ", ".join(backported_changes), "")) + para.append(backported) + insert_ticket = nodes.paragraph('') para.append(insert_ticket) @@ -187,7 +204,7 @@ class ChangeLogDirective(EnvDirective, Directive): if i > 0: insert_ticket.append(nodes.Text(", ", ", ")) else: - insert_ticket.append(nodes.Text(" ", " ")) + insert_ticket.append(nodes.Text("References: """)) i += 1 if render is not None: refuri = render % refname @@ -218,33 +235,69 @@ class ChangeLogDirective(EnvDirective, Directive): ) ) +class ChangeLogImportDirective(EnvDirective, Directive): + has_content = True + + def _setup_run(self): + if 'ChangeLogDirective_changes' not in self.env.temp_data: + self.env.temp_data['ChangeLogDirective_changes'] = [] + + def run(self): + self._setup_run() + + # tell ChangeLogDirective we're here, also prevent + # nested .. include calls + if 'ChangeLogDirective_includes' not in self.env.temp_data: + self.env.temp_data['ChangeLogDirective_includes'] = True + p = nodes.paragraph('', '',) + self.state.nested_parse(self.content, 0, p) + del self.env.temp_data['ChangeLogDirective_includes'] + + return [] class ChangeDirective(EnvDirective, Directive): has_content = True - type_ = "change" - parent_cls = ChangeLogDirective - def run(self): content = _parse_content(self.content) p = nodes.paragraph('', '',) sorted_tags = _comma_list(content.get('tags', '')) + declared_version = self.env.temp_data['ChangeLogDirective_version'] + versions = set(_comma_list(content.get("versions", ""))).difference(['']).\ + union([declared_version]) + + # if we don't refer to any other versions and we're in an include, + # skip + if len(versions) == 1 and 'ChangeLogDirective_includes' in self.env.temp_data: + return [] + + def int_ver(ver): + out = [] + for dig in ver.split("."): + try: + out.append(int(dig)) + except ValueError: + out.append(0) + return tuple(out) + rec = { 'tags': set(sorted_tags).difference(['']), 'tickets': set(_comma_list(content.get('tickets', ''))).difference(['']), 'pullreq': set(_comma_list(content.get('pullreq', ''))).difference(['']), 'changeset': set(_comma_list(content.get('changeset', ''))).difference(['']), 'node': p, - 'type': self.type_, + 'type': "change", "title": content.get("title", None), - 'sorted_tags': sorted_tags + 'sorted_tags': sorted_tags, + "versions": versions, + "sorted_versions": list(reversed(sorted(versions, key=int_ver))) } if "declarative" in rec['tags']: rec['tags'].add("orm") self.state.nested_parse(content['text'], 0, p) - self.parent_cls.changes(self.env).append(rec) + ChangeLogDirective.changes(self.env).append(rec) return [] @@ -279,6 +332,7 @@ def make_ticket_link(name, rawtext, text, lineno, inliner, def setup(app): app.add_directive('changelog', ChangeLogDirective) app.add_directive('change', ChangeDirective) + app.add_directive('changelog_imports', ChangeLogImportDirective) app.add_config_value("changelog_sections", [], 'env') app.add_config_value("changelog_inner_tag_sort", [], 'env') app.add_config_value("changelog_render_ticket", diff --git a/doc/build/changelog/changelog_07.rst b/doc/build/changelog/changelog_07.rst index be1dd9891..3a46580db 100644 --- a/doc/build/changelog/changelog_07.rst +++ b/doc/build/changelog/changelog_07.rst @@ -9,6 +9,7 @@ .. change:: :tags: bug, orm :tickets: 2807 + :versions: 0.8.3, 0.9.0 Fixed bug where list instrumentation would fail to represent a setslice of ``[0:0]`` correctly, which in particular could occur @@ -19,6 +20,7 @@ .. change:: :tags: bug, sql :tickets: 2801 + :versions: 0.8.3, 0.9.0 Fixed regression dating back to 0.7.9 whereby the name of a CTE might not be properly quoted if it was referred to in multiple FROM clauses. @@ -26,6 +28,7 @@ .. change:: :tags: mysql, bug :tickets: 2791 + :versions: 0.8.3, 0.9.0 Updates to MySQL reserved words for versions 5.5, 5.6, courtesy Hanno Schlichting. @@ -33,6 +36,7 @@ .. change:: :tags: sql, bug, cte :tickets: 2783 + :versions: 0.8.3, 0.9.0 Fixed bug in common table expression system where if the CTE were used only as an ``alias()`` construct, it would not render using the @@ -41,13 +45,15 @@ .. change:: :tags: bug, sql :tickets: 2784 + :versions: 0.8.3, 0.9.0 Fixed bug in :class:`.CheckConstraint` DDL where the "quote" flag from a :class:`.Column` object would not be propagated. .. change:: - :tags: bug, orm - :tickets: 2699 + :tags: bug, orm + :tickets: 2699 + :versions: 0.8.1 Fixed bug when a query of the form: ``query(SubClass).options(subqueryload(Baseclass.attrname))``, @@ -62,6 +68,7 @@ .. change:: :tags: bug, orm :tickets: 2689 + :versions: 0.8.1 Fixed bug in unit of work whereby a joined-inheritance subclass could insert the row for the "sub" table @@ -71,6 +78,7 @@ .. change:: :tags: feature, postgresql :tickets: 2676 + :versions: 0.8.0 Added support for Postgresql's traditional SUBSTRING function syntax, renders as "SUBSTRING(x FROM y FOR z)" @@ -170,6 +178,7 @@ .. change:: :tags: sqlite, bug :tickets: 2568 + :versions: 0.8.0b2 More adjustment to this SQLite related issue which was released in 0.7.9, to intercept legacy SQLite quoting characters when reflecting @@ -180,6 +189,7 @@ .. change:: :tags: sql, bug :tickets: 2631 + :versions: 0.8.0b2 Fixed bug where using server_onupdate=<FetchedValue|DefaultClause> without passing the "for_update=True" flag would apply the default diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst index 10c2e5189..81140fec0 100644 --- a/doc/build/changelog/changelog_08.rst +++ b/doc/build/changelog/changelog_08.rst @@ -3,12 +3,17 @@ 0.8 Changelog ============== +.. changelog_imports:: + + .. include:: changelog_07.rst + .. changelog:: :version: 0.8.3 .. change:: :tags: bug, orm :tickets: 2818 + :versions: 0.9.0 Fixed bug where :meth:`.Query.exists` failed to work correctly without any WHERE criterion. Courtesy Vladimir Magamedov. @@ -16,6 +21,7 @@ .. change:: :tags: bug, sql :tickets: 2811 + :versions: 0.9.0 Fixed bug where using the ``column_reflect`` event to change the ``.key`` of the incoming :class:`.Column` would prevent primary key constraints, @@ -23,6 +29,7 @@ .. change:: :tags: feature + :versions: 0.9.0 Added a new flag ``system=True`` to :class:`.Column`, which marks the column as a "system" column which is automatically made present @@ -35,16 +42,6 @@ .. change:: :tags: bug, orm - :tickets: 2807 - - Fixed bug where list instrumentation would fail to represent a - setslice of ``[0:0]`` correctly, which in particular could occur - when using ``insert(0, item)`` with the association proxy. Due - to some quirk in Python collections, the issue was much more likely - with Python 3 rather than 2. Also in 0.7.11. - - .. change:: - :tags: bug, orm :tickets: 2779 Backported a change from 0.9 whereby the iteration of a hierarchy @@ -56,6 +53,7 @@ .. change:: :tags: bug, orm :tickets: 2794 + :versions: 0.9.0 Fixed a potential issue in an ordered sequence implementation used by the ORM to iterate mapper hierarchies; under the Jython interpreter @@ -63,15 +61,8 @@ maintained ordering. .. change:: - :tags: bug, sql - :tickets: 2801 - - Fixed regression dating back to 0.7.9 whereby the name of a CTE might - not be properly quoted if it was referred to in multiple FROM clauses. - Also in 0.7.11. - - .. change:: :tags: bug, examples + :versions: 0.9.0 Added "autoincrement=False" to the history table created in the versioning example, as this table shouldn't have autoinc on it @@ -79,28 +70,15 @@ .. change:: :tags: bug, sql + :versions: 0.9.0 The :meth:`.Operators.notin_` operator added in 0.8 now properly produces the negation of the expression "IN" returns when used against an empty collection. .. change:: - :tags: mysql, bug - :tickets: 2791 - - Updates to MySQL reserved words for versions 5.5, 5.6, courtesy - Hanno Schlichting. Also in 0.7.11. - - .. change:: - :tags: sql, bug, cte - :tickets: 2783 - - Fixed bug in common table expression system where if the CTE were - used only as an ``alias()`` construct, it would not render using the - WITH keyword. Also in 0.7.11. - - .. change:: :tags: feature, examples + :versions: 0.9.0 Improved the examples in ``examples/generic_associations``, including that ``discriminator_on_association.py`` makes use of single table @@ -113,6 +91,7 @@ .. change:: :tags: feature, orm, declarative + :versions: 0.9.0 Added a convenience class decorator :func:`.as_declarative`, is a wrapper for :func:`.declarative_base` which allows an existing base @@ -121,21 +100,16 @@ .. change:: :tags: bug, orm :tickets: 2786 + :versions: 0.9.0 Fixed bug in ORM-level event registration where the "raw" or "propagate" flags could potentially be mis-configured in some "unmapped base class" configurations. .. change:: - :tags: bug, sql - :tickets: 2784 - - Fixed bug in :class:`.CheckConstraint` DDL where the "quote" flag from a - :class:`.Column` object would not be propagated. Also in 0.7.11. - - .. change:: :tags: bug, orm :tickets: 2778 + :versions: 0.9.0 A performance fix related to the usage of the :func:`.defer` option when loading mapped entities. The function overhead of applying @@ -151,6 +125,7 @@ .. change:: :tags: bug, sqlite :tickets: 2781 + :versions: 0.9.0 The newly added SQLite DATETIME arguments storage_format and regexp apparently were not fully implemented correctly; while the @@ -160,6 +135,7 @@ .. change:: :tags: bug, sql, postgresql :tickets: 2780 + :versions: 0.9.0 Fixed bug where the expression system relied upon the ``str()`` form of a some expressions when referring to the ``.c`` collection @@ -174,6 +150,7 @@ .. change:: :tags: bug, engine, oracle :tickets: 2776 + :versions: 0.9.0 Dialect.initialize() is not called a second time if an :class:`.Engine` is recreated, due to a disconnect error. This fixes a particular @@ -190,6 +167,7 @@ .. change:: :tags: feature, sql + :versions: 0.9.0 The :func:`.update`, :func:`.insert`, and :func:`.delete` constructs will now interpret ORM entities as target tables to be operated upon, @@ -206,6 +184,7 @@ .. change:: :tags: bug, orm :tickets: 2773 + :versions: 0.9.0 Fixed bug whereby attribute history functions would fail when an object we moved from "persistent" to "pending" @@ -215,6 +194,7 @@ .. change:: :tags: bug, engine, pool :tickets: 2772 + :versions: 0.9.0 Fixed bug where :class:`.QueuePool` would lose the correct checked out count if an existing pooled connection failed to reconnect @@ -227,6 +207,7 @@ .. change:: :tags: bug, mysql :tickets: 2768 + :versions: 0.9.0 Fixed bug when using multi-table UPDATE where a supplemental table is a SELECT with its own bound parameters, where the positioning @@ -236,6 +217,7 @@ .. change:: :tags: bug, sqlite :tickets: 2764 + :versions: 0.9.0 Added :class:`.BIGINT` to the list of type names that can be reflected by the SQLite dialect; courtesy Russell Stuart. @@ -243,6 +225,7 @@ .. change:: :tags: feature, orm, declarative :tickets: 2761 + :versions: 0.9.0 ORM descriptors such as hybrid properties can now be referenced by name in a string argument used with ``order_by``, @@ -252,15 +235,17 @@ .. change:: :tags: feature, firebird :tickets: 2763 + :versions: 0.9.0 Added new flag ``retaining=True`` to the kinterbasdb and fdb dialects. This controls the value of the ``retaining`` flag sent to the ``commit()`` and ``rollback()`` methods of the DBAPI connection. - Due to historical concerns, this flag defaults to ``True``, however - in 0.9 this flag will be defaulted to ``False``. + Due to historical concerns, this flag defaults to ``True`` in 0.8.2, + however in 0.9.0 this flag defaults to ``False``. .. change:: :tags: requirements + :versions: 0.9.0 The Python `mock <https://pypi.python.org/pypi/mock>`_ library is now required in order to run the unit test suite. While part @@ -271,6 +256,7 @@ .. change:: :tags: bug, orm :tickets: 2750 + :versions: 0.9.0 A warning is emitted when trying to flush an object of an inherited class where the polymorphic discriminator has been assigned @@ -279,6 +265,7 @@ .. change:: :tags: bug, postgresql :tickets: 2740 + :versions: 0.9.0 The behavior of :func:`.extract` has been simplified on the Postgresql dialect to no longer inject a hardcoded ``::timestamp`` @@ -291,6 +278,7 @@ .. change:: :tags: bug, firebird :tickets: 2757 + :versions: 0.9.0 Type lookup when reflecting the Firebird types LONG and INT64 has been fixed so that LONG is treated as INTEGER, @@ -301,6 +289,7 @@ .. change:: :tags: bug, postgresql :tickets: 2766 + :versions: 0.9.0 Fixed bug in HSTORE type where keys/values that contained backslashed quotes would not be escaped correctly when @@ -310,6 +299,7 @@ .. change:: :tags: bug, postgresql :tickets: 2767 + :versions: 0.9.0 Fixed bug where the order of columns in a multi-column Postgresql index would be reflected in the wrong order. @@ -318,6 +308,7 @@ .. change:: :tags: bug, sql :tickets: 2746, 2668 + :versions: 0.9.0 Multiple fixes to the correlation behavior of :class:`.Select` constructs, first introduced in 0.8.0: @@ -352,6 +343,7 @@ .. change:: :tags: bug, ext + :versions: 0.9.0 Fixed bug whereby if a composite type were set up with a function instead of a class, the mutable extension @@ -372,6 +364,7 @@ .. change:: :tags: feature, postgresql + :versions: 0.9.0 Support for Postgresql 9.2 range types has been added. Currently, no type translation is provided, so works @@ -380,6 +373,7 @@ .. change:: :tags: bug, examples + :versions: 0.9.0 Fixed an issue with the "versioning" recipe whereby a many-to-one reference could produce a meaningless version for the target, @@ -389,6 +383,7 @@ .. change:: :tags: feature, postgresql :tickets: 2072 + :versions: 0.9.0 Added support for "AUTOCOMMIT" isolation when using the psycopg2 DBAPI. The keyword is available via the ``isolation_level`` @@ -397,6 +392,7 @@ .. change:: :tags: bug, orm :tickets: 2759 + :versions: 0.9.0 Fixed bug in polymorphic SQL generation where multiple joined-inheritance entities against the same base class joined to each other as well @@ -406,6 +402,7 @@ .. change:: :tags: bug, engine :pullreq: 6 + :versions: 0.9.0 Fixed bug where the ``reset_on_return`` argument to various :class:`.Pool` implementations would not be propagated when the pool was regenerated. @@ -414,6 +411,7 @@ .. change:: :tags: bug, orm :tickets: 2754 + :versions: 0.9.0 Fixed bug where sending a composite attribute into :meth:`.Query.order_by` would produce a parenthesized expression not accepted by some databases. @@ -421,6 +419,7 @@ .. change:: :tags: bug, orm :tickets: 2755 + :versions: 0.9.0 Fixed the interaction between composite attributes and the :func:`.aliased` function. Previously, composite attributes @@ -430,6 +429,7 @@ .. change:: :tags: bug, mysql :tickets: 2715 + :versions: 0.9.0 Added another conditional to the ``mysql+gaerdbms`` dialect to detect so-called "development" mode, where we should use the @@ -438,6 +438,7 @@ .. change:: :tags: feature, mysql :tickets: 2704 + :versions: 0.9.0 The ``mysql_length`` parameter used with :class:`.Index` can now be passed as a dictionary of column names/lengths, for use @@ -447,6 +448,7 @@ .. change:: :tags: bug, mssql :tickets: 2747 + :versions: 0.9.0 When querying the information schema on SQL Server 2000, removed a CAST call that was added in 0.8.1 to help with driver issues, @@ -456,6 +458,7 @@ .. change:: :tags: bug, mysql :tickets: 2721 + :versions: 0.9.0 The ``deferrable`` keyword argument on :class:`.ForeignKey` and :class:`.ForeignKeyConstraint` will not render the ``DEFERRABLE`` keyword @@ -467,6 +470,7 @@ .. change:: :tags: bug, ext, orm :tickets: 2730 + :versions: 0.9.0 Fixed bug where :class:`.MutableDict` didn't report a change event when ``clear()`` was called. @@ -474,6 +478,7 @@ .. change:: :tags: bug, sql :tickets: 2738 + :versions: 0.9.0 Fixed bug whereby joining a select() of a table "A" with multiple foreign key paths to a table "B", to that table "B", would fail @@ -484,6 +489,7 @@ .. change:: :tags: bug, sql, reflection :tickets: 2728 + :versions: 0.9.0 Fixed bug whereby using :meth:`.MetaData.reflect` across a remote schema as well as a local schema could produce wrong results @@ -492,6 +498,7 @@ .. change:: :tags: bug, sql :tickets: 2726 + :versions: 0.9.0 Removed the "not implemented" ``__iter__()`` call from the base :class:`.ColumnOperators` class, while this was introduced @@ -832,30 +839,6 @@ (obviously assuming the state of the superclass). .. change:: - :tags: bug, orm - :tickets: 2699 - - Fixed bug when a query of the form: - ``query(SubClass).options(subqueryload(Baseclass.attrname))``, - where ``SubClass`` is a joined inh of ``BaseClass``, - would fail to apply the ``JOIN`` inside the subquery - on the attribute load, producing a cartesian product. - The populated results still tended to be correct as additional - rows are just ignored, so this issue may be present as a - performance degradation in applications that are - otherwise working correctly. Also in 0.7.11. - - .. change:: - :tags: bug, orm - :tickets: 2689 - - Fixed bug in unit of work whereby a joined-inheritance - subclass could insert the row for the "sub" table - before the parent table, if the two tables had no - ForeignKey constraints set up between them. - Also in 0.7.11. - - .. change:: :tags: bug, mssql :pullreq: 47 @@ -910,15 +893,6 @@ * :ref:`correlation_context_specific` .. change:: - :tags: feature, postgresql - :tickets: 2676 - - Added support for Postgresql's traditional SUBSTRING - function syntax, renders as "SUBSTRING(x FROM y FOR z)" - when regular ``func.substring()`` is used. - Also in 0.7.11. Courtesy Gunnlaugur Þór Briem. - - .. change:: :tags: feature, orm :tickets: 2675 @@ -1305,16 +1279,6 @@ :released: December 14, 2012 .. change:: - :tags: sqlite, bug - :tickets: 2568 - - More adjustment to this SQLite related issue which was released in - 0.7.9, to intercept legacy SQLite quoting characters when reflecting - foreign keys. In addition to intercepting double quotes, other - quoting characters such as brackets, backticks, and single quotes - are now also intercepted. Also in 0.7.10. - - .. change:: :tags: orm, bug :tickets: 2635 @@ -1385,19 +1349,6 @@ .. change:: :tags: sql, bug - :tickets: 2631 - - Fixed bug where using server_onupdate=<FetchedValue|DefaultClause> - without passing the "for_update=True" flag would apply the default - object to the server_default, blowing away whatever was there. - The explicit for_update=True argument shouldn't be needed with this usage - (especially since the documentation shows an example without it being - used) so it is now arranged internally using a copy of the given default - object, if the flag isn't set to what corresponds to that argument. - Also in 0.7.10. - - .. change:: - :tags: sql, bug :tickets: 2610 Fixed bug whereby using a label_length on dialect that was smaller diff --git a/doc/build/changelog/changelog_09.rst b/doc/build/changelog/changelog_09.rst index 27cddd9bf..b27e282ac 100644 --- a/doc/build/changelog/changelog_09.rst +++ b/doc/build/changelog/changelog_09.rst @@ -3,25 +3,14 @@ 0.9 Changelog ============== -.. changelog:: - :version: 0.9.0 +.. changelog_imports:: - .. change:: - :tags: bug, orm - :tickets: 2818 + .. include:: changelog_08.rst - Fixed bug where :meth:`.Query.exists` failed to work correctly - without any WHERE criterion. Courtesy Vladimir Magamedov. - Also in 0.8.3. + .. include:: changelog_07.rst - .. change:: - :tags: bug, sql - :tickets: 2811 - - Fixed bug where using the ``column_reflect`` event to change the ``.key`` - of the incoming :class:`.Column` would prevent primary key constraints, - indexes, and foreign key constraints from being correctly reflected. - Also in 0.8.3. +.. changelog:: + :version: 0.9.0 .. change:: :tags: bug, sql @@ -79,65 +68,12 @@ :attr:`.ResultProxy.returned_defaults`. .. change:: - :tags: feature - - Added a new flag ``system=True`` to :class:`.Column`, which marks - the column as a "system" column which is automatically made present - by the database (such as Postgresql ``oid`` or ``xmin``). The - column will be omitted from the ``CREATE TABLE`` statement but will - otherwise be available for querying. In addition, the - :class:`.CreateColumn` construct can be appled to a custom - compilation rule which allows skipping of columns, by producing - a rule that returns ``None``. Also in 0.8.3. - - .. change:: - :tags: bug, orm - :tickets: 2807 - - Fixed bug where list instrumentation would fail to represent a - setslice of ``[0:0]`` correctly, which in particular could occur - when using ``insert(0, item)`` with the association proxy. Due - to some quirk in Python collections, the issue was much more likely - with Python 3 rather than 2. Also in 0.8.3, 0.7.11. - - .. change:: - :tags: bug, orm - :tickets: 2794 - - Fixed a potential issue in an ordered sequence implementation used - by the ORM to iterate mapper hierarchies; under the Jython interpreter - this implementation wasn't ordered, even though cPython and Pypy - maintained ordering. Also in 0.8.3. - - .. change:: - :tags: bug, sql - :tickets: 2801 - - Fixed regression dating back to 0.7.9 whereby the name of a CTE might - not be properly quoted if it was referred to in multiple FROM clauses. - Also in 0.8.3, 0.7.11. - - .. change:: :tags: bug, mysql Improved support for the cymysql driver, supporting version 0.6.5, courtesy Hajime Nakagami. .. change:: - :tags: bug, examples - - Added "autoincrement=False" to the history table created in the - versioning example, as this table shouldn't have autoinc on it - in any case, courtesy Patrick Schmid. Also in 0.8.3. - - .. change:: - :tags: bug, sql - - The :meth:`.Operators.notin_` operator added in 0.8 now properly - produces the negation of the expression "IN" returns - when used against an empty collection. Also in 0.8.3. - - .. change:: :tags: general A large refactoring of packages has reorganized @@ -160,20 +96,6 @@ using the ``info`` argument of :class:`.Session` or :class:`.sessionmaker`. - .. change:: - :tags: mysql, bug - :tickets: 2791 - - Updates to MySQL reserved words for versions 5.5, 5.6, courtesy - Hanno Schlichting. Also in 0.8.3, 0.7.11. - - .. change:: - :tags: sql, bug, cte - :tickets: 2783 - - Fixed bug in common table expression system where if the CTE were - used only as an ``alias()`` construct, it would not render using the - WITH keyword. Also in 0.8.3, 0.7.11. .. change:: :tags: feature, general, py3k @@ -194,88 +116,6 @@ :ref:`feature_2268` .. change:: - :tags: feature, examples - - Improved the examples in ``examples/generic_associations``, including - that ``discriminator_on_association.py`` makes use of single table - inheritance do the work with the "discriminator". Also - added a true "generic foreign key" example, which works similarly - to other popular frameworks in that it uses an open-ended integer - to point to any other table, foregoing traditional referential - integrity. While we don't recommend this pattern, information wants - to be free. Also in 0.8.3. - - .. change:: - :tags: feature, orm, declarative - - Added a convenience class decorator :func:`.as_declarative`, is - a wrapper for :func:`.declarative_base` which allows an existing base - class to be applied using a nifty class-decorated approach. Also - in 0.8.3. - - .. change:: - :tags: bug, orm - :tickets: 2786 - - Fixed bug in ORM-level event registration where the "raw" or - "propagate" flags could potentially be mis-configured in some - "unmapped base class" configurations. Also in 0.8.3. - - .. change:: - :tags: bug, sql - :tickets: 2784 - - Fixed bug in :class:`.CheckConstraint` DDL where the "quote" flag from a - :class:`.Column` object would not be propagated. Also in 0.8.3, 0.7.11. - - .. change:: - :tags: bug, orm - :tickets: 2778 - - A performance fix related to the usage of the :func:`.defer` option - when loading mapped entities. The function overhead of applying - a per-object deferred callable to an instance at load time was - significantly higher than that of just loading the data from the row - (note that ``defer()`` is meant to reduce DB/network overhead, not - necessarily function call count); the function call overhead is now - less than that of loading data from the column in all cases. There - is also a reduction in the number of "lazy callable" objects created - per load from N (total deferred values in the result) to 1 (total - number of deferred cols). Also in 0.8.3. - - .. change:: - :tags: bug, sqlite - :tickets: 2781 - - The newly added SQLite DATETIME arguments storage_format and - regexp apparently were not fully implemented correctly; while the - arguments were accepted, in practice they would have no effect; - this has been fixed. Also in 0.8.3. - - .. change:: - :tags: bug, sql, postgresql - :tickets: 2780 - - Fixed bug where the expression system relied upon the ``str()`` - form of a some expressions when referring to the ``.c`` collection - on a ``select()`` construct, but the ``str()`` form isn't available - since the element relies on dialect-specific compilation constructs, - notably the ``__getitem__()`` operator as used with a Postgresql - ``ARRAY`` element. The fix also adds a new exception class - :class:`.UnsupportedCompilationError` which is raised in those cases - where a compiler is asked to compile something it doesn't know - how to. Also in 0.8.3. - - .. change:: - :tags: bug, engine, oracle - :tickets: 2776 - - Dialect.initialize() is not called a second time if an :class:`.Engine` - is recreated, due to a disconnect error. This fixes a particular - issue in the Oracle 8 dialect, but in general the dialect.initialize() - phase should only be once per dialect. Also in 0.8.3. - - .. change:: :tags: feature, orm :tickets: 2789 @@ -315,66 +155,6 @@ :ref:`feature_722` .. change:: - :tags: feature, sql - - The :func:`.update`, :func:`.insert`, and :func:`.delete` constructs - will now interpret ORM entities as target tables to be operated upon, - e.g.:: - - from sqlalchemy import insert, update, delete - - ins = insert(SomeMappedClass).values(x=5) - - del_ = delete(SomeMappedClass).where(SomeMappedClass.id == 5) - - upd = update(SomeMappedClass).where(SomeMappedClass.id == 5).values(name='ed') - - Also in 0.8.3. - - .. change:: - :tags: bug, orm - :tickets: 2773 - - Fixed bug whereby attribute history functions would fail - when an object we moved from "persistent" to "pending" - using the :func:`.make_transient` function, for operations - involving collection-based backrefs. Also in 0.8.3. - - .. change:: - :tags: bug, engine, pool - :tickets: 2772 - - Fixed bug where :class:`.QueuePool` would lose the correct - checked out count if an existing pooled connection failed to reconnect - after an invalidate or recycle event. Also in 0.8.3. - - .. change:: - :tags: bug, mysql - :tickets: 2768 - - Fixed bug when using multi-table UPDATE where a supplemental - table is a SELECT with its own bound parameters, where the positioning - of the bound parameters would be reversed versus the statement - itself when using MySQL's special syntax. Also in 0.8.2. - - .. change:: - :tags: bug, sqlite - :tickets: 2764 - - Added :class:`.BIGINT` to the list of type names that can be - reflected by the SQLite dialect; courtesy Russell Stuart. - Also in 0.8.2. - - .. change:: - :tags: feature, orm, declarative - :tickets: 2761 - - ORM descriptors such as hybrid properties can now be referenced - by name in a string argument used with ``order_by``, - ``primaryjoin``, or similar in :func:`.relationship`, - in addition to column-bound attributes. Also in 0.8.2. - - .. change:: :tags: feature, engine :tickets: 2770 @@ -385,118 +165,6 @@ * :meth:`.ConnectionEvents.set_engine_execution_options` .. change:: - :tags: feature, firebird - :tickets: 2763 - - Added new flag ``retaining=False`` to the kinterbasdb and fdb dialects. - This controls the value of the ``retaining`` flag sent to the - ``commit()`` and ``rollback()`` methods of the DBAPI connection. - Defaults to False. Also in 0.8.2, where it defaults to True. - - .. change:: - :tags: requirements - - The Python `mock <https://pypi.python.org/pypi/mock>`_ library - is now required in order to run the unit test suite. While part - of the standard library as of Python 3.3, previous Python installations - will need to install this in order to run unit tests or to - use the ``sqlalchemy.testing`` package for external dialects. - This applies to 0.8.2 as well. - - .. change:: - :tags: bug, orm - :tickets: 2750 - - A warning is emitted when trying to flush an object of an inherited - mapped class where the polymorphic discriminator has been assigned - to a value that is invalid for the class. Also in 0.8.2. - - .. change:: - :tags: bug, postgresql - :tickets: 2740 - - The behavior of :func:`.extract` has been simplified on the - Postgresql dialect to no longer inject a hardcoded ``::timestamp`` - or similar cast into the given expression, as this interfered - with types such as timezone-aware datetimes, but also - does not appear to be at all necessary with modern versions - of psycopg2. Also in 0.8.2. - - .. change:: - :tags: bug, firebird - :tickets: 2757 - - Type lookup when reflecting the Firebird types LONG and - INT64 has been fixed so that LONG is treated as INTEGER, - INT64 treated as BIGINT, unless the type has a "precision" - in which case it's treated as NUMERIC. Patch courtesy - Russell Stuart. Also in 0.8.2. - - .. change:: - :tags: bug, postgresql - :tickets: 2766 - - Fixed bug in HSTORE type where keys/values that contained - backslashed quotes would not be escaped correctly when - using the "non native" (i.e. non-psycopg2) means - of translating HSTORE data. Patch courtesy Ryan Kelly. - Also in 0.8.2. - - .. change:: - :tags: bug, postgresql - :tickets: 2767 - - Fixed bug where the order of columns in a multi-column - Postgresql index would be reflected in the wrong order. - Courtesy Roman Podolyaka. Also in 0.8.2. - - .. change:: - :tags: bug, sql - :tickets: 2746, 2668 - - Multiple fixes to the correlation behavior of - :class:`.Select` constructs, first introduced in 0.8.0: - - * To satisfy the use case where FROM entries should be - correlated outwards to a SELECT that encloses another, - which then encloses this one, correlation now works - across multiple levels when explicit correlation is - established via :meth:`.Select.correlate`, provided - that the target select is somewhere along the chain - contained by a WHERE/ORDER BY/columns clause, not - just nested FROM clauses. This makes - :meth:`.Select.correlate` act more compatibly to - that of 0.7 again while still maintaining the new - "smart" correlation. - - * When explicit correlation is not used, the usual - "implicit" correlation limits its behavior to just - the immediate enclosing SELECT, to maximize compatibility - with 0.7 applications, and also prevents correlation - across nested FROMs in this case, maintaining compatibility - with 0.8.0/0.8.1. - - * The :meth:`.Select.correlate_except` method was not - preventing the given FROM clauses from correlation in - all cases, and also would cause FROM clauses to be incorrectly - omitted entirely (more like what 0.7 would do), - this has been fixed. - - * Calling `select.correlate_except(None)` will enter - all FROM clauses into correlation as would be expected. - - Also in 0.8.2. - - .. change:: - :tags: bug, ext - - Fixed bug whereby if a composite type were set up - with a function instead of a class, the mutable extension - would trip up when it tried to check that column - for being a :class:`.MutableComposite` (which it isn't). - Courtesy asldevi. Also in 0.8.2. - - .. change:: :tags: bug, sql :tickets: 1765 @@ -531,66 +199,6 @@ about producing an ``IS`` expression, or a plain equality expression with a bound parameter. - - .. change:: - :tags: feature, postgresql - - Support for Postgresql 9.2 range types has been added. - Currently, no type translation is provided, so works - directly with strings or psycopg2 2.5 range extension types - at the moment. Patch courtesy Chris Withers. - - .. change:: - :tags: bug, examples - - Fixed an issue with the "versioning" recipe whereby a many-to-one - reference could produce a meaningless version for the target, - even though it was not changed, when backrefs were present. - Patch courtesy Matt Chisholm. Also in 0.8.2. - - .. change:: - :tags: feature, postgresql - :tickets: 2072 - - Added support for "AUTOCOMMIT" isolation when using the psycopg2 - DBAPI. The keyword is available via the ``isolation_level`` - execution option. Patch courtesy Roman Podolyaka. - Also in 0.8.2. - - .. change:: - :tags: bug, orm - :tickets: 2759 - - Fixed bug in polymorphic SQL generation where multiple joined-inheritance - entities against the same base class joined to each other as well - would not track columns on the base table independently of each other if - the string of joins were more than two entities long. Also in 0.8.2. - - .. change:: - :tags: bug, engine - :pullreq: 6 - - Fixed bug where the ``reset_on_return`` argument to various :class:`.Pool` - implementations would not be propagated when the pool was regenerated. - Courtesy Eevee. Also in 0.8.2. - - .. change:: - :tags: bug, orm - :tickets: 2754 - - Fixed bug where sending a composite attribute into :meth:`.Query.order_by` - would produce a parenthesized expression not accepted by some databases. - Also in 0.8.2. - - .. change:: - :tags: bug, orm - :tickets: 2755 - - Fixed the interaction between composite attributes and - the :func:`.aliased` function. Previously, composite attributes - wouldn't work correctly in comparison operations when aliasing - was applied. Also in 0.8.2. - .. change:: :tags: feature, sql :tickets: 1443 @@ -608,24 +216,6 @@ "debug" logging. .. change:: - :tags: bug, mysql - :tickets: 2715 - - Added another conditional to the ``mysql+gaerdbms`` dialect to - detect so-called "development" mode, where we should use the - ``rdbms_mysqldb`` DBAPI. Patch courtesy Brett Slatkin. - Also in 0.8.2. - - .. change:: - :tags: feature, mysql - :tickets: 2704 - - The ``mysql_length`` parameter used with :class:`.Index` can now - be passed as a dictionary of column names/lengths, for use - with composite indexes. Big thanks to Roman Podolyaka for the - patch. Also in 0.8.2. - - .. change:: :tags: bug, orm, associationproxy :tickets: 2751 @@ -712,68 +302,6 @@ are passed correctly. .. change:: - :tags: bug, mssql - :tickets: 2747 - - When querying the information schema on SQL Server 2000, removed - a CAST call that was added in 0.8.1 to help with driver issues, - which apparently is not compatible on 2000. - The CAST remains in place for SQL Server 2005 and greater. - Also in 0.8.2. - - .. change:: - :tags: bug, mysql - :tickets: 2721 - - The ``deferrable`` keyword argument on :class:`.ForeignKey` and - :class:`.ForeignKeyConstraint` will not render the ``DEFERRABLE`` keyword - on the MySQL dialect. For a long time we left this in place because - a non-deferrable foreign key would act very differently than a deferrable - one, but some environments just disable FKs on MySQL, so we'll be less - opinionated here. Also in 0.8.2. - - .. change:: - :tags: bug, ext, orm - :tickets: 2730 - - Fixed bug where :class:`.MutableDict` didn't report a change event - when ``clear()`` was called. Also in 0.8.2 - - .. change:: - :tags: bug, sql - :tickets: 2738 - - Fixed bug whereby joining a select() of a table "A" with multiple - foreign key paths to a table "B", to that table "B", would fail - to produce the "ambiguous join condition" error that would be - reported if you join table "A" directly to "B"; it would instead - produce a join condition with multiple criteria. Also in 0.8.2. - - .. change:: - :tags: bug, sql, reflection - :tickets: 2728 - - Fixed bug whereby using :meth:`.MetaData.reflect` across a remote - schema as well as a local schema could produce wrong results - in the case where both schemas had a table of the same name. - Also in 0.8.2. - - .. change:: - :tags: bug, sql - :tickets: 2726 - - Removed the "not implemented" ``__iter__()`` call from the base - :class:`.ColumnOperators` class, while this was introduced - in 0.8.0 to prevent an endless, memory-growing loop when one also - implements a ``__getitem__()`` method on a custom - operator and then calls erroneously ``list()`` on that object, - it had the effect of causing column elements to report that they - were in fact iterable types which then throw an error when you try - to iterate. There's no real way to have both sides here so we - stick with Python best practices. Careful with implementing - ``__getitem__()`` on your custom operators! Also in 0.8.2. - - .. change:: :tags: feature, sql :tickets: 1068 |