From ad96c991fc9b209b3c76d141206c377ccbff7921 Mon Sep 17 00:00:00 2001 From: Alessandro Pasotti Date: Sat, 3 Oct 2020 09:33:59 +0200 Subject: [PATCH] Fix DB manager does not show geography in query results Fixes #37666 --- src/providers/postgres/qgspostgresprovider.cpp | 1 + .../python/test_qgsproviderconnection_postgres.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/providers/postgres/qgspostgresprovider.cpp b/src/providers/postgres/qgspostgresprovider.cpp index 24fe7cbde71..233b1e469a9 100644 --- a/src/providers/postgres/qgspostgresprovider.cpp +++ b/src/providers/postgres/qgspostgresprovider.cpp @@ -1067,6 +1067,7 @@ bool QgsPostgresProvider::loadFields() else if ( fieldTypeName == QLatin1String( "text" ) || fieldTypeName == QLatin1String( "citext" ) || fieldTypeName == QLatin1String( "geometry" ) || + fieldTypeName == QLatin1String( "geography" ) || fieldTypeName == QLatin1String( "inet" ) || fieldTypeName == QLatin1String( "money" ) || fieldTypeName == QLatin1String( "ltree" ) || diff --git a/tests/src/python/test_qgsproviderconnection_postgres.py b/tests/src/python/test_qgsproviderconnection_postgres.py index b6ce5cdec71..f3630dc0b5c 100644 --- a/tests/src/python/test_qgsproviderconnection_postgres.py +++ b/tests/src/python/test_qgsproviderconnection_postgres.py @@ -329,6 +329,21 @@ IMPORT FOREIGN SCHEMA qgis_test LIMIT TO ( "someData" ) fields = conn.fields('qgis_test', 'someData') self.assertEqual(fields.names(), ['pk', 'cnt', 'name', 'name2', 'num_char', 'dt', 'date', 'time', 'geom']) + # Test regression GH #37666 + sql = """ + DROP TABLE IF EXISTS qgis_test.gh_37666; + CREATE TABLE qgis_test.gh_37666 (id SERIAL PRIMARY KEY); + ALTER TABLE qgis_test.gh_37666 ADD COLUMN geom geometry(POINT,4326); + ALTER TABLE qgis_test.gh_37666 ADD COLUMN geog geography(POINT,4326); + INSERT INTO qgis_test.gh_37666 (id, geom) VALUES (221, ST_GeomFromText('point(9 45)', 4326)); + UPDATE qgis_test.gh_37666 SET geog = ST_GeogFromWKB(st_asewkb(geom)); + """ + + conn.executeSql(sql) + fields = conn.fields('qgis_test', 'gh_37666') + self.assertEqual([f.name() for f in fields], ['id', 'geom', 'geog']) + self.assertEqual([f.typeName() for f in fields], ['int4', 'geometry', 'geography']) + def test_fields_no_pk(self): """Test issue: no fields are exposed for raster_columns"""