]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
(no commit message)
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 15 Oct 2005 19:51:03 +0000 (19:51 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 15 Oct 2005 19:51:03 +0000 (19:51 +0000)
lib/sqlalchemy/engine.py
lib/sqlalchemy/mapper.py
lib/sqlalchemy/objectstore.py
test/objectstore.py
test/tables.py
test/testbase.py

index 2f3e94de25e4063cc789fa97b1a4fca86081c99f..6e10ad90bd798e267736c1bd9096c08c29cde45b 100644 (file)
@@ -187,7 +187,6 @@ class SQLEngine(schema.SchemaEngine):
     def execute(self, statement, parameters, connection = None, echo = None, typemap = None, **kwargs):
         if parameters is None:
             parameters = {}
-
         if echo is True or self.echo:
             self.log(statement)
             self.log(repr(parameters))
index b7dedb90aebbc44b58344c52f9012f86da4fbba6..8e068fb6f0bd0e28e8c69c73d6c6caf2bdb380fd 100644 (file)
@@ -737,7 +737,7 @@ class PropertyLoader(MapperProperty):
         else: 
             return uowcommit.uow.attributes.get_history(obj, self.key)
 
-    def whose_dependent_on_who(self, obj1, obj2, uowcommit):
+    def whose_dependent_on_who(self, obj1, obj2):
         if obj1 is obj2:
             return None
         elif self.thiscol.primary_key:
@@ -746,7 +746,7 @@ class PropertyLoader(MapperProperty):
             return (obj2, obj1)
             
     def process_dependencies(self, task, deplist, uowcommit, delete = False):
-        print self.mapper.table.name + " " + repr(len(deplist)) + " process_dep isdelete " + repr(delete)
+        #print self.mapper.table.name + " " + repr(len(deplist)) + " process_dep isdelete " + repr(delete)
 
         # fucntion to set properties across a parent/child object plus an "association row",
         # based on a join condition
@@ -778,8 +778,9 @@ class PropertyLoader(MapperProperty):
                     uowcommit.register_deleted_list(childlist)
             else:
                 for obj in deplist:
+                    print "obj: " + repr(obj)
                     childlist = getlist(obj)
-                    if childlist is None: return
+                    if childlist is None: continue
                     clearkeys = False
                     for child in childlist.added_items():
                         associationrow = {}
@@ -824,7 +825,7 @@ class PropertyLoader(MapperProperty):
                 if self.direction == PropertyLoader.RIGHT:
                     uowcommit.register_object(obj)
                 childlist = getlist(obj)
-                if childlist is None: return
+                if childlist is None: continue
                 uowcommit.register_saved_list(childlist)
                 clearkeys = False
                 for child in childlist.added_items():
index 972e82f5317d9dc49dd756778eeec638d4e78870..3525e40b4bd311adbca6c3ee470391d64eff7007 100644 (file)
@@ -404,13 +404,13 @@ class UOWTask(object):
         self.mapper.save_obj(self.tosave_objects(), trans)
         for dep in self.save_dependencies():
             (processor, targettask, isdelete) = dep
-            processor.process_dependencies(targettask, targettask.tosave_objects(), trans, delete = False)
+            processor.process_dependencies(targettask, [elem.obj for elem in targettask.tosave_elements()], trans, delete = False)
         for element in self.tosave_elements():
             if element.childtask is not None:
                 element.childtask.execute(trans)
         for dep in self.delete_dependencies():
             (processor, targettask, isdelete) = dep
-            processor.process_dependencies(targettask, targettask.todelete_objects(), trans, delete = True)
+            processor.process_dependencies(targettask, [elem.obj for elem in targettask.todelete_elements()], trans, delete = True)
         for child in self.childtasks:
             child.execute(trans)
         for element in self.todelete_elements():
@@ -463,7 +463,6 @@ class UOWTask(object):
                 dp[(processor, isdelete)] = l
             return l
 
-        # TODO: rework, its putting too many things in places they shouldnt be            
         for taskelement in self.objects.values():
             # go through all of the dependencies on this task, and organize them
             # into a hash where we isolate individual objects that depend on each
@@ -483,7 +482,7 @@ class UOWTask(object):
                 for o in childlist:
                     if not self.objects.has_key(o):
                         continue
-                    whosdep = processor.whose_dependent_on_who(obj, o, trans)
+                    whosdep = processor.whose_dependent_on_who(obj, o)
                     if whosdep is not None:
                         tuples.append(whosdep)
                         if whosdep[0] is obj:
@@ -500,8 +499,6 @@ class UOWTask(object):
         
         def make_task_tree(node, parenttask):
             circ = objecttotask[node.item]
-            #if len(circ.objects) == 0 and len(circ.dependencies) == 0:
-            #    circ = None
             parenttask.append(node.item, self.objects[node.item].listonly, circ, isdelete=self.objects[node.item].isdelete)
             if dependencies.has_key(node.item):
                 for tup, deptask in dependencies[node.item].iteritems():
@@ -517,7 +514,6 @@ class UOWTask(object):
         return t
 
     def dump(self, indent=""):
-        # TODO: what a mess !
         s = "\n" + indent + repr(self)
         if self.circular is not None:
             s += " Circular Representation:"
@@ -557,7 +553,6 @@ class UOWTask(object):
         s = ""
         for dt in dep:
             s += "\n    " + indent + "process " + repr(dt[0].key) + " on:"
-#            s += "\n    " + indent + repr(dt[0].key) + "/" + (dt[2] and 'items to be deleted' or 'saved items')
             if dt[2]:
                 val = [t for t in dt[1].objects.values() if t.isdelete]
             else:
@@ -574,8 +569,6 @@ def mapper(*args, **params):
 
 def object_mapper(obj):
     return sqlalchemy.mapper.object_mapper(obj)
-
-
                     
 uow = util.ScopedRegistry(lambda: UnitOfWork(), "thread")
 
index b4b3178f18b896273460582996f70f52bd6c86f8..a65a42f186189d1dd0354baa0435dc0bb40006da 100644 (file)
@@ -444,8 +444,22 @@ UPDATE email_addresses SET user_id=:user_id, email_address=:email_address WHERE
         k = Keyword()
         k.name = 'yellow'
         objects[5].keywords.append(k)
-        
-        objectstore.uow().commit()
+        db.set_assert_list(self, [
+            (
+                "INSERT INTO keywords (keyword_id, name) VALUES (:keyword_id, :name)", 
+                {'keyword_id': None, 'name': 'yellow'}
+            ),
+            (
+                "UPDATE items SET order_id=:order_id, item_name=:item_name WHERE items.item_id = :items_item_id",
+                [{'item_name': 'item4updated', 'order_id': None, 'items_item_id': objects[4].item_id}]
+            ),
+            ("INSERT INTO itemkeywords (item_id, keyword_id) VALUES (:item_id, :keyword_id)",
+            [{'item_id': objects[5].item_id, 'keyword_id': 11}]
+            )
+        ])
+        objectstore.commit()
+        db.set_assert_list(None, None)
+
         objects[2].keywords.append(k)
         self.echo("added: " + repr(objects[2].keywords.added_items()))
         objectstore.uow().commit()
index 911c90322c5a2165704d0189f3a2cf6673f1b25c..6dc1a36cf785a301f30ae95f472d84231fd5a4ee 100644 (file)
@@ -24,6 +24,8 @@ elif DBTYPE == 'sqlite_file':
 elif DBTYPE == 'postgres':
     pass
 
+db = testbase.EngineAssert(db)
+
 users = Table('users', db,
     Column('user_id', Integer, primary_key = True),
     Column('user_name', String(20)),
index 4d4d1e408af961bf54460864cfaf6acee3df8acb..2c5bc2318b68355e7540c83ebcd57419edb59299 100644 (file)
@@ -1,5 +1,6 @@
 import unittest
 import StringIO
+import sqlalchemy.engine as engine
 
 echo = True
 
@@ -45,6 +46,27 @@ class AssertMixin(PersistTest):
                 self.assert_(getattr(rowobj, key) == value, "attribute %s value %s does not match %s" % (key, getattr(rowobj, key), value))
     def assert_enginesql(self, db, callable_, result):
         self.assert_(self.capture_exec(db, callable_) == result, result)
+
+class EngineAssert(object):
+    def __init__(self, engine):
+        self.__dict__['engine'] = engine
+        self.__dict__['realexec'] = engine.execute
+        self.set_assert_list(None, None)
+    def __getattr__(self, key):
+        return getattr(self.engine, key)
+    def __setattr__(self, key, value):
+        setattr(self.__dict__['engine'], key, value)
+    def set_assert_list(self, unittest, list):
+        self.__dict__['unittest'] = unittest
+        self.__dict__['assert_list'] = list
+    def execute(self, statement, parameters, **kwargs):
+        # TODO: get this to work
+        if self.assert_list is None:
+            return
+        item = self.assert_list.pop()
+        (query, params) = item
+        self.unittest.assert_(statement == query and params == parameters)
+        return self.realexec(statement, parameters, **kwargs)
         
 def runTests(suite):
     runner = unittest.TextTestRunner(verbosity = 2, descriptions =1)