41 setEncoding( settings.
value( QStringLiteral(
"UI/encoding" ),
"System" ).toString() );
46 return QStringLiteral(
"Generic vector file" );
93 Q_UNUSED( attributes );
99 Q_UNUSED( attributes );
105 Q_UNUSED( renamedAttributes );
111 Q_UNUSED( attr_map );
123 Q_UNUSED( fieldIndex );
130 if ( fieldIndex < 0 || fieldIndex >= f.
count() )
143 Q_UNUSED( geometry_map );
178 mEncoding = QTextCodec::codecForName( e.toLocal8Bit().constData() );
180 if ( !mEncoding && e != QLatin1String(
"System" ) )
183 mEncoding = QTextCodec::codecForName(
"System" );
187 mEncoding = QTextCodec::codecForLocale();
189 Q_ASSERT( mEncoding );
196 return mEncoding->name();
199 return QLatin1String(
"" );
204 QStringList abilitiesList;
210 abilitiesList += tr(
"Add Features" );
215 abilitiesList += tr(
"Delete Features" );
220 abilitiesList += tr(
"Change Attribute Values" );
225 abilitiesList += tr(
"Add Attributes" );
230 abilitiesList += tr(
"Delete Attributes" );
235 abilitiesList += tr(
"Rename Attributes" );
241 abilitiesList += tr(
"Create Spatial Index" );
246 abilitiesList += tr(
"Create Attribute Indexes" );
251 abilitiesList += tr(
"Fast Access to Features at ID" );
256 abilitiesList += tr(
"Change Geometries" );
261 abilitiesList += tr(
"Presimplify Geometries" );
266 abilitiesList += tr(
"Presimplify Geometries with Validity Check" );
271 abilitiesList += tr(
"Simultaneous Geometry and Attribute Updates" );
276 abilitiesList += tr(
"Transactions" );
281 abilitiesList += tr(
"Curved Geometries" );
284 return abilitiesList.join( QStringLiteral(
", " ) );
295 QMap<QString, int> resultMap;
298 for (
int i = 0; i < fieldsCopy.
count(); ++i )
300 resultMap.insert( fieldsCopy.
at( i ).
name(), i );
328 QgsDebugMsgLevel( QString(
"field name = %1 type = %2 length = %3 precision = %4" )
330 QVariant::typeToName( field.
type() ) )
334 Q_FOREACH (
const NativeType &nativeType, mNativeTypes )
336 QgsDebugMsgLevel( QString(
"native field type = %1 min length = %2 max length = %3 min precision = %4 max precision = %5" )
337 .arg( QVariant::typeToName( nativeType.
mType ) )
378 if ( index < 0 || index >=
fields().count() )
380 QgsDebugMsg(
"Warning: access requested to invalid field index: " + QString::number( index ) );
386 if ( !mCacheMinValues.contains( index ) )
389 return mCacheMinValues[index];
394 if ( index < 0 || index >=
fields().count() )
396 QgsDebugMsg(
"Warning: access requested to invalid field index: " + QString::number( index ) );
402 if ( !mCacheMaxValues.contains( index ) )
405 return mCacheMaxValues[index];
414 if ( index < 0 || index >=
fields().count() )
419 keys.append( index );
425 request.
setFilterExpression( QStringLiteral(
"\"%1\" ILIKE '%%2%'" ).arg( fieldName, substring ) );
432 QString value = f.
attribute( index ).toString();
433 if ( !
set.contains( value ) )
435 results.append( value );
439 if ( ( limit >= 0 && results.size() >= limit ) || ( feedback && feedback->
isCanceled() ) )
449 Q_UNUSED( aggregate );
451 Q_UNUSED( parameters );
460 mCacheMinMaxDirty =
true;
461 mCacheMinValues.clear();
462 mCacheMaxValues.clear();
467 if ( !mCacheMinMaxDirty )
471 for (
int i = 0; i < flds.
count(); ++i )
473 if ( flds.
at( i ).
type() == QVariant::Int )
475 mCacheMinValues[i] = QVariant( std::numeric_limits<int>::max() );
476 mCacheMaxValues[i] = QVariant( std::numeric_limits<int>::lowest() );
478 else if ( flds.
at( i ).
type() == QVariant::LongLong )
480 mCacheMinValues[i] = QVariant( std::numeric_limits<qlonglong>::max() );
481 mCacheMaxValues[i] = QVariant( std::numeric_limits<qlonglong>::lowest() );
483 else if ( flds.
at( i ).
type() == QVariant::Double )
485 mCacheMinValues[i] = QVariant( std::numeric_limits<double>::max() );
486 mCacheMaxValues[i] = QVariant( std::numeric_limits<double>::lowest() );
491 mCacheMinValues[i] = QVariant();
492 mCacheMaxValues[i] = QVariant();
504 for (
int attributeIndex : keys )
506 const QVariant &varValue = attrs.at( attributeIndex );
508 if ( varValue.isNull() )
511 switch ( flds.
at( attributeIndex ).
type() )
515 int value = varValue.toInt();
516 if ( value < mCacheMinValues[ attributeIndex ].toInt() )
517 mCacheMinValues[ attributeIndex ] = value;
518 if ( value > mCacheMaxValues[ attributeIndex ].toInt() )
519 mCacheMaxValues[ attributeIndex ] = value;
522 case QVariant::LongLong:
524 qlonglong value = varValue.toLongLong();
525 if ( value < mCacheMinValues[ attributeIndex ].toLongLong() )
526 mCacheMinValues[ attributeIndex ] = value;
527 if ( value > mCacheMaxValues[ attributeIndex ].toLongLong() )
528 mCacheMaxValues[ attributeIndex ] = value;
531 case QVariant::Double:
533 double value = varValue.toDouble();
534 if ( value < mCacheMinValues[ attributeIndex ].toDouble() )
535 mCacheMinValues[attributeIndex ] = value;
536 if ( value > mCacheMaxValues[ attributeIndex ].toDouble() )
537 mCacheMaxValues[ attributeIndex ] = value;
542 QString value = varValue.toString();
543 if ( mCacheMinValues[ attributeIndex ].isNull() || value < mCacheMinValues[attributeIndex ].toString() )
545 mCacheMinValues[attributeIndex] = value;
547 if ( mCacheMaxValues[attributeIndex].isNull() || value > mCacheMaxValues[attributeIndex].toString() )
549 mCacheMaxValues[attributeIndex] = value;
557 mCacheMinMaxDirty =
false;
564 if ( !v.convert( type ) || value.isNull() )
565 v = QVariant( type );
580 static bool _compareEncodings(
const QString &s1,
const QString &s2 )
582 return s1.toLower() < s2.toLower();
587 if ( sEncodings.isEmpty() )
589 Q_FOREACH (
const QString &codec, QTextCodec::availableCodecs() )
594 smEncodings <<
"BIG5";
595 smEncodings <<
"BIG5-HKSCS";
596 smEncodings <<
"EUCJP";
597 smEncodings <<
"EUCKR";
598 smEncodings <<
"GB2312";
599 smEncodings <<
"GBK";
600 smEncodings <<
"GB18030";
601 smEncodings <<
"JIS7";
602 smEncodings <<
"SHIFT-JIS";
603 smEncodings <<
"TSCII";
604 smEncodings <<
"UTF-8";
605 smEncodings <<
"UTF-16";
606 smEncodings <<
"KOI8-R";
607 smEncodings <<
"KOI8-U";
608 smEncodings <<
"ISO8859-1";
609 smEncodings <<
"ISO8859-2";
610 smEncodings <<
"ISO8859-3";
611 smEncodings <<
"ISO8859-4";
612 smEncodings <<
"ISO8859-5";
613 smEncodings <<
"ISO8859-6";
614 smEncodings <<
"ISO8859-7";
615 smEncodings <<
"ISO8859-8";
616 smEncodings <<
"ISO8859-8-I";
617 smEncodings <<
"ISO8859-9";
618 smEncodings <<
"ISO8859-10";
619 smEncodings <<
"ISO8859-11";
620 smEncodings <<
"ISO8859-12";
621 smEncodings <<
"ISO8859-13";
622 smEncodings <<
"ISO8859-14";
623 smEncodings <<
"ISO8859-15";
624 smEncodings <<
"IBM 850";
625 smEncodings <<
"IBM 866";
626 smEncodings <<
"CP874";
627 smEncodings <<
"CP1250";
628 smEncodings <<
"CP1251";
629 smEncodings <<
"CP1252";
630 smEncodings <<
"CP1253";
631 smEncodings <<
"CP1254";
632 smEncodings <<
"CP1255";
633 smEncodings <<
"CP1256";
634 smEncodings <<
"CP1257";
635 smEncodings <<
"CP1258";
636 smEncodings <<
"Apple Roman";
637 smEncodings <<
"TIS-620";
638 smEncodings <<
"System";
643 std::sort( sEncodings.begin(), sEncodings.end(), _compareEncodings );
655 return !mErrors.isEmpty();
687 return QSet<QgsMapLayerDependency>();
706 if ( geometry->
wkbType() == providerGeomType )
711 std::unique_ptr< QgsAbstractGeometry > outputGeom;
719 if ( compoundCurve->
nCurves() == 1 )
722 if ( circularString )
724 outputGeom.reset( circularString->
clone() );
736 outputGeom.reset( curveGeom );
744 if ( segmentizedGeom )
746 outputGeom.reset( segmentizedGeom );
755 if ( geomCollection )
757 if ( geomCollection->
addGeometry( outputGeom ? outputGeom->clone() : geometry->
clone() ) )
759 outputGeom.reset( collGeom.release() );
769 outputGeom.reset( geometry->
clone() );
778 outputGeom.reset( geometry->
clone() );
780 outputGeom->addMValue();
806 QStringList QgsVectorDataProvider::sEncodings;
810 return QList<QgsRelation>();
int lookupField(const QString &fieldName) const
Look up field's index from the field name.
QString encoding() const
Gets encoding which is used for accessing data.
Wrapper for iterator of features from vector data provider or vector layer.
QMap< QgsFeatureId, QgsGeometry > QgsGeometryMap
static QVariant convertValue(QVariant::Type type, const QString &value)
A rectangle specified with double values.
QVariant maximumValue(int index) const override
Returns the maximum value of an attribute.
static std::unique_ptr< QgsAbstractGeometry > geomFromWkbType(QgsWkbTypes::Type t)
Returns empty geometry from wkb type.
bool addZValue(double zValue=0) override
Adds a z-dimension to the geometry, initialized to a preset value.
virtual QgsVectorDataProvider::Capabilities capabilities() const
Returns flags containing the supported capabilities.
QgsWkbTypes::Type wkbType() const override=0
Returns the geometry type which is returned by this layer.
QMap< QString, int > fieldNameMap() const
Returns a map where the key is the name of the field and the value is its index.
virtual QgsAbstractGeometry * toCurveType() const =0
Returns the geometry converted to the more generic curve type.
QVariant minimumValue(int index) const override
Returns the minimum value of an attribute.
virtual bool addAttributes(const QList< QgsField > &attributes)
Adds new attributes to the provider.
bool isNull() const
Returns true if the geometry is null (ie, contains no underlying geometry accessible via geometry() )...
virtual QVariant aggregate(QgsAggregateCalculator::Aggregate aggregate, int index, const QgsAggregateCalculator::AggregateParameters ¶meters, QgsExpressionContext *context, bool &ok) const
Calculates an aggregated value from the layer's features.
This class is a composition of two QSettings instances:
static bool isMultiType(Type type)
Returns true if the WKB type is a multi type.
Constraint
Constraints which may be present on a field.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
QSet< QgsFeatureId > QgsFeatureIds
QgsFieldConstraints::Constraints fieldConstraints(int fieldIndex) const
Returns any constraints which are present at the provider for a specified field index.
bool addFeatures(QgsFeatureList &flist, QgsFeatureSink::Flags flags=nullptr) override
Adds a list of features to the sink.
QList< QgsFeature > QgsFeatureList
Supports simplification of geometries on provider side according to a distance tolerance.
virtual QSet< QgsMapLayerDependency > dependencies() const
Gets the list of layer ids on which this layer depends.
virtual bool deleteFeatures(const QgsFeatureIds &id)
Deletes one or more features from the provider.
virtual void setEncoding(const QString &e)
Set encoding used for accessing data from layer.
virtual QgsAttributeList pkAttributeIndexes() const
Returns list of indexes of fields that make up the primary key.
virtual bool renameAttributes(const QgsFieldNameMap &renamedAttributes)
Renames existing attributes.
QgsFeatureRequest & setSubsetOfAttributes(const QgsAttributeList &attrs)
Set a subset of attributes that will be fetched.
void pushError(const QString &msg) const
Push a notification about errors that happened in this providers scope.
void raiseError(const QString &msg) const
Signals an error in this provider.
Container of fields for a vector layer.
A geometry is the spatial representation of a feature.
virtual QgsFeatureRenderer * createRenderer(const QVariantMap &configuration=QVariantMap()) const
Creates a new vector layer feature renderer, using provider backend specific information.
Abstract base class for spatial data provider implementations.
Allows deletion of attributes (fields)
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
QList< QgsVectorDataProvider::NativeType > nativeTypes() const
Returns the names of the supported types.
virtual QgsAbstractGeometry * clone() const =0
Clones the geometry by performing a deep copy.
int count() const
Returns number of items.
static bool hasZ(Type type)
Tests whether a WKB type contains the z-dimension.
virtual bool createAttributeIndex(int field)
Create an attribute index on the datasource.
bool supportedType(const QgsField &field) const
check if provider supports type of field
QgsField at(int i) const
Gets field at particular index (must be in range 0..N-1)
void dataChanged()
This is emitted whenever an asynchronous operation has finished and the data should be redrawn...
Base class for feedback objects to be used for cancelation of something running in a worker thread...
virtual bool skipConstraintCheck(int fieldIndex, QgsFieldConstraints::Constraint constraint, const QVariant &value=QVariant()) const
Returns true if a constraint check should be skipped for a specified field (e.g., if the value return...
void setNativeTypes(const QList< QgsVectorDataProvider::NativeType > &nativeTypes)
Set the list of native types supported by this provider.
Allows creation of spatial index.
QSet< int > QgsAttributeIds
virtual bool createSpatialIndex()
Creates a spatial index on the datasource (if supported by the provider type).
QgsFeatureRequest & setFilterExpression(const QString &expression)
Set the filter expression.
Type
The WKB type describes the number of dimensions a geometry has.
Can create indexes on provider's fields.
QgsAttributeList allAttributesList() const
Utility function to get list of attribute indexes.
void fillMinMaxCache() const
Populates the cache of minimum and maximum attribute values.
Allows addition of new attributes (fields)
#define QgsDebugMsgLevel(str, level)
void clearMinMaxCache()
Invalidates the min/max cache.
virtual QgsCoordinateReferenceSystem crs() const =0
Returns the coordinate system for the data source.
QgsFields fields() const override=0
Returns the fields associated with this data provider.
virtual bool changeAttributeValues(const QgsChangedAttributesMap &attr_map)
Changes attribute values of existing features.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
virtual bool changeFeatures(const QgsChangedAttributesMap &attr_map, const QgsGeometryMap &geometry_map)
Changes attribute values and geometries of existing features.
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::Warning, bool notifyUser=true)
Adds a message to the log instance (and creates it if necessary).
QStringList errors() const
Gets recorded errors.
This class wraps a request for features to a vector layer (or directly its vector data provider)...
virtual QString defaultValueClause(int fieldIndex) const
Returns any default value clauses which are present at the provider for a specified field index...
T qgsgeometry_cast(const QgsAbstractGeometry *geom)
int fieldNameIndex(const QString &fieldName) const
Returns the index of a field name or -1 if the field does not exist.
Allows modifications of geometries.
void clearErrors()
Clear recorded errors.
QgsGeometry convertToProviderType(const QgsGeometry &geom) const
Converts the geometry to the provider type if possible / necessary.
virtual bool isDeleteStyleFromDatabaseSupported() const
It returns false by default.
virtual QgsTransaction * transaction() const
Returns the transaction this data provider is included in, if any.
Encapsulate a field in an attribute table or data source.
QgsCoordinateReferenceSystem sourceCrs() const override
Returns the coordinate reference system for features in the source.
virtual bool isSaveAndLoadStyleToDatabaseSupported() const
It returns false by default.
Abstract base class for all geometries.
Fast access to features using their ID.
virtual bool changeGeometryValues(const QgsGeometryMap &geometry_map)
Changes geometries of existing features.
QgsWkbTypes::Type wkbType() const
Returns the WKB type of the geometry.
QMap< int, QString > QgsFieldNameMap
QgsVectorDataProvider(const QString &uri=QString(), const QgsDataProvider::ProviderOptions &options=QgsDataProvider::ProviderOptions())
Constructor for a vector data provider.
Supports circular geometry types (circularstring, compoundcurve, curvepolygon)
virtual void forceReload()
Forces a reload of the underlying datasource if the provider implements this method.
const QgsAbstractGeometry * constGet() const
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
int nCurves() const
Returns the number of curves in the geometry.
Supports topological simplification of geometries on provider side according to a distance tolerance...
QString capabilitiesString() const
Returns the above in friendly format.
Setting options for creating vector data providers.
QgsFieldConstraints constraints
bool isCanceled() const
Tells whether the operation has been canceled already.
QMap< QgsFeatureId, QgsAttributeMap > QgsChangedAttributesMap
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const override=0
Query the provider for features specified in request.
virtual bool cancelReload()
Cancels the current reloading of data.
This class allows including a set of layers in a database-side transaction, provided the layer data p...
static bool isCurvedType(Type type)
Returns true if the WKB type is a curved type or can contain curved geometries.
QgsCircularString * clone() const override
Clones the geometry by performing a deep copy.
bool hasErrors() const
Provider has errors to report.
virtual bool truncate()
Removes all features from the layer.
virtual QString dataComment() const
Returns a short comment for the data that this provider is providing access to (e.g.
This class represents a coordinate reference system (CRS).
virtual QStringList uniqueStringsMatching(int index, const QString &substring, int limit=-1, QgsFeedback *feedback=nullptr) const
Returns unique string values of an attribute which contain a specified subset string.
const QgsCurve * curveAt(int i) const
Returns the curve at the specified index.
virtual QgsAttributeList attributeIndexes() const
Returns list of indexes to fetch all attributes in nextFeature()
virtual bool deleteAttributes(const QgsAttributeIds &attributes)
Deletes existing attributes from the provider.
Allows deletion of features.
static bool hasM(Type type)
Tests whether a WKB type contains m values.
Compound curve geometry type.
Circular string geometry type.
virtual QgsRectangle extent() const =0
Returns the extent of the layer.
virtual QString storageType() const
Returns the permanent storage type for this layer as a friendly name.
QList< int > QgsAttributeList
bool nextFeature(QgsFeature &f)
Provider has no capabilities.
virtual QgsAttrPalIndexNameHash palAttributeIndexNames() const
Returns list of indexes to names for QgsPalLabeling fix.
Geometry is not required. It may still be returned if e.g. required for a filter condition.
Represents a vector layer which manages a vector based data sets.
QTextCodec * textEncoding() const
Gets this providers encoding.
QVariant attribute(const QString &name) const
Lookup attribute value from attribute name.
static Type flatType(Type type)
Returns the flat type for a WKB type.
virtual QgsAbstractGeometry * segmentize(double tolerance=M_PI/180., SegmentationToleranceType toleranceType=MaximumAngle) const
Returns a version of the geometry without curves.
QHash< int, QString > QgsAttrPalIndexNameHash
Allows modification of attribute values.
static QStringList availableEncodings()
Returns a list of available encodings.
Aggregate
Available aggregates to calculate.
virtual bool addGeometry(QgsAbstractGeometry *g)
Adds a geometry and takes ownership. Returns true in case of success.
Supports joint updates for attributes and geometry Providers supporting this should still define Chan...
QgsFeatureRequest & setFlags(QgsFeatureRequest::Flags flags)
Sets flags that affect how features will be fetched.
QgsRectangle sourceExtent() const override
Returns the extent of all geometries from the source.
A bundle of parameters controlling aggregate calculation.
virtual QVariant defaultValue(int fieldIndex) const
Returns any literal default values which are present at the provider for a specified field index...
virtual QList< QgsRelation > discoverRelations(const QgsVectorLayer *self, const QList< QgsVectorLayer *> &layers) const
Discover the available relations with the given layers.