HyriseSQLParser/src/sql/Expr.cpp

102 lines
1.7 KiB
C++
Raw Normal View History

#include "Expr.h"
2014-10-09 04:46:25 +02:00
#include <stdio.h>
2014-10-24 16:10:38 +02:00
#include <string.h>
namespace hsql {
2014-10-24 16:10:38 +02:00
char* substr(const char* source, int from, int to) {
int len = to-from;
char* copy = new char[len+1];
strncpy(copy, source+from, len);
copy[len] = '\0';
return copy;
}
2014-10-09 04:46:25 +02:00
2014-10-24 16:10:38 +02:00
Expr* Expr::makeOpUnary(OperatorType op, Expr* expr) {
2014-11-13 17:54:24 +01:00
Expr* e = new Expr(kExprOperator);
2014-10-24 16:10:38 +02:00
e->op_type = op;
e->expr = expr;
2014-10-24 17:17:40 +02:00
e->expr2 = NULL;
2014-10-24 16:10:38 +02:00
return e;
}
2014-10-27 13:54:16 +01:00
2014-10-24 16:10:38 +02:00
Expr* Expr::makeOpBinary(Expr* expr1, OperatorType op, Expr* expr2) {
2014-11-13 17:54:24 +01:00
Expr* e = new Expr(kExprOperator);
2014-10-24 16:10:38 +02:00
e->op_type = op;
e->op_char = 0;
e->expr = expr1;
e->expr2 = expr2;
return e;
}
Expr* Expr::makeOpBinary(Expr* expr1, char op, Expr* expr2) {
2014-11-13 17:54:24 +01:00
Expr* e = new Expr(kExprOperator);
2014-10-27 11:23:31 +01:00
e->op_type = SIMPLE_OP;
2014-10-24 16:10:38 +02:00
e->op_char = op;
e->expr = expr1;
e->expr2 = expr2;
return e;
2014-10-20 23:19:27 +02:00
}
2014-10-27 13:54:16 +01:00
Expr* Expr::makeLiteral(int64_t val) {
2014-11-13 17:54:24 +01:00
Expr* e = new Expr(kExprLiteralInt);
2014-10-27 13:54:16 +01:00
e->ival = val;
return e;
}
Expr* Expr::makeLiteral(double value) {
2014-11-13 17:54:24 +01:00
Expr* e = new Expr(kExprLiteralFloat);
2014-10-31 18:05:08 +01:00
e->fval = value;
2014-10-27 13:54:16 +01:00
return e;
}
Expr* Expr::makeLiteral(char* string) {
2014-11-13 17:54:24 +01:00
Expr* e = new Expr(kExprLiteralString);
e->name = string;
2014-10-27 13:54:16 +01:00
return e;
}
2014-10-31 18:05:08 +01:00
Expr* Expr::makeColumnRef(char* name) {
2014-11-13 17:54:24 +01:00
Expr* e = new Expr(kExprColumnRef);
2014-10-31 18:05:08 +01:00
e->name = name;
return e;
}
Expr* Expr::makeColumnRef(char* table, char* name) {
2014-11-17 14:54:38 +01:00
Expr* e = new Expr(kExprColumnRef);
e->name = name;
e->table = table;
return e;
}
2014-12-18 12:28:24 +01:00
Expr* Expr::makeFunctionRef(char* func_name, Expr* expr, bool distinct) {
2014-11-13 17:54:24 +01:00
Expr* e = new Expr(kExprFunctionRef);
2014-10-31 18:05:08 +01:00
e->name = func_name;
e->expr = expr;
2014-12-18 12:28:24 +01:00
e->distinct = distinct;
2014-10-31 18:05:08 +01:00
return e;
}
2015-01-06 15:29:18 +01:00
Expr* Expr::makePlaceholder(int id) {
Expr* e = new Expr(kExprPlaceholder);
e->ival = id;
return e;
}
2014-11-07 15:21:54 +01:00
Expr::~Expr() {
2014-11-12 11:20:32 +01:00
delete expr;
delete expr2;
delete name;
delete table;
2014-11-07 15:21:54 +01:00
}
} // namespace hsql