Mike Bayer [Wed, 24 Mar 2010 16:46:58 +0000 (12:46 -0400)]
this version works with *all* the polymorphic scenarios by putting the subquery into
an aliased(), so that it can be controlled. self ref breaks now. will move the
joining out to use orm.join().
Mike Bayer [Tue, 23 Mar 2010 18:54:26 +0000 (14:54 -0400)]
- Fixed bug in Query whereby the usage of aliased() constructs
would fail if the underlying table (but not the actual alias)
were referenced inside the subquery generated by
q.from_self() or q.select_from().
Mike Bayer [Tue, 23 Mar 2010 00:15:50 +0000 (20:15 -0400)]
- Fixed bug which affected all eagerload() and similar options
such that "remote" eager loads, i.e. eagerloads off of a lazy
load such as query(A).options(eagerload(A.b, B.c))
wouldn't eagerload anything, but using eagerload("b.c") would
work fine.
- subquery eagerloading very close
Mike Bayer [Mon, 22 Mar 2010 17:16:21 +0000 (13:16 -0400)]
- Fixed bug in Query whereby calling q.join(prop).from_self(...).
join(prop) would fail to render the second join outside the
subquery, when joining on the same criterion as was on the
inside.
Brad Allen [Sun, 21 Mar 2010 04:00:51 +0000 (22:00 -0600)]
For cases when mxODBC's cursor.execute can't do the job, raise a warning and fall back on cursor.executedirect which is less picky. This causes a drastic improvement in passing tests.
Mike Bayer [Sat, 20 Mar 2010 01:12:29 +0000 (21:12 -0400)]
- Fixed bug whereby calling query(A).join(A.bs).add_entity(B)
in a joined inheritance scenario would double-add B as a
target and produce an invalid query. [ticket:1188]
Mike Bayer [Fri, 19 Mar 2010 21:51:50 +0000 (17:51 -0400)]
- StaticPool now initializes, disposes and recreates without
opening a new connection - the connection is only opened when
first requested. dispose() also works on AssertionPool now.
[ticket:1728]
Mike Bayer [Fri, 19 Mar 2010 19:30:48 +0000 (15:30 -0400)]
- join() will now simulate a NATURAL JOIN by default. Meaning,
if the left side is a join, it will attempt to join the right
side to the rightmost side of the left first, and not raise
any exceptions about ambiguous join conditions if successful
even if there are further join targets across the rest of
the left. [ticket:1714]
Mike Bayer [Fri, 19 Mar 2010 17:10:13 +0000 (13:10 -0400)]
- added "lockmode" kw argument to Session.refresh(), will
pass through the string value to Query the same as
in with_lockmode(), will also do version check for a
version_id_col-enabled mapping.
Mike Bayer [Fri, 19 Mar 2010 15:45:42 +0000 (11:45 -0400)]
distinguish between small, large, and many significant digits. the irony
that oracle and sybase are the ones that have the most issues with decimal numbers.
Mike Bayer [Fri, 19 Mar 2010 15:17:14 +0000 (11:17 -0400)]
switching Decimal treatment in MSSQL to be pyodbc specific, added
to connector to share between sybase/mssql. Going
with turning decimals with very low significant digit to floats,
seems to work so far.
Brad Allen [Thu, 18 Mar 2010 20:05:59 +0000 (14:05 -0600)]
Removed MxNumeric and MxFloat because now the sqlalchemy.types base classes support dialects having a class attribute of "supports_native_decimal" indicating native Python Demimal support. Adjusted mssql+mxodbc to use the sqlalchemy.types base classes for Float and Numeric instead of using the base mssql dialect's numeric types.
Brad Allen [Thu, 18 Mar 2010 17:47:45 +0000 (11:47 -0600)]
Hardcoded ident_seed and ident_increment query had bind markers noncompliant with SQL-92, which caused mxODBC failures. This was corrected by using string substitution in building the statement, and removing the bind params.
Mike Bayer [Thu, 18 Mar 2010 15:48:24 +0000 (11:48 -0400)]
- moved most Decimal bind/result handling into types.py, out of sqlite, mysql dialects.
- added an explicit test for [ticket:1216]
- some questions remain about MSSQL - would like to simplify/remove bind handling for numerics
Brad Allen [Wed, 17 Mar 2010 22:27:39 +0000 (16:27 -0600)]
Because of changes to SQLAlchemy bind parameter placement, removed all mxodbc test disabling statements having this pattern: @testing.crashes('mssql+mxodbc', """Invalid bind parameter placement:
Mike Bayer [Wed, 17 Mar 2010 21:48:29 +0000 (17:48 -0400)]
- The official name for the relation() function is now
relationship(), to eliminate confusion over the relational
algebra term. relation() however will remain available
in equal capacity for the foreseeable future. [ticket:1740]
Mike Bayer [Wed, 17 Mar 2010 20:01:29 +0000 (16:01 -0400)]
- pyodbc can do *some* unicode with sybase, python-sybase not at all.
Since python-sybase source code seems to be all from 2001 with no updates,
making pyodbc the default driver.
Mike Bayer [Wed, 17 Mar 2010 19:15:44 +0000 (15:15 -0400)]
- added pyodbc for sybase driver.
- generalized the "freetds" / "unicode statements" behavior of MS-SQL/pyodbc
into the base Pyodbc connector, as this seems to apply to Sybase as well.
- generalized the python-sybase "use autocommit for DDL" into the pyodbc
connector. With pyodbc, the "autocommit" flag on connection is used,
as Pyodbc seems to have more database conversation than python-sybase that
can't otherwise be suppressed.
- Some platforms will now interpret certain literal values
as non-bind parameters, rendered literally into the SQL
statement. This to support strict SQL-92 rules that are
enforced by some platforms including MS-SQL and Sybase.
In this model, bind parameters aren't allowed in the
columns clause of a SELECT, nor are certain ambiguous
expressions like "?=?". When this mode is enabled, the base
compiler will render the binds as inline literals, but only across
strings and numeric values. Other types such as dates
will raise an error, unless the dialect subclass defines
a literal rendering function for those. The bind parameter
must have an embedded literal value already or an error
is raised (i.e. won't work with straight bindparam('x')).
Dialects can also expand upon the areas where binds are not
accepted, such as within argument lists of functions
(which don't work on MS-SQL when native SQL binding is used).