Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix PG trust metadata layer loading
Fixes #38809

Followup 760347c
  • Loading branch information
elpaso authored and nyalldawson committed Sep 18, 2020
1 parent 3d0a14e commit 67b5540
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 3 deletions.
2 changes: 1 addition & 1 deletion src/core/qgsvectorlayer.cpp
Expand Up @@ -1544,7 +1544,7 @@ bool QgsVectorLayer::readXml( const QDomNode &layer_node, QgsReadWriteContext &c
}

QgsDataProvider::ProviderOptions options { context.transformContext() };
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags();
QgsDataProvider::ReadFlags flags;
if ( mReadFlags & QgsMapLayer::FlagTrustLayerMetadata )
{
flags |= QgsDataProvider::FlagTrustDataSource;
Expand Down
4 changes: 2 additions & 2 deletions src/providers/postgres/qgspostgresprovider.cpp
Expand Up @@ -3761,8 +3761,8 @@ bool QgsPostgresProvider::getGeometryDetails()
sql = QStringLiteral(
"SELECT t.typname FROM pg_type t inner join (SELECT pg_typeof(%1) typeof FROM %2.%3 LIMIT 1) g ON oid = g.typeof"
).arg( quotedIdentifier( geomCol ),
quotedValue( schemaName ),
quotedValue( tableName ) );
quotedIdentifier( schemaName ),
quotedIdentifier( tableName ) );
}
QgsDebugMsgLevel( QStringLiteral( "Getting the spatial column type: %1" ).arg( sql ), 2 );

Expand Down
37 changes: 37 additions & 0 deletions tests/src/python/test_provider_postgres.py
Expand Up @@ -2984,6 +2984,43 @@ def testUnrestrictedGeometryType(self):
self.assertTrue(lines.isValid())
self.assertTrue(polygons.isValid())

def testTrustFlag(self):
"""Test regression https://github.com/qgis/QGIS/issues/38809"""

vl = QgsVectorLayer(
self.dbconn +
' sslmode=disable key=\'pk\' srid=4326 type=POINT table="qgis_test"."editData" (geom) sql=',
'testTrustFlag', 'postgres')

self.assertTrue(vl.isValid())

p = QgsProject.instance()
d = QTemporaryDir()
dir_path = d.path()

self.assertTrue(p.addMapLayers([vl]))
project_path = os.path.join(dir_path, 'testTrustFlag.qgs')
self.assertTrue(p.write(project_path))

del vl

p.clear()
self.assertTrue(p.read(project_path))
vl = p.mapLayersByName('testTrustFlag')[0]
self.assertTrue(vl.isValid())
self.assertFalse(p.trustLayerMetadata())

# Set the trust flag
p.setTrustLayerMetadata(True)
self.assertTrue(p.write(project_path))

# Re-read
p.clear()
self.assertTrue(p.read(project_path))
self.assertTrue(p.trustLayerMetadata())
vl = p.mapLayersByName('testTrustFlag')[0]
self.assertTrue(vl.isValid())


if __name__ == '__main__':
unittest.main()

0 comments on commit 67b5540

Please sign in to comment.