QGIS API Documentation 3.99.0-Master (357b655ed83)
Loading...
Searching...
No Matches
qgsalgorithmattributeindex.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsalgorithmattributeraster.cpp
3 ---------------------
4 begin : November 2019
5 copyright : (C) 2019 by Alexander Bruy
6 email : alexander dot bruy at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
19
21#include "qgsvectorlayer.h"
22
23#include <QString>
24
25using namespace Qt::StringLiterals;
26
28
29QString QgsAttributeIndexAlgorithm::name() const
30{
31 return u"createattributeindex"_s;
32}
33
34QString QgsAttributeIndexAlgorithm::displayName() const
35{
36 return QObject::tr( "Create attribute index" );
37}
38
39QStringList QgsAttributeIndexAlgorithm::tags() const
40{
41 return QObject::tr( "table,attribute,index,create,vector" ).split( ',' );
42}
43
44QString QgsAttributeIndexAlgorithm::group() const
45{
46 return QObject::tr( "Vector general" );
47}
48
49QString QgsAttributeIndexAlgorithm::groupId() const
50{
51 return u"vectorgeneral"_s;
52}
53
54Qgis::ProcessingAlgorithmFlags QgsAttributeIndexAlgorithm::flags() const
55{
57}
58
59
60QString QgsAttributeIndexAlgorithm::shortHelpString() const
61{
62 return QObject::tr( "This algorithm creates an index to speed up queries made against "
63 "a field in a table. Support for index creation is "
64 "dependent on the layer's data provider and the field type." );
65}
66
67QString QgsAttributeIndexAlgorithm::shortDescription() const
68{
69 return QObject::tr( "Creates an index to speed up queries made against a field in a table." );
70}
71
72QgsAttributeIndexAlgorithm *QgsAttributeIndexAlgorithm::createInstance() const
73{
74 return new QgsAttributeIndexAlgorithm();
75}
76
77void QgsAttributeIndexAlgorithm::initAlgorithm( const QVariantMap & )
78{
79 addParameter( new QgsProcessingParameterVectorLayer( u"INPUT"_s, QObject::tr( "Input layer" ), QList<int> { static_cast<int>( Qgis::ProcessingSourceType::Vector ) } ) );
80 addParameter( new QgsProcessingParameterField( u"FIELD"_s, QObject::tr( "Attribute to index" ), QVariant(), u"INPUT"_s ) );
81
82 addOutput( new QgsProcessingOutputVectorLayer( u"OUTPUT"_s, QObject::tr( "Indexed layer" ) ) );
83}
84
85QVariantMap QgsAttributeIndexAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
86{
87 QgsVectorLayer *layer = parameterAsVectorLayer( parameters, u"INPUT"_s, context );
88
89 if ( !layer )
90 throw QgsProcessingException( QObject::tr( "Could not load source layer for %1." ).arg( "INPUT"_L1 ) );
91
92 const QString field = parameterAsString( parameters, u"FIELD"_s, context );
93
94 QgsVectorDataProvider *provider = layer->dataProvider();
95
96 const int fieldIndex = layer->fields().lookupField( field );
97 if ( fieldIndex < 0 || layer->fields().fieldOrigin( fieldIndex ) != Qgis::FieldOrigin::Provider )
98 {
99 feedback->pushInfo( QObject::tr( "Can not create attribute index on %1" ).arg( field ) );
100 }
101 else
102 {
103 const int providerIndex = layer->fields().fieldOriginIndex( fieldIndex );
105 {
106 if ( !provider->createAttributeIndex( providerIndex ) )
107 {
108 feedback->pushInfo( QObject::tr( "Could not create attribute index" ) );
109 }
110 }
111 else
112 {
113 feedback->pushInfo( QObject::tr( "Layer's data provider does not support creating attribute indexes" ) );
114 }
115 }
116
117 QVariantMap outputs;
118 outputs.insert( u"OUTPUT"_s, layer->id() );
119 return outputs;
120}
121
@ Vector
Tables (i.e. vector layers with or without geometry). When used for a sink this indicates the sink ha...
Definition qgis.h:3610
@ CreateAttributeIndex
Can create indexes on provider's fields.
Definition qgis.h:529
QFlags< ProcessingAlgorithmFlag > ProcessingAlgorithmFlags
Flags indicating how and when an algorithm operates and should be exposed to users.
Definition qgis.h:3680
@ Provider
Field originates from the underlying data provider of the vector layer.
Definition qgis.h:1764
@ NoThreading
Algorithm is not thread safe and cannot be run in a background thread, e.g. for algorithms which mani...
Definition qgis.h:3659
int fieldOriginIndex(int fieldIdx) const
Returns the field's origin index (its meaning is specific to each type of origin).
Q_INVOKABLE int lookupField(const QString &fieldName) const
Looks up field's index from the field name.
QString id
Definition qgsmaplayer.h:86
virtual Qgis::ProcessingAlgorithmFlags flags() const
Returns the flags indicating how and when the algorithm operates and should be exposed to users.
Contains information about the context in which a processing algorithm is executed.
Custom exception class for processing related exceptions.
Base class for providing feedback from a processing algorithm.
virtual void pushInfo(const QString &info)
Pushes a general informational message from the algorithm.
A vector layer output for processing algorithms.
A vector layer or feature source field parameter for processing algorithms.
A vector layer (with or without geometry) parameter for processing algorithms.
Base class for vector data providers.
virtual Q_INVOKABLE Qgis::VectorProviderCapabilities capabilities() const
Returns flags containing the supported capabilities.
virtual bool createAttributeIndex(int field)
Create an attribute index on the datasource.
Represents a vector layer which manages a vector based dataset.
QgsVectorDataProvider * dataProvider() final
Returns the layer's data provider, it may be nullptr.