QGIS API Documentation
3.16.0-Hannover (43b64b13f3)
|
Class for parsing and evaluation of expressions (formerly called "search strings"). More...
#include <qgsexpression.h>
Classes | |
struct | ParserError |
Details about any parser errors that were found when parsing the expression. More... | |
Public Types | |
enum | SpatialOperator { soBbox, soIntersects, soContains, soCrosses, soEquals, soDisjoint, soOverlaps, soTouches, soWithin } |
Public Member Functions | |
QgsExpression () | |
Create an empty expression. More... | |
QgsExpression (const QgsExpression &other) | |
Create a copy of this expression. More... | |
QgsExpression (const QString &expr) | |
Creates a new expression based on the provided string. More... | |
~QgsExpression () | |
QgsUnitTypes::AreaUnit | areaUnits () const |
Returns the desired areal units for calculations involving geomCalculator(), e.g., "$area". More... | |
QgsUnitTypes::DistanceUnit | distanceUnits () const |
Returns the desired distance units for calculations involving geomCalculator(), e.g., "$length" and "$perimeter". More... | |
QString | dump () const |
Returns an expression string, constructed from the internal abstract syntax tree. More... | |
QString | evalErrorString () const |
Returns evaluation error. More... | |
QVariant | evaluate () |
Evaluate the feature and return the result. More... | |
QVariant | evaluate (const QgsExpressionContext *context) |
Evaluate the expression against the specified context and return the result. More... | |
QString | expression () const |
Returns the original, unmodified expression string. More... | |
template<class T > | |
QList< const T * > | findNodes () const |
Returns a list of all nodes of the given class which are used in this expression. More... | |
QgsDistanceArea * | geomCalculator () |
Returns calculator used for distance and area calculations (used by $length, $area and $perimeter functions only) More... | |
bool | hasEvalError () const |
Returns true if an error occurred when evaluating last input. More... | |
bool | hasParserError () const |
Returns true if an error occurred when parsing the input expression. More... | |
bool | isField () const |
Checks whether an expression consists only of a single field reference. More... | |
bool | isValid () const |
Checks if this expression is valid. More... | |
bool | needsGeometry () const |
Returns true if the expression uses feature geometry for some computation. More... | |
QList< const QgsExpressionNode * > | nodes () const |
Returns a list of all nodes which are used in this expression. More... | |
operator QString () const | |
Automatically convert this expression to a string where requested. More... | |
QgsExpression & | operator= (const QgsExpression &other) |
Create a copy of this expression. More... | |
bool | operator== (const QgsExpression &other) const |
Compares two expressions. More... | |
QList< QgsExpression::ParserError > | parserErrors () const |
Returns parser error details including location of error. More... | |
QString | parserErrorString () const |
Returns parser error. More... | |
bool | prepare (const QgsExpressionContext *context) |
Gets the expression ready for evaluation - find out column indexes. More... | |
QSet< int > | referencedAttributeIndexes (const QgsFields &fields) const |
Returns a list of field name indexes obtained from the provided fields. More... | |
QSet< QString > | referencedColumns () const |
Gets list of columns referenced by the expression. More... | |
QSet< QString > | referencedFunctions () const |
Returns a list of the names of all functions which are used in this expression. More... | |
QSet< QString > | referencedVariables () const |
Returns a list of all variables which are used in this expression. More... | |
const QgsExpressionNode * | rootNode () const |
Returns the root node of the expression. More... | |
void | setAreaUnits (QgsUnitTypes::AreaUnit unit) |
Sets the desired areal units for calculations involving geomCalculator(), e.g., "$area". More... | |
void | setDistanceUnits (QgsUnitTypes::DistanceUnit unit) |
Sets the desired distance units for calculations involving geomCalculator(), e.g., "$length" and "$perimeter". More... | |
void | setEvalErrorString (const QString &str) |
Sets evaluation error (used internally by evaluation functions) More... | |
void | setExpression (const QString &expression) |
Set the expression string, will reset the whole internal structure. More... | |
void | setGeomCalculator (const QgsDistanceArea *calc) |
Sets the geometry calculator used for distance and area calculations in expressions. More... | |
Static Public Member Functions | |
static const QStringList & | BuiltinFunctions () |
static bool | checkExpression (const QString &text, const QgsExpressionContext *context, QString &errorMessage) |
Tests whether a string is a valid expression. More... | |
static void | cleanRegisteredFunctions () |
Deletes all registered functions whose ownership have been transferred to the expression engine. More... | |
static QString | createFieldEqualityExpression (const QString &fieldName, const QVariant &value) |
Create an expression allowing to evaluate if a field is equal to a value. More... | |
static double | evaluateToDouble (const QString &text, double fallbackValue) |
Attempts to evaluate a text string as an expression to a resultant double value. More... | |
static QString | formatPreviewString (const QVariant &value, bool htmlOutput=true) |
Formats an expression result for friendly display to the user. More... | |
static QString | formatVariableHelp (const QString &description, bool showValue=true, const QVariant &value=QVariant()) |
Returns formatted help text for a variable. More... | |
static int | functionCount () |
Returns the number of functions defined in the parser. More... | |
static int | functionIndex (const QString &name) |
Returns index of the function in Functions array. More... | |
static const QList< QgsExpressionFunction * > & | Functions () |
static QString | group (const QString &group) |
Returns the translated name for a function group. More... | |
static QString | helpText (QString name) |
Returns the help text for a specified function. More... | |
static bool | isFunctionName (const QString &name) |
tells whether the identifier is a name of existing function More... | |
static QString | quotedColumnRef (QString name) |
Returns a quoted column reference (in double quotes) More... | |
static QString | quotedString (QString text) |
Returns a quoted version of a string (in single quotes) More... | |
static QString | quotedValue (const QVariant &value) |
Returns a string representation of a literal value, including appropriate quotations where required. More... | |
static QString | quotedValue (const QVariant &value, QVariant::Type type) |
Returns a string representation of a literal value, including appropriate quotations where required. More... | |
static QSet< QString > | referencedVariables (const QString &text) |
This function returns variables in each expression between [% and %]. More... | |
static bool | registerFunction (QgsExpressionFunction *function, bool transferOwnership=false) |
Registers a function to the expression engine. More... | |
static QString | replaceExpressionText (const QString &action, const QgsExpressionContext *context, const QgsDistanceArea *distanceArea=nullptr) |
This function replaces each expression between [% and %] in the string with the result of its evaluation with the specified context. More... | |
static QStringList | tags (const QString &name) |
Returns a string list of search tags for a specified function. More... | |
static bool | unregisterFunction (const QString &name) |
Unregisters a function from the expression engine. More... | |
static QString | variableHelpText (const QString &variableName) |
Returns the help text for a specified variable. More... | |
Friends | |
class | QgsOgcUtils |
Class for parsing and evaluation of expressions (formerly called "search strings").
The expressions try to follow both syntax and semantics of SQL expressions.
Usage:
Similarly to SQL, this class supports three-value logic: true/false/unknown. Unknown value may be a result of operations with missing data (NULL). Please note that NULL is different value than zero or an empty string. For example 3 > NULL returns unknown.
There is no special (three-value) 'boolean' type: true/false is represented as 1/0 integer, unknown value is represented the same way as NULL values: NULL QVariant.
For better performance with many evaluations you may first call prepare(fields) function to find out indices of columns and then repeatedly call evaluate(feature).
Operators and functions that expect arguments to be of a particular type automatically convert the arguments to that type, e.g. sin('2.1') will convert the argument to a double, length(123) will first convert the number to a string. Explicit conversion can be achieved with to_int, to_real, to_string functions. If implicit or explicit conversion is invalid, the evaluation returns an error. Comparison operators do numeric comparison in case both operators are numeric (int/double) or they can be converted to numeric types.
This class is implicitly shared, copying has a very low overhead. It is normally preferable to call QgsExpression( otherExpression )
instead of QgsExpression( otherExpression.expression() )
. A deep copy will only be made when prepare() is called. For usage this means mainly, that you should normally keep an unprepared master copy of a QgsExpression and whenever using it with a particular QgsFeatureIterator copy it just before and prepare it using the same context as the iterator.
Implicit sharing was added in 2.14
Definition at line 104 of file qgsexpression.h.
Enumerator | |
---|---|
soBbox | |
soIntersects | |
soContains | |
soCrosses | |
soEquals | |
soDisjoint | |
soOverlaps | |
soTouches | |
soWithin |
Definition at line 465 of file qgsexpression.h.
QgsExpression::QgsExpression | ( | const QString & | expr | ) |
Creates a new expression based on the provided string.
The string will immediately be parsed. For optimization prepare() should always be called before every loop in which this expression is used.
Definition at line 146 of file qgsexpression.cpp.
QgsExpression::QgsExpression | ( | const QgsExpression & | other | ) |
Create a copy of this expression.
This is preferred over recreating an expression from a string since it does not need to be re-parsed.
Definition at line 154 of file qgsexpression.cpp.
QgsExpression::QgsExpression | ( | ) |
QgsExpression::~QgsExpression | ( | ) |
Definition at line 185 of file qgsexpression.cpp.
QgsUnitTypes::AreaUnit QgsExpression::areaUnits | ( | ) | const |
Returns the desired areal units for calculations involving geomCalculator(), e.g., "$area".
Definition at line 420 of file qgsexpression.cpp.
|
static |
Definition at line 7013 of file qgsexpressionfunction.cpp.
|
static |
Tests whether a string is a valid expression.
text | string to test |
context | optional expression context |
errorMessage | will be filled with any error message from the validation |
true
if string is a valid expression Definition at line 40 of file qgsexpression.cpp.
|
static |
Deletes all registered functions whose ownership have been transferred to the expression engine.
Definition at line 7007 of file qgsexpressionfunction.cpp.
|
static |
Create an expression allowing to evaluate if a field is equal to a value.
The value may be null.
fieldName | the name of the field |
value | the value of the field |
Definition at line 1079 of file qgsexpression.cpp.
QgsUnitTypes::DistanceUnit QgsExpression::distanceUnits | ( | ) | const |
Returns the desired distance units for calculations involving geomCalculator(), e.g., "$length" and "$perimeter".
Definition at line 410 of file qgsexpression.cpp.
QString QgsExpression::dump | ( | ) | const |
Returns an expression string, constructed from the internal abstract syntax tree.
This does not contain any nice whitespace formatting or comments. In general it is preferable to use expression() instead.
Definition at line 389 of file qgsexpression.cpp.
QString QgsExpression::evalErrorString | ( | ) | const |
Returns evaluation error.
Definition at line 379 of file qgsexpression.cpp.
QVariant QgsExpression::evaluate | ( | ) |
Evaluate the feature and return the result.
Definition at line 346 of file qgsexpression.cpp.
QVariant QgsExpression::evaluate | ( | const QgsExpressionContext * | context | ) |
Evaluate the expression against the specified context and return the result.
context | context for evaluating expression |
Definition at line 358 of file qgsexpression.cpp.
|
static |
Attempts to evaluate a text string as an expression to a resultant double value.
text | text to evaluate as expression |
fallbackValue | value to return if text can not be evaluated as a double |
Definition at line 503 of file qgsexpression.cpp.
QString QgsExpression::expression | ( | ) | const |
Returns the original, unmodified expression string.
If there was none supplied because it was constructed by sole API calls, dump() will be used to create one instead.
Definition at line 57 of file qgsexpression.cpp.
|
inline |
Returns a list of all nodes of the given class which are used in this expression.
Definition at line 280 of file qgsexpression.h.
|
static |
Formats an expression result for friendly display to the user.
Truncates the result to a sensible length, and presents text representations of non numeric/text types (e.g., geometries and features).
value | expression result to format |
htmlOutput | set to true to allow HTML formatting, or false for plain text output |
true
Definition at line 944 of file qgsexpression.cpp.
|
static |
Returns formatted help text for a variable.
description | translated description of variable |
showValue | set to true to include current value of variable in help text |
value | current value of variable to show in help text |
Definition at line 892 of file qgsexpression.cpp.
|
static |
Returns the number of functions defined in the parser.
Definition at line 140 of file qgsexpression.cpp.
|
static |
Returns index of the function in Functions array.
Definition at line 123 of file qgsexpression.cpp.
|
static |
Definition at line 6008 of file qgsexpressionfunction.cpp.
QgsDistanceArea * QgsExpression::geomCalculator | ( | ) |
Returns calculator used for distance and area calculations (used by $length, $area and $perimeter functions only)
Definition at line 397 of file qgsexpression.cpp.
|
static |
Returns the translated name for a function group.
group | untranslated group name |
Definition at line 911 of file qgsexpression.cpp.
bool QgsExpression::hasEvalError | ( | ) | const |
Returns true
if an error occurred when evaluating last input.
Definition at line 374 of file qgsexpression.cpp.
bool QgsExpression::hasParserError | ( | ) | const |
Returns true
if an error occurred when parsing the input expression.
Definition at line 202 of file qgsexpression.cpp.
|
static |
Returns the help text for a specified function.
name | function name |
Definition at line 531 of file qgsexpression.cpp.
bool QgsExpression::isField | ( | ) | const |
Checks whether an expression consists only of a single field reference.
Definition at line 1096 of file qgsexpression.cpp.
|
static |
tells whether the identifier is a name of existing function
Definition at line 118 of file qgsexpression.cpp.
bool QgsExpression::isValid | ( | ) | const |
Checks if this expression is valid.
A valid expression could be parsed but does not necessarily evaluate properly.
Definition at line 197 of file qgsexpression.cpp.
bool QgsExpression::needsGeometry | ( | ) | const |
Returns true
if the expression uses feature geometry for some computation.
Definition at line 266 of file qgsexpression.cpp.
QList< const QgsExpressionNode * > QgsExpression::nodes | ( | ) | const |
Returns a list of all nodes which are used in this expression.
Definition at line 1101 of file qgsexpression.cpp.
QgsExpression::operator QString | ( | ) | const |
Automatically convert this expression to a string where requested.
Definition at line 175 of file qgsexpression.cpp.
QgsExpression & QgsExpression::operator= | ( | const QgsExpression & | other | ) |
Create a copy of this expression.
This is preferred over recreating an expression from a string since it does not need to be re-parsed.
Definition at line 160 of file qgsexpression.cpp.
bool QgsExpression::operator== | ( | const QgsExpression & | other | ) | const |
Compares two expressions.
The operator returns true
if the expression string is equal.
Definition at line 192 of file qgsexpression.cpp.
QList< QgsExpression::ParserError > QgsExpression::parserErrors | ( | ) | const |
Returns parser error details including location of error.
Definition at line 212 of file qgsexpression.cpp.
QString QgsExpression::parserErrorString | ( | ) | const |
Returns parser error.
Definition at line 207 of file qgsexpression.cpp.
bool QgsExpression::prepare | ( | const QgsExpressionContext * | context | ) |
Gets the expression ready for evaluation - find out column indexes.
context | context for preparing expression |
Definition at line 323 of file qgsexpression.cpp.
|
static |
Returns a quoted column reference (in double quotes)
Definition at line 65 of file qgsexpression.cpp.
|
static |
Returns a quoted version of a string (in single quotes)
Definition at line 70 of file qgsexpression.cpp.
|
static |
Returns a string representation of a literal value, including appropriate quotations where required.
value | value to convert to a string representation |
Definition at line 79 of file qgsexpression.cpp.
|
static |
Returns a string representation of a literal value, including appropriate quotations where required.
value | value to convert to a string representation |
type | value type |
Definition at line 84 of file qgsexpression.cpp.
QSet< int > QgsExpression::referencedAttributeIndexes | ( | const QgsFields & | fields | ) | const |
Returns a list of field name indexes obtained from the provided fields.
Definition at line 241 of file qgsexpression.cpp.
QSet< QString > QgsExpression::referencedColumns | ( | ) | const |
Gets list of columns referenced by the expression.
Definition at line 217 of file qgsexpression.cpp.
QSet< QString > QgsExpression::referencedFunctions | ( | ) | const |
Returns a list of the names of all functions which are used in this expression.
Definition at line 233 of file qgsexpression.cpp.
QSet< QString > QgsExpression::referencedVariables | ( | ) | const |
Returns a list of all variables which are used in this expression.
If the list contains a NULL QString, there is a variable name used which is determined at runtime.
Definition at line 225 of file qgsexpression.cpp.
|
static |
This function returns variables in each expression between [% and %].
text | The source string in which variables should be searched. |
Definition at line 481 of file qgsexpression.cpp.
|
static |
Registers a function to the expression engine.
This is required to allow expressions to utilize the function.
function | function to register |
transferOwnership | set to true to transfer ownership of function to expression engine |
true
on successful registration Definition at line 6978 of file qgsexpressionfunction.cpp.
|
static |
This function replaces each expression between [% and %] in the string with the result of its evaluation with the specified context.
Additional substitutions can be passed through the substitutionMap parameter
action | The source string in which placeholders should be replaced. |
context | Expression context |
distanceArea | Optional QgsDistanceArea. If specified, the QgsDistanceArea is used for distance and area conversion |
Definition at line 430 of file qgsexpression.cpp.
const QgsExpressionNode * QgsExpression::rootNode | ( | ) | const |
Returns the root node of the expression.
The root node is nullptr
if parsing has failed.
Definition at line 1091 of file qgsexpression.cpp.
void QgsExpression::setAreaUnits | ( | QgsUnitTypes::AreaUnit | unit | ) |
Sets the desired areal units for calculations involving geomCalculator(), e.g., "$area".
If distance units are set to QgsUnitTypes::AreaUnknownUnit (default), prepare() will read variables from the expression context ("project_distance_units") to determine distance units.
Definition at line 425 of file qgsexpression.cpp.
void QgsExpression::setDistanceUnits | ( | QgsUnitTypes::DistanceUnit | unit | ) |
Sets the desired distance units for calculations involving geomCalculator(), e.g., "$length" and "$perimeter".
If distance units are set to QgsUnitTypes::DistanceUnknownUnit (default), prepare() will read variables from the expression context ("project_distance_units") to determine distance units.
Definition at line 415 of file qgsexpression.cpp.
void QgsExpression::setEvalErrorString | ( | const QString & | str | ) |
Sets evaluation error (used internally by evaluation functions)
Definition at line 384 of file qgsexpression.cpp.
void QgsExpression::setExpression | ( | const QString & | expression | ) |
Set the expression string, will reset the whole internal structure.
Definition at line 48 of file qgsexpression.cpp.
void QgsExpression::setGeomCalculator | ( | const QgsDistanceArea * | calc | ) |
Sets the geometry calculator used for distance and area calculations in expressions.
(used by $length, $area and $perimeter functions only). If the geometry calculator is set to nullptr
(default), prepare() will read variables from the expression context ("project_ellipsoid", "_project_transform_context" and "_layer_crs") to build a geometry calculator. If these variables does not exist and if setGeomCalculator() is not called, all distance and area calculations are performed using simple Cartesian methods (ie no ellipsoidal calculations).
calc | geometry calculator. Ownership is not transferred. Set to nullptr to force Cartesian calculations. |
Definition at line 314 of file qgsexpression.cpp.
|
static |
Returns a string list of search tags for a specified function.
name | function name |
Definition at line 666 of file qgsexpression.cpp.
|
static |
Unregisters a function from the expression engine.
The function will no longer be usable in expressions.
name | function name |
Definition at line 6991 of file qgsexpressionfunction.cpp.
|
static |
Returns the help text for a specified variable.
variableName | name of variable |
Definition at line 886 of file qgsexpression.cpp.
|
friend |
Definition at line 639 of file qgsexpression.h.