From 431c7c5d27e8274689cb058ab15c8dd446dd2820 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 21 Feb 2013 11:07:26 +0200 Subject: Add support for pattern matching (SQL LIKE) --- odb/oracle/query-dynamic.cxx | 16 ++++++++++++++ odb/oracle/query.hxx | 41 +++++++++++++++++++++++++++++++++++ odb/oracle/query.txx | 51 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+) diff --git a/odb/oracle/query-dynamic.cxx b/odb/oracle/query-dynamic.cxx index e046671..c9f7b60 100644 --- a/odb/oracle/query-dynamic.cxx +++ b/odb/oracle/query-dynamic.cxx @@ -116,6 +116,22 @@ namespace odb q += ")"; break; } + case part::op_like: + { + translate (q, s, p - 2); // column + q += "LIKE"; + translate (q, s, p - 1); // pattern + break; + } + case part::op_like_escape: + { + translate (q, s, p - 3); // column + q += "LIKE"; + translate (q, s, p - 2); // pattern + q += "ESCAPE"; + translate (q, s, p - 1); // escape + break; + } case part::op_eq: case part::op_ne: case part::op_lt: diff --git a/odb/oracle/query.hxx b/odb/oracle/query.hxx index deb465f..809e86f 100644 --- a/odb/oracle/query.hxx +++ b/odb/oracle/query.hxx @@ -763,6 +763,47 @@ namespace odb query_base in_range (I begin, I end) const; + // like + // + public: + query_base + like (decayed_type pattern) const + { + return like (val_bind (pattern)); + } + + query_base + like (val_bind pattern) const; + + template + query_base + like (val_bind pattern) const + { + return like (val_bind (decayed_type (pattern.val))); + } + + query_base + like (ref_bind pattern) const; + + query_base + like (decayed_type pattern, decayed_type escape) const + { + return like (val_bind (pattern), escape); + } + + query_base + like (val_bind pattern, decayed_type escape) const; + + template + query_base + like (val_bind pattern, decayed_type escape) const + { + return like (val_bind (decayed_type (pattern.val)), escape); + } + + query_base + like (ref_bind pattern, decayed_type escape) const; + // = // public: diff --git a/odb/oracle/query.txx b/odb/oracle/query.txx index 742b301..b281cfc 100644 --- a/odb/oracle/query.txx +++ b/odb/oracle/query.txx @@ -6,6 +6,7 @@ namespace odb { namespace oracle { + // // query_base // @@ -23,8 +24,12 @@ namespace odb c.conversion ()); } + // // query_column // + + // in + // template query_base query_column:: in (decayed_type v1, decayed_type v2) const @@ -110,5 +115,51 @@ namespace odb q += ")"; return q; } + + // like + // + template + query_base query_column:: + like (val_bind p) const + { + query_base q (table_, column_); + q += "LIKE"; + q.append (p, conversion_); + return q; + } + + template + query_base query_column:: + like (ref_bind p) const + { + query_base q (table_, column_); + q += "LIKE"; + q.append (p, conversion_); + return q; + } + + template + query_base query_column:: + like (val_bind p, decayed_type e) const + { + query_base q (table_, column_); + q += "LIKE"; + q.append (p, conversion_); + q += "ESCAPE"; + q.append (val_bind (e), conversion_); + return q; + } + + template + query_base query_column:: + like (ref_bind p, decayed_type e) const + { + query_base q (table_, column_); + q += "LIKE"; + q.append (p, conversion_); + q += "ESCAPE"; + q.append (val_bind (e), conversion_); + return q; + } } } -- cgit v1.1