summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/state.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-02-13 19:27:14 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2010-02-13 19:27:14 +0000
commitffe0ab5ba62be5df4c18829131cd58a52966d3b7 (patch)
tree2a99d07ffb25544c6fbc107fb00bec9e80bed9bf /lib/sqlalchemy/orm/state.py
parent6b10e0b26d226258d5cbcbb686629c9b82e9266b (diff)
downloadsqlalchemy-ffe0ab5ba62be5df4c18829131cd58a52966d3b7.tar.gz
- For those who might use debug logging on
sqlalchemy.orm.strategies, most logging calls during row loading have been removed. These were never very helpful and cluttered up the code. - Some internal streamlining of object loading grants a small speedup for large results, estimates are around 10-15%.
Diffstat (limited to 'lib/sqlalchemy/orm/state.py')
-rw-r--r--lib/sqlalchemy/orm/state.py31
1 files changed, 23 insertions, 8 deletions
diff --git a/lib/sqlalchemy/orm/state.py b/lib/sqlalchemy/orm/state.py
index 14c677b89..4bb9219f4 100644
--- a/lib/sqlalchemy/orm/state.py
+++ b/lib/sqlalchemy/orm/state.py
@@ -6,6 +6,9 @@ from sqlalchemy.orm.attributes import PASSIVE_NO_RESULT, PASSIVE_OFF, \
ATTR_WAS_SET
from sqlalchemy.orm import attributes, exc as orm_exc, interfaces
+import sys
+attributes.state = sys.modules['sqlalchemy.orm.state']
+
class InstanceState(object):
"""tracks state information at the instance level."""
@@ -18,17 +21,29 @@ class InstanceState(object):
insert_order = None
mutable_dict = None
_strong_obj = None
+ modified = False
+ expired = False
def __init__(self, obj, manager):
self.class_ = obj.__class__
self.manager = manager
self.obj = weakref.ref(obj, self._cleanup)
- self.modified = False
- self.callables = {}
- self.expired = False
- self.committed_state = {}
- self.pending = {}
- self.parents = {}
+
+ @util.memoized_property
+ def committed_state(self):
+ return {}
+
+ @util.memoized_property
+ def parents(self):
+ return {}
+
+ @util.memoized_property
+ def pending(self):
+ return {}
+
+ @util.memoized_property
+ def callables(self):
+ return {}
def detach(self):
if self.session_id:
@@ -123,7 +138,7 @@ class InstanceState(object):
def _run_on_load(self, instance):
self.manager.events.run('on_load', instance)
-
+
def __getstate__(self):
d = {
'instance':self.obj(),
@@ -133,7 +148,7 @@ class InstanceState(object):
(k, self.__dict__[k]) for k in (
'committed_state', 'pending', 'parents', 'modified', 'expired',
'callables'
- ) if self.__dict__[k]
+ ) if self.__dict__.get(k, False)
)
d.update(