Mike Bayer [Sat, 23 Nov 2013 01:04:19 +0000 (20:04 -0500)]
- The precision used when coercing a returned floating point value to
Python ``Decimal`` via string is now configurable. The
flag ``decimal_return_scale`` is now supported by all :class:`.Numeric`
and :class:`.Float` types, which will ensure this many digits are taken
from the native floating point value when it is converted to string.
If not present, the type will make use of the value of ``.scale``, if
the type supports this setting and it is non-None. Otherwise the original
default length of 10 is used. [ticket:2867]
Mike Bayer [Fri, 22 Nov 2013 23:35:36 +0000 (18:35 -0500)]
- Fixed bug where SQL statement would be improperly ASCII-encoded
when a pre-DBAPI :class:`.StatementError` were raised within
:meth:`.Connection.execute`, causing encoding errors for
non-ASCII statements. The stringification now remains within
Python unicode thus avoiding encoding errors. [ticket:2871]
Mike Bayer [Fri, 22 Nov 2013 22:56:35 +0000 (17:56 -0500)]
Fixed bug where Oracle ``VARCHAR`` types given with no length
(e.g. for a ``CAST`` or similar) would incorrectly render ``None CHAR``
or similar. [ticket:2870]
Mike Bayer [Thu, 21 Nov 2013 18:30:32 +0000 (13:30 -0500)]
- Fixed bug which prevented the ``serializer`` extension from working
correctly with table or column names that contain non-ASCII
characters. [ticket:2869]
Mike Bayer [Thu, 21 Nov 2013 18:16:49 +0000 (13:16 -0500)]
- Fixed a regression caused by :ticket:`2812` where the repr() for
table and column names would fail if the name contained non-ascii
characters. [ticket:2868]
Mike Bayer [Wed, 20 Nov 2013 00:29:18 +0000 (19:29 -0500)]
- The :class:`.RowProxy` object is now sortable in Python as a regular
tuple is; this is accomplished via ensuring tuple() conversion on
both sides within the ``__eq__()`` method as well as
the addition of a ``__lt__()`` method. [ticket:2848]
Mike Bayer [Wed, 20 Nov 2013 00:16:26 +0000 (19:16 -0500)]
- The ``viewonly`` flag on :func:`.relationship` will now prevent
attribute history from being written on behalf of the target attribute.
This has the effect of the object not being written to the
Session.dirty list if it is mutated. Previously, the object would
be present in Session.dirty, but no change would take place on behalf
of the modified attribute during flush. The attribute still emits
events such as backref events and user-defined events and will still
receive mutations from backrefs. [ticket:2833]
Mike Bayer [Sun, 10 Nov 2013 07:55:06 +0000 (02:55 -0500)]
- tutorial updates
- emphasis on not using a custom contructor by default, making sure it's clear that
you *can* use one
- other separation of narrative from special notes using sidebars
Mike Bayer [Sun, 10 Nov 2013 00:42:01 +0000 (19:42 -0500)]
- add a new sphinx extension "viewsource". takes advantage of part of the viewcode extension
to allow ad-hoc display of the source of any file, as well as a "directory listing" structure.
- reorganize examples/ to take advantage of new extension. in particular, keep moving all
the descriptive text for files etc. into module docstrings, taking more advantage of
self-documentation.
Mike Bayer [Fri, 8 Nov 2013 01:35:24 +0000 (20:35 -0500)]
- Fixed bug which prevented history_meta recipe from working with
joined inheritance schemes more than one level deep.
- don't need to use _lib.py here anymore now that these features are in
sqlalchemy.testing
Mike Bayer [Fri, 1 Nov 2013 19:24:43 +0000 (15:24 -0400)]
- Fixed a regression introduced by the join rewriting feature of
:ticket:`2369` and :ticket:`2587` where a nested join with one side
already an aliased select would fail to translate the ON clause on the
outside correctly; in the ORM this could be seen when using a
SELECT statement as a "secondary" table. [ticket:2858]
Mike Bayer [Thu, 31 Oct 2013 19:29:45 +0000 (15:29 -0400)]
- add a section re: using column_reflect for mapping, link to it from the "naming columns distinctly" and "column_prefix" sections since this is often what ppl are looking for. [ticket:2856] is related.
Mike Bayer [Wed, 30 Oct 2013 14:34:31 +0000 (10:34 -0400)]
- Fixed a regression introduced by :ticket:`2818` where the EXISTS
query being generated would produce a "columns being replaced"
warning for a statement with two same-named columns,
as the internal SELECT wouldn't have use_labels set.
Mike Bayer [Sun, 27 Oct 2013 22:14:44 +0000 (18:14 -0400)]
- Fixed bug where index reflection would mis-interpret indkey values
when using the pypostgresql adapter, which returns these values
as lists vs. psycopg2's return type of string.
[ticket:2855]
Mike Bayer [Fri, 25 Oct 2013 23:11:53 +0000 (19:11 -0400)]
- Fixed bug where Oracle table reflection using synonyms would fail
if the synonym and the table were in different remote schemas.
Patch to fix courtesy Kyle Derr. [ticket:2853]
Mike Bayer [Fri, 25 Oct 2013 21:56:53 +0000 (17:56 -0400)]
- catch the metadata on ScalarTest.test_scalar_proxy, this has been leaving itself
around for a long time
- association proxy now returns None for proxied scalar that is also None, rather
than raising AttributeError. [ticket:2810]
Mike Bayer [Fri, 25 Oct 2013 21:18:40 +0000 (17:18 -0400)]
- Fix and test parsing of MySQL foreign key options within reflection;
this complements the work in :ticket:`2183` where we begin to support
reflection of foreign key options such as ON UPDATE/ON DELETE
cascade. [ticket:2839]
Mike Bayer [Fri, 25 Oct 2013 17:13:24 +0000 (13:13 -0400)]
- :func:`.attributes.get_history()` when used with a scalar column-mapped
attribute will now honor the "passive" flag
passed to it; as this defaults to ``PASSIVE_OFF``, the function will
by default query the database if the value is not present.
This is a behavioral change vs. 0.8. [ticket:2787]
- Added new method :meth:`.AttributeState.load_history`, works like
:attr:`.AttributeState.history` but also fires loader callables.
Mike Bayer [Wed, 23 Oct 2013 21:41:55 +0000 (17:41 -0400)]
An overhaul of expression handling for special symbols particularly
with conjunctions, e.g.
``None`` :func:`.expression.null` :func:`.expression.true`
:func:`.expression.false`, including consistency in rendering NULL
in conjunctions, "short-circuiting" of :func:`.and_` and :func:`.or_`
expressions which contain boolean constants, and rendering of
boolean constants and expressions as compared to "1" or "0" for backends
that don't feature ``true``/``false`` constants. [ticket:2804]
Mike Bayer [Tue, 22 Oct 2013 03:28:19 +0000 (23:28 -0400)]
- just comment out this test, we may have to figure out if the whole
"serializer" can just be ditched, or if somehow these deterministic issues
can be fixed (everyone implements __reduce__ maybe?)
Mike Bayer [Mon, 21 Oct 2013 20:49:46 +0000 (16:49 -0400)]
- A :func:`.bindparam` construct with a "null" type (e.g. no type
specified) is now copied when used in a typed expression, and the
new copy is assigned the actual type of the compared column. Previously,
this logic would occur on the given :func:`.bindparam` in place.
Additionally, a similar process now occurs for :func:`.bindparam` constructs
passed to :meth:`.ValuesBase.values` for a :class:`.Insert` or
:class:`.Update` construct. [ticket:2850]