kexi
expression.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef KEXIDB_EXPRESSION_H
00024 #define KEXIDB_EXPRESSION_H
00025
00026 #include "field.h"
00027 #include "queryschema.h"
00028
00029 #include <kdebug.h>
00030 #include "global.h"
00031
00032 namespace KexiDB {
00033
00035 #define KexiDBExpr_Unknown 0
00036 #define KexiDBExpr_Unary 1
00037 #define KexiDBExpr_Arithm 2
00038 #define KexiDBExpr_Logical 3
00039 #define KexiDBExpr_Relational 4
00040 #define KexiDBExpr_SpecialBinary 5
00041 #define KexiDBExpr_Const 6
00042 #define KexiDBExpr_Variable 7
00043 #define KexiDBExpr_Function 8
00044 #define KexiDBExpr_Aggregation 9
00045 #define KexiDBExpr_TableList 10
00046 #define KexiDBExpr_QueryParameter 11
00047
00048 KEXI_DB_EXPORT QString exprClassName(int c);
00049
00050 class ParseInfo;
00051 class NArgExpr;
00052 class UnaryExpr;
00053 class BinaryExpr;
00054 class ConstExpr;
00055 class VariableExpr;
00056 class FunctionExpr;
00057 class QueryParameterExpr;
00058 class QuerySchemaParameterValueListIterator;
00059
00060
00062 class KEXI_DB_EXPORT BaseExpr
00063 {
00064 public:
00065 typedef QPtrList<BaseExpr> List;
00066 typedef QPtrListIterator<BaseExpr> ListIterator;
00067
00068 BaseExpr(int token);
00069 virtual ~BaseExpr();
00070
00071 int token() const { return m_token; }
00072
00073 virtual Field::Type type();
00074
00075 BaseExpr* parent() const { return m_par; }
00076
00077 virtual void setParent(BaseExpr *p) { m_par = p; }
00078
00079 virtual bool validate(ParseInfo& parseInfo);
00080
00084 virtual QString toString(QuerySchemaParameterValueListIterator* params = 0) = 0;
00085
00088 virtual void getQueryParameters(QuerySchemaParameterList& params) = 0;
00089
00090 inline void debug() { KexiDBDbg << debugString() << endl; }
00091
00092 virtual QString debugString();
00093
00096 inline QString tokenToDebugString() { return tokenToDebugString(m_token); }
00097
00098 static QString tokenToDebugString(int token);
00099
00101 virtual QString tokenToString();
00102
00103 int exprClass() const { return m_cl; }
00104
00106 NArgExpr* toNArg();
00107 UnaryExpr* toUnary();
00108 BinaryExpr* toBinary();
00109 ConstExpr* toConst();
00110 VariableExpr* toVariable();
00111 FunctionExpr* toFunction();
00112 QueryParameterExpr* toQueryParameter();
00113
00114 protected:
00115 int m_cl;
00116 BaseExpr *m_par;
00117 int m_token;
00118 };
00119
00121 class KEXI_DB_EXPORT NArgExpr : public BaseExpr
00122 {
00123 public:
00124 NArgExpr(int aClass, int token);
00125 virtual ~NArgExpr();
00126 void add(BaseExpr *expr);
00127 void prepend(BaseExpr *expr);
00128 BaseExpr *arg(int n);
00129 int args();
00130 virtual QString debugString();
00131 virtual QString toString(QuerySchemaParameterValueListIterator* params = 0);
00132 virtual void getQueryParameters(QuerySchemaParameterList& params);
00133 virtual bool validate(ParseInfo& parseInfo);
00134 BaseExpr::List list;
00135 };
00136
00138 class KEXI_DB_EXPORT UnaryExpr : public BaseExpr
00139 {
00140 public:
00141 UnaryExpr(int token, BaseExpr *arg);
00142 virtual ~UnaryExpr();
00143 virtual Field::Type type();
00144 virtual QString debugString();
00145 virtual QString toString(QuerySchemaParameterValueListIterator* params = 0);
00146 virtual void getQueryParameters(QuerySchemaParameterList& params);
00147 BaseExpr *arg() const { return m_arg; }
00148 virtual bool validate(ParseInfo& parseInfo);
00149
00150 BaseExpr *m_arg;
00151 };
00152
00161 class KEXI_DB_EXPORT BinaryExpr : public BaseExpr
00162 {
00163 public:
00164 BinaryExpr(int aClass, BaseExpr *left_expr, int token, BaseExpr *right_expr);
00165 virtual ~BinaryExpr();
00166 virtual Field::Type type();
00167 virtual QString debugString();
00168 virtual QString toString(QuerySchemaParameterValueListIterator* params = 0);
00169 virtual void getQueryParameters(QuerySchemaParameterList& params);
00170 BaseExpr *left() const { return m_larg; }
00171 BaseExpr *right() const { return m_rarg; }
00172 virtual bool validate(ParseInfo& parseInfo);
00173 virtual QString tokenToString();
00174
00175 BaseExpr *m_larg;
00176 BaseExpr *m_rarg;
00177 };
00178
00182 class KEXI_DB_EXPORT ConstExpr : public BaseExpr
00183 {
00184 public:
00185 ConstExpr(int token, const QVariant& val);
00186 virtual ~ConstExpr();
00187 virtual Field::Type type();
00188 virtual QString debugString();
00189 virtual QString toString(QuerySchemaParameterValueListIterator* params = 0);
00190 virtual void getQueryParameters(QuerySchemaParameterList& params);
00191 virtual bool validate(ParseInfo& parseInfo);
00192 QVariant value;
00193 };
00194
00197 class KEXI_DB_EXPORT QueryParameterExpr : public ConstExpr
00198 {
00199 public:
00200 QueryParameterExpr(const QString& message);
00201 virtual ~QueryParameterExpr();
00202 virtual Field::Type type();
00211 void setType(Field::Type type);
00212 virtual QString debugString();
00213 virtual QString toString(QuerySchemaParameterValueListIterator* params = 0);
00214 virtual void getQueryParameters(QuerySchemaParameterList& params);
00215 virtual bool validate(ParseInfo& parseInfo);
00216 protected:
00217 Field::Type m_type;
00218 };
00219
00221 class KEXI_DB_EXPORT VariableExpr : public BaseExpr
00222 {
00223 public:
00224 VariableExpr(const QString& _name);
00225 virtual ~VariableExpr();
00226 virtual Field::Type type();
00227 virtual QString debugString();
00228 virtual QString toString(QuerySchemaParameterValueListIterator* params = 0);
00229 virtual void getQueryParameters(QuerySchemaParameterList& params);
00230
00234 virtual bool validate(ParseInfo& parseInfo);
00235
00237 QString name;
00238
00239
00240
00241
00242
00243 Field *field;
00244
00245
00246
00247
00248
00249
00250
00251 int tablePositionForField;
00252
00256 TableSchema *tableForQueryAsterisk;
00257 };
00258
00262 class KEXI_DB_EXPORT FunctionExpr : public BaseExpr
00263 {
00264 public:
00265 FunctionExpr(const QString& _name, NArgExpr* args_ = 0);
00266 virtual ~FunctionExpr();
00267 virtual Field::Type type();
00268 virtual QString debugString();
00269 virtual QString toString(QuerySchemaParameterValueListIterator* params = 0);
00270 virtual void getQueryParameters(QuerySchemaParameterList& params);
00271 virtual bool validate(ParseInfo& parseInfo);
00272
00273 static QValueList<QCString> builtInAggregates();
00274 static bool isBuiltInAggregate(const QCString& fname);
00275
00276 QString name;
00277 NArgExpr* args;
00278 };
00279
00280 }
00281
00282 #endif
|