-
-
Notifications
You must be signed in to change notification settings - Fork 3k
/
qgshanaconnection.h
117 lines (97 loc) · 4.42 KB
/
qgshanaconnection.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/***************************************************************************
qgshanaconnection.h
--------------------------------------
Date : 31-05-2019
Copyright : (C) SAP SE
Author : Maxim Rylov
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
#ifndef QGSHANACONNECTION_H
#define QGSHANACONNECTION_H
#include "qgscoordinatereferencesystem.h"
#include "qgsdatasourceuri.h"
#include "qgshanatablemodel.h"
#include "qgshanaresultset.h"
#include "qgslogger.h"
#include "qgsvectordataprovider.h"
#include "odbc/Forwards.h"
struct AttributeField
{
QString schemaName;
QString tableName;
QString name;
short type;
int srid;
QString typeName;
int size;
int precision;
bool isAutoIncrement;
bool isNullable;
bool isSigned;
QString comment;
bool isGeometry() const { return type == 29812; /* ST_GEOMETRY, ST_POINT */ }
QgsField toQgsField() const;
};
using AttributeFields = QVector<AttributeField>;
class QgsHanaConnection : public QObject
{
Q_OBJECT
public:
~QgsHanaConnection() override;
QString connInfo() const;
void execute( const QString &sql );
bool execute( const QString &sql, QString *errorMessage );
QgsHanaResultSetRef executeQuery( const QString &sql );
QgsHanaResultSetRef executeQuery( const QString &sql, const QVariantList &args );
size_t executeCountQuery( const QString &sql );
size_t executeCountQuery( const QString &sql, const QVariantList &args );
QVariant executeScalar( const QString &sql );
QVariant executeScalar( const QString &sql, const QVariantList &args );
odbc::PreparedStatementRef prepareStatement( const QString &sql );
void commit();
void rollback();
QList<QgsVectorDataProvider::NativeType> getNativeTypes();
const QString &getDatabaseVersion();
const QString &getUserName();
QgsCoordinateReferenceSystem getCrs( int srid );
QVector<QgsHanaLayerProperty> getLayers(
const QString &schemaName,
bool allowGeometrylessTables,
bool userTablesOnly = true,
const std::function<bool( const QgsHanaLayerProperty &layer )> &layerFilter = nullptr );
QVector<QgsHanaLayerProperty> getLayersFull(
const QString &schemaName,
bool allowGeometrylessTables,
bool userTablesOnly = true,
const std::function<bool( const QgsHanaLayerProperty &layer )> &layerFilter = nullptr );
void readLayerInfo( QgsHanaLayerProperty &layerProperty );
void readQueryFields( const QString &sql, const QString &schemaName, const std::function<void( const AttributeField &field )> &callback );
QVector<QgsHanaSchemaProperty> getSchemas( const QString &ownerName );
QStringList getLayerPrimaryKey( const QString &schemaName, const QString &tableName );
QgsWkbTypes::Type getColumnGeometryType( const QString &schemaName, const QString &tableName, const QString &columnName );
QString getColumnDataType( const QString &schemaName, const QString &tableName, const QString &columnName );
int getColumnSrid( const QString &schemaName, const QString &tableName, const QString &columnName );
QgsHanaResultSetRef getColumns( const QString &schemaName, const QString &tableName, const QString &fieldName );
bool isTable( const QString &schemaName, const QString &tableName );
static QgsHanaConnection *createConnection( const QgsDataSourceUri &uri );
static QgsHanaConnection *createConnection( const QgsDataSourceUri &uri, bool *canceled );
static QgsHanaConnection *createConnection( const QgsDataSourceUri &uri, bool *canceled, QString *errorMessage );
static QStringList connectionList();
private:
QgsHanaConnection( odbc::ConnectionRef connection, const QgsDataSourceUri &uri );
QStringList getPrimaryKeyCandidates( const QgsHanaLayerProperty &layerProperty );
odbc::PreparedStatementRef createPreparedStatement( const QString &sql, const QVariantList &args );
private:
odbc::ConnectionRef mConnection;
const QgsDataSourceUri mUri;
QString mDatabaseVersion;
QString mUserName;
};
#endif // QGSHANACONNECTION_H