23#ifndef KEXIDB_EXPRESSION_H
24#define KEXIDB_EXPRESSION_H
27#include "queryschema.h"
35#define KexiDBExpr_Unknown 0
36#define KexiDBExpr_Unary 1
37#define KexiDBExpr_Arithm 2
38#define KexiDBExpr_Logical 3
39#define KexiDBExpr_Relational 4
40#define KexiDBExpr_SpecialBinary 5
41#define KexiDBExpr_Const 6
42#define KexiDBExpr_Variable 7
43#define KexiDBExpr_Function 8
44#define KexiDBExpr_Aggregation 9
45#define KexiDBExpr_TableList 10
46#define KexiDBExpr_QueryParameter 11
66class KEXI_DB_EXPORT BaseExpr
69 typedef TQPtrList<BaseExpr> List;
70 typedef TQPtrListIterator<BaseExpr> ListIterator;
77 virtual BaseExpr*
copy()
const = 0;
79 int token()
const {
return m_token; }
83 BaseExpr* parent()
const {
return m_par; }
85 virtual void setParent(BaseExpr *p) { m_par = p; }
87 virtual bool validate(ParseInfo& parseInfo);
98 inline void debug() { KexiDBDbg << debugString() << endl; }
100 virtual TQString debugString();
106 static TQString tokenToDebugString(
int token);
109 virtual TQString tokenToString();
111 int exprClass()
const {
return m_cl; }
115 UnaryExpr* toUnary();
116 BinaryExpr* toBinary();
117 ConstExpr* toConst();
118 VariableExpr* toVariable();
119 FunctionExpr* toFunction();
120 QueryParameterExpr* toQueryParameter();
129class KEXI_DB_EXPORT NArgExpr :
public BaseExpr
132 NArgExpr(
int aClass,
int token);
133 NArgExpr(
const NArgExpr& expr);
136 virtual NArgExpr*
copy()
const;
137 void add(BaseExpr *expr);
138 void prepend(BaseExpr *expr);
139 BaseExpr *arg(
int n);
141 virtual TQString debugString();
144 virtual bool validate(ParseInfo& parseInfo);
149class KEXI_DB_EXPORT UnaryExpr :
public BaseExpr
152 UnaryExpr(
int token, BaseExpr *arg);
153 UnaryExpr(
const UnaryExpr& expr);
154 virtual ~UnaryExpr();
156 virtual UnaryExpr*
copy()
const;
158 virtual TQString debugString();
161 BaseExpr *arg()
const {
return m_arg; }
162 virtual bool validate(ParseInfo& parseInfo);
175class KEXI_DB_EXPORT BinaryExpr :
public BaseExpr
178 BinaryExpr(
int aClass, BaseExpr *left_expr,
int token, BaseExpr *right_expr);
179 BinaryExpr(
const BinaryExpr& expr);
180 virtual ~BinaryExpr();
182 virtual BinaryExpr*
copy()
const;
184 virtual TQString debugString();
187 BaseExpr *left()
const {
return m_larg; }
188 BaseExpr *right()
const {
return m_rarg; }
189 virtual bool validate(ParseInfo& parseInfo);
199class KEXI_DB_EXPORT ConstExpr :
public BaseExpr
202 ConstExpr(
int token,
const TQVariant& val);
203 ConstExpr(
const ConstExpr& expr);
204 virtual ~ConstExpr();
206 virtual ConstExpr*
copy()
const;
208 virtual TQString debugString();
211 virtual bool validate(ParseInfo& parseInfo);
217class KEXI_DB_EXPORT QueryParameterExpr :
public ConstExpr
220 QueryParameterExpr(
const TQString& message);
221 QueryParameterExpr(
const QueryParameterExpr& expr);
222 virtual ~QueryParameterExpr();
224 virtual QueryParameterExpr*
copy()
const;
235 virtual TQString debugString();
238 virtual bool validate(ParseInfo& parseInfo);
244class KEXI_DB_EXPORT VariableExpr :
public BaseExpr
247 VariableExpr(
const TQString& _name);
248 VariableExpr(
const VariableExpr& expr);
249 virtual ~VariableExpr();
251 virtual VariableExpr*
copy()
const;
253 virtual TQString debugString();
260 virtual bool validate(ParseInfo& parseInfo);
277 int tablePositionForField;
288class KEXI_DB_EXPORT FunctionExpr :
public BaseExpr
291 FunctionExpr(
const TQString& _name,
NArgExpr* args_ = 0);
292 FunctionExpr(
const FunctionExpr& expr);
293 virtual ~FunctionExpr();
295 virtual FunctionExpr*
copy()
const;
297 virtual TQString debugString();
300 virtual bool validate(ParseInfo& parseInfo);
302 static TQValueList<TQCString> builtInAggregates();
303 static bool isBuiltInAggregate(
const TQCString& fname);
A base class for all expressions.
virtual TQString toString(QuerySchemaParameterValueListIterator *params=0)=0
virtual void getQueryParameters(QuerySchemaParameterList ¶ms)=0
virtual BaseExpr * copy() const =0
TQString tokenToDebugString()
BaseExpr * m_par
parent expression
virtual void getQueryParameters(QuerySchemaParameterList ¶ms)
virtual TQString toString(QuerySchemaParameterValueListIterator *params=0)
virtual BinaryExpr * copy() const
virtual TQString tokenToString()
virtual bool validate(ParseInfo &parseInfo)
virtual void getQueryParameters(QuerySchemaParameterList ¶ms)
virtual TQString toString(QuerySchemaParameterValueListIterator *params=0)
virtual ConstExpr * copy() const
virtual TQString toString(QuerySchemaParameterValueListIterator *params=0)
virtual void getQueryParameters(QuerySchemaParameterList ¶ms)
virtual FunctionExpr * copy() const
A base class N-argument operation.
virtual void getQueryParameters(QuerySchemaParameterList ¶ms)
virtual TQString toString(QuerySchemaParameterValueListIterator *params=0)
virtual NArgExpr * copy() const
virtual QueryParameterExpr * copy() const
virtual TQString toString(QuerySchemaParameterValueListIterator *params=0)
virtual void getQueryParameters(QuerySchemaParameterList ¶ms)
void setType(Field::Type type)
An iteratof for a list of values of query schema parameters providing Allows to iterate over paramete...
An unary argument operation: + - NOT (or !) ~ "IS NULL" "IS NOT NULL".
virtual TQString toString(QuerySchemaParameterValueListIterator *params=0)
virtual UnaryExpr * copy() const
virtual void getQueryParameters(QuerySchemaParameterList ¶ms)
virtual bool validate(ParseInfo &parseInfo)
Variables like fieldname or tablename.fieldname.
TableSchema * tableForQueryAsterisk
virtual void getQueryParameters(QuerySchemaParameterList ¶ms)
virtual TQString toString(QuerySchemaParameterValueListIterator *params=0)
virtual VariableExpr * copy() const
virtual Field::Type type()
We're assuming it's called after VariableExpr::validate().
virtual bool validate(ParseInfo &parseInfo)
High-level database connectivity library with database backend drivers.
KEXI_DB_EXPORT TQString exprClassName(int c)
Custom tokens are not used in parser but used as extension in expression classes.