1 /*************************************************************************** 2 qgsOracleproviderconnection.h - QgsOracleProviderConnection 3 4 --------------------- 5 begin : 28.12.2020 6 copyright : (C) 2020 by Julien Cabieces 7 email : julien dot cabieces at oslandia dot com 8 *************************************************************************** 9 * * 10 * This program is free software; you can redistribute it and/or modify * 11 * it under the terms of the GNU General Public License as published by * 12 * the Free Software Foundation; either version 2 of the License, or * 13 * (at your option) any later version. * 14 * * 15 ***************************************************************************/ 16 #ifndef QGSORACLEPROVIDERCONNECTION_H 17 #define QGSORACLEPROVIDERCONNECTION_H 18 #include "qgsabstractdatabaseproviderconnection.h" 19 20 #include <QSqlQuery> 21 22 struct QgsOracleProviderResultIterator: public QgsAbstractDatabaseProviderConnection::QueryResult::QueryResultIterator 23 { 24 QgsOracleProviderResultIteratorQgsOracleProviderResultIterator25 QgsOracleProviderResultIterator( int columnCount, const QSqlQuery &query ) 26 : mColumnCount( columnCount ) 27 , mQuery( query ) 28 {} 29 30 QVariantList nextRowPrivate() override; 31 bool hasNextRowPrivate() const override; 32 33 private: 34 35 int mColumnCount = 0; 36 QSqlQuery mQuery; 37 QVariantList mNextRow; 38 39 QVariantList nextRowInternal(); 40 long long rowCountPrivate() const override; 41 }; 42 43 class QgsOracleProviderConnection : public QgsAbstractDatabaseProviderConnection 44 45 { 46 public: 47 48 explicit QgsOracleProviderConnection( const QString &name ); 49 QgsOracleProviderConnection( const QString &uri, const QVariantMap &configuration ); 50 51 // QgsAbstractProviderConnection interface 52 53 void createVectorTable( const QString &schema, 54 const QString &name, 55 const QgsFields &fields, 56 QgsWkbTypes::Type wkbType, 57 const QgsCoordinateReferenceSystem &srs, bool overwrite, 58 const QMap<QString, QVariant> *options ) const override; 59 60 QString tableUri( const QString &schema, const QString &name ) const override; 61 void dropVectorTable( const QString &schema, const QString &name ) const override; 62 void renameVectorTable( const QString &schema, const QString &name, const QString &newName ) const override; 63 64 QgsAbstractDatabaseProviderConnection::QueryResult execSql( const QString &sql, QgsFeedback *feedback = nullptr ) const override; 65 void createSpatialIndex( const QString &schema, const QString &name, const QgsAbstractDatabaseProviderConnection::SpatialIndexOptions &options = QgsAbstractDatabaseProviderConnection::SpatialIndexOptions() ) const override; 66 bool spatialIndexExists( const QString &schema, const QString &name, const QString &geometryColumn ) const override; 67 void deleteSpatialIndex( const QString &schema, const QString &name, const QString &geometryColumn ) const override; 68 QStringList schemas() const override; 69 QList<QgsAbstractDatabaseProviderConnection::TableProperty> tables( const QString &schema, 70 const TableFlags &flags = TableFlags() ) const override; 71 void store( const QString &name ) const override; 72 void remove( const QString &name ) const override; 73 QIcon icon() const override; 74 QList<QgsVectorDataProvider::NativeType> nativeTypes() const override; 75 QMultiMap<Qgis::SqlKeywordCategory, QStringList> sqlDictionary() override; 76 QgsVectorLayer *createSqlVectorLayer( const SqlVectorLayerOptions &options ) const override; 77 78 private: 79 80 QgsAbstractDatabaseProviderConnection::QueryResult executeSqlPrivate( const QString &sql, QgsFeedback *feedback = nullptr ) const; 81 void setDefaultCapabilities(); 82 83 84 // QgsAbstractDatabaseProviderConnection interface 85 public: 86 SqlVectorLayerOptions sqlOptions( const QString &layerSource ) override; 87 }; 88 89 90 #endif // QGSORACLEPROVIDERCONNECTION_H 91