QGIS API Documentation 4.3.0-Master (f865f0c58a6)
Loading...
Searching...
No Matches
qgsvectordataprovider.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsvectordataprovider.h - DataProvider Interface for vector layers
3 --------------------------------------
4 Date : 23-Sep-2004
5 Copyright : (C) 2004 by Marco Hugentobler
6 email : marco.hugentobler@autoform.ch
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15#ifndef QGSVECTORDATAPROVIDER_H
16#define QGSVECTORDATAPROVIDER_H
17
18class QTextCodec;
19
20#include <optional>
21
22#include "qgis_core.h"
23
24#include <QHash>
25#include <QList>
26#include <QMap>
27#include <QSet>
28
29//QGIS Includes
30#include "qgis_sip.h"
31#include "qgsdataprovider.h"
32#include "qgsfeature.h"
35#include "qgsrelation.h"
36#include "qgsfeaturesink.h"
37#include "qgsfeaturesource.h"
38#include "qgsfeaturerequest.h"
40
41typedef QList<int> QgsAttributeList SIP_SKIP;
42typedef QSet<int> QgsAttributeIds SIP_SKIP;
43typedef QHash<int, QString> QgsAttrPalIndexNameHash;
44
46class QgsTransaction;
47class QgsFeedback;
51
52
60class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider, public QgsFeatureSink, public QgsFeatureSource
61{
62 Q_OBJECT
63
64 friend class QgsTransaction;
66
67 public:
70
80 );
81
98
102 virtual QString storageType() const;
103
109 QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const override = 0;
110
114 Qgis::WkbType wkbType() const override = 0;
115
120 long long featureCount() const override = 0;
121
127 virtual bool empty() const;
128
138 virtual bool isSqlQuery() const;
139
147
158 Qgis::FeatureAvailability hasFeatures() const override;
159
163 QgsFields fields() const override = 0;
164
166 QgsRectangle sourceExtent() const override;
167 QgsBox3D sourceExtent3D() const override;
168 QString sourceName() const override { return QString(); }
169
174 QString dataComment() const override;
175
184 QVariant minimumValue( int index ) const override;
185
194 QVariant maximumValue( int index ) const override;
195
205 virtual QStringList uniqueStringsMatching( int index, const QString &substring, int limit = -1, QgsFeedback *feedback = nullptr ) const;
206
218 virtual QVariant aggregate(
219 Qgis::Aggregate aggregate, int index, const QgsAggregateCalculator::AggregateParameters &parameters, QgsExpressionContext *context, bool &ok, QgsFeatureIds *fids = nullptr
220 ) const;
221
229 Q_DECL_DEPRECATED virtual void enumValues( int index, QStringList &enumList SIP_OUT ) const SIP_DEPRECATED
230 {
231 Q_UNUSED( index )
232 enumList.clear();
233 }
234
242 virtual QList<QPair<QString, QString>> codedValues( int index ) const
243 {
244 Q_UNUSED( index )
245 return {};
246 }
247
250 QString lastError() const override;
251
258 virtual bool deleteFeatures( const QgsFeatureIds &id );
259
266 virtual bool truncate();
267
274 virtual bool cancelReload();
275
281 virtual bool addAttributes( const QList<QgsField> &attributes );
282
290 virtual bool deleteAttributes( const QgsAttributeIds &attributes );
291
299 virtual bool renameAttributes( const QgsFieldNameMap &renamedAttributes );
300
309 virtual bool changeAttributeValues( const QgsChangedAttributesMap &attr_map );
310
322 virtual bool changeFeatures( const QgsChangedAttributesMap &attr_map, const QgsGeometryMap &geometry_map );
323
335 virtual QVariant defaultValue( int fieldIndex ) const;
336
343 virtual QString defaultValueClause( int fieldIndex ) const;
344
350 QgsFieldConstraints::Constraints fieldConstraints( int fieldIndex ) const;
351
358 virtual bool skipConstraintCheck( int fieldIndex, QgsFieldConstraints::Constraint constraint, const QVariant &value = QVariant() ) const;
359
367 virtual bool changeGeometryValues( const QgsGeometryMap &geometry_map );
368
373 virtual bool createSpatialIndex();
374
376 virtual bool createAttributeIndex( int field );
377
386 Q_INVOKABLE virtual Qgis::VectorProviderCapabilities capabilities() const;
387
391 QString capabilitiesString() const;
392
399 virtual Qgis::VectorDataProviderAttributeEditCapabilities attributeEditCapabilities() const;
400
413 virtual void setEncoding( const QString &e );
414
420 QString encoding() const;
421
425 int fieldNameIndex( const QString &fieldName ) const;
426
430 QMap<QString, int> fieldNameMap() const;
431
435 virtual QgsAttributeList attributeIndexes() const;
436
440 virtual QgsAttributeList pkAttributeIndexes() const;
441
447 virtual QString geometryColumnName() const;
448
454 Q_DECL_DEPRECATED QgsAttrPalIndexNameHash palAttributeIndexNames() const SIP_DEPRECATED;
455
459 bool supportedType( const QgsField &field ) const;
460
462 {
464 const QString &typeDesc, const QString &typeName, QMetaType::Type type, int minLen = 0, int maxLen = 0, int minPrec = 0, int maxPrec = 0, QMetaType::Type subType = QMetaType::Type::UnknownType
465 )
466 : mTypeDesc( typeDesc )
467 , mTypeName( typeName )
468 , mType( type )
469 , mMinLen( minLen )
470 , mMaxLen( maxLen )
471 , mMinPrec( minPrec )
472 , mMaxPrec( maxPrec )
473 , mSubType( subType )
474 {}
475
476 Q_DECL_DEPRECATED NativeType(
477 const QString &typeDesc, const QString &typeName, QVariant::Type type, int minLen = 0, int maxLen = 0, int minPrec = 0, int maxPrec = 0, QVariant::Type subType = QVariant::Type::Invalid
478 )
479 : mTypeDesc( typeDesc )
480 , mTypeName( typeName )
481 , mType( QgsVariantUtils::variantTypeToMetaType( type ) )
482 , mMinLen( minLen )
483 , mMaxLen( maxLen )
484 , mMinPrec( minPrec )
485 , mMaxPrec( maxPrec )
486 , mSubType( QgsVariantUtils::variantTypeToMetaType( subType ) ) SIP_DEPRECATED
487 {}
488
489
490 QString mTypeDesc;
491 QString mTypeName;
492 QMetaType::Type mType;
497 QMetaType::Type mSubType;
498 };
499
503 QList< QgsVectorDataProvider::NativeType > nativeTypes() const;
504
509 virtual bool doesStrictFeatureTypeCheck() const { return true; }
510
512 static QStringList availableEncodings();
513
517 bool hasErrors() const;
518
522 void clearErrors();
523
527 QStringList errors() const;
528
544 virtual QgsFeatureRenderer *createRenderer( const QVariantMap &configuration = QVariantMap() ) const SIP_FACTORY;
545
561 virtual QgsAbstractVectorLayerLabeling *createLabeling( const QVariantMap &configuration = QVariantMap() ) const SIP_FACTORY;
562
575 virtual const QgsLayerRenderingSettings *renderingSettings( const QVariantMap &configuration = QVariantMap() ) const;
576
580 static QVariant convertValue( QMetaType::Type type, const QString &value );
581
587 Q_DECL_DEPRECATED static QVariant convertValue( QVariant::Type type, const QString &value ) SIP_DEPRECATED;
588
592 virtual QgsTransaction *transaction() const;
593
597 Q_DECL_DEPRECATED virtual void forceReload() SIP_DEPRECATED { reloadData(); }
598
602 virtual QSet<QgsMapLayerDependency> dependencies() const;
603
610 virtual QList<QgsRelation> discoverRelations( const QgsVectorLayer *target, const QList<QgsVectorLayer *> &layers ) const;
611
617 virtual QString translateMetadataKey( const QString &mdKey ) const { return mdKey; }
618
625 virtual QString translateMetadataValue( const QString &mdKey, const QVariant &value ) const
626 {
627 Q_UNUSED( mdKey )
628 return value.toString();
629 }
630
637 virtual bool hasMetadata() const { return true; }
638
645 virtual void handlePostCloneOperations( QgsVectorDataProvider *source );
646
649
650 QgsDataProviderElevationProperties *elevationProperties() override;
651 const QgsDataProviderElevationProperties *elevationProperties() const override SIP_SKIP;
652
653 signals:
654
659 void raiseError( const QString &msg ) const;
660
661 protected:
666 void clearMinMaxCache();
667
671 void fillMinMaxCache() const;
672
681 void pushError( const QString &msg ) const;
682
688 QgsGeometry convertToProviderType( const QgsGeometry &geom ) const;
689
696
697#ifdef SIP_PYQT5_RUN
698
703 QTextCodec *textEncoding() const;
704#endif
705
711 static QgsGeometry convertToProviderType( const QgsGeometry &geometry, Qgis::WkbType providerGeometryType );
712
713
714 private:
715 mutable bool mCacheMinMaxDirty = true;
716 mutable QMap<int, QVariant> mCacheMinValues, mCacheMaxValues;
717
719 QTextCodec *mEncoding = nullptr;
720
722 QgsAttributeList mAttributesToFetch;
723
725 QList< NativeType > mNativeTypes;
726
728 mutable QStringList mErrors;
729
730 std::unique_ptr< QgsVectorDataProviderTemporalCapabilities > mTemporalCapabilities;
731 std::unique_ptr< QgsDataProviderElevationProperties > mElevationProperties;
732
733 static QStringList sEncodings;
734
738 virtual void setTransaction( QgsTransaction * /*transaction*/ ) {}
739};
740
741#endif
@ EditingCapabilities
Bitmask of all editing capabilities.
Definition qgis.h:553
QFlags< VectorLayerTypeFlag > VectorLayerTypeFlags
Vector layer type flags.
Definition qgis.h:440
QFlags< DataProviderReadFlag > DataProviderReadFlags
Flags which control data provider construction.
Definition qgis.h:512
FeatureAvailability
Possible return value for QgsFeatureSource::hasFeatures() to determine if a source is empty.
Definition qgis.h:618
QFlags< VectorProviderCapability > VectorProviderCapabilities
Vector data provider capabilities.
Definition qgis.h:564
Aggregate
Available aggregates to calculate.
Definition qgis.h:6516
QFlags< VectorDataProviderAttributeEditCapability > VectorDataProviderAttributeEditCapabilities
Attribute editing capabilities which may be supported by vector data providers.
Definition qgis.h:643
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:294
Base class that can be used for any class that is capable of returning features.
Abstract base class - its implementations define different approaches to the labeling of a vector lay...
A 3-dimensional box composed of x, y, z coordinates.
Definition qgsbox3d.h:45
Represents a coordinate reference system (CRS).
Base class for handling elevation related properties for a data provider.
virtual Qgis::DataProviderFlags flags() const
Returns the generic data provider flags.
virtual QString dataComment() const
Returns a short comment for the data that this provider is providing access to (e....
QgsDataProvider(const QString &uri=QString(), const QgsDataProvider::ProviderOptions &providerOptions=QgsDataProvider::ProviderOptions(), Qgis::DataProviderReadFlags flags=Qgis::DataProviderReadFlags())
Create a new dataprovider with the specified in the uri.
virtual QgsDataProviderTemporalCapabilities * temporalCapabilities()
Returns the provider's temporal capabilities.
QgsDataSourceUri uri() const
Gets the data source specification.
virtual void reloadData()
Reloads the data from the source for providers with data caches to synchronize, changes in the data s...
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Wrapper for iterator of features from vector data provider or vector layer.
Abstract base class for all 2D vector feature renderers.
Wraps a request for features to a vector layer (or directly its vector data provider).
An interface for objects which accept features via addFeature(s) methods.
virtual QString lastError() const
Returns the most recent error encountered by the sink, e.g.
virtual bool addFeatures(QgsFeatureList &features, QgsFeatureSink::Flags flags=QgsFeatureSink::Flags())=0
Adds a list of features to the sink.
QFlags< Flag > Flags
An interface for objects which provide features via a getFeatures method.
virtual QgsCoordinateReferenceSystem sourceCrs() const =0
Returns the coordinate reference system for features in the source.
virtual Qgis::FeatureAvailability hasFeatures() const
Determines if there are any features available in the source.
virtual QVariant minimumValue(int fieldIndex) const
Returns the minimum value for an attribute column or an invalid variant in case of error.
virtual QVariant maximumValue(int fieldIndex) const
Returns the maximum value for an attribute column or an invalid variant in case of error.
virtual QgsRectangle sourceExtent() const
Returns the extent of all geometries from the source.
virtual QgsBox3D sourceExtent3D() const
Returns the 3D extent of all geometries from the source.
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition qgsfeedback.h:44
Constraint
Constraints which may be present on a field.
QFlags< Constraint > Constraints
Encapsulate a field in an attribute table or data source.
Definition qgsfield.h:56
Container of fields for a vector layer.
Definition qgsfields.h:45
A geometry is the spatial representation of a feature.
Stores layer-level rendering settings supplied by data providers.
A rectangle specified with double values.
Allows creation of a multi-layer database-side transaction.
Contains utility functions for working with QVariants and QVariant types.
Implementation of data provider temporal properties for QgsVectorDataProviders.
Base class for vector data providers.
void pushError(const QString &msg) const
Push a notification about errors that happened in this providers scope.
virtual QList< QPair< QString, QString > > codedValues(int index) const
Returns the possible enum or coded values of an attribute in key-value pairs.
void setNativeTypes(const QList< QgsVectorDataProvider::NativeType > &nativeTypes)
Set the list of native types supported by this provider.
QString sourceName() const override
Returns a friendly display name for the source.
static const int EditingCapabilities
Bitmask of all provider's editing capabilities.
virtual QString translateMetadataValue(const QString &mdKey, const QVariant &value) const
Gets the translated metadata value.
long long featureCount() const override=0
Number of features in the layer.
virtual QString storageType() const
Returns the permanent storage type for this layer as a friendly name.
void clearMinMaxCache()
Invalidates the min/max cache.
void raiseError(const QString &msg) const
Signals an error in this provider.
QTextCodec * textEncoding() const
Gets this providers encoding.
QgsVectorDataProvider(const QString &uri=QString(), const QgsDataProvider::ProviderOptions &providerOptions=QgsDataProvider::ProviderOptions(), Qgis::DataProviderReadFlags flags=Qgis::DataProviderReadFlags())
Constructor for a vector data provider.
virtual bool isSqlQuery() const
Returns true if the layer is a query (SQL) layer.
virtual bool empty() const
Returns true if the layer does not contain any feature.
QList< QgsVectorDataProvider::NativeType > nativeTypes() const
Returns the names of the supported types.
virtual bool doesStrictFeatureTypeCheck() const
Returns true if the provider is strict about the type of inserted features (e.g.
QgsGeometry convertToProviderType(const QgsGeometry &geom) const
Converts the geometry to the provider type if possible / necessary.
virtual QgsAbstractFeatureSource * featureSource() const =0
Returns feature source object that can be used for querying provider's data.
virtual bool hasMetadata() const
Returns true if the data source has metadata, false otherwise.
virtual Qgis::VectorLayerTypeFlags vectorLayerTypeFlags() const
Returns the vector layer type flags.
virtual Q_DECL_DEPRECATED void enumValues(int index, QStringList &enumList) const
Returns the possible enum values of an attribute.
QgsFields fields() const override=0
Returns the fields associated with this data provider.
Qgis::WkbType wkbType() const override=0
Returns the geometry type which is returned by this layer.
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const override=0
Query the provider for features specified in request.
void fillMinMaxCache() const
Populates the cache of minimum and maximum attribute values.
virtual Q_DECL_DEPRECATED void forceReload()
virtual QString translateMetadataKey(const QString &mdKey) const
Gets the translated metadata key.
Represents a vector layer which manages a vector based dataset.
#define SIP_DEPRECATED
Definition qgis_sip.h:113
#define SIP_SKIP
Definition qgis_sip.h:138
#define SIP_OUT
Definition qgis_sip.h:57
#define SIP_FACTORY
Definition qgis_sip.h:83
#define SIP_INOUT
Definition qgis_sip.h:78
QMap< int, QString > QgsFieldNameMap
QMap< QgsFeatureId, QgsGeometry > QgsGeometryMap
QMap< QgsFeatureId, QgsAttributeMap > QgsChangedAttributesMap
QList< QgsFeature > QgsFeatureList
QSet< QgsFeatureId > QgsFeatureIds
QList< int > QgsAttributeList
Definition qgsfield.h:30
QList< int > QgsAttributeList
QSet< int > QgsAttributeIds
QHash< int, QString > QgsAttrPalIndexNameHash
A bundle of parameters controlling aggregate calculation.
Setting options for creating vector data providers.
NativeType(const QString &typeDesc, const QString &typeName, QMetaType::Type type, int minLen=0, int maxLen=0, int minPrec=0, int maxPrec=0, QMetaType::Type subType=QMetaType::Type::UnknownType)
Q_DECL_DEPRECATED NativeType(const QString &typeDesc, const QString &typeName, QVariant::Type type, int minLen=0, int maxLen=0, int minPrec=0, int maxPrec=0, QVariant::Type subType=QVariant::Type::Invalid)