diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-03-30 16:25:41 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-03-30 16:25:41 -0400 |
commit | e6cbf44d6dd7992daad940f60833735362518bfa (patch) | |
tree | b117e0a8170b7f83e8b4f08531a145d6000aa426 | |
parent | 9bdbf19d54174c1077689bc472dc088c9b06aa24 (diff) | |
parent | abeb762f885ae59cc05380ec7702680df6fae7ef (diff) | |
download | sqlalchemy-e6cbf44d6dd7992daad940f60833735362518bfa.tar.gz |
Merge remote-tracking branch 'origin/pr/230'
-rw-r--r-- | lib/sqlalchemy/dialects/sqlite/base.py | 10 | ||||
-rw-r--r-- | test/dialect/test_sqlite.py | 37 | ||||
-rw-r--r-- | test/requirements.py | 2 |
3 files changed, 44 insertions, 5 deletions
diff --git a/lib/sqlalchemy/dialects/sqlite/base.py b/lib/sqlalchemy/dialects/sqlite/base.py index b50170759..ddd869448 100644 --- a/lib/sqlalchemy/dialects/sqlite/base.py +++ b/lib/sqlalchemy/dialects/sqlite/base.py @@ -1297,12 +1297,20 @@ class SQLiteDialect(default.DefaultDialect): @reflection.cache def get_pk_constraint(self, connection, table_name, schema=None, **kw): + constraint_name = None + table_data = self._get_table_sql(connection, table_name, schema=schema) + if table_data: + PK_PATTERN = 'CONSTRAINT (\w+) PRIMARY KEY' + result = re.search(PK_PATTERN, table_data, re.I) + constraint_name = result.group(1) if result else None + cols = self.get_columns(connection, table_name, schema, **kw) pkeys = [] for col in cols: if col['primary_key']: pkeys.append(col['name']) - return {'constrained_columns': pkeys, 'name': None} + + return {'constrained_columns': pkeys, 'name': constraint_name} @reflection.cache def get_foreign_keys(self, connection, table_name, schema=None, **kw): diff --git a/test/dialect/test_sqlite.py b/test/dialect/test_sqlite.py index 33903ff89..580950b12 100644 --- a/test/dialect/test_sqlite.py +++ b/test/dialect/test_sqlite.py @@ -8,7 +8,7 @@ from sqlalchemy.testing import eq_, assert_raises, \ assert_raises_message, is_ from sqlalchemy import Table, select, bindparam, Column,\ MetaData, func, extract, ForeignKey, text, DefaultClause, and_, \ - create_engine, UniqueConstraint, Index + create_engine, UniqueConstraint, Index, PrimaryKeyConstraint from sqlalchemy.types import Integer, String, Boolean, DateTime, Date, Time from sqlalchemy import types as sqltypes from sqlalchemy import event, inspect @@ -1130,6 +1130,18 @@ class ConstraintReflectionTest(fixtures.TestBase): prefixes=['TEMPORARY'] ) + Table( + 'p', meta, + Column('id', Integer), + PrimaryKeyConstraint('id', name='pk_name'), + ) + + Table( + 'q', meta, + Column('id', Integer), + PrimaryKeyConstraint('id'), + ) + meta.create_all(conn) # will contain an "autoindex" @@ -1224,8 +1236,6 @@ class ConstraintReflectionTest(fixtures.TestBase): def test_unnamed_inline_foreign_key_quoted(self): inspector = Inspector(testing.db) - - inspector = Inspector(testing.db) fks = inspector.get_foreign_keys('e1') eq_( fks, @@ -1342,6 +1352,27 @@ class ConstraintReflectionTest(fixtures.TestBase): [{'column_names': ['x'], 'name': None}] ) + def test_primary_key_constraint_named(self): + inspector = Inspector(testing.db) + eq_( + inspector.get_pk_constraint("p"), + {'constrained_columns': ['id'], 'name': 'pk_name'} + ) + + def test_primary_key_constraint_unnamed(self): + inspector = Inspector(testing.db) + eq_( + inspector.get_pk_constraint("q"), + {'constrained_columns': ['id'], 'name': None} + ) + + def test_primary_key_constraint_no_pk(self): + inspector = Inspector(testing.db) + eq_( + inspector.get_pk_constraint("d"), + {'constrained_columns': [], 'name': None} + ) + class SavepointTest(fixtures.TablesTest): diff --git a/test/requirements.py b/test/requirements.py index 4ef5d62a3..9e041709c 100644 --- a/test/requirements.py +++ b/test/requirements.py @@ -532,7 +532,7 @@ class DefaultRequirements(SuiteRequirements): """Target driver reflects the name of primary key constraints.""" return fails_on_everything_except('postgresql', 'oracle', 'mssql', - 'sybase') + 'sybase', 'sqlite') @property def json_type(self): |