| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
| |
See README.unittests for information on how to run
the tests. [ticket:970]
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
in conjunction with large mapper graphs, large numbers of
objects:
- The Session's "weak referencing" behavior is now *full* -
no strong references whatsoever are made to a mapped object
or related items/collections in its __dict__. Backrefs and
other cycles in objects no longer affect the Session's ability
to lose all references to unmodified objects. Objects with
pending changes still are maintained strongly until flush.
[ticket:1398]
The implementation also improves performance by moving
the "resurrection" process of garbage collected items
to only be relevant for mappings that map "mutable"
attributes (i.e. PickleType, composite attrs). This removes
overhead from the gc process and simplifies internal
behavior.
If a "mutable" attribute change is the sole change on an object
which is then dereferenced, the mapper will not have access to
other attribute state when the UPDATE is issued. This may present
itself differently to some MapperExtensions.
The change also affects the internal attribute API, but not
the AttributeExtension interface nor any of the publically
documented attribute functions.
- The unit of work no longer genererates a graph of "dependency"
processors for the full graph of mappers during flush(), instead
creating such processors only for those mappers which represent
objects with pending changes. This saves a tremendous number
of method calls in the context of a large interconnected
graph of mappers.
- Cached a wasteful "table sort" operation that previously
occured multiple times per flush, also removing significant
method call count from flush().
- Other redundant behaviors have been simplified in
mapper._save_obj().
|
| |
|
|
| |
- other coverage tips
|
| | |
|
| |
|
|
|
|
|
|
|
| |
dialect-specific types is now a WeakKeyDictionary.
This to prevent dialect objects from
being referenced forever for an application that
creates an arbitrarily large number of engines
or dialects. There is a small performance penalty
which will be resolved in 0.6. [ticket:1299]
|
| | |
|
| | |
|
| |
|
|
| |
anything. However when repaired, the usage within RelationLoader._create_joins() still creates cycles between key elements and the value placed in the dict. In the interests of risk reduction, WCK is now removed and the two caches it was used for are now non-cached. Speed comparisons with one join/eager-heavy web application show no noticeable effect in response time.
|
| | |
|
| |
|
|
| |
us a 2.5-frozen copy of unittest so we're insulated from unittest changes.
|
| |
|
|
|
| |
- removed unnecessary isinstance() from class_mapper()
- removed unnecessary and py3k incompatible "dictionary sort" from association table delete
|
| | |
|
| |
|
|
|
| |
Connection object, Connection.info should be used.
- Method consoliation in Connection, ExecutionContext
|
| |
|
|
|
|
|
| |
of ClassManager, and made it a private method on
_ClassInstrumentationAdapter. ClassManager's approach
handles the default task with fewer function calls which chops off
a few hundred calls from the pertinent profile tests.
|
| |
|
|
| |
- changelog has separate category for 'features'
|
| |
|
|
| |
all we're going to squeeze out of compiler at this point.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Pass in the argument "label_length=<value>" to create_engine()
to adjust how many characters max will be present in dynamically
generated column labels, i.e. "somecolumn AS somelabel". Any
value less than 6 will result in a label of minimal size,
consiting of an underscore and a numeric counter.
The compiler uses the value of dialect.max_identifier_length
as a default. [ticket:1211]
- removed ANON_NAME regular expression, using string patterns now
- _generated_label() unicode subclass is used to indicate generated names
which are subject to truncation
|
| |
|
|
|
|
| |
to be based solely on presence of cursor.description.
All the regexp-based guessing about statements returning rows
has been removed [ticket:1212].
|
| | |
|
| |
|
|
|
|
|
| |
class to reduce dependencies
- implemented _generative decorator for select/update/insert/delete constructs
- other minutiae
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
| |
require mutexing, resurrects garbage collected instance
on a lazy basis for an InstanceState with pending changes.
|
| | |
|
| |
|
|
| |
visit_select()
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- The internal notion of an "OID" or "ROWID" column has been
removed. It's basically not used by any dialect, and the
possibility of its usage with psycopg2's cursor.lastrowid
is basically gone now that INSERT..RETURNING is available.
- Removed "default_order_by()" method on all FromClause
objects.
- profile/compile/select test is 8 function calls over on buildbot 2.4 for some reason, will adjust after checking
the results of this commit
|
| | |
|
| |
|
|
|
|
| |
all usage of thread.get_ident() is removed, and replaced
with threading.local() usage. this allows potentially
faster and safer thread local access.
|
| | |
|
| | |
|
| |
|
|
| |
non-pool-threadlocal nature adding some checkout overhead
|
| |
|
|
|
|
| |
[ticket:1050] becomes WORKSFORME
- fixed probably errenous unique=True checkin on unitofwork.py
|
| | |
|
| | |
|
| |
|
|
| |
- Added test/orm/defaults. Ambitiously uses ansi triggers.
|
| |
|
|
|
| |
- bumped 2.4 call count for profile test_select
- don't need initialize_properties() during reentrant compile() call (for now)
|
| |
|
|
| |
0.4 development continues at /sqlalchemy/branches/rel_0_4
|
| | |
|
| |
|
|
|
| |
- The latest skirmish in the battle against zoomark and sanity:
3rd party code is factored out in the function call count canary tests
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
for oracle query
|
| |
|
|
| |
overhead in 2.4? not sure why
|
| | |
|
| |
|
|
|
| |
tests extend from either TestBase or ORMTest, using additional mixins for
special assertion methods as needed
|