7#ifndef litesql_expr_hpp
8#define litesql_expr_hpp
27 virtual string asString()
const {
return True; }
30 Split getExtraTables()
const {
36class RawExpr :
public Expr {
39 RawExpr(
string e) : expr(e) {}
40 virtual string asString()
const {
return expr; }
43class Connective :
public Expr {
49 Connective(
string o,
const Expr & e1_,
const Expr & e2_)
50 : op(o), e1(e1_), e2(e2_) { }
53 virtual ~Connective() {}
55 virtual string asString()
const {
56 string res =
"(" + e1.asString() +
") " + op
57 +
" (" + e2.asString() +
")";
62class And :
public Connective {
64 And(
const Expr & e1_,
const Expr & e2_) : Connective(
"and", e1_, e2_) {}
65 virtual string asString()
const {
66 if (e1.asString() ==
True)
68 else if (e2.asString() ==
True)
71 return Connective::asString();
75class Or :
public Connective {
77 Or(
const Expr & e1_,
const Expr & e2_)
78 : Connective(
"or", e1_, e2_) {}
79 virtual string asString()
const {
80 if ((e1.asString() ==
True)||(e2.asString() ==
True))
83 return Connective::asString();
91 Not(
const Expr & _exp) : exp(_exp) {}
92 virtual string asString()
const {
93 return "not ("+exp.asString()+
")";
105 Oper(
const FieldType & fld,
const string& o,
const string& d)
106 : field(fld), op(o), data(d), escape(
true) {
107 extraTables.push_back(fld.table());
110 : field(fld), op(o), data(f2.fullName()), escape(
false) {
111 extraTables.push_back(fld.table());
115 virtual string asString()
const {
117 res += field.fullName() +
" " + op +
" " + (escape ?
escapeSQL(data) : data);
122class Eq :
public Oper {
124 Eq(
const FieldType & fld,
const string& d)
125 : Oper(fld,
"=", d) {}
127 : Oper(fld,
"=", f2) {}
131class NotEq :
public Oper {
133 NotEq(
const FieldType & fld,
const string& d)
134 : Oper(fld,
"<>", d) {}
136 : Oper(fld,
"<>", f2) {
141class Gt :
public Oper {
143 Gt(
const FieldType & fld,
const string& d)
144 : Oper(fld,
">", d) {}
146 : Oper(fld,
">", d) {}
150class GtEq :
public Oper {
152 GtEq(
const FieldType & fld,
const string& d)
153 : Oper(fld,
">=", d) {}
155 : Oper(fld,
">=", d) {}
159class Lt :
public Oper {
161 Lt(
const FieldType & fld,
const string& d)
162 : Oper(fld,
"<", d) {}
164 : Oper(fld,
"<", d) {}
168class LtEq :
public Oper {
170 LtEq(
const FieldType & fld,
const string& d)
171 : Oper(fld,
"<=", d) {}
173 : Oper(fld,
"<=", d) {}
177class Like :
public Oper {
179 Like(
const FieldType & fld,
const string& d)
180 : Oper(fld,
"like", d) {}
184class In :
public Oper {
186 In(
const FieldType & fld,
const string& set)
187 : Oper(fld,
"in",
"("+set+
")") {};
189 virtual string asString()
const {
190 return field.fullName() +
" " + op +
" " + data;
200Eq operator==(
const FieldType& fld,
const FieldType& f2);
201Gt operator>(
const FieldType& fld,
const FieldType& o2);
202GtEq operator>=(
const FieldType& fld,
const FieldType& o2);
203Lt operator<(
const FieldType& fld,
const FieldType& o2);
204LtEq operator<=(
const FieldType& fld,
const FieldType& o2);
205NotEq operator!=(
const FieldType& fld,
const FieldType& f2);
213litesql::GtEq operator>=(
const litesql::FieldType& fld,
const T& o2) {
214 return litesql::GtEq(fld, litesql::toString(o2));
218litesql::Lt operator<(
const litesql::FieldType& fld,
const T& o2) {
219 return litesql::Lt(fld, litesql::toString(o2));
224litesql::LtEq operator<=(
const litesql::FieldType& fld,
const T& o2) {
225 return litesql::LtEq(fld, litesql::toString(o2));
228litesql::NotEq operator!=(
const litesql::FieldType& fld,
const T& o2) {
229 return litesql::NotEq(fld, litesql::toString(o2));
connects two expressions with and-operator.
Definition expr.hpp:62
equality operator
Definition expr.hpp:122
A base class for expression in WHERE - clause.
Definition expr.hpp:19
static const char * True
constant for True expression
Definition expr.hpp:25
greater than operator
Definition expr.hpp:141
negates expression
Definition expr.hpp:87
connects two expression with or-operator.
Definition expr.hpp:75
a class that helps creating SELECT-SQL statements.
Definition selectquery.hpp:18
splits and joins strings.
Definition split.hpp:15
contains FieldType- and Field-classes
std::string toString(T a)
returns string representation of passed parameter if it can be written to ostringstream
Definition string.hpp:18
std::string escapeSQL(const std::string &str)
escapes ' characters so that they do not break SQL statements.
includes string.hpp and split.hpp