From: Mike Bayer Date: Thu, 2 Aug 2007 03:13:02 +0000 (+0000) Subject: added values() generative method to Insert/Update X-Git-Tag: rel_0_4beta1~107 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=14a0c29362fe7ac568b1ffde5415dcef3ac6a517;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git added values() generative method to Insert/Update --- diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index 479f13a8a1..3afaef58e5 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -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 diff --git a/test/sql/select.py b/test/sql/select.py index 6dc4ae0f79..550e0bb396 100644 --- a/test/sql/select.py +++ b/test/sql/select.py @@ -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):