00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef QGSVECTORDATAPROVIDER_H
00017 #define QGSVECTORDATAPROVIDER_H
00018
00019 class QTextCodec;
00020
00021 #include <QList>
00022 #include <QSet>
00023 #include <QMap>
00024
00025
00026 #include "qgis.h"
00027 #include "qgsdataprovider.h"
00028 #include "qgsvectorlayer.h"
00029 #include "qgsfield.h"
00030
00039 class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider
00040 {
00041 Q_OBJECT
00042
00043 public:
00044
00045
00049 enum Capability
00050 {
00052 NoCapabilities = 0,
00054 AddFeatures = 1,
00056 DeleteFeatures = 1 << 1,
00058 ChangeAttributeValues = 1 << 2,
00060 AddAttributes = 1 << 3,
00062 DeleteAttributes = 1 << 4,
00064 SaveAsShapefile = 1 << 5,
00066 CreateSpatialIndex = 1 << 6,
00068 SelectAtId = 1 << 7,
00070 ChangeGeometries = 1 << 8,
00072 SelectGeometryAtId = 1 << 9,
00074 RandomSelectGeometryAtId = 1 << 10,
00076 SequentialSelectGeometryAtId = 1 << 11,
00077 };
00078
00080 const static int EditingCapabilities = AddFeatures | DeleteFeatures |
00081 ChangeAttributeValues | ChangeGeometries | AddAttributes | DeleteAttributes;
00082
00087 QgsVectorDataProvider( QString uri = QString() );
00088
00092 virtual ~QgsVectorDataProvider();
00093
00097 virtual QString storageType() const;
00098
00106 virtual void select( QgsAttributeList fetchAttributes = QgsAttributeList(),
00107 QgsRectangle rect = QgsRectangle(),
00108 bool fetchGeometry = true,
00109 bool useIntersect = false ) = 0;
00110
00115 virtual long updateFeatureCount();
00116
00128 virtual bool featureAtId( int featureId,
00129 QgsFeature& feature,
00130 bool fetchGeometry = true,
00131 QgsAttributeList fetchAttributes = QgsAttributeList() );
00132
00138 virtual bool nextFeature( QgsFeature& feature ) = 0;
00139
00144 virtual QGis::WkbType geometryType() const = 0;
00145
00146
00151 virtual long featureCount() const = 0;
00152
00153
00157 virtual uint fieldCount() const = 0;
00158
00164 virtual const QgsFieldMap &fields() const = 0;
00165
00170 virtual QString dataComment() const;
00171
00173 virtual void rewind() = 0;
00174
00183 virtual QVariant minimumValue( int index );
00184
00193 virtual QVariant maximumValue( int index );
00194
00203 virtual void uniqueValues( int index, QList<QVariant> &uniqueValues, int limit = -1 );
00204
00210 virtual void enumValues( int index, QStringList& enumList ) { Q_UNUSED( index ); enumList.clear(); }
00211
00216 virtual bool addFeatures( QgsFeatureList &flist );
00217
00223 virtual bool deleteFeatures( const QgsFeatureIds &id );
00224
00231 virtual bool addAttributes( const QList<QgsField> &attributes );
00232
00239 virtual bool addAttributes( const QMap<QString, QString> &attributes );
00240
00246 virtual bool deleteAttributes( const QgsAttributeIds &attributes );
00247
00253 virtual bool changeAttributeValues( const QgsChangedAttributesMap &attr_map );
00254
00258 virtual QVariant defaultValue( int fieldId );
00259
00267 virtual bool changeGeometryValues( QgsGeometryMap & geometry_map );
00268
00273 virtual bool createSpatialIndex();
00274
00280 virtual int capabilities() const;
00281
00285 QString capabilitiesString() const;
00286
00290 virtual void setEncoding( const QString& e );
00291
00295 QString encoding() const;
00296
00300 int fieldNameIndex( const QString& fieldName ) const;
00301
00303 QMap<QString, int> fieldNameMap() const;
00304
00308 virtual QgsAttributeList attributeIndexes();
00309
00314 void enableGeometrylessFeatures( bool fetch );
00315
00320 bool supportedType( const QgsField &field ) const;
00321
00322 struct NativeType
00323 {
00324 NativeType( QString typeDesc, QString typeName, QVariant::Type type, int minLen = 0, int maxLen = 0, int minPrec = 0, int maxPrec = 0 ) :
00325 mTypeDesc( typeDesc ), mTypeName( typeName ), mType( type ), mMinLen( minLen ), mMaxLen( maxLen ), mMinPrec( minPrec ), mMaxPrec( maxPrec ) {};
00326
00327 QString mTypeDesc;
00328 QString mTypeName;
00329 QVariant::Type mType;
00330 int mMinLen, mMaxLen;
00331 int mMinPrec, mMaxPrec;
00332 };
00333
00334
00339 const QList< NativeType > &nativeTypes() const;
00340
00341
00346 const QMap<QString, QVariant::Type> &supportedNativeTypes() const;
00347
00351 virtual bool doesStrictFeatureTypeCheck() const { return true;}
00352
00353
00354 static const QStringList &availableEncodings();
00355
00356 protected:
00357 QVariant convertValue( QVariant::Type type, QString value );
00358
00359 void clearMinMaxCache();
00360 void fillMinMaxCache();
00361
00362 bool mCacheMinMaxDirty;
00363 QMap<int, QVariant> mCacheMinValues, mCacheMaxValues;
00364
00366 QTextCodec* mEncoding;
00367
00369 bool mFetchFeaturesWithoutGeom;
00370
00372 bool mFetchGeom;
00373
00375 QgsAttributeList mAttributesToFetch;
00376
00378 QList< NativeType > mNativeTypes;
00379
00380 private:
00382 QMap<QString, QVariant::Type> mOldTypeList;
00383
00384 static QStringList smEncodings;
00385 };
00386
00387 #endif