From f02e7afc2c0747aa8859d294c3f8e5e99c5017ff Mon Sep 17 00:00:00 2001 From: Alexander Bruy Date: Fri, 21 Feb 2025 07:57:28 +0000 Subject: [PATCH] add support for checkPrimaryKeyUnicity parameter in decodeUri() for PostgreSQL dataprovider --- .../postgres/qgspostgresprovider.cpp | 11 ++++------ tests/src/python/test_provider_postgres.py | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/providers/postgres/qgspostgresprovider.cpp b/src/providers/postgres/qgspostgresprovider.cpp index 189972c4f02c..24c8df973d7c 100644 --- a/src/providers/postgres/qgspostgresprovider.cpp +++ b/src/providers/postgres/qgspostgresprovider.cpp @@ -5674,10 +5674,10 @@ QVariantMap QgsPostgresProviderMetadata::decodeUri( const QString &uri ) const if ( !dsUri.database().isEmpty() ) uriParts[QStringLiteral( "dbname" )] = dsUri.database(); - if ( !dsUri.host().isEmpty() ) - uriParts[QStringLiteral( "host" )] = dsUri.host(); if ( !dsUri.port().isEmpty() ) uriParts[QStringLiteral( "port" )] = dsUri.port(); + if ( !dsUri.host().isEmpty() ) + uriParts[QStringLiteral( "host" )] = dsUri.host(); if ( !dsUri.service().isEmpty() ) uriParts[QStringLiteral( "service" )] = dsUri.service(); if ( !dsUri.username().isEmpty() ) @@ -5688,10 +5688,8 @@ QVariantMap QgsPostgresProviderMetadata::decodeUri( const QString &uri ) const uriParts[QStringLiteral( "authcfg" )] = dsUri.authConfigId(); if ( dsUri.wkbType() != Qgis::WkbType::Unknown ) uriParts[QStringLiteral( "type" )] = static_cast( dsUri.wkbType() ); - if ( uri.contains( QStringLiteral( "selectatid=" ), Qt::CaseSensitivity::CaseInsensitive ) ) uriParts[QStringLiteral( "selectatid" )] = !dsUri.selectAtIdDisabled(); - if ( !dsUri.table().isEmpty() ) uriParts[QStringLiteral( "table" )] = dsUri.table(); if ( !dsUri.schema().isEmpty() ) @@ -5700,15 +5698,14 @@ QVariantMap QgsPostgresProviderMetadata::decodeUri( const QString &uri ) const uriParts[QStringLiteral( "key" )] = dsUri.keyColumn(); if ( !dsUri.srid().isEmpty() ) uriParts[QStringLiteral( "srid" )] = dsUri.srid(); - if ( uri.contains( QStringLiteral( "estimatedmetadata=" ), Qt::CaseSensitivity::CaseInsensitive ) ) uriParts[QStringLiteral( "estimatedmetadata" )] = dsUri.useEstimatedMetadata(); - if ( uri.contains( QStringLiteral( "sslmode=" ), Qt::CaseSensitivity::CaseInsensitive ) ) uriParts[QStringLiteral( "sslmode" )] = dsUri.sslMode(); - if ( !dsUri.sql().isEmpty() ) uriParts[QStringLiteral( "sql" )] = dsUri.sql(); + if ( !dsUri.param( QStringLiteral( "checkPrimaryKeyUnicity" ) ).isEmpty() ) + uriParts[QStringLiteral( "checkPrimaryKeyUnicity" )] = dsUri.param( QStringLiteral( "checkPrimaryKeyUnicity" ) ); if ( !dsUri.geometryColumn().isEmpty() ) uriParts[QStringLiteral( "geometrycolumn" )] = dsUri.geometryColumn(); diff --git a/tests/src/python/test_provider_postgres.py b/tests/src/python/test_provider_postgres.py index 818bf957139e..884d27bc480d 100644 --- a/tests/src/python/test_provider_postgres.py +++ b/tests/src/python/test_provider_postgres.py @@ -3558,6 +3558,27 @@ def testEncodeDecodeUri(self): "dbname='qgis_tests' user='myuser' srid=3763 estimatedmetadata='true' host='localhost' key='id' port='5432' sslmode='disable' type='MultiPolygon' table=\"public\".\"copas1\" (geom)", ) + self.assertEqual( + md.encodeUri( + { + "dbname": "qgis_tests", + "estimatedmetadata": True, + "geometrycolumn": "geom", + "host": "localhost", + "key": "id", + "port": "5432", + "schema": "public", + "srid": "3763", + "sslmode": 1, + "table": "copas1", + "type": 6, + "username": "myuser", + "checkPrimaryKeyUnicity": 1, + } + ), + "dbname='qgis_tests' user='myuser' srid=3763 estimatedmetadata='true' host='localhost' key='id' port='5432' sslmode='disable' type='MultiPolygon' checkPrimaryKeyUnicity='1' table=\"public\".\"copas1\" (geom)", + ) + self.assertEqual( md.encodeUri( {