QGIS API Documentation 3.99.0-Master (d270888f95f)
Loading...
Searching...
No Matches
qgsabstractdatabaseproviderconnection.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsabstractdatabaseproviderconnection.h - QgsAbstractDatabaseProviderConnection
3
4 ---------------------
5 begin : 2.8.2019
6 copyright : (C) 2019 by Alessandro Pasotti
7 email : elpaso at itopen dot it
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 QGSABSTRACTDATABASEPROVIDERCONNECTION_H
17#define QGSABSTRACTDATABASEPROVIDERCONNECTION_H
18
19#include "qgis_core.h"
23#include "qgsfields.h"
25
26#include <QObject>
27#include <QString>
28
29using namespace Qt::StringLiterals;
30
31class QgsFeedback;
32class QgsFieldDomain;
33class QgsWeakRelation;
35
36
50{
51
52 Q_GADGET
53
54 public:
55
63 {
64 Aspatial = 1 << 1,
65 Vector = 1 << 2,
66 Raster = 1 << 3,
67 View = 1 << 4,
68 MaterializedView = 1 << 5,
69 Foreign = 1 << 6,
70 IncludeSystemTables = 1 << 7,
71 };
72
73 Q_ENUM( TableFlag )
74 Q_DECLARE_FLAGS( TableFlags, TableFlag )
75 Q_FLAG( TableFlags )
76
89 struct CORE_EXPORT QueryResult
90 {
91
95 QStringList columns() const;
96
104 QList<QList<QVariant> > rows( QgsFeedback *feedback = nullptr );
105
112 bool hasNextRow() const;
113
120 QList<QVariant> nextRow() const;
121
127 long long fetchedRowCount( ) const;
128
134 long long rowCount( ) const;
135
136
137#ifdef SIP_RUN
138 // Python iterator
139 QueryResult *__iter__();
140 % MethodCode
141 sipRes = sipCpp;
142 % End
143
144 SIP_PYOBJECT __next__();
145 % MethodCode
146 QList<QVariant> result;
147 Py_BEGIN_ALLOW_THREADS
148 result = sipCpp->nextRow( );
149 Py_END_ALLOW_THREADS
150 if ( ! result.isEmpty() )
151 {
152 const sipTypeDef *qvariantlist_type = sipFindType( "QList<QVariant>" );
153 sipRes = sipConvertFromNewType( new QList<QVariant>( result ), qvariantlist_type, Py_None );
154 }
155 else
156 {
157 PyErr_SetString( PyExc_StopIteration, "" );
158 }
159 % End
160#endif
161
163
169 struct CORE_EXPORT QueryResultIterator SIP_SKIP
170 {
172 QVariantList nextRow();
173
175 bool hasNextRow() const;
176
178 long long fetchedRowCount();
179
181 long long rowCount();
182
183 virtual ~QueryResultIterator() = default;
184
185 private:
186
187 virtual QVariantList nextRowPrivate() = 0;
188 virtual bool hasNextRowPrivate() const = 0;
189 virtual long long rowCountPrivate() const = 0;
190
191 mutable qlonglong mFetchedRowCount = 0;
192 mutable QMutex mMutex;
193
194 };
195
201 void appendColumn( const QString &columnName ) SIP_SKIP;
202
208 QueryResult( std::shared_ptr<QueryResultIterator> iterator ) SIP_SKIP;
209
214 QueryResult( ) = default SIP_SKIP;
215
219 double queryExecutionTime( ) const;
220
224 void setQueryExecutionTime( double queryExecutionTime );
225
227
228 private:
229
230 mutable std::shared_ptr<QueryResultIterator> mResultIterator;
231 QStringList mColumns;
233 double mQueryExecutionTime = 0;
234
235 };
236
247 static bool splitSimpleQuery( const QString &sql, QStringList &columns, QStringList &tables, QString &where ) SIP_SKIP;
248
249
256 struct CORE_EXPORT SqlVectorLayerOptions
257 {
259 QString sql;
261 QString filter;
263 QString layerName;
265 QStringList primaryKeyColumns;
269 bool disableSelectAtId = false;
270
271 };
272
284 struct CORE_EXPORT TableProperty
285 {
286
287#ifdef SIP_RUN
288 SIP_PYOBJECT __repr__();
289 % MethodCode
290 QString str = u"<QgsAbstractDatabaseProviderConnection.TableProperty: '%1'>"_s.arg( sipCpp->tableName() );
291 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
292 % End
293#endif
294
299 struct CORE_EXPORT GeometryColumnType
300 {
301#ifdef SIP_RUN
302 SIP_PYOBJECT __repr__();
303 % MethodCode
304 QString str = u"<QgsAbstractDatabaseProviderConnection.TableProperty.GeometryColumnType: '%1, %2'>"_s.arg( QgsWkbTypes::displayString( sipCpp->wkbType ), sipCpp->crs.authid() );
305 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
306 % End
307#endif
310
311 // TODO c++20 - replace with = default
312 inline bool operator==( const GeometryColumnType &other ) const
313 {
314 return this->crs == other.crs && this->wkbType == other.wkbType;
315 }
316 };
317
318 public:
319
325 QString tableName() const;
326
332 void setTableName( const QString &name );
333
337 void addGeometryColumnType( Qgis::WkbType type, const QgsCoordinateReferenceSystem &crs );
338
344 QList<QgsAbstractDatabaseProviderConnection::TableProperty::GeometryColumnType> geometryColumnTypes() const;
345
349 void setGeometryColumnTypes( const QList<QgsAbstractDatabaseProviderConnection::TableProperty::GeometryColumnType> &geometryColumnTypes );
350
358 QString defaultName() const;
359
364 TableProperty at( int index ) const;
365
369 QString schema() const;
370
374 void setSchema( const QString &schema );
375
379 QString geometryColumn() const;
380
384 void setGeometryColumn( const QString &geometryColumn );
385
389 QStringList primaryKeyColumns() const;
390
394 void setPrimaryKeyColumns( const QStringList &primaryKeyColumns );
395
399 QList<QgsCoordinateReferenceSystem> crsList() const;
400
404 TableFlags flags() const;
405
409 void setFlags( const TableFlags &flags );
410
414 QString comment() const;
415
419 void setComment( const QString &comment );
420
427 QVariantMap info() const;
428
435 void setInfo( const QVariantMap &info );
436
442 int geometryColumnCount() const;
443
447 void setGeometryColumnCount( int geometryColumnCount );
448
452 void setFlag( const TableFlag &flag );
453
460 int maxCoordinateDimensions() const;
461
463
464 private:
465
467 QList<GeometryColumnType> mGeometryColumnTypes;
469 QString mSchema;
471 QString mTableName;
473 QString mGeometryColumn;
475 int mGeometryColumnCount = 0;
477 QStringList mPkColumns;
478 TableFlags mFlags;
479 QString mComment;
481 QVariantMap mInfo;
482 };
483
489 struct CORE_EXPORT SpatialIndexOptions
490 {
493 };
494
501 {
507 CreateSchema = 1 << 6,
508 DropSchema = 1 << 7,
509 RenameSchema = 1 << 8,
510 ExecuteSql = 1 << 9,
511 Vacuum = 1 << 10,
512 Tables = 1 << 11,
513 Schemas = 1 << 12,
514 SqlLayers = 1 << 13,
515 TableExists = 1 << 14,
516 Spatial = 1 << 15,
520 DeleteField = 1 << 19,
522 AddField = 1 << 21,
525 SetFieldDomain = 1 << 24,
526 AddFieldDomain = 1 << 25,
527 RenameField = 1 << 26,
529 AddRelationship = 1 << 28,
532 MoveTableToSchema = 1u << 31,
533 };
534 Q_ENUM( Capability )
535 Q_DECLARE_FLAGS( Capabilities, Capability )
536 Q_FLAG( Capabilities )
537
544 {
545 Z = 1 << 1,
546 M = 1 << 2,
547 SinglePart = 1 << 3,
548 Curves = 1 << 4,
549 SinglePoint = 1 << 5,
551 SinglePolygon = 1 << 7,
553 };
554 // TODO QGIS 5.0 -- remove SinglePart
555
556 Q_ENUM( GeometryColumnCapability )
559
565 QgsAbstractDatabaseProviderConnection( const QString &name );
566
573 QgsAbstractDatabaseProviderConnection( const QString &uri, const QVariantMap &configuration );
574
575
576 // Public interface
577
584
591 Qgis::DatabaseProviderConnectionCapabilities2 capabilities2() const;
592
599
605 virtual Qgis::DatabaseProviderTableImportCapabilities tableImportCapabilities() const = 0;
606
611 virtual Qgis::SqlLayerDefinitionCapabilities sqlLayerDefinitionCapabilities();
612
613 // Operations interface
614
621 virtual QString tableUri( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
622
628 virtual void createVectorTable( const QString &schema, const QString &name, const QgsFields &fields, Qgis::WkbType wkbType, const QgsCoordinateReferenceSystem &srs, bool overwrite, const QMap<QString, QVariant> *options ) const SIP_THROW( QgsProviderConnectionException );
629
636 struct CORE_EXPORT VectorLayerExporterOptions
637 {
639 QString layerName;
640
642 QString schema;
643
646
648 QStringList primaryKeyColumns;
649
652
653 };
654
665
671 virtual bool tableExists( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
672
679 virtual void dropVectorTable( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
680
687 virtual void dropRasterTable( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
688
695 virtual void renameVectorTable( const QString &schema, const QString &name, const QString &newName ) const SIP_THROW( QgsProviderConnectionException );
696
703 virtual void renameRasterTable( const QString &schema, const QString &name, const QString &newName ) const SIP_THROW( QgsProviderConnectionException );
704
710 virtual void createSchema( const QString &name ) const SIP_THROW( QgsProviderConnectionException );
711
720 virtual void dropSchema( const QString &name, bool force = false ) const SIP_THROW( QgsProviderConnectionException );
721
733 virtual void deleteField( const QString &fieldName, const QString &schema, const QString &tableName, bool force = false ) const SIP_THROW( QgsProviderConnectionException );
734
745 virtual void addField( const QgsField &field, const QString &schema, const QString &tableName ) const SIP_THROW( QgsProviderConnectionException );
746
760 virtual void renameField( const QString &schema, const QString &tableName, const QString &name, const QString &newName ) const SIP_THROW( QgsProviderConnectionException );
761
768 virtual void renameSchema( const QString &name, const QString &newName ) const SIP_THROW( QgsProviderConnectionException );
769
776 virtual QList<QList<QVariant>> executeSql( const QString &sql, QgsFeedback *feedback = nullptr ) const SIP_THROW( QgsProviderConnectionException );
777
790
806 virtual bool validateSqlVectorLayer( const SqlVectorLayerOptions &options, QString &message SIP_OUT ) const SIP_THROW( QgsProviderConnectionException );
807
815 virtual SqlVectorLayerOptions sqlOptions( const QString &layerSource ) SIP_THROW( QgsProviderConnectionException );
816
824 virtual QueryResult execSql( const QString &sql, QgsFeedback *feedback = nullptr ) const SIP_THROW( QgsProviderConnectionException );
825
831 virtual void vacuum( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
832
842
850 virtual bool spatialIndexExists( const QString &schema, const QString &name, const QString &geometryColumn ) const SIP_THROW( QgsProviderConnectionException );
851
859 virtual void deleteSpatialIndex( const QString &schema, const QString &name, const QString &geometryColumn ) const SIP_THROW( QgsProviderConnectionException );
860
870 virtual QList<QgsAbstractDatabaseProviderConnection::TableProperty> tables( const QString &schema = QString(), const QgsAbstractDatabaseProviderConnection::TableFlags &flags = QgsAbstractDatabaseProviderConnection::TableFlags(), QgsFeedback *feedback = nullptr ) const SIP_SKIP;
871
881 virtual QgsAbstractDatabaseProviderConnection::TableProperty table( const QString &schema, const QString &table, QgsFeedback *feedback = nullptr ) const SIP_THROW( QgsProviderConnectionException );
882
890 QList<QgsAbstractDatabaseProviderConnection::TableProperty> tablesInt( const QString &schema = QString(), const int flags = 0 ) const SIP_THROW( QgsProviderConnectionException ) SIP_PYNAME( tables );
891
892
893 // TODO: return more schema information and not just the name
894
900 virtual QStringList schemas() const SIP_THROW( QgsProviderConnectionException );
901
914 virtual QgsFields fields( const QString &schema, const QString &table, QgsFeedback *feedback = nullptr ) const SIP_THROW( QgsProviderConnectionException );
915
923
929 QString providerKey() const;
930
940 virtual QMultiMap<Qgis::SqlKeywordCategory, QStringList> sqlDictionary();
941
948 virtual QSet< QString > illegalFieldNames() const;
949
959 virtual QString defaultPrimaryKeyColumnName() const;
960
970 virtual QString defaultGeometryColumnName() const;
971
982 virtual QStringList fieldDomainNames() const SIP_THROW( QgsProviderConnectionException );
983
989 virtual QList< Qgis::FieldDomainType > supportedFieldDomainTypes() const;
990
1003 virtual QgsFieldDomain *fieldDomain( const QString &name ) const SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
1004
1016 virtual void setFieldDomainName( const QString &fieldName, const QString &schema, const QString &tableName, const QString &domainName ) const SIP_THROW( QgsProviderConnectionException );
1017
1027 virtual void addFieldDomain( const QgsFieldDomain &domain, const QString &schema ) const SIP_THROW( QgsProviderConnectionException );
1028
1038 virtual void updateFieldDomain( QgsFieldDomain *domain, const QString &schema ) const SIP_THROW( QgsProviderConnectionException );
1039
1051 virtual void deleteFieldDomain( const QString &name, const QString &schema ) const SIP_THROW( QgsProviderConnectionException );
1052
1064 virtual void setFieldAlias( const QString &fieldName, const QString &schema, const QString &tableName, const QString &alias ) const SIP_THROW( QgsProviderConnectionException );
1065
1076 virtual void setTableComment( const QString &schema, const QString &tableName, const QString &comment ) const SIP_THROW( QgsProviderConnectionException );
1077
1089 virtual void setFieldComment( const QString &fieldName, const QString &schema, const QString &tableName, const QString &comment ) const SIP_THROW( QgsProviderConnectionException );
1090
1101 virtual void moveTableToSchema( const QString &sourceSchema, const QString &tableName, const QString &targetSchema ) const SIP_THROW( QgsProviderConnectionException );
1102
1103
1109#ifndef SIP_RUN
1110 virtual QList< Qgis::RelationshipCardinality > supportedRelationshipCardinalities() const;
1111#else
1112 SIP_PYOBJECT supportedRelationshipCardinalities() const SIP_TYPEHINT( List[Qgis.RelationshipCardinality] );
1113 % MethodCode
1114 // adapted from the qpymultimedia_qlist.sip file from the PyQt6 sources
1115
1116 const QList< Qgis::RelationshipCardinality > cppRes = sipCpp->supportedRelationshipCardinalities();
1117
1118 PyObject *l = PyList_New( cppRes.size() );
1119
1120 if ( !l )
1121 sipIsErr = 1;
1122 else
1123 {
1124 for ( int i = 0; i < cppRes.size(); ++i )
1125 {
1126 PyObject *eobj = sipConvertFromEnum( static_cast<int>( cppRes.at( i ) ),
1127 sipType_Qgis_RelationshipCardinality );
1128
1129 if ( !eobj )
1130 {
1131 sipIsErr = 1;
1132 }
1133
1134 PyList_SetItem( l, i, eobj );
1135 }
1136
1137 if ( !sipIsErr )
1138 {
1139 sipRes = l;
1140 }
1141 else
1142 {
1143 Py_DECREF( l );
1144 }
1145 }
1146 % End
1147#endif
1148
1154#ifndef SIP_RUN
1155 virtual QList< Qgis::RelationshipStrength > supportedRelationshipStrengths() const;
1156#else
1157 SIP_PYOBJECT supportedRelationshipStrengths() const SIP_TYPEHINT( List[Qgis.RelationshipStrength] );
1158 % MethodCode
1159 // adapted from the qpymultimedia_qlist.sip file from the PyQt6 sources
1160
1161 const QList< Qgis::RelationshipStrength > cppRes = sipCpp->supportedRelationshipStrengths();
1162
1163 PyObject *l = PyList_New( cppRes.size() );
1164
1165 if ( !l )
1166 sipIsErr = 1;
1167 else
1168 {
1169 for ( int i = 0; i < cppRes.size(); ++i )
1170 {
1171 PyObject *eobj = sipConvertFromEnum( static_cast<int>( cppRes.at( i ) ),
1172 sipType_Qgis_RelationshipStrength );
1173
1174 if ( !eobj )
1175 {
1176 sipIsErr = 1;
1177 }
1178
1179 PyList_SetItem( l, i, eobj );
1180 }
1181
1182 if ( !sipIsErr )
1183 {
1184 sipRes = l;
1185 }
1186 else
1187 {
1188 Py_DECREF( l );
1189 }
1190 }
1191 % End
1192#endif
1193
1199 virtual Qgis::RelationshipCapabilities supportedRelationshipCapabilities() const;
1200
1211 virtual QStringList relatedTableTypes() const;
1212
1225 virtual QList< QgsWeakRelation > relationships( const QString &schema = QString(), const QString &tableName = QString() ) const SIP_THROW( QgsProviderConnectionException );
1226
1233 virtual void addRelationship( const QgsWeakRelation &relationship ) const SIP_THROW( QgsProviderConnectionException );
1234
1241 virtual void updateRelationship( const QgsWeakRelation &relationship ) const SIP_THROW( QgsProviderConnectionException );
1242
1249 virtual void deleteRelationship( const QgsWeakRelation &relationship ) const SIP_THROW( QgsProviderConnectionException );
1250
1258 virtual QgsProviderSqlQueryBuilder *queryBuilder() const SIP_FACTORY;
1259
1280 virtual QList<QgsLayerMetadataProviderResult> searchLayerMetadata( const QgsMetadataSearchContext &searchContext, const QString &searchString = QString(), const QgsRectangle &geographicExtent = QgsRectangle(), QgsFeedback *feedback = nullptr ) const SIP_THROW( QgsProviderConnectionException, QgsNotSupportedException );
1281
1282 protected:
1283
1285
1291 void checkCapability( Capability capability ) const;
1292
1298 void checkCapability( Qgis::DatabaseProviderConnectionCapability2 capability ) const;
1299
1301 QString sanitizeSqlForQueryLayer( const QString &sql ) const SIP_SKIP;
1302
1304
1306 Qgis::DatabaseProviderConnectionCapabilities2 mCapabilities2 = Qgis::DatabaseProviderConnectionCapabilities2() SIP_SKIP;
1307
1309 Qgis::SqlLayerDefinitionCapabilities mSqlLayerDefinitionCapabilities = Qgis::SqlLayerDefinitionCapabilities() SIP_SKIP;
1312
1313};
1314
1316
1317#endif // QGSABSTRACTDATABASEPROVIDERCONNECTION_H
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:59
QFlags< RelationshipCapability > RelationshipCapabilities
Relationship capabilities.
Definition qgis.h:4502
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:280
@ NoGeometry
No geometry.
Definition qgis.h:298
virtual QString defaultGeometryColumnName() const
Returns the default name to use for a geometry column for the connection.
virtual void setFieldComment(const QString &fieldName, const QString &schema, const QString &tableName, const QString &comment) const
Sets the comment for the existing field with the specified name.
virtual Qgis::DatabaseProviderTableImportCapabilities tableImportCapabilities() const =0
Represents capabilities of the database provider connection when importing table data.
virtual void createVectorTable(const QString &schema, const QString &name, const QgsFields &fields, Qgis::WkbType wkbType, const QgsCoordinateReferenceSystem &srs, bool overwrite, const QMap< QString, QVariant > *options) const
Creates an empty table with name in the given schema (schema is ignored if not supported by the backe...
virtual QgsVectorLayer * createSqlVectorLayer(const SqlVectorLayerOptions &options) const
Creates and returns a (possibly invalid) vector layer based on a SQL statement and options.
virtual bool tableExists(const QString &schema, const QString &name) const
Checks whether a table name exists in the given schema.
QList< QgsAbstractDatabaseProviderConnection::TableProperty > tablesInt(const QString &schema=QString(), const int flags=0) const
Returns information on the tables in the given schema.
virtual void renameField(const QString &schema, const QString &tableName, const QString &name, const QString &newName) const
Renames an existing field.
GeometryColumnCapability
The GeometryColumnCapability enum represents the geometry column features supported by the connection...
@ PolyhedralSurfaces
Supports polyhedral surfaces (PolyhedralSurface, TIN) types (as distinct from multi polygon types).
@ SinglePart
Multi and single part types are distinct types. Deprecated since QGIS 3.28 – use the granular SingleP...
@ SinglePolygon
Supports single polygon types (as distinct from multi polygon types).
@ SinglePoint
Supports single point types (as distinct from multi point types).
@ SingleLineString
Supports single linestring types (as distinct from multi line types).
virtual void deleteFieldDomain(const QString &name, const QString &schema) const
Deletes the field domain with the specified name from the provider.
virtual void dropSchema(const QString &name, bool force=false) const
Drops an entire schema with the specified name.
Qgis::SqlLayerDefinitionCapabilities mSqlLayerDefinitionCapabilities
virtual void addField(const QgsField &field, const QString &schema, const QString &tableName) const
Adds a field.
virtual QList< QgsAbstractDatabaseProviderConnection::TableProperty > tables(const QString &schema=QString(), const QgsAbstractDatabaseProviderConnection::TableFlags &flags=QgsAbstractDatabaseProviderConnection::TableFlags(), QgsFeedback *feedback=nullptr) const
Returns information on the tables in the given schema.
Qgis::DatabaseProviderConnectionCapabilities2 mCapabilities2
virtual void vacuum(const QString &schema, const QString &name) const
Vacuum the database table with given schema and name (schema is ignored if not supported by the backe...
virtual QList< Qgis::FieldDomainType > supportedFieldDomainTypes() const
Returns a list of field domain types which are supported by the provider.
virtual void renameVectorTable(const QString &schema, const QString &name, const QString &newName) const
Renames a vector or aspatial table with given schema (schema is ignored if not supported by the backe...
virtual void createSchema(const QString &name) const
Creates a new schema with the specified name.
virtual void deleteSpatialIndex(const QString &schema, const QString &name, const QString &geometryColumn) const
Deletes the existing spatial index for the database table with given schema, name and geometryColumn ...
virtual void dropRasterTable(const QString &schema, const QString &name) const
Drops a raster table with given schema (schema is ignored if not supported by the backend) and name.
Qgis::DatabaseProviderConnectionCapabilities2 capabilities2() const
Returns extended connection capabilities.
virtual QueryResult execSql(const QString &sql, QgsFeedback *feedback=nullptr) const
Executes raw sql and returns the (possibly empty) query results, optionally feedback can be provided.
virtual void setFieldDomainName(const QString &fieldName, const QString &schema, const QString &tableName, const QString &domainName) const
Sets the field domain name for the existing field with the specified name.
virtual void deleteField(const QString &fieldName, const QString &schema, const QString &tableName, bool force=false) const
Deletes the field with the specified name.
virtual QString tableUri(const QString &schema, const QString &name) const
Returns the URI string for the given table and schema.
QFlags< GeometryColumnCapability > GeometryColumnCapabilities
Capability
The Capability enum represents the operations supported by the connection.
@ RetrieveFieldDomain
Can retrieve field domain details from provider via fieldDomain().
@ CreateSpatialIndex
The connection can create spatial indices.
@ AddRelationship
Can add new relationships to the database via addRelationship().
@ SqlLayers
Can create vector layers from SQL SELECT queries.
@ CreateVectorTable
Can CREATE a vector (or aspatial) table/layer.
@ DropVectorTable
Can DROP a vector (or aspatial) table/layer.
@ DeleteSpatialIndex
The connection can delete spatial indices for tables.
@ RetrieveRelationships
Can retrieve relationships from the database.
@ SetFieldDomain
Can set the domain for an existing field via setFieldDomainName().
@ AddFieldDomain
Can add new field domains to the database via addFieldDomain().
@ DeleteRelationship
Can delete existing relationships from the database via deleteRelationship().
@ RenameVectorTable
Can RENAME a vector (or aspatial) table/layer.
@ RenameField
Can rename existing fields via renameField().
@ MoveTableToSchema
Can move table to another schema via moveTableToAnotherSchema().
@ ExecuteSql
Can execute raw SQL queries (without returning results).
@ UpdateRelationship
Can update existing relationships in the database via updateRelationship().
@ SpatialIndexExists
The connection can determine if a spatial index exists.
@ ListFieldDomains
Can return a list of field domain names via fieldDomainNames().
@ DeleteFieldCascade
Can delete an existing field/column with cascade.
@ Schemas
Can list schemas (if not set, the connection does not support schemas).
virtual void createSpatialIndex(const QString &schema, const QString &name, const QgsAbstractDatabaseProviderConnection::SpatialIndexOptions &options=QgsAbstractDatabaseProviderConnection::SpatialIndexOptions()) const
Creates a spatial index for the database table with given schema and name (schema is ignored if not s...
static bool splitSimpleQuery(const QString &sql, QStringList &columns, QStringList &tables, QString &where)
Splits a simple query in the form "SELECT column(s) FROM table(s) [WHERE ...]" into its components.
virtual GeometryColumnCapabilities geometryColumnCapabilities()
Returns connection geometry column capabilities (Z, M, SinglePart, Curves).
virtual Qgis::SqlLayerDefinitionCapabilities sqlLayerDefinitionCapabilities()
Returns SQL layer definition capabilities (Filters, GeometryColumn, PrimaryKeys).
virtual void renameRasterTable(const QString &schema, const QString &name, const QString &newName) const
Renames a raster table with given schema (schema is ignored if not supported by the backend) and name...
virtual void dropVectorTable(const QString &schema, const QString &name) const
Drops a vector (or aspatial) table with given schema (schema is ignored if not supported by the backe...
virtual QStringList fieldDomainNames() const
Returns a list of field domain names present on the provider.
virtual void setFieldAlias(const QString &fieldName, const QString &schema, const QString &tableName, const QString &alias) const
Sets the alias for the existing field with the specified name.
virtual void renameSchema(const QString &name, const QString &newName) const
Renames a schema with the specified name.
virtual void addFieldDomain(const QgsFieldDomain &domain, const QString &schema) const
Adds a new field domain to the database.
virtual QList< QList< QVariant > > executeSql(const QString &sql, QgsFeedback *feedback=nullptr) const
Executes raw sql and returns the (possibly empty) list of results in a multi-dimensional array,...
virtual bool spatialIndexExists(const QString &schema, const QString &name, const QString &geometryColumn) const
Determines whether a spatial index exists for the database table with given schema,...
virtual QgsAbstractDatabaseProviderConnection::TableProperty table(const QString &schema, const QString &table, QgsFeedback *feedback=nullptr) const
Returns information on a table in the given schema.
virtual QMultiMap< Qgis::SqlKeywordCategory, QStringList > sqlDictionary()
Returns a dictionary of SQL keywords supported by the provider.
virtual SqlVectorLayerOptions sqlOptions(const QString &layerSource)
Returns the SQL layer options from a layerSource.
virtual QSet< QString > illegalFieldNames() const
Returns a list of field names which are considered illegal by the connection and should not be used w...
virtual QStringList schemas() const
Returns information about the existing schemas.
virtual QList< Qgis::RelationshipCardinality > supportedRelationshipCardinalities() const
Returns a list of relationship cardinalities which are supported by the provider.
virtual QString createVectorLayerExporterDestinationUri(const QgsAbstractDatabaseProviderConnection::VectorLayerExporterOptions &options, QVariantMap &providerOptions) const
Creates a URI for use with QgsVectorLayerExporter corresponding to given destination table options fo...
virtual void moveTableToSchema(const QString &sourceSchema, const QString &tableName, const QString &targetSchema) const
Move table to a different schema.
virtual void updateFieldDomain(QgsFieldDomain *domain, const QString &schema) const
Update an existing field domain in the database, the domain is identified by name.
virtual QgsFieldDomain * fieldDomain(const QString &name) const
Returns the field domain with the specified name from the provider.
QgsAbstractDatabaseProviderConnection(const QString &name)
Creates a new connection with name by reading its configuration from the settings.
virtual void setTableComment(const QString &schema, const QString &tableName, const QString &comment) const
Sets the comment for the existing table with the specified name.
virtual QList< QgsVectorDataProvider::NativeType > nativeTypes() const =0
Returns a list of native types supported by the connection.
virtual QString defaultPrimaryKeyColumnName() const
Returns the default name to use for a primary key column for the connection.
virtual bool validateSqlVectorLayer(const SqlVectorLayerOptions &options, QString &message) const
Validates the SQL query options to determine if it is possible to create a vector layer based on a SQ...
Capabilities capabilities() const
Returns connection capabilities.
virtual QgsFields fields(const QString &schema, const QString &table, QgsFeedback *feedback=nullptr) const
Returns the fields of a table and schema.
QVariantMap configuration() const
Returns the connection configuration parameters.
QgsAbstractProviderConnection(const QString &name)
Creates a new connection with name by reading its configuration from the settings.
QString uri() const
Returns the connection data source URI string representation.
Represents a coordinate reference system (CRS).
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition qgsfeedback.h:44
Base class for field domains.
Encapsulate a field in an attribute table or data source.
Definition qgsfield.h:56
Container of fields for a vector layer.
Definition qgsfields.h:46
Custom exception class for provider connection related exceptions.
Provides an interface for provider-specific creation of SQL queries.
Base class for vector data providers.
Represents a vector layer which manages a vector based dataset.
Represent a QgsRelation with possibly unresolved layers or unmatched fields.
static Q_INVOKABLE QString displayString(Qgis::WkbType type)
Returns a non-translated display string type for a WKB type, e.g., the geometry name used in WKT geom...
#define SIP_TYPEHINT(type)
Definition qgis_sip.h:240
#define SIP_ENUM_BASETYPE(type)
Definition qgis_sip.h:275
#define SIP_SKIP
Definition qgis_sip.h:134
#define SIP_MONKEYPATCH_SCOPEENUM_UNNEST(OUTSIDE_CLASS, FORMERNAME)
Definition qgis_sip.h:268
#define SIP_PYNAME(name)
Definition qgis_sip.h:89
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_FACTORY
Definition qgis_sip.h:84
#define SIP_THROW(name,...)
Definition qgis_sip.h:211
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsProjectionSelectionWidget::CrsOptions)
The QueryResult class represents the result of a query executed by execSql().
QList< QList< QVariant > > rows(QgsFeedback *feedback=nullptr)
Returns the result rows by calling the iterator internally and fetching all the rows,...
long long fetchedRowCount() const
Returns the number of fetched rows.
bool hasNextRow() const
Returns true if there are more rows to fetch.
QList< QVariant > nextRow() const
Returns the next result row or an empty row if there are no rows left.
long long rowCount() const
Returns the number of rows returned by a SELECT query or Qgis::FeatureCountState::UnknownCount if unk...
QStringList columns() const
Returns the column names.
The SpatialIndexOptions contains extra options relating to spatial index creation.
QString geometryColumnName
Specifies the name of the geometry column to create the index for.
The SqlVectorLayerOptions stores all information required to create a SQL (query) layer.
QString sql
The SQL expression that defines the SQL (query) layer.
QString filter
Additional subset string (provider-side filter), not all data providers support this feature: check s...
bool disableSelectAtId
If SelectAtId is disabled (default is false), not all data providers support this feature: check supp...
The GeometryColumnType struct represents the combination of geometry type and CRS for the table geome...
The TableProperty class represents a database table or view.
Stores all information required to create a QgsVectorLayerExporter for the backend.
QStringList primaryKeyColumns
List of primary key column names. Note that some providers may ignore this if not supported.
QString schema
Optional schema for the new layer. May not be supported by all providers.
QString geometryColumn
Preferred name for the geometry column, if required. Note that some providers may ignore this if a sp...