From b07e37390ecd1d24c648f2c6225e8f50cd9e56fc Mon Sep 17 00:00:00 2001 From: Maxim Rylov Date: Thu, 23 Sep 2021 08:34:57 +0200 Subject: [PATCH] HANA: improve error message by unknown types --- external/odbccpp/src/odbc/Types.h | 2 ++ src/providers/hana/qgshanaconnection.cpp | 2 ++ src/providers/hana/qgshanaproviderconnection.cpp | 15 +-------------- src/providers/hana/qgshanaproviderconnection.h | 3 --- 4 files changed, 5 insertions(+), 17 deletions(-) diff --git a/external/odbccpp/src/odbc/Types.h b/external/odbccpp/src/odbc/Types.h index d1d946542ab..1eb852b7fe4 100644 --- a/external/odbccpp/src/odbc/Types.h +++ b/external/odbccpp/src/odbc/Types.h @@ -175,6 +175,8 @@ public: static constexpr int TypeTime = 92; /// Year, month, day, hour, minute, and second fields. static constexpr int TypeTimestamp = 93; + /// Unknown data type. + static constexpr int Unknown = 0; /// Variable length binary data. static constexpr int VarBinary = -3; /// Variable-length character string. diff --git a/src/providers/hana/qgshanaconnection.cpp b/src/providers/hana/qgshanaconnection.cpp index 6162e4a3855..3693561f278 100644 --- a/src/providers/hana/qgshanaconnection.cpp +++ b/src/providers/hana/qgshanaconnection.cpp @@ -826,6 +826,8 @@ void QgsHanaConnection::readTableFields( const QString &schemaName, const QStrin field.name = rsColumns->getString( 4/*COLUMN_NAME*/ ); field.type = rsColumns->getShort( 5/*DATA_TYPE*/ ); field.typeName = rsColumns->getString( 6/*TYPE_NAME*/ ); + if ( field.type == SQLDataTypes::Unknown ) + throw QgsHanaException( QString( "Type of the column '%1' is unknown" ).arg( field.name ) ); field.size = rsColumns->getInt( 7/*COLUMN_SIZE*/ ); field.precision = static_cast( rsColumns->getShort( 9/*DECIMAL_DIGITS*/ ) ); field.isSigned = field.type == SQLDataTypes::SmallInt || field.type == SQLDataTypes::Integer || diff --git a/src/providers/hana/qgshanaproviderconnection.cpp b/src/providers/hana/qgshanaproviderconnection.cpp index 688ab651ff6..7b0f3e89c74 100644 --- a/src/providers/hana/qgshanaproviderconnection.cpp +++ b/src/providers/hana/qgshanaproviderconnection.cpp @@ -439,7 +439,7 @@ QgsFields QgsHanaProviderConnection::fields( const QString &schema, const QStrin } catch ( const QgsHanaException &ex ) { - throw QgsProviderConnectionException( QObject::tr( "Could not retrieve fields: %1, %2" ).arg( uri(), ex.what() ) ); + throw QgsProviderConnectionException( QObject::tr( "Could not retrieve fields: %1" ).arg( ex.what() ) ); } } @@ -475,19 +475,6 @@ QList QgsHanaProviderConnection::nativeTypes( return types; } -QgsAbstractDatabaseProviderConnection::SqlVectorLayerOptions QgsHanaProviderConnection::sqlOptions( const QString &layerSource ) -{ - SqlVectorLayerOptions options; - const QgsDataSourceUri uri( layerSource ); - options.primaryKeyColumns = uri.keyColumn().split( ',' ); - options.disableSelectAtId = uri.selectAtIdDisabled(); - options.geometryColumn = uri.geometryColumn(); - options.filter = uri.sql(); - const QString trimmedTable { uri.table().trimmed() }; - options.sql = trimmedTable.startsWith( '(' ) ? trimmedTable.mid( 1 ).chopped( 1 ) : QStringLiteral( "SELECT * FROM %1" ).arg( uri.quotedTablename() ); - return options; -} - QVariantList QgsHanaEmptyProviderResultIterator::nextRowPrivate() { return QVariantList(); diff --git a/src/providers/hana/qgshanaproviderconnection.h b/src/providers/hana/qgshanaproviderconnection.h index 1523345d0b9..24f535abfe6 100644 --- a/src/providers/hana/qgshanaproviderconnection.h +++ b/src/providers/hana/qgshanaproviderconnection.h @@ -78,9 +78,6 @@ class QgsHanaProviderConnection : public QgsAbstractDatabaseProviderConnection void remove( const QString &name ) const override; QIcon icon() const override; QList nativeTypes() const override; - //QgsVectorLayer *createSqlVectorLayer( const SqlVectorLayerOptions &options ) const override; - //QMultiMap sqlDictionary() override; - SqlVectorLayerOptions sqlOptions( const QString &layerSource ) override; private: QgsHanaConnectionRef createConnection() const;