]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- removed creepy exec call for now
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 6 Dec 2008 23:47:21 +0000 (23:47 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 6 Dec 2008 23:47:21 +0000 (23:47 +0000)
- removed unnecessary isinstance() from class_mapper()
- removed unnecessary and py3k incompatible "dictionary sort" from association table delete

lib/sqlalchemy/orm/dependency.py
lib/sqlalchemy/orm/util.py
lib/sqlalchemy/sql/visitors.py
test/profiling/zoomark_orm.py

index 2d0b7f1c68a2f3068c239c4e2c1655a811a263f0..fb24f6a6807ab9aa5ac2171a7fe7814c3cb9c95b 100644 (file)
@@ -444,7 +444,6 @@ class ManyToManyDP(DependencyProcessor):
                         secondary_update.append(associationrow)
 
         if secondary_delete:
-            secondary_delete.sort()
             # TODO: precompile the delete/insert queries?
             statement = self.secondary.delete(sql.and_(*[c == sql.bindparam(c.key, type_=c.type) for c in self.secondary.c if c.key in associationrow]))
             result = connection.execute(statement, secondary_delete)
index 0615f413613cfd2a94e72ac41dead7e7cf5fcd5e..541adf4e417e2f5a67a9dd9a17ba1737ac64006c 100644 (file)
@@ -531,8 +531,6 @@ def class_mapper(class_, compile=True):
     Raises UnmappedClassError if no mapping is configured.
     
     """
-    if not isinstance(class_, type):
-        class_ = type(class_)
     try:
         class_manager = attributes.manager_of_class(class_)
         mapper = class_manager.mapper
index e6edce5e829e934038d6e57a8f3e05f12c5d5c32..5d1d53cf8e59e7ebe6ab3825726b79492148f685 100644 (file)
@@ -20,6 +20,7 @@ http://techspot.zzzeek.org/?p=19 .
 from collections import deque
 import re
 from sqlalchemy import util
+import operator
 
 __all__ = ['VisitableType', 'Visitable', 'ClauseVisitor', 
     'CloningVisitor', 'ReplacingCloningVisitor', 'iterate', 
@@ -43,15 +44,14 @@ class VisitableType(type):
         # for use by the compiler
         visit_name = cls.__dict__["__visit_name__"]
         if isinstance(visit_name, str):
-            func_text = "def _compiler_dispatch(self, visitor, **kw):\n"\
-            "    return visitor.visit_%s(self, **kw)" % visit_name
+            getter = operator.attrgetter("visit_%s" % visit_name)
+            def _compiler_dispatch(self, visitor, **kw):
+                return getter(visitor)(self, **kw)
         else:
-            func_text = "def _compiler_dispatch(self, visitor, **kw):\n"\
-            "    return getattr(visitor, 'visit_%s' % self.__visit_name__)(self, **kw)"
+            def _compiler_dispatch(self, visitor, **kw):
+                return getattr(visitor, 'visit_%s' % self.__visit_name__)(self, **kw)
     
-        env = locals().copy()
-        exec func_text in env
-        cls._compiler_dispatch = env['_compiler_dispatch']
+        cls._compiler_dispatch = _compiler_dispatch
         
         super(VisitableType, cls).__init__(clsname, bases, dict)
 
index 831f60c805da16f92fde93737fd674b0e9519233..8d5c28c69e4088c20284126bb36f9eea71358821 100644 (file)
@@ -298,11 +298,11 @@ class ZooMarkTest(TestBase):
     def test_profile_2_insert(self):
         self.test_baseline_2_insert()
 
-    @profiling.function_call_count(6385)
+    @profiling.function_call_count(6783)
     def test_profile_3_properties(self):
         self.test_baseline_3_properties()
 
-    @profiling.function_call_count(22508)
+    @profiling.function_call_count(23861)
     def test_profile_4_expressions(self):
         self.test_baseline_4_expressions()