diff options
Diffstat (limited to 'odb/pgsql/query.hxx')
-rw-r--r-- | odb/pgsql/query.hxx | 62 |
1 files changed, 31 insertions, 31 deletions
diff --git a/odb/pgsql/query.hxx b/odb/pgsql/query.hxx index 438f2f5..0c3f837 100644 --- a/odb/pgsql/query.hxx +++ b/odb/pgsql/query.hxx @@ -95,14 +95,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 () @@ -116,8 +119,7 @@ namespace odb query (bool v) : binding_ (0, 0), native_binding_ (0, 0, 0, 0) { - clause_.push_back ( - clause_part (clause_part::native, v ? "TRUE" : "FALSE")); + clause_.push_back (clause_part (v)); } explicit @@ -187,6 +189,26 @@ namespace odb } 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) @@ -364,36 +386,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 // |