aboutsummaryrefslogtreecommitdiff
path: root/odb/sqlite/query.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/sqlite/query.hxx')
-rw-r--r--odb/sqlite/query.hxx61
1 files changed, 31 insertions, 30 deletions
diff --git a/odb/sqlite/query.hxx b/odb/sqlite/query.hxx
index c712b58..a3c63ba 100644
--- a/odb/sqlite/query.hxx
+++ b/odb/sqlite/query.hxx
@@ -121,14 +121,17 @@ namespace odb
{
column,
param,
- native
+ native,
+ boolean
};
clause_part (kind_type k): kind (k) {}
clause_part (kind_type k, const std::string& p): kind (k), part (p) {}
+ clause_part (bool p): kind (boolean), bool_part (p) {}
kind_type kind;
std::string part;
+ bool bool_part;
};
query ()
@@ -142,7 +145,7 @@ namespace odb
query (bool v)
: parameters_ (new (details::shared) query_params)
{
- clause_.push_back (clause_part (clause_part::native, v ? "1" : "0"));
+ clause_.push_back (clause_part (v));
}
explicit
@@ -203,6 +206,26 @@ namespace odb
parameters () const;
public:
+ bool
+ empty () const
+ {
+ return clause_.empty ();
+ }
+
+ static const query true_expr;
+
+ bool
+ const_true () const
+ {
+ return clause_.size () == 1 &&
+ clause_.front ().kind == clause_part::boolean &&
+ clause_.front ().bool_part;
+ }
+
+ void
+ optimize ();
+
+ public:
template <typename T>
static val_bind<T>
_val (const T& x)
@@ -370,36 +393,14 @@ namespace odb
return r;
}
- inline query
- operator&& (const query& x, const query& y)
- {
- query r ("(");
- r += x;
- r += ") AND (";
- r += y;
- r += ")";
- return r;
- }
+ query
+ operator&& (const query&, const query&);
- inline query
- operator|| (const query& x, const query& y)
- {
- query r ("(");
- r += x;
- r += ") OR (";
- r += y;
- r += ")";
- return r;
- }
+ query
+ operator|| (const query&, const query&);
- inline query
- operator! (const query& x)
- {
- query r ("NOT (");
- r += x;
- r += ")";
- return r;
- }
+ query
+ operator! (const query&);
// query_column
//