QGIS API Documentation 3.99.0-Master (2fe06baccd8)
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
28class QgsFeedback;
29class QgsFieldDomain;
30class QgsWeakRelation;
32
33
47{
48
49 Q_GADGET
50
51 public:
52
60 {
61 Aspatial = 1 << 1,
62 Vector = 1 << 2,
63 Raster = 1 << 3,
64 View = 1 << 4,
65 MaterializedView = 1 << 5,
66 Foreign = 1 << 6,
67 IncludeSystemTables = 1 << 7,
68 };
69
70 Q_ENUM( TableFlag )
71 Q_DECLARE_FLAGS( TableFlags, TableFlag )
72 Q_FLAG( TableFlags )
73
86 struct CORE_EXPORT QueryResult
87 {
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 // Python iterator
136 QueryResult *__iter__();
137 % MethodCode
138 sipRes = sipCpp;
139 % End
140
141 SIP_PYOBJECT __next__();
142 % MethodCode
143 QList<QVariant> result;
144 Py_BEGIN_ALLOW_THREADS
145 result = sipCpp->nextRow( );
146 Py_END_ALLOW_THREADS
147 if ( ! result.isEmpty() )
148 {
149 const sipTypeDef *qvariantlist_type = sipFindType( "QList<QVariant>" );
150 sipRes = sipConvertFromNewType( new QList<QVariant>( result ), qvariantlist_type, Py_None );
151 }
152 else
153 {
154 PyErr_SetString( PyExc_StopIteration, "" );
155 }
156 % End
157#endif
158
160
166 struct CORE_EXPORT QueryResultIterator SIP_SKIP
167 {
169 QVariantList nextRow();
170
172 bool hasNextRow() const;
173
175 long long fetchedRowCount();
176
178 long long rowCount();
179
180 virtual ~QueryResultIterator() = default;
181
182 private:
183
184 virtual QVariantList nextRowPrivate() = 0;
185 virtual bool hasNextRowPrivate() const = 0;
186 virtual long long rowCountPrivate() const = 0;
187
188 mutable qlonglong mFetchedRowCount = 0;
189 mutable QMutex mMutex;
190
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
227 mutable std::shared_ptr<QueryResultIterator> mResultIterator;
228 QStringList mColumns;
230 double mQueryExecutionTime = 0;
231
232 };
233
244 static bool splitSimpleQuery( const QString &sql, QStringList &columns, QStringList &tables, QString &where ) SIP_SKIP;
245
246
253 struct CORE_EXPORT SqlVectorLayerOptions
254 {
256 QString sql;
258 QString filter;
260 QString layerName;
262 QStringList primaryKeyColumns;
266 bool disableSelectAtId = false;
267
268 };
269
281 struct CORE_EXPORT TableProperty
282 {
283
284#ifdef SIP_RUN
285 SIP_PYOBJECT __repr__();
286 % MethodCode
287 QString str = QStringLiteral( "<QgsAbstractDatabaseProviderConnection.TableProperty: '%1'>" ).arg( sipCpp->tableName() );
288 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
289 % End
290#endif
291
296 struct CORE_EXPORT GeometryColumnType
297 {
298#ifdef SIP_RUN
299 SIP_PYOBJECT __repr__();
300 % MethodCode
301 QString str = QStringLiteral( "<QgsAbstractDatabaseProviderConnection.TableProperty.GeometryColumnType: '%1, %2'>" ).arg( QgsWkbTypes::displayString( sipCpp->wkbType ), sipCpp->crs.authid() );
302 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
303 % End
304#endif
307
308 // TODO c++20 - replace with = default
309 inline bool operator==( const GeometryColumnType &other ) const
310 {
311 return this->crs == other.crs && this->wkbType == other.wkbType;
312 }
313 };
314
315 public:
316
322 QString tableName() const;
323
329 void setTableName( const QString &name );
330
334 void addGeometryColumnType( Qgis::WkbType type, const QgsCoordinateReferenceSystem &crs );
335
341 QList<QgsAbstractDatabaseProviderConnection::TableProperty::GeometryColumnType> geometryColumnTypes() const;
342
346 void setGeometryColumnTypes( const QList<QgsAbstractDatabaseProviderConnection::TableProperty::GeometryColumnType> &geometryColumnTypes );
347
355 QString defaultName() const;
356
361 TableProperty at( int index ) const;
362
366 QString schema() const;
367
371 void setSchema( const QString &schema );
372
376 QString geometryColumn() const;
377
381 void setGeometryColumn( const QString &geometryColumn );
382
386 QStringList primaryKeyColumns() const;
387
391 void setPrimaryKeyColumns( const QStringList &primaryKeyColumns );
392
396 QList<QgsCoordinateReferenceSystem> crsList() const;
397
401 TableFlags flags() const;
402
406 void setFlags( const TableFlags &flags );
407
411 QString comment() const;
412
416 void setComment( const QString &comment );
417
424 QVariantMap info() const;
425
432 void setInfo( const QVariantMap &info );
433
439 int geometryColumnCount() const;
440
444 void setGeometryColumnCount( int geometryColumnCount );
445
449 void setFlag( const TableFlag &flag );
450
457 int maxCoordinateDimensions() const;
458
460
461 private:
462
464 QList<GeometryColumnType> mGeometryColumnTypes;
466 QString mSchema;
468 QString mTableName;
470 QString mGeometryColumn;
472 int mGeometryColumnCount = 0;
474 QStringList mPkColumns;
475 TableFlags mFlags;
476 QString mComment;
478 QVariantMap mInfo;
479 };
480
486 struct CORE_EXPORT SpatialIndexOptions
487 {
490 };
491
498 {
504 CreateSchema = 1 << 6,
505 DropSchema = 1 << 7,
506 RenameSchema = 1 << 8,
507 ExecuteSql = 1 << 9,
508 Vacuum = 1 << 10,
509 Tables = 1 << 11,
510 Schemas = 1 << 12,
511 SqlLayers = 1 << 13,
512 TableExists = 1 << 14,
513 Spatial = 1 << 15,
517 DeleteField = 1 << 19,
519 AddField = 1 << 21,
522 SetFieldDomain = 1 << 24,
523 AddFieldDomain = 1 << 25,
524 RenameField = 1 << 26,
526 AddRelationship = 1 << 28,
529 MoveTableToSchema = 1u << 31,
530 };
531 Q_ENUM( Capability )
532 Q_DECLARE_FLAGS( Capabilities, Capability )
533 Q_FLAG( Capabilities )
534
541 {
542 Z = 1 << 1,
543 M = 1 << 2,
544 SinglePart = 1 << 3,
545 Curves = 1 << 4,
546 SinglePoint = 1 << 5,
548 SinglePolygon = 1 << 7,
550 };
551 // TODO QGIS 4.0 -- remove SinglePart
552
553 Q_ENUM( GeometryColumnCapability )
556
562 QgsAbstractDatabaseProviderConnection( const QString &name );
563
570 QgsAbstractDatabaseProviderConnection( const QString &uri, const QVariantMap &configuration );
571
572
573 // Public interface
574
581
588 Qgis::DatabaseProviderConnectionCapabilities2 capabilities2() const;
589
596
602 virtual Qgis::DatabaseProviderTableImportCapabilities tableImportCapabilities() const = 0;
603
608 virtual Qgis::SqlLayerDefinitionCapabilities sqlLayerDefinitionCapabilities();
609
610 // Operations interface
611
618 virtual QString tableUri( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
619
625 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 );
626
633 struct CORE_EXPORT VectorLayerExporterOptions
634 {
636 QString layerName;
637
639 QString schema;
640
643
645 QStringList primaryKeyColumns;
646
649
650 };
651
662
668 virtual bool tableExists( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
669
676 virtual void dropVectorTable( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
677
684 virtual void dropRasterTable( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
685
692 virtual void renameVectorTable( const QString &schema, const QString &name, const QString &newName ) const SIP_THROW( QgsProviderConnectionException );
693
700 virtual void renameRasterTable( const QString &schema, const QString &name, const QString &newName ) const SIP_THROW( QgsProviderConnectionException );
701
707 virtual void createSchema( const QString &name ) const SIP_THROW( QgsProviderConnectionException );
708
717 virtual void dropSchema( const QString &name, bool force = false ) const SIP_THROW( QgsProviderConnectionException );
718
730 virtual void deleteField( const QString &fieldName, const QString &schema, const QString &tableName, bool force = false ) const SIP_THROW( QgsProviderConnectionException );
731
742 virtual void addField( const QgsField &field, const QString &schema, const QString &tableName ) const SIP_THROW( QgsProviderConnectionException );
743
757 virtual void renameField( const QString &schema, const QString &tableName, const QString &name, const QString &newName ) const SIP_THROW( QgsProviderConnectionException );
758
765 virtual void renameSchema( const QString &name, const QString &newName ) const SIP_THROW( QgsProviderConnectionException );
766
773 virtual QList<QList<QVariant>> executeSql( const QString &sql, QgsFeedback *feedback = nullptr ) const SIP_THROW( QgsProviderConnectionException );
774
787
803 virtual bool validateSqlVectorLayer( const SqlVectorLayerOptions &options, QString &message SIP_OUT ) const SIP_THROW( QgsProviderConnectionException );
804
812 virtual SqlVectorLayerOptions sqlOptions( const QString &layerSource ) SIP_THROW( QgsProviderConnectionException );
813
821 virtual QueryResult execSql( const QString &sql, QgsFeedback *feedback = nullptr ) const SIP_THROW( QgsProviderConnectionException );
822
828 virtual void vacuum( const QString &schema, const QString &name ) const SIP_THROW( QgsProviderConnectionException );
829
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
867 virtual QList<QgsAbstractDatabaseProviderConnection::TableProperty> tables( const QString &schema = QString(), const QgsAbstractDatabaseProviderConnection::TableFlags &flags = QgsAbstractDatabaseProviderConnection::TableFlags(), QgsFeedback *feedback = nullptr ) const SIP_SKIP;
868
878 virtual QgsAbstractDatabaseProviderConnection::TableProperty table( const QString &schema, const QString &table, QgsFeedback *feedback = nullptr ) const SIP_THROW( QgsProviderConnectionException );
879
887 QList<QgsAbstractDatabaseProviderConnection::TableProperty> tablesInt( const QString &schema = QString(), const int flags = 0 ) const SIP_THROW( QgsProviderConnectionException ) SIP_PYNAME( tables );
888
889
890 // TODO: return more schema information and not just the name
891
897 virtual QStringList schemas() const SIP_THROW( QgsProviderConnectionException );
898
911 virtual QgsFields fields( const QString &schema, const QString &table, QgsFeedback *feedback = nullptr ) const SIP_THROW( QgsProviderConnectionException );
912
920
926 QString providerKey() const;
927
937 virtual QMultiMap<Qgis::SqlKeywordCategory, QStringList> sqlDictionary();
938
945 virtual QSet< QString > illegalFieldNames() const;
946
956 virtual QString defaultPrimaryKeyColumnName() const;
957
967 virtual QString defaultGeometryColumnName() const;
968
979 virtual QStringList fieldDomainNames() const SIP_THROW( QgsProviderConnectionException );
980
986 virtual QList< Qgis::FieldDomainType > supportedFieldDomainTypes() const;
987
1000 virtual QgsFieldDomain *fieldDomain( const QString &name ) const SIP_THROW( QgsProviderConnectionException ) SIP_FACTORY;
1001
1013 virtual void setFieldDomainName( const QString &fieldName, const QString &schema, const QString &tableName, const QString &domainName ) const SIP_THROW( QgsProviderConnectionException );
1014
1024 virtual void addFieldDomain( const QgsFieldDomain &domain, const QString &schema ) const SIP_THROW( QgsProviderConnectionException );
1025
1035 virtual void updateFieldDomain( QgsFieldDomain *domain, const QString &schema ) const SIP_THROW( QgsProviderConnectionException );
1036
1048 virtual void deleteFieldDomain( const QString &name, const QString &schema ) const SIP_THROW( QgsProviderConnectionException );
1049
1061 virtual void setFieldAlias( const QString &fieldName, const QString &schema, const QString &tableName, const QString &alias ) const SIP_THROW( QgsProviderConnectionException );
1062
1073 virtual void setTableComment( const QString &schema, const QString &tableName, const QString &comment ) const SIP_THROW( QgsProviderConnectionException );
1074
1086 virtual void setFieldComment( const QString &fieldName, const QString &schema, const QString &tableName, const QString &comment ) const SIP_THROW( QgsProviderConnectionException );
1087
1098 virtual void moveTableToSchema( const QString &sourceSchema, const QString &tableName, const QString &targetSchema ) const SIP_THROW( QgsProviderConnectionException );
1099
1100
1106#ifndef SIP_RUN
1107 virtual QList< Qgis::RelationshipCardinality > supportedRelationshipCardinalities() const;
1108#else
1109 SIP_PYOBJECT supportedRelationshipCardinalities() const SIP_TYPEHINT( List[Qgis.RelationshipCardinality] );
1110 % MethodCode
1111 // adapted from the qpymultimedia_qlist.sip file from the PyQt6 sources
1112
1113 const QList< Qgis::RelationshipCardinality > cppRes = sipCpp->supportedRelationshipCardinalities();
1114
1115 PyObject *l = PyList_New( cppRes.size() );
1116
1117 if ( !l )
1118 sipIsErr = 1;
1119 else
1120 {
1121 for ( int i = 0; i < cppRes.size(); ++i )
1122 {
1123 PyObject *eobj = sipConvertFromEnum( static_cast<int>( cppRes.at( i ) ),
1124 sipType_Qgis_RelationshipCardinality );
1125
1126 if ( !eobj )
1127 {
1128 sipIsErr = 1;
1129 }
1130
1131 PyList_SetItem( l, i, eobj );
1132 }
1133
1134 if ( !sipIsErr )
1135 {
1136 sipRes = l;
1137 }
1138 else
1139 {
1140 Py_DECREF( l );
1141 }
1142 }
1143 % End
1144#endif
1145
1151#ifndef SIP_RUN
1152 virtual QList< Qgis::RelationshipStrength > supportedRelationshipStrengths() const;
1153#else
1154 SIP_PYOBJECT supportedRelationshipStrengths() const SIP_TYPEHINT( List[Qgis.RelationshipStrength] );
1155 % MethodCode
1156 // adapted from the qpymultimedia_qlist.sip file from the PyQt6 sources
1157
1158 const QList< Qgis::RelationshipStrength > cppRes = sipCpp->supportedRelationshipStrengths();
1159
1160 PyObject *l = PyList_New( cppRes.size() );
1161
1162 if ( !l )
1163 sipIsErr = 1;
1164 else
1165 {
1166 for ( int i = 0; i < cppRes.size(); ++i )
1167 {
1168 PyObject *eobj = sipConvertFromEnum( static_cast<int>( cppRes.at( i ) ),
1169 sipType_Qgis_RelationshipStrength );
1170
1171 if ( !eobj )
1172 {
1173 sipIsErr = 1;
1174 }
1175
1176 PyList_SetItem( l, i, eobj );
1177 }
1178
1179 if ( !sipIsErr )
1180 {
1181 sipRes = l;
1182 }
1183 else
1184 {
1185 Py_DECREF( l );
1186 }
1187 }
1188 % End
1189#endif
1190
1196 virtual Qgis::RelationshipCapabilities supportedRelationshipCapabilities() const;
1197
1208 virtual QStringList relatedTableTypes() const;
1209
1222 virtual QList< QgsWeakRelation > relationships( const QString &schema = QString(), const QString &tableName = QString() ) const SIP_THROW( QgsProviderConnectionException );
1223
1230 virtual void addRelationship( const QgsWeakRelation &relationship ) const SIP_THROW( QgsProviderConnectionException );
1231
1238 virtual void updateRelationship( const QgsWeakRelation &relationship ) const SIP_THROW( QgsProviderConnectionException );
1239
1246 virtual void deleteRelationship( const QgsWeakRelation &relationship ) const SIP_THROW( QgsProviderConnectionException );
1247
1255 virtual QgsProviderSqlQueryBuilder *queryBuilder() const SIP_FACTORY;
1256
1277 virtual QList<QgsLayerMetadataProviderResult> searchLayerMetadata( const QgsMetadataSearchContext &searchContext, const QString &searchString = QString(), const QgsRectangle &geographicExtent = QgsRectangle(), QgsFeedback *feedback = nullptr ) const SIP_THROW( QgsProviderConnectionException, QgsNotSupportedException );
1278
1279 protected:
1280
1282
1288 void checkCapability( Capability capability ) const;
1289
1295 void checkCapability( Qgis::DatabaseProviderConnectionCapability2 capability ) const;
1296
1298 QString sanitizeSqlForQueryLayer( const QString &sql ) const SIP_SKIP;
1299
1301
1303 Qgis::DatabaseProviderConnectionCapabilities2 mCapabilities2 = Qgis::DatabaseProviderConnectionCapabilities2() SIP_SKIP;
1304
1306 Qgis::SqlLayerDefinitionCapabilities mSqlLayerDefinitionCapabilities = Qgis::SqlLayerDefinitionCapabilities() SIP_SKIP;
1309
1310};
1311
1313
1314#endif // QGSABSTRACTDATABASEPROVIDERCONNECTION_H
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:56
QFlags< RelationshipCapability > RelationshipCapabilities
Relationship capabilities.
Definition qgis.h:4443
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:277
@ NoGeometry
No geometry.
Definition qgis.h:294
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:54
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...