From: Mike Bayer Date: Sat, 8 Aug 2009 17:24:02 +0000 (+0000) Subject: unwrapped _get_colparams a bit, dropped out an isinstance() call X-Git-Tag: rel_0_6beta1~349 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3dc86785298c6144e832fd20dba4e372868ccc8a;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git unwrapped _get_colparams a bit, dropped out an isinstance() call --- diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 6935e31e5d..a47922cc51 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 91e0e74ae4..960fc03103 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 diff --git a/test/aaa_profiling/test_zoomark.py b/test/aaa_profiling/test_zoomark.py index e413031926..e3621444f1 100644 --- a/test/aaa_profiling/test_zoomark.py +++ b/test/aaa_profiling/test_zoomark.py @@ -327,7 +327,7 @@ class ZooMarkTest(TestBase): def test_profile_1a_populate(self): self.test_baseline_1a_populate() - @profiling.function_call_count(305, {'2.4': 202}) + @profiling.function_call_count(282, {'2.4': 202}) def test_profile_2_insert(self): self.test_baseline_2_insert()