Mike Bayer [Thu, 12 Jun 2008 03:34:13 +0000 (03:34 +0000)]
- the enable_typechecks=False setting on relation()
now only allows subtypes with inheriting mappers.
Totally unrelated types, or subtypes not set up with
mapper inheritance against the target mapper are
still not allowed.
Mike Bayer [Wed, 4 Jun 2008 19:25:35 +0000 (19:25 +0000)]
- Query.count() will take single-table inheritance
subtypes into account the same way row-based
results do. (ticket:1008]. partial merge of 0.5's r4831.)
Mike Bayer [Sun, 1 Jun 2008 14:08:02 +0000 (14:08 +0000)]
- The contains() operator when used with many-to-many
will alias() the secondary (association) table so
that multiple contains() calls will not conflict
with each other [ticket:1058]
Mike Bayer [Fri, 30 May 2008 20:56:47 +0000 (20:56 +0000)]
- Cursors now have "arraysize" set to 50 by default on
them, the value of which is configurable using the
"arraysize" argument to create_engine() with the
Oracle dialect. This to account for cx_oracle's default
setting of "1", which has the effect of many round trips
being sent to Oracle. This actually works well in
conjunction with BLOB/CLOB-bound cursors, of which
there are any number available but only for the life of
that row request (so BufferedColumnRow is still needed,
but less so). [ticket:1062]
Mike Bayer [Sat, 24 May 2008 17:05:50 +0000 (17:05 +0000)]
get_default_identifier() normalizes the returned name so that it may
by used as the "schema" argument on a Table. Fixes the reflection unit
test that requires this.
Mike Bayer [Thu, 26 Jul 2007 22:09:52 +0000 (22:09 +0000)]
- very rudimental support for OUT parameters added; use sql.outparam(name, type)
to set up an OUT parameter, just like bindparam(); after execution, values are
avaiable via result.out_parameters dictionary. [ticket:507]
- dialect.get_type_map() apparently never worked, not sure why unit test seemed
to work the first time around.
- OracleText doesn't seem to return cx_oracle.LOB.
Mike Bayer [Thu, 26 Jul 2007 18:37:53 +0000 (18:37 +0000)]
- fixed clause_element/expression_element change from preivous checkin
- starting to add "out" params for oracle
- implemented partial check for "rejoin on conflicting paths" for [ticket:687]
Mike Bayer [Thu, 26 Jul 2007 17:11:37 +0000 (17:11 +0000)]
- changed 'desired_columns' argument to 'include_columns'
- made 'include_columns' an explicit argument to Table. I'm
trying to avoid the "x can be a foo, or a bar, or a list of dictionaries of hoho's"-type behavior
- added unit test, closes [ticket:561]
Mike Bayer [Thu, 26 Jul 2007 07:19:37 +0000 (07:19 +0000)]
- ANSICompiler now uses its own traversal when compiling, returning a composed
string from each visit_XXXX method, so that the full string is compiled at once
without using any dictionary storage. dialects modified accordingly.
tested on mysql/sqlite/postgres fully,
tested with string-only tests for oracle/fb/informix/mssql so far.
Jason Kirtland [Wed, 25 Jul 2007 22:02:49 +0000 (22:02 +0000)]
Really finish proxied list methods. Either these last couple (count, remove, setitem w/ slice) weren't possible in 0.3 and/or I spaced these.
Improved messaging on flubbed stepped slice assignment in collection decorators.
Mike Bayer [Wed, 25 Jul 2007 18:57:56 +0000 (18:57 +0000)]
- added unittest for sharding module
- fixed shard test/example datatype to "Float" since Numeric
behavior has changed
- added docstrings to sqlalchemy/orm/__init__.py functions;
still need to proof within generated HTML pages/fix errors
- added engine.threadlocal to docs, removed old mods.threadlocal
Mike Bayer [Tue, 24 Jul 2007 22:00:19 +0000 (22:00 +0000)]
- added has(), like any() but for scalars
- added **kwargs to has() and any(), criterion is optional; generate equality criterion
against the related table (since we know the related property when has() and any() are used),
i.e. filter(Address.user.has(name='jack')) equivalent to filter(Address.user.has(User.name=='jack'))
- added "from_joinpoint=False" arg to join()/outerjoin(). yes, I know join() is getting a little
crazy, but this flag is needed when you want to keep building along a line of aliased joins,
adding query criterion for each alias in the chain. self-referential unit test added.
- fixed basic_tree example a little bit
Mike Bayer [Tue, 24 Jul 2007 20:05:10 +0000 (20:05 +0000)]
- deprecated scalar=True argument on select(). its replaced
by select().scalar() which returns a _ScalarSelect object, that obeys
the ColumnElement interface fully
- removed _selectable() method. replaced with __selectable__() as an optional
duck-typer; subclassing Selectable (without any __selectable__()) is equivalent
- query._col_aggregate() was assuming bound metadata. ick !
- probably should deprecate ClauseElement.scalar(), in favor of ClauseElement.execute().scalar()...
otherwise might need to rename select().scalar()
Mike Bayer [Tue, 24 Jul 2007 16:36:14 +0000 (16:36 +0000)]
- Numeric and Float types now have an "asdecimal" flag; defaults to
True for Numeric, False for Float. when True, values are returned as
decimal.Decimal objects; when False, values are returned as float().
the defaults of True/False are already the behavior for PG and MySQL's
DBAPI modules. [ticket:646]
Mike Bayer [Tue, 24 Jul 2007 04:05:55 +0000 (04:05 +0000)]
- a rudimental sharding (horizontal scaling) system is introduced. This system
uses a modified Session which can distribute read and write operations among
multiple databases, based on user-defined functions defining the
"sharding strategy". Instances and their dependents can be distributed
and queried among multiple databases based on attribute values, round-robin
approaches or any other user-defined system. [ticket:618]
Mike Bayer [Mon, 23 Jul 2007 22:20:44 +0000 (22:20 +0000)]
- joined-table inheritance will now generate the primary key
columns of all inherited classes against the root table of the
join only. This implies that each row in the root table is distinct
to a single instance. If for some rare reason this is not desireable,
explicit primary_key settings on individual mappers will override it.
- When "polymorphic" flags are used with joined-table or single-table
inheritance, all identity keys are generated against the root class
of the inheritance hierarchy; this allows query.get() to work
polymorphically using the same caching semantics as a non-polymorphic get.
note that this currently does not work with concrete inheritance.
Mike Bayer [Mon, 23 Jul 2007 20:56:27 +0000 (20:56 +0000)]
ColumnDefault functions pass ExecutionContext to callables which accept a single argument;
refactored workings of defaults so that they share the same execution context.
Jason Kirtland [Mon, 23 Jul 2007 20:32:19 +0000 (20:32 +0000)]
_ConnectionRecord gains a .properties collection, with contents scoped to
the lifetime of the underlying DBAPI connection. Accessors on Connections and fairies.
Mike Bayer [Mon, 23 Jul 2007 15:52:09 +0000 (15:52 +0000)]
- refinement of connection.execute() , parameter processing behavior
- Connection's dealings with params are simplified; generation of
ClauseParameters pushed into DefaultDialect.
- simplified ClauseParameters.
- this is to make room for execute_raw() but I haven't decided how that
should look yet.
Jason Kirtland [Mon, 23 Jul 2007 01:50:54 +0000 (01:50 +0000)]
Refactored test support code, moved most into 'testlib/'
Cleaned up imports, all tests should be runnable stand-alone or suite now
Updated most of the perf tests
Removed dead test suites
Added new profiling decorator
Added new profilable perf test, 'ormsession' to try to capture a typical workload
Mike Bayer [Sun, 22 Jul 2007 19:35:46 +0000 (19:35 +0000)]
- fix to _CalculatedClause._copy_internals() behavior so that ClauseAdapter works with _Function objects better
- factored AliasedClauses out of EagerLoader into its own unit; Query makes heavy use of it for joins
- added support to Query for full interaction between aliased and nonalised joins with appended entities, columns, and externally-mapped columns
Mike Bayer [Sun, 22 Jul 2007 14:07:15 +0000 (14:07 +0000)]
- got self-referential query.join()/query.outerjoin() to work.
- PropertyLoader adds local_side set which is the opposite of remote_side, makes
the self-referential aliasing a snap.
- added "id" argument to join()/outerjoin() to allow access to the aliased joins
in add_entity().
- added "alias" argument to add_entity() to get at entities selected from an explicit
Alias
- starting to move EagerLoader.AliasedClasues to a general utility function which
will be used by Query as well
Mike Bayer [Sun, 22 Jul 2007 03:26:13 +0000 (03:26 +0000)]
filter_by([joinpath], ...) is gone. join([path], aliased=True) replaces it, all subsequent filter() criterion is converted
against that alias; represents a much more flexible and consistent solution.
needs some tweaks and can then work with self-referential loading too.
Mike Bayer [Fri, 20 Jul 2007 20:02:41 +0000 (20:02 +0000)]
- added query.populate_existing().. - marks the query to reload
all attributes and collections of all instances touched in the query,
including eagerly-loaded entities [ticket:660]
- added eagerload_all(), allows eagerload_all('x.y.z') to specify eager
loading of all properties in the given path
Mike Bayer [Fri, 20 Jul 2007 03:20:33 +0000 (03:20 +0000)]
- Eager loading now functions at any arbitrary depth along self-referential
and cyclical structures. When loading cyclical structures, specify "join_depth"
on relation() indicating how many times you'd like the table to join
to itself; each level gets a distinct table alias.
- adds a stack to the Mapper->eagerloader->Mapper process which is the single
point of tracking the various AliasedClause objects both at query compile
time as well as result fetching time. self-referential relationships narrow
down the "aliasing" of tables more sharply so as to produce the correct
eager joins in those cases without stepping on more generalized cases.
the mechanism of detecting "too deep" of an eager load now works based on
locating a true cycle, but only if join_depth is not specified; otherwise
join_depth is used.
[ticket:659]
Mike Bayer [Thu, 19 Jul 2007 20:36:51 +0000 (20:36 +0000)]
- changed set used to generate FROM list to an ordered set; may fix [ticket:669]
- improvements to select generative capability, ClauseAdapter
- one select test is failing, but not from this checkin
Mike Bayer [Thu, 19 Jul 2007 07:11:55 +0000 (07:11 +0000)]
- all "type" keyword arguments, such as those to bindparam(), column(),
Column(), and func.<something>(), renamed to "type_". those objects
still name their "type" attribute as "type".
- new SQL operator implementation which removes all hardcoded operators
from expression structures and moves them into compilation;
allows greater flexibility of operator compilation; for example, "+"
compiles to "||" when used in a string context, or "concat(a,b)" on
MySQL; whereas in a numeric context it compiles to "+". fixes [ticket:475].
- major cruft cleanup in ANSICompiler regarding its processing of update/insert
bind parameters. code is actually readable !
- a clause element embedded in an UPDATE, i.e. for a correlated update, uses
standard "grouping" rules now to place parenthesis. Doesn't change much, except
if you embed a text() clause in there, it will not be automatically parenthesized
(place parens in the text() manually).
Mike Bayer [Wed, 18 Jul 2007 21:00:14 +0000 (21:00 +0000)]
- unittest cleanup: after removal of threadlocal mod + changes to session calling signature,
got sqlite, postgres, mysql all working again (one unresolved failure for mysql)