Mike Bayer [Tue, 29 Dec 2009 02:35:42 +0000 (02:35 +0000)]
- The extract() function, which was slightly improved in
0.5.7, needed a lot more work to generate the correct
typecast (the typecasts appear to be necessary in PG's
EXTRACT quite a lot of the time). The typecast is
now generated using a rule dictionary based
on PG's documentation for date/time/interval arithmetic.
It also accepts text() constructs again, which was broken
in 0.5.7. [ticket:1647]
Mike Bayer [Sat, 26 Dec 2009 22:34:28 +0000 (22:34 +0000)]
- The "table_names" dialect function, used by MetaData
.reflect(), omits Oracle "index overflow tables", a system
table generated by Oracle when "index only tables"
with overflow are used. These tables aren't accessible
via SQL and can't be reflected. [ticket:1637]
Mike Bayer [Mon, 14 Dec 2009 01:34:06 +0000 (01:34 +0000)]
- merged r6553 from trunk
- Session.merge() now properly overwrites a many-to-one or
uselist=False attribute to None if the attribute
is also None in the given object to be merged.
Mike Bayer [Tue, 8 Dec 2009 03:10:59 +0000 (03:10 +0000)]
- merge of trunk r6544
- Session.execute() now locates table- and
mapper-specific binds based on a passed
in expression which is an insert()/update()/delete()
construct. [ticket:1054]
Mike Bayer [Tue, 8 Dec 2009 01:54:08 +0000 (01:54 +0000)]
- backport of r6540
- The "use get" behavior of many-to-one relations, i.e. that a
lazy load will fallback to the possibly cached query.get()
value, now works across join conditions where the two compared
types are not exactly the same class, but share the same
"affinity" - i.e. Integer and SmallInteger. Also allows
combinations of reflected and non-reflected types to work
with 0.5 style type reflection, such as PGText/Text (note 0.6
reflects types as their generic versions). [ticket:1556]
- types now support an "affinity comparison" operation, i.e.
that an Integer/SmallInteger are "compatible", or
a Text/String, PickleType/Binary, etc. Part of
[ticket:1556].
Mike Bayer [Sun, 15 Nov 2009 20:11:42 +0000 (20:11 +0000)]
- Fixed the behavior of extract() to apply operator
precedence rules to the "::" operator when applying
the "timestamp" cast - ensures proper parenthesization.
[ticket:1611]
Mike Bayer [Wed, 4 Nov 2009 13:28:28 +0000 (13:28 +0000)]
- Fixed bug where Query would crash if a join() with no clear
"left" side were called when a non-mapped column entity
appeared in the columns list. [ticket:1602]
Mike Bayer [Sun, 25 Oct 2009 01:40:17 +0000 (01:40 +0000)]
- Fixed a slight inaccuracy in the sharding example.
Comparing equivalence of columns in the ORM is best
accomplished using col1.shares_lineage(col2).
[ticket:1491]
Mike Bayer [Fri, 23 Oct 2009 19:46:36 +0000 (19:46 +0000)]
- Mutable collection passed to the "extension" attribute
of relation(), column_property() etc. will not be mutated
or shared among multiple instrumentation calls, preventing
duplicate extensions, such as backref populators,
from being inserted into the list.
[ticket:1585]
Mike Bayer [Tue, 20 Oct 2009 16:56:15 +0000 (16:56 +0000)]
- Repeat expressions in the columns clause of a select
are deduped based on the identity of each clause element,
not the actual string. This allows positional
elements to render correctly even if they all render
identically, such as "qmark" style bind parameters.
[ticket:1574]
Mike Bayer [Thu, 15 Oct 2009 20:52:30 +0000 (20:52 +0000)]
- A column can be added to a joined-table declarative
superclass after the class has been constructed
(i.e. via class-level attribute assignment), and
the column will be propagated down to
subclasses. [ticket:1570] This is the reverse
situation as that of [ticket:1523], fixed in 0.5.6.
Mike Bayer [Wed, 30 Sep 2009 20:57:40 +0000 (20:57 +0000)]
- Added support for reflecting the DOUBLE PRECISION type,
via a new postgres.PGDoublePrecision object.
This is postgresql.DOUBLE_PRECISION in 0.6.
[ticket:1085]
Mike Bayer [Wed, 16 Sep 2009 20:35:27 +0000 (20:35 +0000)]
- move the tests to test_query
- the option needs the original mapper to pull the prop from, in the case the eagerload is *from* a joined-table subclass mapper.
had to change the contract of PropertyOption to pass
an additional list "mappers" which contains the actual parent mappers.
Mike Bayer [Fri, 28 Aug 2009 20:29:39 +0000 (20:29 +0000)]
- Fixed an obscure issue whereby a joined-table subclass
with a self-referential eager load on the base class
would populate the related object's "subclass" table with
data from the "subclass" table of the parent.
[ticket:1485]
Mike Bayer [Sun, 2 Aug 2009 18:13:07 +0000 (18:13 +0000)]
- UPDATE and DELETE do not support ORDER BY, LIMIT, OFFSET,
etc. in standard SQL. Query.update() and Query.delete()
now raise an exception if any of limit(), offset(),
order_by(), group_by(), or distinct() have been
called. [ticket:1487]
Mike Bayer [Sun, 2 Aug 2009 17:51:33 +0000 (17:51 +0000)]
- Simplified the sweep of instrumentation in strategies._register_attribute
- Improved support for MapperProperty objects overriding
that of an inherited mapper for non-concrete
inheritance setups - attribute extensions won't randomly
collide with each other. [ticket:1488]
- Added AttributeExtension to sqlalchemy.orm.__all__
Mike Bayer [Sun, 26 Jul 2009 01:46:41 +0000 (01:46 +0000)]
- Squeezed a few more unnecessary "lazy loads" out of
relation(). When a collection is mutated, many-to-one
backrefs on the other side will not fire off to load
the "old" value, unless "single_parent=True" is set.
A direct assignment of a many-to-one still loads
the "old" value in order to update backref collections
on that value, which may be present in the session
already, thus maintaining the 0.5 behavioral contract.
[ticket:1483]
Mike Bayer [Sat, 25 Jul 2009 21:26:28 +0000 (21:26 +0000)]
- Fixed bug whereby a load/refresh of joined table
inheritance attributes which were based on
column_property() or similar would fail to evaluate.
[ticket:1480]
Mike Bayer [Sat, 25 Jul 2009 20:27:33 +0000 (20:27 +0000)]
- fixed the test for FalseDiscriminator to use Boolean for picky postgresql
- added Query.enable_assertions(False) as a mediocre solution for [ticket:1424].
updated the recipe at http://www.sqlalchemy.org/trac/wiki/UsageRecipes/PreFilteredQuery to
reflect.
- moved most default Query state to be class level variables to start. the dicts could
go as well but being overly careful to not place mutables there for the moment.
- a visit by the "dunder-private method names aren't cool" police
- continued undisciplined pep-8ness
Mike Bayer [Sat, 25 Jul 2009 19:34:02 +0000 (19:34 +0000)]
- Unary expressions such as DISTINCT propagate their
type handling to result sets, allowing conversions like
unicode and such to take place. [ticket:1420]
Mike Bayer [Sat, 25 Jul 2009 17:08:38 +0000 (17:08 +0000)]
- The collection proxies produced by associationproxy are now
pickleable. A user-defined proxy_factory however
is still not pickleable unless it defines __getstate__
and __setstate__. [ticket:1446]
Mike Bayer [Tue, 21 Jul 2009 21:47:03 +0000 (21:47 +0000)]
- relations() now have greater ability to be "overridden",
meaning a subclass that explicitly specifies a relation()
overriding that of the parent class will be honored
during a flush. This is currently to support
many-to-many relations from concrete inheritance setups.
Outside of that use case, YMMV. [ticket:1477]
Mike Bayer [Fri, 17 Jul 2009 15:10:54 +0000 (15:10 +0000)]
- Fixed a bug in extract() introduced in 0.5.4 whereby
the string "field" argument was getting treated as a
ClauseElement, causing various errors within more
complex SQL transformations.
Mike Bayer [Fri, 10 Jul 2009 20:01:56 +0000 (20:01 +0000)]
- Fixed potential memory leak whereby previously pickled objects
placed back in a session would not be fully garbage collected
unless the Session were explicitly closed out.
Mike Bayer [Tue, 7 Jul 2009 17:17:22 +0000 (17:17 +0000)]
- Fixed a bug involving contains_eager(), which would apply itself
to a secondary (i.e. lazy) load in a particular rare case,
producing cartesian products. improved the targeting
of query.options() on secondary loads overall [ticket:1461].
Mike Bayer [Fri, 3 Jul 2009 15:31:29 +0000 (15:31 +0000)]
Session.mapper is now *deprecated*.
Call session.add() if you'd like a free-standing object to be
part of your session. Otherwise, a DIY version of
Session.mapper is now documented at
http://www.sqlalchemy.org/trac/wiki/UsageRecipes/SessionAwareMapper
The method will remain deprecated throughout 0.6.
M test/ext/test_declarative.py
M test/orm/test_scoping.py
M lib/sqlalchemy/orm/scoping.py
M CHANGES