QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgssqlexpressioncompiler.h
Go to the documentation of this file.
1/***************************************************************************
2 qgssqlexpressioncompiler.h
3 --------------------------
4 begin : November 2015
5 copyright : (C) 2015 Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSSQLEXPRESSIONCOMPILER_H
17#define QGSSQLEXPRESSIONCOMPILER_H
18
19#define SIP_NO_FILE
20
21#include "qgis_core.h"
22#include "qgsfields.h"
24
25class QgsExpression;
27
39class CORE_EXPORT QgsSqlExpressionCompiler
40{
41 public:
42
44 enum Result
45 {
49 Fail
50 };
51
55 enum Flag
56 {
57 CaseInsensitiveStringMatch = 1,
58 LikeIsCaseInsensitive = 1 << 1,
59 NoNullInBooleanLogic = 1 << 2,
60 NoUnaryMinus = 1 << 3,
61 IntegerDivisionResultsInInteger = 1 << 4,
62 };
63 Q_DECLARE_FLAGS( Flags, Flag )
64
65
73 explicit QgsSqlExpressionCompiler( const QgsFields &fields, QgsSqlExpressionCompiler::Flags flags = Flags(), bool ignoreStaticNodes = false );
74 virtual ~QgsSqlExpressionCompiler() = default;
75
79 virtual Result compile( const QgsExpression *exp );
80
84 virtual QString result();
85
100 bool opIsStringComparison( QgsExpressionNodeBinaryOperator::BinaryOperator op );
101
102 protected:
103
110 virtual QString quotedIdentifier( const QString &identifier );
111
119 virtual QString quotedValue( const QVariant &value, bool &ok );
120
127 virtual Result compileNode( const QgsExpressionNode *node, QString &str );
128
135 virtual QString sqlFunctionFromFunctionName( const QString &fnName ) const;
136
144 virtual QStringList sqlArgumentsFromFunctionName( const QString &fnName, const QStringList &fnArgs ) const;
145
151 virtual QString castToReal( const QString &value ) const;
152
168 virtual QString castToText( const QString &value ) const;
169
174 virtual QString castToInt( const QString &value ) const;
175
181 virtual Result replaceNodeByStaticCachedValueIfPossible( const QgsExpressionNode *node, QString &str );
182
183 QString mResult;
185
186 private:
187
188 Flags mFlags;
189
190 bool mIgnoreStaticNodes = false;
191
192 bool nodeIsNullLiteral( const QgsExpressionNode *node ) const;
193
194};
195
197
198#endif // QGSSQLEXPRESSIONCOMPILER_H
BinaryOperator
list of binary operators
Abstract base class for all nodes that can appear in an expression.
Class for parsing and evaluation of expressions (formerly called "search strings").
Container of fields for a vector layer.
Definition: qgsfields.h:45
Generic expression compiler for translation to provider specific SQL WHERE clauses.
Result
Possible results from expression compilation.
@ Complete
Expression was successfully compiled and can be completely delegated to provider.
@ Partial
Expression was partially compiled, but provider will return extra records and results must be double-...
virtual ~QgsSqlExpressionCompiler()=default
Flag
Enumeration of flags for how provider handles SQL clauses.
#define str(x)
Definition: qgis.cpp:38
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsTextRendererUtils::CurvedTextFlags)