diff --git a/tests/src/python/test_provider_postgres.py b/tests/src/python/test_provider_postgres.py index 3c1390c88ce..f19975a0ba7 100644 --- a/tests/src/python/test_provider_postgres.py +++ b/tests/src/python/test_provider_postgres.py @@ -31,6 +31,7 @@ from qgis.core import ( QgsVectorLayer, QgsVectorLayerExporter, QgsFeatureRequest, + QgsFeatureSource, QgsFeature, QgsFieldConstraints, QgsDataProvider, @@ -2515,6 +2516,20 @@ class TestPyQgsPostgresProvider(unittest.TestCase, ProviderTestCase): 'username': 'my username', }) + def testHasSpatialIndex(self): + for layer_name in ('hspi_table', 'hspi_materialized_view'): + columns = {'geom_without_index': QgsFeatureSource.SpatialIndexNotPresent, 'geom_with_index': QgsFeatureSource.SpatialIndexPresent} + for (geometry_column, spatial_index) in columns.items(): + conn = 'service=\'qgis_test\'' + if 'QGIS_PGTEST_DB' in os.environ: + conn = os.environ['QGIS_PGTEST_DB'] + vl = QgsVectorLayer( + conn + + ' sslmode=disable key=\'id\' srid=4326 type=\'Polygon\' table="qgis_test"."{n}" ({c}) sql='.format(n=layer_name, c=geometry_column), + 'test', 'postgres') + self.assertTrue(vl.isValid()) + self.assertEqual(vl.hasSpatialIndex(), spatial_index) + class TestPyQgsPostgresProviderCompoundKey(unittest.TestCase, ProviderTestCase): diff --git a/tests/testdata/provider/testdata_pg.sh b/tests/testdata/provider/testdata_pg.sh index 70ebae169bb..1ff2cf16efa 100755 --- a/tests/testdata/provider/testdata_pg.sh +++ b/tests/testdata/provider/testdata_pg.sh @@ -16,6 +16,7 @@ SCRIPTS=" tests/testdata/provider/testdata_pg_json.sql tests/testdata/provider/testdata_pg_pointcloud.sql tests/testdata/provider/testdata_pg_bigint_pk.sql + tests/testdata/provider/testdata_pg_hasspatialindex.sql " SCRIPTS12=" diff --git a/tests/testdata/provider/testdata_pg_hasspatialindex.sql b/tests/testdata/provider/testdata_pg_hasspatialindex.sql new file mode 100644 index 00000000000..d7c46119aab --- /dev/null +++ b/tests/testdata/provider/testdata_pg_hasspatialindex.sql @@ -0,0 +1,16 @@ +--CREATE SCHEMA IF NOT EXISTS qgis_test; + + +DROP TABLE IF EXISTS qgis_test.hspi_table; + +CREATE TABLE qgis_test.hspi_table +( + id serial PRIMARY KEY, + geom_without_index geometry(Polygon,4326), + geom_with_index geometry(Polygon,4326) +); +CREATE INDEX hspi_index_1 ON qgis_test.hspi_table USING GIST (geom_with_index); + +CREATE MATERIALIZED view qgis_test.hspi_materialized_view AS SELECT * FROM qgis_test.hspi_table; +CREATE INDEX hspi_index_2 ON qgis_test.hspi_materialized_view USING GIST (geom_with_index); +