hey list -
I cant keep up with all thats going on at this point, and the trunk
was just bursting....so I need to get out what we have thus far and
see how far it flies.
This release has some fairly deep refactorings involving mapper
relationships, particularly those involving polymorphic mappers, as
well as changes right up to the last minute (which is typical), so
any new issues just chime in.
big bugs that were fixed include:
- fixed bug in mapper refresh/expire whereby eager loaders didnt
properly re-populate
item lists [ticket:407]
- fixed bug where delete-orphan basically didn't work with many-to-
many relationships [ticket:427],
backref presence generally hid the symptom
and possibly:
- added a mutex to the mapper compilation step.
that is, if you were running SA in a super-concurrent environment and
getting errors/crashes when a process first started.
0.3.4
- general:
- global "insure"->"ensure" change. in US english "insure" is
actually
largely interchangeable with "ensure" (so says the dictionary), so
I'm not
completely illiterate, but its definitely sub-optimal to "ensure"
which is
non-ambiguous.
- sql:
- added "fetchmany()" support to ResultProxy
- added support for column "key" attribute to be useable in row
[<key>]/row.<key>
- changed "BooleanExpression" to subclass from "BinaryExpression",
so that boolean
expressions can also follow column-clause behaviors (i.e. label(),
etc).
- trailing underscores are trimmed from func.<xxx> calls, such as
func.if_()
- fix to correlation of subqueries when the column list of the
select statement
is constructed with individual calls to append_column(); this
fixes an ORM
bug whereby nested select statements were not getting correlated
with the
main select generated by the Query object.
- another fix to subquery correlation so that a subquery which has
only one FROM
element will *not* correlate that single element, since at least
one FROM element is
required in a query.
- default "timezone" setting is now False. this corresponds to
Python's datetime
behavior as well as Postgres' timestamp/time types (which is the
only timezone-sensitive
dialect at the moment) [ticket:414]
- the "op()" function is now treated as an "operation", rather
than a "comparison".
the difference is, an operation produces a BinaryExpression from
which further operations
can occur whereas comparison produces the more restrictive
BooleanExpression
- trying to redefine a reflected primary key column as non-primary
key raises an error
- type system slightly modified to support TypeDecorators that can
be overridden by the dialect
(ok, thats not very clear, it allows the mssql tweak below to be
possible)
- mssql:
- added an NVarchar type (produces NVARCHAR), also MSUnicode which
provides Unicode-translation
for the NVarchar regardless of dialect convert_unicode setting.
- postgres:
- fix to the initial checkfirst for tables to take current schema
into account [ticket:424]
- postgres has an optional "server_side_cursors=True" flag which
will utilize
server side cursors. these are appropriate for fetching only
partial results
and are necessary for working with very large unbounded result
sets.
While we'd like this to be the default behavior, different
environments seem
to have different results and the causes have not been isolated
so we are leaving
the feature off by default for now. Uses an apparently
undocumented psycopg2
behavior recently discovered on the psycopg mailing list.
- added "BIGSERIAL" support for postgres table with PGBigInteger/
autoincrement
- fixes to postgres reflection to better handle when schema names
are present;
thanks to jason (at) ncsmags.com [ticket:402]
- mysql:
- mysql is inconsistent with what kinds of quotes it uses in
foreign keys during a
SHOW CREATE TABLE, reflection updated to accomodate for all three
styles [ticket:420]
- mysql table create options work on a generic passthru now, i.e.
Table(..., mysql_engine='InnoDB',
mysql_collate="latin1_german2_ci", mysql_auto_increment="5",
mysql_<somearg>...),
helps [ticket:418]
- firebird:
- order of constraint creation puts primary key first before all
other constraints;
required for firebird, not a bad idea for others [ticket:408]
- Firebird fix to autoload multifield foreign keys [ticket:409]
- Firebird NUMERIC type properly handles a type without precision
[ticket:409]
- oracle:
- *slight* support for binary, but still need to figure out how to
insert reasonably large
values (over 4K). requires auto_setinputsizes=True sent to
create_engine(), rows must
be fully fetched individually, etc.
- orm:
- poked the first hole in the can of worms: saying query.select_by
(somerelationname=someinstance)
will create the join of the primary key columns represented by
"somerelationname"'s mapper to the
actual primary key in "someinstance".
- reworked how relations interact with "polymorphic" mappers, i.e.
mappers that have a select_table
as well as polymorphic flags. better determination of proper join
conditions, interaction with user-
defined join conditions, and support for self-referential
polymorphic mappers.
- related to polymorphic mapping relations, some deeper error
checking when compiling relations,
to detect an ambiguous "primaryjoin" in the case that both sides
of the relationship have foreign key
references in the primary join condition. also tightened down
conditions used to locate "relation direction",
associating the "foreignkey" of the relationship with the
"primaryjoin"
- a little bit of improvement to the concept of a "concrete"
inheritance mapping, though that concept
is not well fleshed out yet (added test case to support concrete
mappers on top of a polymorphic base).
- fix to "proxy=True" behavior on synonym()
- fixed bug where delete-orphan basically didn't work with many-to-
many relationships [ticket:427],
backref presence generally hid the symptom
- added a mutex to the mapper compilation step. ive been
reluctant to add any kind
of threading anything to SA but this is one spot that its its
really needed since mappers
are typically "global", and while their state does not change
during normal operation, the
initial compilation step does modify internal state significantly,
and this step usually
occurs not at module-level initialization time (unless you call
compile()) but at first-request
time
- basic idea of "session.merge()" actually implemented. needs
more testing.
- added "compile_mappers()" function as a shortcut to compiling
all mappers
- fix to MapperExtension create_instance so that entity_name
properly associated
with new instance
- speed enhancements to ORM object instantiation, eager loading of
rows
- invalid options sent to 'cascade' string will raise an exception
[ticket:406]
- fixed bug in mapper refresh/expire whereby eager loaders didnt
properly re-populate
item lists [ticket:407]
- fix to post_update to ensure rows are updated even for non
insert/delete scenarios
[ticket:413]
- added an error message if you actually try to modify primary key
values on an entity
and then flush it [ticket:412]
- extensions
- added "validate=False" argument to assign_mapper, if True will
insure that only mapped
attributes are named [ticket:426]
- assign_mapper gets "options", "instances" functions added (i.e.
MyClass.instances())
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---