From f25ff0d1163ea65abd709b6037098f6a2199a238 Mon Sep 17 00:00:00 2001
From: Boris Kolpackov <boris@codesynthesis.com>
Date: Fri, 17 Jul 2015 14:16:53 +0200
Subject: Handle empty query::in_range() case

---
 odb/mssql/query-dynamic.cxx | 24 +++++++++++++++---------
 odb/mssql/query.txx         | 25 +++++++++++++++----------
 2 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/odb/mssql/query-dynamic.cxx b/odb/mssql/query-dynamic.cxx
index f65e83a..6638dd6 100644
--- a/odb/mssql/query-dynamic.cxx
+++ b/odb/mssql/query-dynamic.cxx
@@ -94,20 +94,26 @@ namespace odb
         }
       case part::op_in:
         {
-          size_t b (p - x.data);
+          if (x.data != 0)
+          {
+            size_t b (p - x.data);
 
-          translate (q, s, b - 1); // column
-          q += "IN (";
+            translate (q, s, b - 1); // column
+            q += "IN (";
 
-          for (size_t i (b); i != p; ++i)
-          {
-            if (i != b)
-              q += ",";
+            for (size_t i (b); i != p; ++i)
+            {
+              if (i != b)
+                q += ",";
 
-            translate (q, s, i);
+              translate (q, s, i);
+            }
+
+            q += ")";
           }
+          else
+            q.append (false);
 
-          q += ")";
           break;
         }
       case part::op_like:
diff --git a/odb/mssql/query.txx b/odb/mssql/query.txx
index ce159a4..788e893 100644
--- a/odb/mssql/query.txx
+++ b/odb/mssql/query.txx
@@ -101,19 +101,24 @@ namespace odb
     query_base query_column<T, ID>::
     in_range (I begin, I end) const
     {
-      query_base q (table_, column_);
-      q += "IN (";
-
-      for (I i (begin); i != end; ++i)
+      if (begin != end)
       {
-        if (i != begin)
-          q += ",";
+        query_base q (table_, column_);
+        q += "IN (";
 
-        q.append<T, ID> (val_bind<T> (*i, prec_, scale_), conversion_);
-      }
+        for (I i (begin); i != end; ++i)
+        {
+          if (i != begin)
+            q += ",";
 
-      q += ")";
-      return q;
+          q.append<T, ID> (val_bind<T> (*i, prec_, scale_), conversion_);
+        }
+
+        q += ")";
+        return q;
+      }
+      else
+        return query_base (false);
     }
 
     // like
-- 
cgit v1.1