QGIS API Documentation 4.0.0-Norrköping (1ddcee3d0e4)
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 Q_GADGET
52
53 public:
61 {
62 Aspatial = 1 << 1,
63 Vector = 1 << 2,
64 Raster = 1 << 3,
65 View = 1 << 4,
66 MaterializedView = 1 << 5,
67 Foreign = 1 << 6,
68 IncludeSystemTables = 1 << 7,
69 };
70
71 Q_ENUM( TableFlag )
72 Q_DECLARE_FLAGS( TableFlags, TableFlag )
73 Q_FLAG( TableFlags )
74
87 struct CORE_EXPORT QueryResult
88 {
92 QStringList columns() const;
93
101 QList<QList<QVariant> > rows( QgsFeedback *feedback = nullptr );
102
109 bool hasNextRow() const;
110
117 QList<QVariant> nextRow() const;
118
124 long long fetchedRowCount() const;
125
131 long long rowCount() const;
132
133
134#ifdef SIP_RUN
135 // clang-format off
136 // Python iterator
137 QueryResult *__iter__();
138 % MethodCode
139 sipRes = sipCpp;
140 % End
141
142 SIP_PYOBJECT __next__();
143 % MethodCode
144 QList<QVariant> result;
145 Py_BEGIN_ALLOW_THREADS
146 result = sipCpp->nextRow( );
147 Py_END_ALLOW_THREADS
148 if ( ! result.isEmpty() )
149 {
150 const sipTypeDef *qvariantlist_type = sipFindType( "QList<QVariant>" );
151 sipRes = sipConvertFromNewType( new QList<QVariant>( result ), qvariantlist_type, Py_None );
152 }
153 else
154 {
155 PyErr_SetString( PyExc_StopIteration, "" );
156 }
157 % End
158// clang-format on
159#endif
160
162
168 struct CORE_EXPORT QueryResultIterator SIP_SKIP
169 {
171 QVariantList nextRow();
172
174 bool hasNextRow() const;
175
177 long long fetchedRowCount();
178
180 long long rowCount();
181
182 virtual ~QueryResultIterator() = default;
183
184 private:
185 virtual QVariantList nextRowPrivate() = 0;
186 virtual bool hasNextRowPrivate() const = 0;
187 virtual long long rowCountPrivate() const = 0;
188
189 mutable qlonglong mFetchedRowCount = 0;
190 mutable QMutex mMutex;
191 };
192
198 void appendColumn( const QString &columnName ) SIP_SKIP;
199
205 QueryResult( std::shared_ptr<QueryResultIterator> iterator ) SIP_SKIP;
206
211 QueryResult() = default SIP_SKIP;
212
216 double queryExecutionTime() const;
217
221 void setQueryExecutionTime( double queryExecutionTime );
222
224
225 private:
226 mutable std::shared_ptr<QueryResultIterator> mResultIterator;
227 QStringList mColumns;
229 double mQueryExecutionTime = 0;
230 };
231
242 static bool splitSimpleQuery( const QString &sql, QStringList &columns, QStringList &tables, QString &where ) SIP_SKIP;
243
244
251 struct CORE_EXPORT SqlVectorLayerOptions
252 {
254 QString sql;
256 QString filter;
258 QString layerName;
260 QStringList primaryKeyColumns;
264 bool disableSelectAtId = false;
265 };
266
278 struct CORE_EXPORT TableProperty
279 {
280#ifdef SIP_RUN
281 // clang-format off
282 SIP_PYOBJECT __repr__();
283 % MethodCode
284 QString str = u"<QgsAbstractDatabaseProviderConnection.TableProperty: '%1'>"_s.arg( sipCpp->tableName() );
285 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
286 % End
287// clang-format on
288#endif
289
294 struct CORE_EXPORT GeometryColumnType
295 {
296#ifdef SIP_RUN
297 // clang-format off
298 SIP_PYOBJECT __repr__();
299 % MethodCode
300 QString str = u"<QgsAbstractDatabaseProviderConnection.TableProperty.GeometryColumnType: '%1, %2'>"_s.arg( QgsWkbTypes::displayString( sipCpp->wkbType ), sipCpp->crs.authid() );
301 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
302 % End
303// clang-format on
304#endif
307
308 // TODO c++20 - replace with = default
309 inline bool operator==( const GeometryColumnType &other ) const { return this->crs == other.crs && this->wkbType == other.wkbType; }
310 };
311
312 public:
318 QString tableName() const;
319
325 void setTableName( const QString &name );
326
330 void addGeometryColumnType( Qgis::WkbType type, const QgsCoordinateReferenceSystem &crs );
331
337 QList<QgsAbstractDatabaseProviderConnection::TableProperty::GeometryColumnType> geometryColumnTypes() const;
338
342 void setGeometryColumnTypes( const QList<QgsAbstractDatabaseProviderConnection::TableProperty::GeometryColumnType> &geometryColumnTypes );
343
351 QString defaultName() const;
352
357 TableProperty at( int index ) const;
358
362 QString schema() const;
363
367 void setSchema( const QString &schema );
368
372 QString geometryColumn() const;
373
377 void setGeometryColumn( const QString &geometryColumn );
378
382 QStringList primaryKeyColumns() const;
383
387 void setPrimaryKeyColumns( const QStringList &primaryKeyColumns );
388
392 QList<QgsCoordinateReferenceSystem> crsList() const;
393
397 TableFlags flags() const;
398
402 void setFlags( const TableFlags &flags );
403
407 QString comment() const;
408
412 void setComment( const QString &comment );
413
420 QVariantMap info() const;
421
428 void setInfo( const QVariantMap &info );
429
435 int geometryColumnCount() const;
436
440 void setGeometryColumnCount( int geometryColumnCount );
441
445 void setFlag( const TableFlag &flag );
446
453 int maxCoordinateDimensions() const;
454
456
457 private:
459 QList<GeometryColumnType> mGeometryColumnTypes;
461 QString mSchema;
463 QString mTableName;
465 QString mGeometryColumn;
467 int mGeometryColumnCount = 0;
469 QStringList mPkColumns;
470 TableFlags mFlags;
471 QString mComment;
473 QVariantMap mInfo;
474 };
475
481 struct CORE_EXPORT SpatialIndexOptions
482 {
485 };
486
493 {
499 CreateSchema = 1 << 6,
500 DropSchema = 1 << 7,
501 RenameSchema = 1 << 8,
502 ExecuteSql = 1 << 9,
503 Vacuum = 1 << 10,
504 Tables = 1 << 11,
505 Schemas = 1 << 12,
506 SqlLayers = 1 << 13,
507 TableExists = 1 << 14,
508 Spatial = 1 << 15,
512 DeleteField = 1 << 19,
514 AddField = 1 << 21,
517 SetFieldDomain = 1 << 24,
518 AddFieldDomain = 1 << 25,
519 RenameField = 1 << 26,
521 AddRelationship = 1 << 28,
524 MoveTableToSchema = 1u << 31,
525 };
526 Q_ENUM( Capability )
527 Q_DECLARE_FLAGS( Capabilities, Capability )
528 Q_FLAG( Capabilities )
529
536 {
537 Z = 1 << 1,
538 M = 1 << 2,
539 SinglePart = 1 << 3,
540 Curves = 1 << 4,
541 SinglePoint = 1 << 5,
543 SinglePolygon = 1 << 7,
545 };
546 // TODO QGIS 5.0 -- remove SinglePart
547
548 Q_ENUM( GeometryColumnCapability )
551
557 QgsAbstractDatabaseProviderConnection( const QString &name );
558
565 QgsAbstractDatabaseProviderConnection( const QString &uri, const QVariantMap &configuration );
566
567
568 // Public interface
569
576
583 Qgis::DatabaseProviderConnectionCapabilities2 capabilities2() const;
584
591
597 virtual Qgis::DatabaseProviderTableImportCapabilities tableImportCapabilities() const = 0;
598
603 virtual Qgis::SqlLayerDefinitionCapabilities sqlLayerDefinitionCapabilities();
604
605 // Operations interface
606
613 virtual QString tableUri( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
614
620 virtual void createVectorTable(
621 const QString &schema, const QString &name, const QgsFields &fields, Qgis::WkbType wkbType, const QgsCoordinateReferenceSystem &srs, bool overwrite, const QMap<QString, QVariant> *options
623
630 struct CORE_EXPORT VectorLayerExporterOptions
631 {
633 QString layerName;
634
636 QString schema;
637
640
642 QStringList primaryKeyColumns;
643
646 };
647
659 );
660
666 virtual bool tableExists( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
667
674 virtual void dropVectorTable( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
675
682 virtual void dropRasterTable( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
683
690 virtual void renameVectorTable( const QString &schema, const QString &name, const QString &newName ) const SIP_THROW( QgsProviderConnectionException );
691
698 virtual void renameRasterTable( const QString &schema, const QString &name, const QString &newName ) const SIP_THROW( QgsProviderConnectionException );
699
705 virtual void createSchema( const QString &name ) const SIP_THROW( QgsProviderConnectionException );
706
715 virtual void dropSchema( const QString &name, bool force = false ) const SIP_THROW( QgsProviderConnectionException );
716
728 virtual void deleteField( const QString &fieldName, const QString &schema, const QString &tableName, bool force = false ) const SIP_THROW( QgsProviderConnectionException );
729
740 virtual void addField( const QgsField &field, const QString &schema, const QString &tableName ) const SIP_THROW( QgsProviderConnectionException );
741
755 virtual void renameField( const QString &schema, const QString &tableName, const QString &name, const QString &newName ) const SIP_THROW( QgsProviderConnectionException );
756
763 virtual void renameSchema( const QString &name, const QString &newName ) const SIP_THROW( QgsProviderConnectionException );
764
771 virtual QList<QList<QVariant>> executeSql( const QString &sql, QgsFeedback *feedback = nullptr ) const SIP_THROW( QgsProviderConnectionException );
772
785
801 virtual bool validateSqlVectorLayer( const SqlVectorLayerOptions &options, QString &message SIP_OUT ) const SIP_THROW( QgsProviderConnectionException );
802
810 virtual SqlVectorLayerOptions sqlOptions( const QString &layerSource ) SIP_THROW( QgsProviderConnectionException );
811
819 virtual QueryResult execSql( const QString &sql, QgsFeedback *feedback = nullptr ) const SIP_THROW( QgsProviderConnectionException );
820
826 virtual void vacuum( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
827
836 virtual void createSpatialIndex(
839
847 virtual bool spatialIndexExists( const QString &schema, const QString &name, const QString &geometryColumn ) const SIP_THROW( QgsProviderConnectionException );
848
856 virtual void deleteSpatialIndex( const QString &schema, const QString &name, const QString &geometryColumn ) const SIP_THROW( QgsProviderConnectionException );
857
868 const QString &schema = QString(), const QgsAbstractDatabaseProviderConnection::TableFlags &flags = QgsAbstractDatabaseProviderConnection::TableFlags(), QgsFeedback *feedback = nullptr
869 ) const SIP_SKIP;
870
880 virtual QgsAbstractDatabaseProviderConnection::TableProperty table( const QString &schema, const QString &table, QgsFeedback *feedback = nullptr ) const SIP_THROW( QgsProviderConnectionException );
881
889 QList<QgsAbstractDatabaseProviderConnection::TableProperty> tablesInt( const QString &schema = QString(), const int flags = 0 ) const SIP_THROW( QgsProviderConnectionException ) SIP_PYNAME( tables );
890
891
892 // TODO: return more schema information and not just the name
893
899 virtual QStringList schemas() const SIP_THROW( QgsProviderConnectionException );
900
913 virtual QgsFields fields( const QString &schema, const QString &table, QgsFeedback *feedback = nullptr ) const SIP_THROW( QgsProviderConnectionException );
914
922
928 QString providerKey() const;
929
939 virtual QMultiMap<Qgis::SqlKeywordCategory, QStringList> sqlDictionary();
940
947 virtual QSet< QString > illegalFieldNames() const;
948
958 virtual QString defaultPrimaryKeyColumnName() const;
959
969 virtual QString defaultGeometryColumnName() const;
970
981 virtual QStringList fieldDomainNames() const SIP_THROW( QgsProviderConnectionException );
982
988 virtual QList< Qgis::FieldDomainType > supportedFieldDomainTypes() const;
989
1002 virtual QgsFieldDomain *fieldDomain( const QString &name ) const SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
1003
1015 virtual void setFieldDomainName( const QString &fieldName, const QString &schema, const QString &tableName, const QString &domainName ) const SIP_THROW( QgsProviderConnectionException );
1016
1026 virtual void addFieldDomain( const QgsFieldDomain &domain, const QString &schema ) const SIP_THROW( QgsProviderConnectionException );
1027
1037 virtual void updateFieldDomain( QgsFieldDomain *domain, const QString &schema ) const SIP_THROW( QgsProviderConnectionException );
1038
1050 virtual void deleteFieldDomain( const QString &name, const QString &schema ) const SIP_THROW( QgsProviderConnectionException );
1051
1063 virtual void setFieldAlias( const QString &fieldName, const QString &schema, const QString &tableName, const QString &alias ) const SIP_THROW( QgsProviderConnectionException );
1064
1075 virtual void setTableComment( const QString &schema, const QString &tableName, const QString &comment ) const SIP_THROW( QgsProviderConnectionException );
1076
1088 virtual void setFieldComment( const QString &fieldName, const QString &schema, const QString &tableName, const QString &comment ) const SIP_THROW( QgsProviderConnectionException );
1089
1100 virtual void moveTableToSchema( const QString &sourceSchema, const QString &tableName, const QString &targetSchema ) const SIP_THROW( QgsProviderConnectionException );
1101
1102
1108#ifndef SIP_RUN
1109 virtual QList< Qgis::RelationshipCardinality > supportedRelationshipCardinalities() const;
1110#else
1111 // clang-format off
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// clang-format on
1148#endif
1149
1155#ifndef SIP_RUN
1156 virtual QList< Qgis::RelationshipStrength > supportedRelationshipStrengths() const;
1157#else
1158 // clang-format off
1159 SIP_PYOBJECT supportedRelationshipStrengths() const SIP_TYPEHINT( List[Qgis.RelationshipStrength] );
1160 % MethodCode
1161 // adapted from the qpymultimedia_qlist.sip file from the PyQt6 sources
1162
1163 const QList< Qgis::RelationshipStrength > cppRes = sipCpp->supportedRelationshipStrengths();
1164
1165 PyObject *l = PyList_New( cppRes.size() );
1166
1167 if ( !l )
1168 sipIsErr = 1;
1169 else
1170 {
1171 for ( int i = 0; i < cppRes.size(); ++i )
1172 {
1173 PyObject *eobj = sipConvertFromEnum( static_cast<int>( cppRes.at( i ) ),
1174 sipType_Qgis_RelationshipStrength );
1175
1176 if ( !eobj )
1177 {
1178 sipIsErr = 1;
1179 }
1180
1181 PyList_SetItem( l, i, eobj );
1182 }
1183
1184 if ( !sipIsErr )
1185 {
1186 sipRes = l;
1187 }
1188 else
1189 {
1190 Py_DECREF( l );
1191 }
1192 }
1193 % End
1194// clang-format on
1195#endif
1196
1202 virtual Qgis::RelationshipCapabilities supportedRelationshipCapabilities() const;
1203
1214 virtual QStringList relatedTableTypes() const;
1215
1228 virtual QList< QgsWeakRelation > relationships( const QString &schema = QString(), const QString &tableName = QString() ) const SIP_THROW( QgsProviderConnectionException );
1229
1236 virtual void addRelationship( const QgsWeakRelation &relationship ) const SIP_THROW( QgsProviderConnectionException );
1237
1244 virtual void updateRelationship( const QgsWeakRelation &relationship ) const SIP_THROW( QgsProviderConnectionException );
1245
1252 virtual void deleteRelationship( const QgsWeakRelation &relationship ) const SIP_THROW( QgsProviderConnectionException );
1253
1261 virtual QgsProviderSqlQueryBuilder *queryBuilder() const SIP_FACTORY;
1262
1283 virtual QList<QgsLayerMetadataProviderResult> searchLayerMetadata(
1284 const QgsMetadataSearchContext &searchContext, const QString &searchString = QString(), const QgsRectangle &geographicExtent = QgsRectangle(), QgsFeedback *feedback = nullptr
1285 ) const SIP_THROW( QgsProviderConnectionException, QgsNotSupportedException );
1286
1287 protected:
1289
1295 void checkCapability( Capability capability ) const;
1296
1302 void checkCapability( Qgis::DatabaseProviderConnectionCapability2 capability ) const;
1303
1305 QString sanitizeSqlForQueryLayer( const QString &sql ) const SIP_SKIP;
1306
1308
1310 Qgis::DatabaseProviderConnectionCapabilities2 mCapabilities2 = Qgis::DatabaseProviderConnectionCapabilities2() SIP_SKIP;
1311
1313 Qgis::SqlLayerDefinitionCapabilities mSqlLayerDefinitionCapabilities = Qgis::SqlLayerDefinitionCapabilities() SIP_SKIP;
1316};
1317
1319
1320#endif // QGSABSTRACTDATABASEPROVIDERCONNECTION_H
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:62
QFlags< RelationshipCapability > RelationshipCapabilities
Relationship capabilities.
Definition qgis.h:4587
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:294
@ NoGeometry
No geometry.
Definition qgis.h:312
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:239
#define SIP_ENUM_BASETYPE(type)
Definition qgis_sip.h:274
#define SIP_SKIP
Definition qgis_sip.h:133
#define SIP_MONKEYPATCH_SCOPEENUM_UNNEST(OUTSIDE_CLASS, FORMERNAME)
Definition qgis_sip.h:267
#define SIP_PYNAME(name)
Definition qgis_sip.h:88
#define SIP_OUT
Definition qgis_sip.h:57
#define SIP_FACTORY
Definition qgis_sip.h:83
#define SIP_THROW(name,...)
Definition qgis_sip.h:210
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...