16#ifndef QGSEXPRESSION_H
17#define QGSEXPRESSION_H
28#include <QCoreApplication>
29#include <QDomDocument>
32#include <QReadWriteLock>
33#include <QRecursiveMutex>
39using namespace Qt::StringLiterals;
51class QgsExpressionPrivate;
58 HelpArg(
const QString &arg,
const QString &desc,
bool descOnly =
false,
bool syntaxOnly =
false,
bool optional =
false,
const QString &defaultVal = QString() )
60 , mDescription( desc )
61 , mDescOnly( descOnly )
62 , mSyntaxOnly( syntaxOnly )
63 , mOptional( optional )
64 , mDefaultVal( defaultVal )
77 HelpExample(
const QString &expression,
const QString &returns,
const QString ¬e = QString() )
78 : mExpression( expression )
93 const QString &description,
94 const QList<HelpArg> &arguments = QList<HelpArg>(),
95 bool variableLenArguments =
false,
96 const QList<HelpExample> &examples = QList<HelpExample>(),
97 const QString ¬es = QString(),
98 const QStringList &tags = QStringList()
101 , mDescription( description )
102 , mArguments( arguments )
103 , mVariableLenArguments( variableLenArguments )
104 , mExamples( examples )
110 QString mDescription;
111 QList<HelpArg> mArguments;
112 bool mVariableLenArguments;
113 QList<HelpExample> mExamples;
123 Help(
const QString &name,
const QString &type,
const QString &description,
const QList<HelpVariant> &variants )
126 , mDescription( description )
127 , mVariants( variants )
132 QString mDescription;
133 QList<HelpVariant> mVariants;
136typedef QHash<QString, Help> HelpTextHash;
237 QMap< QString, int> mFunctionIndexMap;
413 QList<const QgsExpressionNode *>
nodes()
const;
423 QList<const T *> lst;
424 const QList<const QgsExpressionNode *> allNodes(
nodes() );
425 for (
const auto &node : allNodes )
427 const T *n =
dynamic_cast<const T *
>( node );
447 QSet<int> referencedAttributeIndexes(
const QgsFields &fields )
const;
450 bool needsGeometry()
const;
468 bool hasEvalError()
const;
470 QString evalErrorString()
const;
472 void setEvalErrorString(
const QString &str );
479 bool isField()
const;
493 static int expressionToLayerFieldIndex(
const QString &expression,
const QgsVectorLayer *layer );
507 static QString quoteFieldExpression(
const QString &expression,
const QgsVectorLayer *layer );
522 void setExpression(
const QString &expression );
529 QString expression()
const;
537 QString dump()
const;
618 static QSet<QString> referencedVariables(
const QString &text );
632 Q_DECL_DEPRECATED
static double evaluateToDouble(
const QString &text,
double fallbackValue )
SIP_DEPRECATED;
646 static double evaluateToDouble(
const QString &text,
double fallbackValue,
const QgsExpressionContext *context );
666 SIP_SKIP static const FunctionListSnapshot getFunctionsSnapshot();
675 Q_DECL_DEPRECATED
static QList<QgsExpressionFunction *> Functions();
682 static QStringList BuiltinFunctions();
698 static bool unregisterFunction(
const QString &name );
703 static void cleanRegisteredFunctions();
706 static bool isFunctionName(
const QString &name );
715 Q_DECL_DEPRECATED
static int functionIndex(
const QString &name );
721 static int functionCount();
728 static QString quotedColumnRef( QString name );
735 static QString quotedString( QString text );
744 static QString quotedValue(
const QVariant &value );
754 static QString quotedValue(
const QVariant &value, QMetaType::Type type );
765 Q_DECL_DEPRECATED
static QString quotedValue(
const QVariant &value, QVariant::Type type )
SIP_DEPRECATED;
771 static HelpTextHash &functionHelpTexts();
781 static QString helpText( QString name );
788 static QStringList tags(
const QString &name );
802 static bool addVariableHelpText(
const QString name,
const QString &description );
810 static QString variableHelpText(
const QString &variableName );
820 static QString
formatVariableHelp(
const QString &description,
bool showValue =
true,
const QVariant &value = QVariant() );
826 static QString group(
const QString &group );
836 static QString formatPreviewString(
const QVariant &value,
bool htmlOutput =
true,
int maximumPreviewLength = 60 );
846 static QString createFieldEqualityExpression(
const QString &fieldName,
const QVariant &value, QMetaType::Type fieldType = QMetaType::Type::UnknownType );
857 Q_DECL_DEPRECATED
static QString createFieldEqualityExpression(
const QString &fieldName,
const QVariant &value, QVariant::Type fieldType )
SIP_DEPRECATED;
869 static bool isFieldEqualityExpression(
const QString &expression, QString &field
SIP_OUT, QVariant &value
SIP_OUT );
885 static bool attemptReduceToInClause(
const QStringList &expressions, QString &result
SIP_OUT );
900 SIP_PYOBJECT __repr__();
902 QString str = u
"<QgsExpression: '%1'>"_s.arg( sipCpp->expression() );
903 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
920 QgsExpressionPrivate *d =
nullptr;
922 static HelpTextHash sFunctionHelpTexts;
925 static
void initFunctionHelp()
SIP_SKIP;
927 static
void buildFunctionHelp()
SIP_SKIP;
929 static
void initVariableHelp()
SIP_SKIP;
931 static
void buildVariableHelp()
SIP_SKIP;
935#if defined( __clang__ )
938 static std::atomic<FunctionListSnapshot> sFunctions;
940 static QMutex sFunctionWriteMutex;
942 static QStringList sBuiltinFunctionNames;
An atomic shared_ptr, for use in LLVM/clang builds (temporarily, until LLVM adds support for c++20 at...
DistanceUnit
Units of distance.
A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
An abstract base class for defining QgsExpression functions.
Abstract base class for all nodes that can appear in an expression.
A thread-safe container of shared pointers to registered functions.
int functionIndex(const QString &name) const
Returns the index of the function in the list.
void updateFunctionNameMap()
Updates the map of function names to indices.
SharedFunctionPtr getFunction(int index) const
Returns a shared pointer for the function with the specified index.
Handles parsing and evaluation of expressions (formerly called "search strings").
bool prepare(const QgsExpressionContext *context)
Gets the expression ready for evaluation - find out column indexes.
QgsExpression & operator=(const QgsExpression &other)
Create a copy of this expression.
QList< const T * > findNodes() const
Returns a list of all nodes of the given class which are used in this expression.
QList< const QgsExpressionNode * > nodes() const
Returns a list of all nodes which are used in this expression.
QSet< QString > referencedVariables() const
Returns a list of all variables which are used in this expression.
bool hasParserError() const
Returns true if an error occurred when parsing the input expression.
std::shared_ptr< const SharedFunctionPtrList > FunctionListSnapshot
QList< QgsExpression::ParserError > parserErrors() const
Returns parser error details including location of error.
QString parserErrorString() const
Returns parser error.
QSet< QString > referencedColumns() const
Gets list of columns referenced by the expression.
QSet< QString > referencedFunctions() const
Returns a list of the names of all functions which are used in this expression.
friend class QgsExpressionNodeFunction
const QgsExpressionNode * rootNode() const
Returns the root node of the expression.
QgsExpression(const QString &expr)
Creates a new expression based on the provided string.
std::shared_ptr< QgsExpressionFunction > SharedFunctionPtr
bool isValid() const
Checks if this expression is valid.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Encapsulate a field in an attribute table or data source.
Container of fields for a vector layer.
A geometry is the spatial representation of a feature.
Provides various utility functions for conversion between OGC (Open Geospatial Consortium) standards ...
Base class for vector data providers.
Represents a vector layer which manages a vector based dataset.
Q_DECLARE_METATYPE(QgsDatabaseQueryLogEntry)
QString formatVariableHelp(const QString &variable, const QString &description, bool showValue, const QVariant &value)
Returns a HTML formatted string for use as a variable item help.
Details about any parser errors that were found when parsing the expression.
QgsExpression::ParserError::ParserErrorType errorType
The type of parser error that was found.
int lastColumn
The last column that contained the error in the parser.
int lastLine
The last line that contained the error in the parser.
int firstColumn
The first column that contained the error in the parser.
QString errorMsg
The message for the error at this location.
@ FunctionInvalidParams
Function was called with invalid args.
@ Unknown
Unknown error type.
@ FunctionUnknown
Function was unknown.
@ FunctionNamedArgsError
Non named function arg used after named arg.
@ FunctionWrongArgs
Function was called with the wrong number of args.
int firstLine
The first line that contained the error in the parser.