From: Mike Bayer Date: Fri, 18 Feb 2011 01:43:17 +0000 (-0500) Subject: - Fixed regression from 0.6 where SMALLINT and X-Git-Tag: rel_0_7b2~1^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=74f26d2279dc730f0a8a8cc9a7824465dd465626;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Fixed regression from 0.6 where SMALLINT and BIGINT types would both generate SERIAL on an integer PK column, instead of SMALLINT and BIGSERIAL [ticket:2065] --- diff --git a/CHANGES b/CHANGES index 3d834b330d..f60c5fe7d1 100644 --- a/CHANGES +++ b/CHANGES @@ -34,6 +34,12 @@ CHANGES given column exactly, not just it's parent table. [ticket:2064] +- postgresql + - Fixed regression from 0.6 where SMALLINT and + BIGINT types would both generate SERIAL + on an integer PK column, instead of + SMALLINT and BIGSERIAL [ticket:2065] + - ext - Association proxy now has correct behavior for any(), has(), and contains() when proxying diff --git a/lib/sqlalchemy/types.py b/lib/sqlalchemy/types.py index a46cb15309..71b55f33f9 100644 --- a/lib/sqlalchemy/types.py +++ b/lib/sqlalchemy/types.py @@ -1007,6 +1007,10 @@ class SmallInteger(Integer): __visit_name__ = 'small_integer' + @property + def _type_affinity(self): + return SmallInteger + class BigInteger(Integer): """A type for bigger ``int`` integers. @@ -1017,6 +1021,10 @@ class BigInteger(Integer): __visit_name__ = 'big_integer' + @property + def _type_affinity(self): + return BigInteger + class Numeric(_DateAffinity, TypeEngine): """A type for fixed precision numbers. diff --git a/test/dialect/test_postgresql.py b/test/dialect/test_postgresql.py index 1c7d0b16a4..149421404a 100644 --- a/test/dialect/test_postgresql.py +++ b/test/dialect/test_postgresql.py @@ -1495,6 +1495,23 @@ class MiscTest(TestBase, AssertsExecutionResults, AssertsCompiledSQL): : Numeric}) assert_raises(exc.InvalidRequestError, testing.db.execute, stmt) + def test_serial_integer(self): + for type_, expected in [ + (Integer, 'SERIAL'), + (BigInteger, 'BIGSERIAL'), + (SmallInteger, 'SMALLINT'), + (postgresql.INTEGER, 'SERIAL'), + (postgresql.BIGINT, 'BIGSERIAL'), + ]: + m = MetaData() + + t = Table('t', m, Column('c', type_, primary_key=True)) + ddl_compiler = testing.db.dialect.ddl_compiler(testing.db.dialect, schema.CreateTable(t)) + eq_( + ddl_compiler.get_column_specification(t.c.c), + "c %s NOT NULL" % expected + ) + class TimezoneTest(TestBase): """Test timezone-aware datetimes.