From 04e3796610042fb7b2d86caccd50516248b95533 Mon Sep 17 00:00:00 2001 From: Matthias Kuhn Date: Tue, 18 Oct 2016 10:32:08 +0200 Subject: [PATCH] [postgres] Avoid crash when fetching default value fails --- src/core/qgsvectordataprovider.cpp | 4 ++-- src/core/qgsvectordataprovider.h | 6 +++--- src/providers/postgres/qgspostgresprovider.cpp | 8 +++++++- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/core/qgsvectordataprovider.cpp b/src/core/qgsvectordataprovider.cpp index b689183db89..ddebf456083 100644 --- a/src/core/qgsvectordataprovider.cpp +++ b/src/core/qgsvectordataprovider.cpp @@ -606,7 +606,7 @@ QStringList QgsVectorDataProvider::errors() const return mErrors; } -void QgsVectorDataProvider::pushError( const QString& msg ) +void QgsVectorDataProvider::pushError( const QString& msg ) const { QgsDebugMsg( msg ); mErrors << msg; @@ -722,4 +722,4 @@ QStringList QgsVectorDataProvider::smEncodings; QList QgsVectorDataProvider::discoverRelations( const QgsVectorLayer*, const QList& ) const { return QList(); -} \ No newline at end of file +} diff --git a/src/core/qgsvectordataprovider.h b/src/core/qgsvectordataprovider.h index 2addd3ac4c9..4074e47919a 100644 --- a/src/core/qgsvectordataprovider.h +++ b/src/core/qgsvectordataprovider.h @@ -445,7 +445,7 @@ class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider signals: /** Signals an error in this provider */ - void raiseError( const QString& msg ); + void raiseError( const QString& msg ) const; protected: void clearMinMaxCache(); @@ -465,7 +465,7 @@ class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider /** The names of the providers native types*/ QList< NativeType > mNativeTypes; - void pushError( const QString& msg ); + void pushError( const QString& msg ) const; /** Old-style mapping of index to name for QgsPalLabeling fix */ QgsAttrPalIndexNameHash mAttrPalIndexName; @@ -479,7 +479,7 @@ class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider QMap mOldTypeList; /** List of errors */ - QStringList mErrors; + mutable QStringList mErrors; static QStringList smEncodings; diff --git a/src/providers/postgres/qgspostgresprovider.cpp b/src/providers/postgres/qgspostgresprovider.cpp index c0eaaeaf705..ef01dae574e 100644 --- a/src/providers/postgres/qgspostgresprovider.cpp +++ b/src/providers/postgres/qgspostgresprovider.cpp @@ -1707,7 +1707,13 @@ QVariant QgsPostgresProvider::defaultValue( int fieldId ) const QgsPostgresResult res( connectionRO()->PQexec( QString( "SELECT %1" ).arg( defVal.toString() ) ) ); - return convertValue( fld.type(), fld.subType(), res.PQgetvalue( 0, 0 ) ); + if ( res.result() ) + return convertValue( fld.type(), fld.subType(), res.PQgetvalue( 0, 0 ) ); + else + { + pushError( tr( "Could not execute query" ) ); + return QVariant(); + } } return defVal;