diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2009-08-08 17:24:02 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2009-08-08 17:24:02 +0000 |
| commit | 3dc86785298c6144e832fd20dba4e372868ccc8a (patch) | |
| tree | 29c78493a1fc0ddb6388b6e501a84f67e8e3566a /lib/sqlalchemy/sql | |
| parent | a7499ddfc0c9c07830b08863918c21bf5e984997 (diff) | |
| download | sqlalchemy-3dc86785298c6144e832fd20dba4e372868ccc8a.tar.gz | |
unwrapped _get_colparams a bit, dropped out an isinstance() call
Diffstat (limited to 'lib/sqlalchemy/sql')
| -rw-r--r-- | lib/sqlalchemy/sql/compiler.py | 45 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/expression.py | 2 |
2 files changed, 25 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): diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index 91e0e74ae..960fc0310 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -2964,6 +2964,8 @@ class ColumnClause(_Immutable, ColumnElement): """ __visit_name__ = 'column' + onupdate = default = server_default = server_onupdate = None + def __init__(self, text, selectable=None, type_=None, is_literal=False): self.key = self.name = text self.table = selectable |
