QGIS API Documentation 3.34.0-Prizren (ffbdd678812)
Loading...
Searching...
No Matches
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
40class CORE_EXPORT QgsSqlExpressionCompiler
41{
42 public:
43
45 enum Result
46 {
50 Fail
51 };
52
56 enum Flag
57 {
58 CaseInsensitiveStringMatch = 1,
59 LikeIsCaseInsensitive = 1 << 1,
60 NoNullInBooleanLogic = 1 << 2,
61 NoUnaryMinus = 1 << 3,
62 IntegerDivisionResultsInInteger = 1 << 4,
63 };
64 Q_DECLARE_FLAGS( Flags, Flag )
65
66
74 explicit QgsSqlExpressionCompiler( const QgsFields &fields, QgsSqlExpressionCompiler::Flags flags = Flags(), bool ignoreStaticNodes = false );
75 virtual ~QgsSqlExpressionCompiler() = default;
76
80 virtual Result compile( const QgsExpression *exp );
81
85 virtual QString result();
86
101 bool opIsStringComparison( QgsExpressionNodeBinaryOperator::BinaryOperator op );
102
103 protected:
104
111 virtual QString quotedIdentifier( const QString &identifier );
112
120 virtual QString quotedValue( const QVariant &value, bool &ok );
121
128 virtual Result compileNode( const QgsExpressionNode *node, QString &str );
129
136 virtual QString sqlFunctionFromFunctionName( const QString &fnName ) const;
137
145 virtual QStringList sqlArgumentsFromFunctionName( const QString &fnName, const QStringList &fnArgs ) const;
146
153 virtual QString castToReal( const QString &value ) const;
154
170 virtual QString castToText( const QString &value ) const;
171
177 virtual QString castToInt( const QString &value ) const;
178
184 virtual Result replaceNodeByStaticCachedValueIfPossible( const QgsExpressionNode *node, QString &str );
185
186 QString mResult;
188
189 private:
190
191 Flags mFlags;
192
193 bool mIgnoreStaticNodes = false;
194
195 bool nodeIsNullLiteral( const QgsExpressionNode *node ) const;
196
197};
198
199Q_DECLARE_OPERATORS_FOR_FLAGS( QgsSqlExpressionCompiler::Flags )
200
201#endif // QGSSQLEXPRESSIONCOMPILER_H
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)