diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-02-17 20:43:17 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-02-17 20:43:17 -0500 |
commit | 74f26d2279dc730f0a8a8cc9a7824465dd465626 (patch) | |
tree | ca3ec0fdaafcfd4cdf2d748e68efb37648d42855 | |
parent | 01cb94690d2d07431b2ff1b02577345c003be42b (diff) | |
download | sqlalchemy-74f26d2279dc730f0a8a8cc9a7824465dd465626.tar.gz |
- 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]
-rw-r--r-- | CHANGES | 6 | ||||
-rw-r--r-- | lib/sqlalchemy/types.py | 8 | ||||
-rw-r--r-- | test/dialect/test_postgresql.py | 17 |
3 files changed, 31 insertions, 0 deletions
@@ -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 a46cb1530..71b55f33f 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 1c7d0b16a..149421404 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. |