]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
added values() generative method to Insert/Update
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 2 Aug 2007 03:13:02 +0000 (03:13 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 2 Aug 2007 03:13:02 +0000 (03:13 +0000)
lib/sqlalchemy/sql.py
test/sql/select.py

index 479f13a8a1100afd0cb216670d3dd3af2a4c5871..3afaef58e581e4ba0d14f59e0c1227908d14f996 100644 (file)
@@ -3376,6 +3376,18 @@ class Insert(_UpdateBase):
         else:
             return ()
 
+    def _copy_internals(self):
+        self.parameters = self.parameters.copy()
+
+    def values(self, v):
+        u = self._clone()
+        if u.parameters is None:
+            u.parameters = u._process_colparams(v)
+        else:
+            u.parameters = self.parameters.copy()
+            u.parameters.update(u._process_colparams(v))
+        return u
+        
 class Update(_UpdateBase):
     def __init__(self, table, whereclause, values=None):
         self.table = table
@@ -3388,6 +3400,19 @@ class Update(_UpdateBase):
         else:
             return ()
 
+    def _copy_internals(self):
+        self._whereclause = self._whereclause._clone()
+        self.parameters = self.parameters.copy()
+        
+    def values(self, v):
+        u = self._clone()
+        if u.parameters is None:
+            u.parameters = u._process_colparams(v)
+        else:
+            u.parameters = self.parameters.copy()
+            u.parameters.update(u._process_colparams(v))
+        return u
+
 class Delete(_UpdateBase):
     def __init__(self, table, whereclause):
         self.table = table
@@ -3399,6 +3424,9 @@ class Delete(_UpdateBase):
         else:
             return ()
 
+    def _copy_internals(self):
+        self._whereclause = self._whereclause._clone()
+
 class _IdentifiedClause(ClauseElement):
     def __init__(self, ident):
         self.ident = ident
index 6dc4ae0f7976aa8e828caa36ac0137bbbff391f1..550e0bb39656a03b8747028cf7d32b2f662c6ed7 100644 (file)
@@ -1060,6 +1060,11 @@ class CRUDTest(SQLTest):
             "INSERT INTO mytable (myid, name, description) VALUES (:myid, :name, :description)",
             checkparams = {'myid':3, 'name':'jack', 'description':'mydescription'}
         )
+        
+        self.runtest(
+            insert(table1, values={table1.c.myid : bindparam('userid')}).values({table1.c.name : bindparam('username')}),
+            "INSERT INTO mytable (myid, name) VALUES (:userid, :username)"
+        )
     
         
     def testinsertexpression(self):
@@ -1074,6 +1079,7 @@ class CRUDTest(SQLTest):
         self.runtest(update(table1, table1.c.myid == 12, values = {table1.c.myid : 9}), "UPDATE mytable SET myid=:myid, description=:description WHERE mytable.myid = :mytable_myid", params = {'mytable_myid': 12, 'myid': 9, 'description': 'test'})
         s = table1.update(table1.c.myid == 12, values = {table1.c.name : 'lala'})
         c = s.compile(parameters = {'mytable_id':9,'name':'h0h0'})
+        self.runtest(update(table1, table1.c.myid == 12, values = {table1.c.name : table1.c.myid}).values({table1.c.name:table1.c.name + 'foo'}), "UPDATE mytable SET name=(mytable.name || :mytable_name), description=:description WHERE mytable.myid = :mytable_myid", params = {'description':'test'})
         self.assert_(str(s) == str(c))
         
     def testupdateexpression(self):