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.
+ - 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).
+ - 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)
+ - 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.
+ - 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]
+ - 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]
+ 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]
+ - 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]
+ - 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]
+ - 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.
+ - *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).
+ - 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
+ - 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
+ - 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]
+ - 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())
+ - 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())
+
0.3.3
- string-based FROM clauses fixed, i.e. select(..., from_obj=["sometext"])
- fixes to passive_deletes flag, lazy=None (noload) flag