From bb0c62935562ebe28a0d862e4bdf985865bde595 Mon Sep 17 00:00:00 2001 From: Martin Dobias Date: Fri, 28 Sep 2018 18:06:09 +0200 Subject: [PATCH] Fix loading style for non-spatial tables in Postgres+SpatiaLite (fixes #19589) OGR is not affected by the bug. Oracle and MS SQL are most likely affected, but I don't have them here to test. --- src/providers/postgres/qgspostgresprovider.cpp | 14 ++++++++++++-- src/providers/spatialite/qgsspatialiteprovider.cpp | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/providers/postgres/qgspostgresprovider.cpp b/src/providers/postgres/qgspostgresprovider.cpp index 5c6bef22fa2..a6791f3c022 100644 --- a/src/providers/postgres/qgspostgresprovider.cpp +++ b/src/providers/postgres/qgspostgresprovider.cpp @@ -4819,18 +4819,28 @@ QGISEXTERN QString loadStyle( const QString &uri, QString &errCause ) return QString(); } + QString geomColumnExpr; + if ( dsUri.geometryColumn().isEmpty() ) + { + geomColumnExpr = QStringLiteral( "IS NULL" ); + } + else + { + geomColumnExpr = QStringLiteral( "=" ) + QgsPostgresConn::quotedValue( dsUri.geometryColumn() ); + } + QString selectQmlQuery = QString( "SELECT styleQML" " FROM layer_styles" " WHERE f_table_catalog=%1" " AND f_table_schema=%2" " AND f_table_name=%3" - " AND f_geometry_column=%4" + " AND f_geometry_column %4" " ORDER BY CASE WHEN useAsDefault THEN 1 ELSE 2 END" ",update_time DESC LIMIT 1" ) .arg( QgsPostgresConn::quotedValue( dsUri.database() ) ) .arg( QgsPostgresConn::quotedValue( dsUri.schema() ) ) .arg( QgsPostgresConn::quotedValue( dsUri.table() ) ) - .arg( QgsPostgresConn::quotedValue( dsUri.geometryColumn() ) ); + .arg( geomColumnExpr ); QgsPostgresResult result( conn->PQexec( selectQmlQuery ) ); diff --git a/src/providers/spatialite/qgsspatialiteprovider.cpp b/src/providers/spatialite/qgsspatialiteprovider.cpp index d6679dd78f0..cc3c3680eb4 100644 --- a/src/providers/spatialite/qgsspatialiteprovider.cpp +++ b/src/providers/spatialite/qgsspatialiteprovider.cpp @@ -5814,16 +5814,26 @@ QGISEXTERN QString loadStyle( const QString &uri, QString &errCause ) sqlite3 *sqliteHandle = handle->handle(); + QString geomColumnExpr; + if ( dsUri.geometryColumn().isEmpty() ) + { + geomColumnExpr = QStringLiteral( "IS NULL" ); + } + else + { + geomColumnExpr = QStringLiteral( "=" ) + QgsSpatiaLiteProvider::quotedValue( dsUri.geometryColumn() ); + } + QString selectQmlQuery = QString( "SELECT styleQML" " FROM layer_styles" " WHERE f_table_schema %1" " AND f_table_name=%2" - " AND f_geometry_column=%3" + " AND f_geometry_column %3" " ORDER BY CASE WHEN useAsDefault THEN 1 ELSE 2 END" ",update_time DESC LIMIT 1" ) .arg( QgsSpatiaLiteProvider::tableSchemaCondition( dsUri ) ) .arg( QgsSpatiaLiteProvider::quotedValue( dsUri.table() ) ) - .arg( QgsSpatiaLiteProvider::quotedValue( dsUri.geometryColumn() ) ); + .arg( geomColumnExpr ); char **results = nullptr; int rows;