summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2005-12-15 04:25:59 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2005-12-15 04:25:59 +0000
commit893ce7768262debc7c347afdb37ca2a22d1ef9a7 (patch)
tree9fec368742ec40d5bf03ccc9c7ff4979f61c224a /lib/sqlalchemy/engine.py
parentb7e5d114f563e7c92c3e168f8d65ad0d4cfb1388 (diff)
downloadsqlalchemy-893ce7768262debc7c347afdb37ca2a22d1ef9a7.tar.gz
rethinking sequences model to allow any default values
Diffstat (limited to 'lib/sqlalchemy/engine.py')
-rw-r--r--lib/sqlalchemy/engine.py38
1 files changed, 37 insertions, 1 deletions
diff --git a/lib/sqlalchemy/engine.py b/lib/sqlalchemy/engine.py
index cad60b969..977b4c427 100644
--- a/lib/sqlalchemy/engine.py
+++ b/lib/sqlalchemy/engine.py
@@ -241,6 +241,41 @@ class SQLEngine(schema.SchemaEngine):
self.do_commit(self.context.transaction)
self.context.transaction = None
self.context.tcount = None
+
+
+ def _process_sequences(self, connection, cursor, statement, parameters, many = False, echo = None, **kwargs):
+ if compiled is None: return
+ if getattr(compiled, "isinsert", False):
+ if isinstance(parameters, list):
+ plist = parameters
+ else:
+ plist = [parameters]
+ # inserts are usually one at a time. but if we got a list of parameters,
+ # it will calculate last_inserted_ids for just the last row in the list.
+ # TODO: why not make last_inserted_ids a 2D array since we have to explicitly sequence
+ # it or post-select anyway
+ for param in plist:
+ last_inserted_ids = []
+ need_lastrowid=False
+ for c in compiled.statement.table.c:
+ if not param.has_key(c.key) or param[c.key] is None:
+ if c.sequence is not None:
+ newid = self.exec_sequence(c.sequence)
+ else:
+ newid = None
+
+ if newid is not None:
+ param[c.key] = newid
+ if c.primary_key:
+ last_inserted_ids.append(param[c.key])
+ elif c.primary_key:
+ need_lastrowid = True
+ elif c.primary_key:
+ last_inserted_ids.append(param[c.key])
+ if need_lastrowid:
+ self.context.last_inserted_ids = None
+ else:
+ self.context.last_inserted_ids = last_inserted_ids
def pre_exec(self, connection, cursor, statement, parameters, many = False, echo = None, **kwargs):
pass
@@ -287,7 +322,8 @@ class SQLEngine(schema.SchemaEngine):
try:
self.pre_exec(connection, c, statement, parameters, echo = echo, **kwargs)
-
+ #self._process_sequences(connection, c, statement, parameters, echo = echo, **kwargs)
+
if echo is True or self.echo is not False:
self.log(statement)
self.log(repr(parameters))