Branch data Line data Source code
1 : : /*************************************************************************** 2 : : memoryprovider.h - provider with storage in memory 3 : : ------------------ 4 : : begin : June 2008 5 : : copyright : (C) 2008 by Martin Dobias 6 : : email : wonder dot sk at gmail dot com 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 : : 16 : : #define SIP_NO_FILE 17 : : 18 : : #include "qgsvectordataprovider.h" 19 : : #include "qgscoordinatereferencesystem.h" 20 : : #include "qgsfields.h" 21 : : 22 : : ///@cond PRIVATE 23 : : typedef QMap<QgsFeatureId, QgsFeature> QgsFeatureMap; 24 : : 25 : : class QgsSpatialIndex; 26 : : 27 : : class QgsMemoryFeatureIterator; 28 : : 29 : : class QgsMemoryProvider final: public QgsVectorDataProvider 30 : : { 31 : 280 : Q_OBJECT 32 : : 33 : : public: 34 : : explicit QgsMemoryProvider( const QString &uri, const QgsVectorDataProvider::ProviderOptions &coordinateTransformContext, 35 : : QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() ); 36 : : 37 : : ~QgsMemoryProvider() override; 38 : : 39 : : //! Returns the memory provider key 40 : : static QString providerKey(); 41 : : //! Returns the memory provider description 42 : : static QString providerDescription(); 43 : : 44 : : /** 45 : : * Creates a new memory provider, with provider properties embedded within the given \a uri and \a options 46 : : * argument. 47 : : */ 48 : : static QgsMemoryProvider *createProvider( const QString &uri, const QgsVectorDataProvider::ProviderOptions &coordinateTransformContext, 49 : : QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() ); 50 : : 51 : : /* Implementation of functions from QgsVectorDataProvider */ 52 : : 53 : : QgsAbstractFeatureSource *featureSource() const override; 54 : : 55 : : QString dataSourceUri( bool expandAuthConfig = true ) const override; 56 : : QString storageType() const override; 57 : : QgsFeatureIterator getFeatures( const QgsFeatureRequest &request ) const override; 58 : : QgsWkbTypes::Type wkbType() const override; 59 : : long featureCount() const override; 60 : : QgsFields fields() const override; 61 : : bool addFeatures( QgsFeatureList &flist, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override; 62 : : bool deleteFeatures( const QgsFeatureIds &id ) override; 63 : : bool addAttributes( const QList<QgsField> &attributes ) override; 64 : : bool renameAttributes( const QgsFieldNameMap &renamedAttributes ) override; 65 : : bool deleteAttributes( const QgsAttributeIds &attributes ) override; 66 : : bool changeAttributeValues( const QgsChangedAttributesMap &attr_map ) override; 67 : : bool changeGeometryValues( const QgsGeometryMap &geometry_map ) override; 68 : : QString subsetString() const override; 69 : : bool setSubsetString( const QString &theSQL, bool updateFeatureCount = true ) override; 70 : : bool supportsSubsetString() const override { return true; } 71 : : bool createSpatialIndex() override; 72 : : QgsFeatureSource::SpatialIndexPresence hasSpatialIndex() const override; 73 : : QgsVectorDataProvider::Capabilities capabilities() const override; 74 : : bool truncate() override; 75 : : 76 : : /* Implementation of functions from QgsDataProvider */ 77 : : 78 : : QString name() const override; 79 : : QString description() const override; 80 : : QgsRectangle extent() const override; 81 : : void updateExtents() override; 82 : : bool isValid() const override; 83 : : QgsCoordinateReferenceSystem crs() const override; 84 : : void handlePostCloneOperations( QgsVectorDataProvider *source ) override; 85 : : 86 : : private: 87 : : // Coordinate reference system 88 : : QgsCoordinateReferenceSystem mCrs; 89 : : 90 : : // fields 91 : : QgsFields mFields; 92 : : QgsWkbTypes::Type mWkbType; 93 : : mutable QgsRectangle mExtent; 94 : : 95 : : // features 96 : : QgsFeatureMap mFeatures; 97 : : QgsFeatureId mNextFeatureId; 98 : : 99 : : // indexing 100 : : QgsSpatialIndex *mSpatialIndex = nullptr; 101 : : 102 : : QString mSubsetString; 103 : : 104 : : friend class QgsMemoryFeatureSource; 105 : : }; 106 : : 107 : : ///@endcond