6
0.7.5 (January 28, 2012)
9
- [bug] Fixed issue where modified session state
10
established after a failed flush would be committed
11
as part of the subsequent transaction that
12
begins automatically after manual call
13
to rollback(). The state of the session is
14
checked within rollback(), and if new state
15
is present, a warning is emitted and
16
restore_snapshot() is called a second time,
17
discarding those changes. [ticket:2389]
19
- [bug] Fixed regression from 0.7.4 whereby
20
using an already instrumented column from a
21
superclass as "polymorphic_on" failed to resolve
22
the underlying Column. [ticket:2345]
24
- [bug] Raise an exception if xyzload_all() is
25
used inappropriately with two non-connected
26
relationships. [ticket:2370]
28
- [feature] Added "class_registry" argument to
29
declarative_base(). Allows two or more declarative
30
bases to share the same registry of class names.
32
- [feature] query.filter() accepts multiple
33
criteria which will join via AND, i.e.
34
query.filter(x==y, z>q, ...)
36
- [feature] Added new capability to relationship
37
loader options to allow "default" loader strategies.
38
Pass '*' to any of joinedload(), lazyload(),
39
subqueryload(), or noload() and that becomes the
40
loader strategy used for all relationships,
41
except for those explicitly stated in the
42
Query. Thanks to up-and-coming contributor
43
Kent Bower for an exhaustive and well
44
written test suite ! [ticket:2351]
46
- [bug] Fixed bug whereby event.listen(SomeClass)
47
forced an entirely unnecessary compile of the
48
mapper, making events very hard to set up
49
at module import time (nobody noticed this ??)
52
- [bug] Fixed bug whereby hybrid_property didn't
53
work as a kw arg in any(), has().
55
- Fixed regression from 0.6 whereby if
56
"load_on_pending" relationship() flag were used
57
where a non-"get()" lazy clause needed to be
58
emitted on a pending object, it would fail
61
- [bug] ensure pickleability of all ORM exceptions
62
for multiprocessing compatibility. [ticket:2371]
64
- [bug] implemented standard "can't set attribute" /
65
"can't delete attribute" AttributeError when
66
setattr/delattr used on a hybrid that doesn't
67
define fset or fdel. [ticket:2353]
69
- [bug] Fixed bug where unpickled object didn't
70
have enough of its state set up to work
71
correctly within the unpickle() event established
72
by the mutable object extension, if the object
73
needed ORM attribute access within
74
__eq__() or similar. [ticket:2362]
76
- [bug] Fixed bug where "merge" cascade could
77
mis-interpret an unloaded attribute, if the
78
load_on_pending flag were used with
79
relationship(). Thanks to Kent Bower
80
for tests. [ticket:2374]
82
- [feature] New declarative reflection example
83
added, illustrates how best to mix table reflection
84
with declarative as well as uses some new features
88
- [feature] New reflection feature "autoload_replace";
89
when set to False on Table, the Table can be autoloaded
90
without existing columns being replaced. Allows
91
more flexible chains of Table construction/reflection
92
to be constructed, including that it helps with
93
combining Declarative with table reflection.
94
See the new example on the wiki. [ticket:2356]
96
- [bug] Improved the API for add_column() such that
97
if the same column is added to its own table,
98
an error is not raised and the constraints
99
don't get doubled up. Also helps with some
100
reflection/declarative patterns. [ticket:2356]
102
- [feature] Added "false()" and "true()" expression
103
constructs to sqlalchemy.sql namespace, though
104
not part of __all__ as of yet.
106
- [feature] Dialect-specific compilers now raise
107
CompileException for all type/statement compilation
108
issues, instead of InvalidRequestError or ArgumentError.
109
The DDL for CREATE TABLE will re-raise
110
CompileExceptions to include table/column information
111
for the problematic column. [ticket:2361]
113
- [bug] Fixed issue where the "required" exception
114
would not be raised for bindparam() with required=True,
115
if the statement were given no parameters at all.
119
- [bug] Added __reduce__ to StatementError,
120
DBAPIError, column errors so that exceptions
121
are pickleable, as when using multiprocessing.
123
all DBAPIs support this yet, such as
124
psycopg2. [ticket:2371]
126
- [bug] Improved error messages when a non-string
127
or invalid string is passed to any of the
128
date/time processors used by SQLite, including
129
C and Python versions. [ticket:2382]
131
- [bug] Fixed bug whereby a table-bound Column
132
object named "<a>_<b>" which matched a column
133
labeled as "<tablename>_<colname>" could match
134
inappropriately when targeting in a result
135
set row. [ticket:2377]
137
- [bug] Fixed bug in "mock" strategy whereby
138
correct DDL visit method wasn't called, resulting
139
in "CREATE/DROP SEQUENCE" statements being
140
duplicated [ticket:2384]
143
- [bug] the "name" of an FK constraint in SQLite
144
is reflected as "None", not "0" or other
145
integer value [ticket:2364].
146
SQLite does not appear to support constraint
149
- [bug] sql.false() and sql.true() compile to
150
0 and 1, respectively in sqlite [ticket:2368]
152
- [bug] removed an erroneous "raise" in the
153
SQLite dialect when getting table names
154
and view names, where logic is in place
155
to fall back to an older version of
156
SQLite that doesn't have the
157
"sqlite_temp_master" table.
160
- [bug] fixed regexp that filters out warnings
161
for non-reflected "PARTITION" directives,
162
thanks to George Reilly [ticket:2376]
165
- [bug] Adjusted the regexp used in the
166
mssql.TIME type to ensure only six digits
167
are received for the "microseconds" portion
168
of the value, which is expected by
169
Python's datetime.time(). Note that
170
support for sending microseconds doesn't
171
seem to be possible yet with pyodbc
172
at least. [ticket:2340]
174
- [bug] Dropped the "30 char" limit on pymssql,
175
based on reports that it's doing things
176
better these days. pymssql hasn't been
177
well tested and as the DBAPI is in flux
178
it's still not clear what the status
179
is on this driver and how SQLAlchemy's
180
implementation should adapt. [ticket:2347]
183
- [bug] Added ORA-03135 to the never ending
184
list of oracle "connection lost" errors
188
- [bug] Changed LRUCache, used by the mapper
189
to cache INSERT/UPDATE/DELETE statements,
190
to use an incrementing counter instead
191
of a timestamp to track entries, for greater
192
reliability versus using time.time(), which
193
can cause test failures on some platforms.
196
- [bug] Added a boolean check for the "finalize"
197
function within the pool connection proxy's
198
weakref callback before calling it, so that a
199
warning isn't emitted that this function is None
200
when the application is exiting and gc has
201
removed the function from the module before the
202
weakref callback was invoked. [ticket:2383]
205
- [bug] Fixed inappropriate usage of util.py3k
206
flag and renamed it to util.py3k_warning, since
207
this flag is intended to detect the -3 flag
208
series of import restrictions only.
212
- [feature] Simplified the versioning example
213
a bit to use a declarative mixin as well
214
as an event listener, instead of a metaclass +
215
SessionExtension. [ticket:2313]
217
- [bug] Fixed large_collection.py to close the
218
session before dropping tables. [ticket:2346]
220
0.7.4 (December 9, 2011)
9
223
- [bug] Fixed backref behavior when "popping" the