Mike Bayer [Wed, 23 Jan 2008 19:20:49 +0000 (19:20 +0000)]
- query.join() can also accept tuples of attribute
name/some selectable as arguments. This allows
construction of joins *from* subclasses of a
polymorphic relation, i.e.:
Jason Kirtland [Mon, 21 Jan 2008 23:19:39 +0000 (23:19 +0000)]
- 2.3 fixup, part two: 100% passing for sqlite
- added 2.4-style binops to util.Set on 2.3
- OrderedSets pickle on 2.3
- more lib/sqlalchemy set vs Set corrections
- fixed InstrumentedSet.discard for 2.3
- set, sorted compatibility for test suite
- added testing.fails_if decorator
Ants Aasma [Sun, 20 Jan 2008 03:22:00 +0000 (03:22 +0000)]
- parent transactions weren't started on the connection when adding a connection to a nested session transaction.
- session.transaction now always refers to the innermost active transaction, even when commit/rollback are called directly on the session transaction object.
- when preparing a two-phase transaction fails on one connection all the connections are rolled back.
- two phase transactions can now be prepared.
- session.close() didn't close all transactions when nested transactions were used.
- rollback() previously erroneously set the current transaction directly to the parent of the transaction that could be rolled back to.
- autoflush for commit() wasn't flushing for simple subtransactions.
Jason Kirtland [Sat, 19 Jan 2008 23:37:11 +0000 (23:37 +0000)]
- Restored 2.3 compat. in lib/sqlalchemy
- Part one of test suite fixes to run on 2.3
Lots of failures still around sets; sets.Set differs from __builtin__.set
particularly in the binops. We depend on set extensively now and may need to
provide a corrected sets.Set subclass on 2.3.
Jason Kirtland [Sat, 19 Jan 2008 23:11:47 +0000 (23:11 +0000)]
- Added source transformation framework for non-2.4 parser implementations
- test/clone.py can create and update (transformed) copies of the test suite
- Added Python 2.4 decorator -> 2.3 source transform
Mike Bayer [Sat, 19 Jan 2008 20:11:29 +0000 (20:11 +0000)]
- Oracle assembles the correct columns in the result set
column mapping when generating a LIMIT/OFFSET subquery,
allows columns to map properly to result sets even
if long-name truncation kicks in [ticket:941]
Mike Bayer [Sat, 19 Jan 2008 18:36:52 +0000 (18:36 +0000)]
- some expression fixup:
- the '.c.' attribute on a selectable now gets an
entry for every column expression in its columns
clause; previously, "unnamed" columns like functions
and CASE statements weren't getting put there. Now
they will, using their full string representation
if no 'name' is available.
- The anonymous 'label' generated for otherwise
unlabeled functions and expressions now propagates
outwards at compile time for expressions like
select([select([func.foo()])])
- a CompositeSelect, i.e. any union(), union_all(),
intersect(), etc. now asserts that each selectable
contains the same number of columns. This conforms
to the corresponding SQL requirement.
- building on the above ideas, CompositeSelects
now build up their ".c." collection based on
the names present in the first selectable only;
corresponding_column() now works fully for all
embedded selectables.
Mike Bayer [Wed, 16 Jan 2008 22:06:15 +0000 (22:06 +0000)]
- dynamic relations, when referenced, create a strong
reference to the parent object so that the query
still has a parent to call against even if the
parent is only created (and otherwise dereferenced)
within the scope of a single expression [ticket:938]
Mike Bayer [Tue, 15 Jan 2008 17:59:27 +0000 (17:59 +0000)]
finally, a really straightforward reduce() method which reduces cols
to the minimal set for every test case I can come up with, and
now replaces all the cruft in Mapper._compile_pks() as well as
Join.__init_primary_key(). mappers can now handle aliased selects
and figure out the correct PKs pretty well [ticket:933]
Mike Bayer [Mon, 14 Jan 2008 04:20:26 +0000 (04:20 +0000)]
- query.join() can now accept class-mapped attributes
as arguments, which can be used in place or in any
combination with strings. In particular this allows
construction of joins to subclasses on a polymorphic
relation, i.e.
query(Company).join(['employees', Engineer.name]),
etc.
Mike Bayer [Mon, 14 Jan 2008 02:45:30 +0000 (02:45 +0000)]
- applying some refined versions of the ideas in the smarter_polymorphic
branch
- slowly moving Query towards a central "aliasing" paradigm which merges
the aliasing of polymorphic mappers to aliasing against arbitrary select_from(),
to the eventual goal of polymorphic mappers which can also eagerload other
relations
- supports many more join() scenarios involving polymorphic mappers in
most configurations
- PropertyAliasedClauses doesn't need "path", EagerLoader doesn't need to
guess about "towrap"
Mike Bayer [Sun, 13 Jan 2008 19:04:55 +0000 (19:04 +0000)]
- _get_equivalents() converted into a lazy-initializing property; Query was calling it
for polymorphic loads which is really expensive
- surrogate_mapper adapts the given order_by, so that order_by can be against the mapped
table and is usable for sub-mappers as well. Query properly calls select_mapper.order_by.
Jason Kirtland [Sat, 12 Jan 2008 22:03:42 +0000 (22:03 +0000)]
- testbase is gone, replaced by testenv
- Importing testenv has no side effects- explicit functions provide similar behavior to the old immediate behavior of testbase
- testing.db has the configured db
- Fixed up the perf/* scripts
Jason Kirtland [Fri, 11 Jan 2008 01:28:43 +0000 (01:28 +0000)]
- Warnings are now issued as SAWarning instead of RuntimeWarning; util.warn() wraps this up.
- SADeprecationWarning has moved to exceptions. An alias remains in logging until 0.5.
Mike Bayer [Thu, 10 Jan 2008 22:32:51 +0000 (22:32 +0000)]
- added a mapper() flag "eager_defaults"; when set to
True, defaults that are generated during an INSERT
or UPDATE operation are post-fetched immediately,
instead of being deferred until later. This mimics
the old 0.3 behavior.
Mike Bayer [Mon, 7 Jan 2008 18:52:02 +0000 (18:52 +0000)]
- fixed an attribute history bug whereby assigning a new collection
to a collection-based attribute which already had pending changes
would generate incorrect history [ticket:922]
- fixed delete-orphan cascade bug whereby setting the same
object twice to a scalar attribute could log it as an orphan
[ticket:925]
- generative select.order_by(None) / group_by(None) was not managing to
reset order by/group by criterion, fixed [ticket:924]
Mike Bayer [Sun, 6 Jan 2008 20:32:45 +0000 (20:32 +0000)]
- fixed bug which could occur with polymorphic "union" mapper
which falls back to "deferred" loading of inheriting tables
- the "columns" collection on a mapper/mapped class (i.e. 'c')
is against the mapped table, not the select_table in the
case of polymorphic "union" loading (this shouldn't be
noticeable)
Mike Bayer [Sat, 5 Jan 2008 23:27:02 +0000 (23:27 +0000)]
- synonyms can now be created against props that don't exist yet,
which are later added via add_property(). This commonly includes
backrefs. (i.e. you can make synonyms for backrefs without
worrying about the order of operations) [ticket:919]
Mike Bayer [Sat, 5 Jan 2008 22:59:18 +0000 (22:59 +0000)]
- changed name of TEXT to Text since its a "generic" type; TEXT name is
deprecated until 0.5. The "upgrading" behavior of String to Text
when no length is present is also deprecated until 0.5; will issue a
warning when used for CREATE TABLE statements (String with no length
for SQL expression purposes is still fine) [ticket:912]
Jason Kirtland [Sat, 5 Jan 2008 21:56:22 +0000 (21:56 +0000)]
Added 'function_call_count' assertion decorator. The full-suite vs. isolated run call count discrepancy needs to be ironed out before this can be applied to zoomark.
Mike Bayer [Sat, 5 Jan 2008 18:26:28 +0000 (18:26 +0000)]
- fixed fairly critical bug whereby the same instance could be listed
more than once in the unitofwork.new collection; most typically
reproduced when using a combination of inheriting mappers and
ScopedSession.mapper, as the multiple __init__ calls per instance
could save() the object with distinct _state objects
Mike Bayer [Wed, 2 Jan 2008 23:13:02 +0000 (23:13 +0000)]
- added very rudimentary yielding iterator behavior to Query. Call
query.yield_per(<number of rows>) and evaluate the Query in an
iterative context; every collection of N rows will be packaged up
and yielded. Use this method with extreme caution since it does
not attempt to reconcile eagerly loaded collections across
result batch boundaries, nor will it behave nicely if the same
instance occurs in more than one batch. This means that an eagerly
loaded collection will get cleared out if it's referenced in more than
one batch, and in all cases attributes will be overwritten on instances
that occur in more than one batch.
Mike Bayer [Wed, 2 Jan 2008 01:29:38 +0000 (01:29 +0000)]
- further fix to new TypeDecorator, so that subclasses of TypeDecorators work properly
- _handle_dbapi_exception() usage changed so that unwrapped exceptions can be rethrown with the original stack trace