From: Mike Bayer Date: Wed, 12 Jan 2011 20:49:59 +0000 (-0500) Subject: - dont count server_default absense as part of autoincrement, PG X-Git-Tag: rel_0_7b1~80 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0f31f36fe59aa2053271df459fbc3092a0ce599c;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - dont count server_default absense as part of autoincrement, PG will have a value here upon reflection. - mysql, others will have to check "server_default" when rendering special keywords like AUTOINCREMENT --- diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index 61dd99b85b..8b83804713 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -1309,7 +1309,7 @@ class MySQLDDLCompiler(compiler.DDLCompiler): elif column.nullable and is_timestamp and default is None: colspec.append('NULL') - if column is column.table._autoincrement_column: + if column is column.table._autoincrement_column and column.server_default is None: colspec.append('AUTO_INCREMENT') return ' '.join(colspec) diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index a818745009..a530a1a7a7 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -325,9 +325,11 @@ class Table(SchemaItem, expression.TableClause): if col.autoincrement and \ issubclass(col.type._type_affinity, types.Integer) and \ not col.foreign_keys and \ - isinstance(col.default, (type(None), Sequence)) and \ - col.server_default is None: - + isinstance(col.default, (type(None), Sequence)): + # don't look at server_default here since different backends may + # or may not have a server_default, e.g. postgresql reflected + # SERIAL cols will have a DefaultClause here but are still + # autoincrement. return col @property diff --git a/test/sql/test_defaults.py b/test/sql/test_defaults.py index 49aa8d3b37..7822e487cc 100644 --- a/test/sql/test_defaults.py +++ b/test/sql/test_defaults.py @@ -746,7 +746,6 @@ class SpecialTypePKTest(testing.TestBase): self._run_test(Sequence('foo_seq')) @testing.fails_on('mysql', "Pending [ticket:2021]") - @testing.fails_on('sqlite', "Pending [ticket:2021]") def test_server_default(self): # note that the MySQL dialect has to not render AUTOINCREMENT on this one self._run_test(server_default='1',)