diff --git a/CHANGES.txt b/CHANGES.txt index a4c52a5e..fe83d711 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -5,6 +5,10 @@ Changes for crate Unreleased ========== +- Improve compatibility with Apache Superset by returning a list instead of a + set from ``get_pk_constraint``. Otherwise, Apache Superset would not show + CrateDB table metadata in the SQL Lab editor. + 2022/06/02 0.27.0 ================= diff --git a/src/crate/client/sqlalchemy/dialect.py b/src/crate/client/sqlalchemy/dialect.py index 637a8f92..b0558012 100644 --- a/src/crate/client/sqlalchemy/dialect.py +++ b/src/crate/client/sqlalchemy/dialect.py @@ -271,7 +271,7 @@ def get_pk_constraint(self, engine, table_name, schema=None, **kw): def result_fun(result): rows = result.fetchall() - return set(map(lambda el: el[0], rows)) + return list(set(map(lambda el: el[0], rows))) else: query = """SELECT constraint_name FROM information_schema.table_constraints diff --git a/src/crate/client/sqlalchemy/tests/dialect_test.py b/src/crate/client/sqlalchemy/tests/dialect_test.py index 7505b0e4..e25cf5e2 100644 --- a/src/crate/client/sqlalchemy/tests/dialect_test.py +++ b/src/crate/client/sqlalchemy/tests/dialect_test.py @@ -78,7 +78,7 @@ def test_primary_keys(self): ) self.fake_cursor.fetchall = MagicMock(return_value=[["id"], ["id2"], ["id3"]]) - eq_(insp.get_pk_constraint("characters")['constrained_columns'], {"id", "id2", "id3"}) + eq_(insp.get_pk_constraint("characters")['constrained_columns'], ["id", "id2", "id3"]) self.fake_cursor.fetchall.assert_called_once_with() in_("information_schema.key_column_usage", self.executed_statement)