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