summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/compiler.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/sql/compiler.py')
-rw-r--r--lib/sqlalchemy/sql/compiler.py45
1 files changed, 23 insertions, 22 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py
index 6935e31e5..a47922cc5 100644
--- a/lib/sqlalchemy/sql/compiler.py
+++ b/lib/sqlalchemy/sql/compiler.py
@@ -764,7 +764,10 @@ class SQLCompiler(engine.Compiled):
# no parameters in the statement, no parameters in the
# compiled params - return binds for all columns
if self.column_keys is None and stmt.parameters is None:
- return [(c, self._create_crud_bind_param(c, None)) for c in stmt.table.columns]
+ return [
+ (c, self._create_crud_bind_param(c, None))
+ for c in stmt.table.columns
+ ]
# if we have statement parameters - set defaults in the
# compiled params
@@ -789,6 +792,8 @@ class SQLCompiler(engine.Compiled):
self.dialect.implicit_returning and \
stmt.table.implicit_returning
+ postfetch_lastrowid = need_pks and self.dialect.postfetch_lastrowid
+
for c in stmt.table.columns:
if c.key in parameters:
value = parameters[c.key]
@@ -798,14 +803,13 @@ class SQLCompiler(engine.Compiled):
self.postfetch.append(c)
value = self.process(value.self_group())
values.append((c, value))
-
- elif isinstance(c, schema.Column):
+ else:
if self.isinsert:
if c.primary_key and \
need_pks and \
(
- c is not stmt.table._autoincrement_column or
- not self.dialect.postfetch_lastrowid
+ not postfetch_lastrowid or
+ c is not stmt.table._autoincrement_column
):
if implicit_returning:
@@ -835,26 +839,26 @@ class SQLCompiler(engine.Compiled):
values.append((c, self._create_crud_bind_param(c, None)))
self.prefetch.append(c)
-
- elif isinstance(c.default, schema.ColumnDefault):
- if isinstance(c.default.arg, sql.ClauseElement):
- values.append((c, self.process(c.default.arg.self_group())))
-
- if not c.primary_key:
- # dont add primary key column to postfetch
- self.postfetch.append(c)
- else:
- values.append((c, self._create_crud_bind_param(c, None)))
- self.prefetch.append(c)
- elif c.server_default is not None:
- if not c.primary_key:
- self.postfetch.append(c)
+
elif isinstance(c.default, schema.Sequence):
proc = self.process(c.default)
if proc is not None:
values.append((c, proc))
if not c.primary_key:
self.postfetch.append(c)
+ elif isinstance(c.default, schema.ColumnDefault) and \
+ isinstance(c.default.arg, sql.ClauseElement):
+ values.append((c, self.process(c.default.arg.self_group())))
+
+ if not c.primary_key:
+ # dont add primary key column to postfetch
+ self.postfetch.append(c)
+ elif c.default is not None:
+ values.append((c, self._create_crud_bind_param(c, None)))
+ self.prefetch.append(c)
+ elif c.server_default is not None:
+ if not c.primary_key:
+ self.postfetch.append(c)
elif self.isupdate:
if isinstance(c.onupdate, schema.ColumnDefault):
if isinstance(c.onupdate.arg, sql.ClauseElement):
@@ -865,9 +869,6 @@ class SQLCompiler(engine.Compiled):
self.prefetch.append(c)
elif c.server_onupdate is not None:
self.postfetch.append(c)
- # deprecated? or remove?
- elif isinstance(c.onupdate, schema.FetchedValue):
- self.postfetch.append(c)
return values
def visit_delete(self, delete_stmt):