From bad675ea0e17b6eb18d75ddc403b81ff5f76ad25 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 13 Aug 2010 13:39:57 +0200 Subject: Add support for language-embedded query --- odb/mysql/query.txx | 102 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 90 insertions(+), 12 deletions(-) (limited to 'odb/mysql/query.txx') diff --git a/odb/mysql/query.txx b/odb/mysql/query.txx index 23d4ba7..dda0e72 100644 --- a/odb/mysql/query.txx +++ b/odb/mysql/query.txx @@ -7,22 +7,100 @@ namespace odb { namespace mysql { - template - query& query:: - operator+= (val_bind v) + // query + // + + template + query:: + query (const query_column& c) + : clause_ (c.name ()) + { + clause_ += " IS TRUE"; + } + + // query_column + // + template + query query_column:: + in (const T& v1, const T& v2) const { - add ( - shared_ptr ( - new (shared) query_param_impl::image_id> (v))); + query q (name_); + q += "IN ("; + q.append (val_bind (v1)); + q += ","; + q.append (val_bind (v2)); + q += ")"; + return q; } - template - query& query:: - operator+= (ref_bind r) + template + query query_column:: + in (const T& v1, const T& v2, const T& v3) const { - add ( - shared_ptr ( - new (shared) query_param_impl::image_id> (r))); + query q (name_); + q += "IN ("; + q.append (val_bind (v1)); + q += ","; + q.append (val_bind (v2)); + q += ","; + q.append (val_bind (v3)); + q += ")"; + return q; + } + + template + query query_column:: + in (const T& v1, const T& v2, const T& v3, const T& v4) const + { + query q (name_); + q += "IN ("; + q.append (val_bind (v1)); + q += ","; + q.append (val_bind (v2)); + q += ","; + q.append (val_bind (v3)); + q += ","; + q.append (val_bind (v4)); + q += ")"; + return q; + } + + template + query query_column:: + in (const T& v1, const T& v2, const T& v3, const T& v4, const T& v5) const + { + query q (name_); + q += "IN ("; + q.append (val_bind (v1)); + q += ","; + q.append (val_bind (v2)); + q += ","; + q.append (val_bind (v3)); + q += ","; + q.append (val_bind (v4)); + q += ","; + q.append (val_bind (v5)); + q += ")"; + return q; + } + + template + template + query query_column:: + in_range (I begin, I end) const + { + query q (name_); + q += "IN ("; + + for (I i (begin); i != end; ++i) + { + if (i != begin) + q += ","; + + q.append (val_bind (*i)); + } + q += ")"; + return q; } } } -- cgit v1.1