summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2011-02-17 20:43:17 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2011-02-17 20:43:17 -0500
commit74f26d2279dc730f0a8a8cc9a7824465dd465626 (patch)
treeca3ec0fdaafcfd4cdf2d748e68efb37648d42855
parent01cb94690d2d07431b2ff1b02577345c003be42b (diff)
downloadsqlalchemy-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--CHANGES6
-rw-r--r--lib/sqlalchemy/types.py8
-rw-r--r--test/dialect/test_postgresql.py17
3 files changed, 31 insertions, 0 deletions
diff --git a/CHANGES b/CHANGES
index 3d834b330..f60c5fe7d 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 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.