From 13a370d6f338eb9a3f07ae025d76c9f9aaee363f Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 23 Apr 2011 12:38:30 -0400 Subject: [PATCH] - Fixed bug whereby if FetchedValue was passed to column server_onupdate, it would not have its parent "column" assigned, added test coverage for all column default assignment patterns. [ticket:2147] --- CHANGES | 7 ++++ lib/sqlalchemy/schema.py | 2 +- test/engine/test_metadata.py | 79 ++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 6c25ec7a40..4fa2fe702f 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,13 @@ CHANGES invalid, this condition now raises a deprecation warning. [ticket:2144] +- sql + - Fixed bug whereby if FetchedValue was passed + to column server_onupdate, it would not + have its parent "column" assigned, added + test coverage for all column default assignment + patterns. [ticket:2147] + 0.6.7 ===== - orm diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 78b7495dff..6c73aabfa3 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -794,7 +794,7 @@ class Column(SchemaItem, expression.ColumnClause): if self.server_onupdate is not None: if isinstance(self.server_onupdate, FetchedValue): - args.append(self.server_default) + args.append(self.server_onupdate) else: args.append(DefaultClause(self.server_onupdate, for_update=True)) diff --git a/test/engine/test_metadata.py b/test/engine/test_metadata.py index 4b8b661998..f4678cb185 100644 --- a/test/engine/test_metadata.py +++ b/test/engine/test_metadata.py @@ -401,6 +401,85 @@ class MetaDataTest(TestBase, ComparesTables): 'fake_table', MetaData(testing.db), autoload=True) +class ColumnDefaultsTest(TestBase): + """test assignment of default fixtures to columns""" + + def _fixture(self, *arg, **kw): + return Column('x', Integer, *arg, **kw) + + def test_server_default_positional(self): + target = schema.DefaultClause('y') + c = self._fixture(target) + assert c.server_default is target + assert target.column is c + + def test_server_default_keyword_as_schemaitem(self): + target = schema.DefaultClause('y') + c = self._fixture(server_default=target) + assert c.server_default is target + assert target.column is c + + def test_server_default_keyword_as_clause(self): + target = 'y' + c = self._fixture(server_default=target) + assert c.server_default.arg == target + assert c.server_default.column is c + + def test_server_default_onupdate_positional(self): + target = schema.DefaultClause('y', for_update=True) + c = self._fixture(target) + assert c.server_onupdate is target + assert target.column is c + + def test_server_default_onupdate_keyword_as_schemaitem(self): + target = schema.DefaultClause('y', for_update=True) + c = self._fixture(server_onupdate=target) + assert c.server_onupdate is target + assert target.column is c + + def test_server_default_onupdate_keyword_as_clause(self): + target = 'y' + c = self._fixture(server_onupdate=target) + assert c.server_onupdate.arg == target + assert c.server_onupdate.column is c + + def test_column_default_positional(self): + target = schema.ColumnDefault('y') + c = self._fixture(target) + assert c.default is target + assert target.column is c + + def test_column_default_keyword_as_schemaitem(self): + target = schema.ColumnDefault('y') + c = self._fixture(default=target) + assert c.default is target + assert target.column is c + + def test_column_default_keyword_as_clause(self): + target = 'y' + c = self._fixture(default=target) + assert c.default.arg == target + assert c.default.column is c + + def test_column_default_onupdate_positional(self): + target = schema.ColumnDefault('y', for_update=True) + c = self._fixture(target) + assert c.onupdate is target + assert target.column is c + + def test_column_default_onupdate_keyword_as_schemaitem(self): + target = schema.ColumnDefault('y', for_update=True) + c = self._fixture(onupdate=target) + assert c.onupdate is target + assert target.column is c + + def test_column_default_onupdate_keyword_as_clause(self): + target = 'y' + c = self._fixture(onupdate=target) + assert c.onupdate.arg == target + assert c.onupdate.column is c + + class TableOptionsTest(TestBase, AssertsCompiledSQL): def test_prefixes(self): -- 2.47.3