QGIS API Documentation
3.16.0-Hannover (43b64b13f3)
|
Go to the documentation of this file.
43 if ( op == QgsExpressionNodeBinaryOperator::BinaryOperator::boILike ||
44 op == QgsExpressionNodeBinaryOperator::BinaryOperator::boLike ||
45 op == QgsExpressionNodeBinaryOperator::BinaryOperator::boNotILike ||
46 op == QgsExpressionNodeBinaryOperator::BinaryOperator::boNotLike ||
47 op == QgsExpressionNodeBinaryOperator::BinaryOperator::boRegexp )
55 QString quoted = identifier;
56 quoted.replace(
'"', QLatin1String(
"\"\"" ) );
57 quoted = quoted.prepend(
'\"' ).append(
'\"' );
66 return QStringLiteral(
"NULL" );
68 switch ( value.type() )
71 case QVariant::LongLong:
72 case QVariant::Double:
73 return value.toString();
76 return value.toBool() ? QStringLiteral(
"TRUE" ) : QStringLiteral(
"FALSE" );
79 case QVariant::String:
80 QString v = value.toString();
81 v.replace(
'\'', QLatin1String(
"''" ) );
82 if ( v.contains(
'\\' ) )
83 return v.replace(
'\\', QLatin1String(
"\\\\" ) ).prepend(
"E'" ).append(
'\'' );
85 return v.prepend(
'\'' ).append(
'\'' );
103 result =
"( NOT " + right +
')';
118 result =
"( - (" + right +
"))";
134 bool partialCompilation =
false;
135 bool failOnPartialNode =
false;
143 partialCompilation =
true;
146 op = QStringLiteral(
"=" );
150 op = QStringLiteral(
">=" );
154 op = QStringLiteral(
">" );
158 op = QStringLiteral(
"<=" );
162 op = QStringLiteral(
"<" );
166 op = QStringLiteral(
"IS" );
170 op = QStringLiteral(
"IS NOT" );
175 op = QStringLiteral(
"LIKE" );
181 op = QStringLiteral(
"LIKE" );
183 op = QStringLiteral(
"ILIKE" );
187 op = QStringLiteral(
"NOT LIKE" );
195 op = QStringLiteral(
"NOT LIKE" );
197 op = QStringLiteral(
"NOT ILIKE" );
203 if ( nodeIsNullLiteral( n->
opLeft() ) || nodeIsNullLiteral( n->
opRight() ) )
207 op = QStringLiteral(
"OR" );
213 if ( nodeIsNullLiteral( n->
opLeft() ) || nodeIsNullLiteral( n->
opRight() ) )
217 op = QStringLiteral(
"AND" );
222 op = QStringLiteral(
"<>" );
226 op = QStringLiteral(
"*" );
230 op = QStringLiteral(
"+" );
234 op = QStringLiteral(
"-" );
238 op = QStringLiteral(
"/" );
242 op = QStringLiteral(
"%" );
246 op = QStringLiteral(
"||" );
250 op = QStringLiteral(
"/" );
254 op = QStringLiteral(
"^" );
258 op = QStringLiteral(
"~" );
280 if ( right.isEmpty() )
287 result =
'(' + left +
' ' + op +
' ' + right +
')';
343 const auto constList = n->
list()->
list();
363 result = QStringLiteral(
"%1 %2IN (%3)" ).arg( nd, n->
isNotIn() ? QStringLiteral(
"NOT " ) : QString(), list.join(
',' ) );
381 const auto constList = n->
args()->
list();
400 result = !nd.isEmpty() ? QStringLiteral(
"%1(%2)" ).arg( nd, args.join(
',' ) ) : args.join(
',' );
423 return QStringList( fnArgs );
443 bool QgsSqlExpressionCompiler::nodeIsNullLiteral(
const QgsExpressionNode *node )
const
449 return nLit->
value().isNull();
QgsExpressionNodeBinaryOperator::BinaryOperator op() const
Returns the binary operator.
@ LikeIsCaseInsensitive
Provider treats LIKE as case-insensitive.
An expression node for literal values.
A binary expression operator, which operates on two values.
QgsExpressionNode * node() const
Returns the expression node.
QgsSqlExpressionCompiler(const QgsFields &fields, QgsSqlExpressionCompiler::Flags flags=Flags())
Constructor for expression compiler.
virtual Result compileNode(const QgsExpressionNode *node, QString &str)
Compiles an expression node and returns the result of the compilation.
virtual QString result()
Returns the compiled expression string for use by the provider.
const QgsExpressionNode * rootNode() const
Returns the root node of the expression.
An expression node which takes it value from a feature's field.
QVariant value() const
The value of the literal.
int fnIndex() const
Returns the index of the node's function.
Container of fields for a vector layer.
virtual QString castToInt(const QString &value) const
Casts a value to a integer result.
A unary node is either negative as in boolean (not) or as in numbers (minus).
bool opIsStringComparison(QgsExpressionNodeBinaryOperator::BinaryOperator op)
Returns true if op is one of.
@ Partial
Expression was partially compiled, but provider will return extra records and results must be double-...
@ Complete
Expression was successfully compiled and can be completely delegated to provider.
@ CaseInsensitiveStringMatch
Provider performs case-insensitive string matching for all strings.
virtual QString castToText(const QString &value) const
Casts a value to a text result.
QgsExpressionNodeUnaryOperator::UnaryOperator op() const
Returns the unary operator.
virtual QString quotedValue(const QVariant &value, bool &ok)
Returns a quoted attribute value, in the format expected by the provider.
An expression node for value IN or NOT IN clauses.
virtual QString sqlFunctionFromFunctionName(const QString &fnName) const
Returns the SQL function for the expression function.
QgsExpressionNode::NodeList * args() const
Returns a list of arguments specified for the function.
@ IntegerDivisionResultsInInteger
Dividing int by int results in int on provider. Subclass must implement the castToReal() function to ...
QgsExpressionNode * operand() const
Returns the node the operator will operate upon.
@ Fail
Provider cannot handle expression.
An expression node for expression functions.
static const QList< QgsExpressionFunction * > & Functions()
QList< QgsExpressionNode * > list()
Gets a list of all the nodes.
Abstract base class for all nodes that can appear in an expression.
bool isNotIn() const
Returns true if this node is a "NOT IN" operator, or false if the node is a normal "IN" operator.
QString name() const
The name of the column.
A abstract base class for defining QgsExpression functions.
QgsExpressionNode * opLeft() const
Returns the node to the left of the operator.
QString name() const
The name of the function.
@ NoNullInBooleanLogic
Provider does not support using NULL with boolean logic, e.g., "(...) OR NULL".
virtual QString castToReal(const QString &value) const
Casts a value to a real result.
virtual Result compile(const QgsExpression *exp)
Compiles an expression and returns the result of the compilation.
QgsExpressionNode::NodeList * list() const
Returns the list of nodes to search for matching values within.
@ NoUnaryMinus
Provider does not unary minus, e.g., " -( 100 * 2 ) = ...".
QgsExpressionNode * opRight() const
Returns the node to the right of the operator.
Class for parsing and evaluation of expressions (formerly called "search strings").
Result
Possible results from expression compilation.
@ ntIndexOperator
Index operator.
int indexFromName(const QString &fieldName) const
Gets the field index from the field name.
virtual QStringList sqlArgumentsFromFunctionName(const QString &fnName, const QStringList &fnArgs) const
Returns the Arguments for SQL function for the expression function.
virtual QgsExpressionNode::NodeType nodeType() const =0
Gets the type of this node.
BinaryOperator
list of binary operators
virtual QString quotedIdentifier(const QString &identifier)
Returns a quoted column identifier, in the format expected by the provider.