QGIS API Documentation  3.23.0-Master (dd0cd13a00)
Public Types | Public Member Functions | List of all members
QgsExpressionNodeBinaryOperator Class Reference

A binary expression operator, which operates on two values. More...

#include <qgsexpressionnodeimpl.h>

Inheritance diagram for QgsExpressionNodeBinaryOperator:
Inheritance graph
[legend]

Public Types

enum  BinaryOperator {
  boOr , boAnd , boEQ , boNE ,
  boLE , boGE , boLT , boGT ,
  boRegexp , boLike , boNotLike , boILike ,
  boNotILike , boIs , boIsNot , boPlus ,
  boMinus , boMul , boDiv , boIntDiv ,
  boMod , boPow , boConcat
}
 list of binary operators More...
 
- Public Types inherited from QgsExpressionNode
enum  NodeType {
  ntUnaryOperator , ntBinaryOperator , ntInOperator , ntFunction ,
  ntLiteral , ntColumnRef , ntCondition , ntIndexOperator
}
 Known node types. More...
 

Public Member Functions

 QgsExpressionNodeBinaryOperator (QgsExpressionNodeBinaryOperator::BinaryOperator op, QgsExpressionNode *opLeft, QgsExpressionNode *opRight)
 Binary combination of the left and the right with op. More...
 
 ~QgsExpressionNodeBinaryOperator () override
 
QgsExpressionNodeclone () const override
 Generate a clone of this node. More...
 
QString dump () const override
 Dump this node into a serialized (part) of an expression. More...
 
QVariant evalNode (QgsExpression *parent, const QgsExpressionContext *context) override
 Abstract virtual eval method Errors are reported to the parent. More...
 
bool isStatic (QgsExpression *parent, const QgsExpressionContext *context) const override
 Returns true if this node can be evaluated for a static value. More...
 
bool leftAssociative () const
 Returns true if the operator is left-associative. More...
 
bool needsGeometry () const override
 Abstract virtual method which returns if the geometry is required to evaluate this expression. More...
 
QList< const QgsExpressionNode * > nodes () const override
 Returns a list of all nodes which are used in this expression. More...
 
QgsExpressionNode::NodeType nodeType () const override
 Gets the type of this node. More...
 
QgsExpressionNodeBinaryOperator::BinaryOperator op () const
 Returns the binary operator. More...
 
QgsExpressionNodeopLeft () const
 Returns the node to the left of the operator. More...
 
QgsExpressionNodeopRight () const
 Returns the node to the right of the operator. More...
 
int precedence () const
 Returns the precedence index for the operator. More...
 
bool prepareNode (QgsExpression *parent, const QgsExpressionContext *context) override
 Abstract virtual preparation method Errors are reported to the parent. More...
 
QSet< QString > referencedColumns () const override
 Abstract virtual method which returns a list of columns required to evaluate this node. More...
 
QSet< QString > referencedFunctions () const override
 Returns a set of all functions which are used in this expression. More...
 
QSet< QString > referencedVariables () const override
 Returns a set of all variables which are used in this expression. More...
 
QString text () const
 Returns a the name of this operator without the operands. More...
 
- Public Member Functions inherited from QgsExpressionNode
virtual ~QgsExpressionNode ()=default
 
QVariant cachedStaticValue () const
 Returns the node's static cached value. More...
 
const QgsExpressionNodeeffectiveNode () const
 Returns a reference to the simplest node which represents this node, after any compilation optimizations have been applied. More...
 
QVariant eval (QgsExpression *parent, const QgsExpressionContext *context)
 Evaluate this node with the given context and parent. More...
 
bool hasCachedStaticValue () const
 Returns true if the node can be replaced by a static cached value. More...
 
bool prepare (QgsExpression *parent, const QgsExpressionContext *context)
 Prepare this node for evaluation. More...
 

Additional Inherited Members

- Public Attributes inherited from QgsExpressionNode
int parserFirstColumn = 0
 First column in the parser this node was found. More...
 
int parserFirstLine = 0
 First line in the parser this node was found. More...
 
int parserLastColumn = 0
 Last column in the parser this node was found. More...
 
int parserLastLine = 0
 Last line in the parser this node was found. More...
 
- Protected Member Functions inherited from QgsExpressionNode
 QgsExpressionNode ()=default
 Constructor. More...
 
 QgsExpressionNode (const QgsExpressionNode &other)
 Copy constructor. More...
 
void cloneTo (QgsExpressionNode *target) const
 Copies the members of this node to the node provided in target. More...
 
QgsExpressionNodeoperator= (const QgsExpressionNode &other)
 Assignment operator. More...
 
- Protected Attributes inherited from QgsExpressionNode
QVariant mCachedStaticValue
 Contains the static, precalculated value for the node if mHasCachedValue is true. More...
 
std::unique_ptr< QgsExpressionNodemCompiledSimplifiedNode
 Contains a compiled node which represents a simplified version of this node as a result of compilation optimizations. More...
 
bool mHasCachedValue = false
 true if the node has a static, precalculated value. More...
 

Detailed Description

A binary expression operator, which operates on two values.

Definition at line 99 of file qgsexpressionnodeimpl.h.

Member Enumeration Documentation

◆ BinaryOperator

list of binary operators

Note
if any change is made here, the definition of QgsExpression::BinaryOperatorText[] must be adapted.
Enumerator
boOr 
boAnd 
boEQ 

=

boNE 

<>

boLE 

<=

boGE 

>=

boLT 

<

boGT 

boRegexp 
boLike 
boNotLike 
boILike 
boNotILike 
boIs 
boIsNot 
boPlus 
boMinus 
boMul 
boDiv 
boIntDiv 
boMod 
boPow 
boConcat 

Definition at line 107 of file qgsexpressionnodeimpl.h.

Constructor & Destructor Documentation

◆ QgsExpressionNodeBinaryOperator()

QgsExpressionNodeBinaryOperator::QgsExpressionNodeBinaryOperator ( QgsExpressionNodeBinaryOperator::BinaryOperator  op,
QgsExpressionNode opLeft,
QgsExpressionNode opRight 
)
inline

Binary combination of the left and the right with op.

Definition at line 144 of file qgsexpressionnodeimpl.h.

◆ ~QgsExpressionNodeBinaryOperator()

QgsExpressionNodeBinaryOperator::~QgsExpressionNodeBinaryOperator ( )
inlineoverride

Definition at line 149 of file qgsexpressionnodeimpl.h.

Member Function Documentation

◆ clone()

QgsExpressionNode * QgsExpressionNodeBinaryOperator::clone ( ) const
overridevirtual

Generate a clone of this node.

Ownership is transferred to the caller.

Returns
a deep copy of this node.

Implements QgsExpressionNode.

Definition at line 830 of file qgsexpressionnodeimpl.cpp.

◆ dump()

QString QgsExpressionNodeBinaryOperator::dump ( ) const
overridevirtual

Dump this node into a serialized (part) of an expression.

The returned expression does not necessarily literally match the original expression, it's just guaranteed to behave the same way.

Implements QgsExpressionNode.

Definition at line 768 of file qgsexpressionnodeimpl.cpp.

◆ evalNode()

QVariant QgsExpressionNodeBinaryOperator::evalNode ( QgsExpression parent,
const QgsExpressionContext context 
)
overridevirtual

Abstract virtual eval method Errors are reported to the parent.

Since
QGIS 3.0

Implements QgsExpressionNode.

Definition at line 201 of file qgsexpressionnodeimpl.cpp.

◆ isStatic()

bool QgsExpressionNodeBinaryOperator::isStatic ( QgsExpression parent,
const QgsExpressionContext context 
) const
overridevirtual

Returns true if this node can be evaluated for a static value.

This is used during the prepare() step and in case it returns true, the value of this node will already be evaluated and the result cached (and therefore not re-evaluated in subsequent calls to eval()). In case this returns true, prepareNode() will never be called.

Since
QGIS 3.0

Implements QgsExpressionNode.

Definition at line 837 of file qgsexpressionnodeimpl.cpp.

◆ leftAssociative()

bool QgsExpressionNodeBinaryOperator::leftAssociative ( ) const

Returns true if the operator is left-associative.

Definition at line 732 of file qgsexpressionnodeimpl.cpp.

◆ needsGeometry()

bool QgsExpressionNodeBinaryOperator::needsGeometry ( ) const
overridevirtual

Abstract virtual method which returns if the geometry is required to evaluate this expression.

This needs to call needsGeometry() recursively on any child nodes.

Returns
true if a geometry is required to evaluate this expression

Implements QgsExpressionNode.

Definition at line 825 of file qgsexpressionnodeimpl.cpp.

◆ nodes()

QList< const QgsExpressionNode * > QgsExpressionNodeBinaryOperator::nodes ( ) const
overridevirtual

Returns a list of all nodes which are used in this expression.

Note
not available in Python bindings
Since
QGIS 3.2

Implements QgsExpressionNode.

Definition at line 817 of file qgsexpressionnodeimpl.cpp.

◆ nodeType()

QgsExpressionNode::NodeType QgsExpressionNodeBinaryOperator::nodeType ( ) const
overridevirtual

Gets the type of this node.

Returns
The type of this node

Implements QgsExpressionNode.

Definition at line 674 of file qgsexpressionnodeimpl.cpp.

◆ op()

QgsExpressionNodeBinaryOperator::BinaryOperator QgsExpressionNodeBinaryOperator::op ( ) const
inline

Returns the binary operator.

Definition at line 162 of file qgsexpressionnodeimpl.h.

◆ opLeft()

QgsExpressionNode* QgsExpressionNodeBinaryOperator::opLeft ( ) const
inline

Returns the node to the left of the operator.

See also
opRight()

Definition at line 168 of file qgsexpressionnodeimpl.h.

◆ opRight()

QgsExpressionNode* QgsExpressionNodeBinaryOperator::opRight ( ) const
inline

Returns the node to the right of the operator.

See also
opLeft()

Definition at line 174 of file qgsexpressionnodeimpl.h.

◆ precedence()

int QgsExpressionNodeBinaryOperator::precedence ( ) const

Returns the precedence index for the operator.

Higher values have higher precedence.

Definition at line 686 of file qgsexpressionnodeimpl.cpp.

◆ prepareNode()

bool QgsExpressionNodeBinaryOperator::prepareNode ( QgsExpression parent,
const QgsExpressionContext context 
)
overridevirtual

Abstract virtual preparation method Errors are reported to the parent.

Since
QGIS 3.0

Implements QgsExpressionNode.

Definition at line 679 of file qgsexpressionnodeimpl.cpp.

◆ referencedColumns()

QSet< QString > QgsExpressionNodeBinaryOperator::referencedColumns ( ) const
overridevirtual

Abstract virtual method which returns a list of columns required to evaluate this node.

When reimplementing this, you need to return any column that is required to evaluate this node and in addition recursively collect all the columns required to evaluate child nodes.

Warning
If the expression has been prepared via a call to QgsExpression::prepare(), or a call to QgsExpressionNode::prepare() for a node has been made, then some nodes in the expression may have been determined to evaluate to a static pre-calculatable value. In this case the results will omit attribute indices which are used by these pre-calculated nodes, regardless of their actual referenced columns. If you are seeking to use these functions to introspect an expression you must take care to do this with an unprepared expression node.
Returns
A list of columns required to evaluate this expression

Implements QgsExpressionNode.

Definition at line 799 of file qgsexpressionnodeimpl.cpp.

◆ referencedFunctions()

QSet< QString > QgsExpressionNodeBinaryOperator::referencedFunctions ( ) const
overridevirtual

Returns a set of all functions which are used in this expression.

Note
In contrast to the referencedColumns() function this method is not affected by any previous calls to QgsExpressionNode::prepare().

Implements QgsExpressionNode.

Definition at line 812 of file qgsexpressionnodeimpl.cpp.

◆ referencedVariables()

QSet< QString > QgsExpressionNodeBinaryOperator::referencedVariables ( ) const
overridevirtual

Returns a set of all variables which are used in this expression.

Note
In contrast to the referencedColumns() function this method is not affected by any previous calls to QgsExpressionNode::prepare().

Implements QgsExpressionNode.

Definition at line 807 of file qgsexpressionnodeimpl.cpp.

◆ text()

QString QgsExpressionNodeBinaryOperator::text ( ) const

Returns a the name of this operator without the operands.

I.e. "AND", "OR", ...

Definition at line 1803 of file qgsexpressionnodeimpl.cpp.


The documentation for this class was generated from the following files: