summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-09-17 15:03:15 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2013-09-17 15:03:15 -0500
commit9910256a512da1aae0ef7d3ab580d76b2fcf0ff2 (patch)
tree8437686cb67d2ad16feb60c489dbdeab1c1d59d7
parent5a6895471fb6bf9afe9bdf017f1fa2c6246ae303 (diff)
downloadsqlalchemy-9910256a512da1aae0ef7d3ab580d76b2fcf0ff2.tar.gz
render "backports"/ "forward ports" automatically, only write out
changelog once
-rw-r--r--doc/build/builder/changelog.py88
-rw-r--r--doc/build/changelog/changelog_07.rst14
-rw-r--r--doc/build/changelog/changelog_08.rst147
-rw-r--r--doc/build/changelog/changelog_09.rst482
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