23QString QgsAddIncrementalFieldAlgorithm::name()
const
25 return QStringLiteral(
"addautoincrementalfield" );
28QString QgsAddIncrementalFieldAlgorithm::displayName()
const
30 return QObject::tr(
"Add autoincremental field" );
33QString QgsAddIncrementalFieldAlgorithm::shortHelpString()
const
35 return QObject::tr(
"This algorithm adds a new integer field to a vector layer, with a sequential value for each feature.\n\n"
36 "This field can be used as a unique ID for features in the layer. The new attribute "
37 "is not added to the input layer but a new layer is generated instead.\n\n"
38 "The initial starting value for the incremental series can be specified.\n\n"
39 "Specifying an optional modulus value will restart the count to START whenever the field value reaches the modulus value.\n\n"
40 "Optionally, grouping fields can be specified. If group fields are present, then the field value will "
41 "be reset for each combination of these group field values.\n\n"
42 "The sort order for features may be specified, if so, then the incremental field will respect "
46QStringList QgsAddIncrementalFieldAlgorithm::tags()
const
48 return QObject::tr(
"add,create,serial,primary,key,unique,fields" ).split(
',' );
51QString QgsAddIncrementalFieldAlgorithm::group()
const
53 return QObject::tr(
"Vector table" );
56QString QgsAddIncrementalFieldAlgorithm::groupId()
const
58 return QStringLiteral(
"vectortable" );
61QString QgsAddIncrementalFieldAlgorithm::outputName()
const
63 return QObject::tr(
"Incremented" );
66QList<int> QgsAddIncrementalFieldAlgorithm::inputLayerTypes()
const
71QgsAddIncrementalFieldAlgorithm *QgsAddIncrementalFieldAlgorithm::createInstance()
const
73 return new QgsAddIncrementalFieldAlgorithm();
81void QgsAddIncrementalFieldAlgorithm::initParameters(
const QVariantMap & )
83 addParameter(
new QgsProcessingParameterString( QStringLiteral(
"FIELD_NAME" ), QObject::tr(
"Field name" ), QStringLiteral(
"AUTO" ) ) );
89 std::unique_ptr<QgsProcessingParameterExpression> sortExp = std::make_unique<QgsProcessingParameterExpression>( QStringLiteral(
"SORT_EXPRESSION" ), QObject::tr(
"Sort expression" ), QVariant(), QStringLiteral(
"INPUT" ),
true );
91 addParameter( sortExp.release() );
92 std::unique_ptr<QgsProcessingParameterBoolean> sortAscending = std::make_unique<QgsProcessingParameterBoolean>( QStringLiteral(
"SORT_ASCENDING" ), QObject::tr(
"Sort ascending" ),
true );
94 addParameter( sortAscending.release() );
95 std::unique_ptr<QgsProcessingParameterBoolean> sortNullsFirst = std::make_unique<QgsProcessingParameterBoolean>( QStringLiteral(
"SORT_NULLS_FIRST" ), QObject::tr(
"Sort nulls first" ),
false );
97 addParameter( sortNullsFirst.release() );
100QgsFields QgsAddIncrementalFieldAlgorithm::outputFields(
const QgsFields &inputFields )
const
103 outFields.
append(
QgsField( mFieldName, QMetaType::Type::LongLong ) );
110 mStartValue = parameterAsInt( parameters, QStringLiteral(
"START" ), context );
111 mValue = mStartValue;
112 mModulusValue = parameterAsInt( parameters, QStringLiteral(
"MODULUS" ), context );
113 mFieldName = parameterAsString( parameters, QStringLiteral(
"FIELD_NAME" ), context );
114 mGroupedFieldNames = parameterAsStrings( parameters, QStringLiteral(
"GROUP_FIELDS" ), context );
116 mSortExpressionString = parameterAsExpression( parameters, QStringLiteral(
"SORT_EXPRESSION" ), context );
117 mSortAscending = parameterAsBoolean( parameters, QStringLiteral(
"SORT_ASCENDING" ), context );
118 mSortNullsFirst = parameterAsBoolean( parameters, QStringLiteral(
"SORT_NULLS_FIRST" ), context );
125 if ( mSortExpressionString.isEmpty() )
133 if ( !mGroupedFieldNames.empty() && mGroupedFields.empty() )
135 for (
const QString &field : std::as_const( mGroupedFieldNames ) )
137 int idx = mFields.lookupField( field );
139 mGroupedFields << idx;
145 if ( mGroupedFields.empty() )
147 attributes.append( mValue );
149 if ( mModulusValue != 0 && ( mValue % mModulusValue ) == 0 )
150 mValue = mStartValue;
155 groupAttributes.reserve( mGroupedFields.size() );
156 for (
int index : std::as_const( mGroupedFields ) )
160 long long value = mGroupedValues.value( groupAttributes, mStartValue );
161 attributes.append( value );
163 if ( mModulusValue != 0 && ( value % mModulusValue ) == 0 )
165 mGroupedValues[groupAttributes] = value;
171bool QgsAddIncrementalFieldAlgorithm::supportInPlaceEdit(
const QgsMapLayer *layer )
const
@ Vector
Tables (i.e. vector layers with or without geometry). When used for a sink this indicates the sink ha...
@ SkipGeometryValidityChecks
Invalid geometry checks should always be skipped. This flag can be useful for algorithms which always...
@ Advanced
Parameter is an advanced parameter which should be hidden from users by default.
QFlags< ProcessingFeatureSourceFlag > ProcessingFeatureSourceFlags
Flags which control how QgsProcessingFeatureSource fetches features.
The OrderByClause class represents an order by clause for a QgsFeatureRequest.
Represents a list of OrderByClauses, with the most important first and the least important last.
This class wraps a request for features to a vector layer (or directly its vector data provider).
QgsFeatureRequest & setOrderBy(const OrderBy &orderBy)
Set a list of order by clauses.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
void setAttributes(const QgsAttributes &attrs)
Sets the feature's attributes.
Q_INVOKABLE QVariant attribute(const QString &name) const
Lookup attribute value by attribute name.
Encapsulate a field in an attribute table or data source.
Container of fields for a vector layer.
bool append(const QgsField &field, Qgis::FieldOrigin origin=Qgis::FieldOrigin::Provider, int originIndex=-1)
Appends a field.
Base class for all map layer types.
Contains information about the context in which a processing algorithm is executed.
Base class for providing feedback from a processing algorithm.
A vector layer or feature source field parameter for processing algorithms.
A numeric parameter for processing algorithms.
A string parameter for processing algorithms.
QList< QgsFeature > QgsFeatureList