Fix sqlalchemy warning: IN-predicate invoked with an empty sequence.
authorSofia Papagiannaki <papagian@gmail.com>
Wed, 19 Sep 2012 12:14:46 +0000 (15:14 +0300)
committerSofia Papagiannaki <papagian@gmail.com>
Wed, 19 Sep 2012 12:14:46 +0000 (15:14 +0300)
snf-pithos-backend/pithos/backends/lib/sqlalchemy/node.py
snf-pithos-backend/pithos/backends/lib/sqlalchemy/public.py
snf-pithos-backend/pithos/backends/lib/sqlalchemy/xfeatures.py

index 2efcd17..0a9281e 100644 (file)
@@ -245,6 +245,8 @@ class Node(DBWorker):
            Return () if the path is not found.
         """
 
+        if not paths:
+            return ()
         # Use LIKE for comparison to avoid MySQL problems with trailing spaces.
         s = select([self.nodes.c.node], self.nodes.c.path.in_(paths))
         r = self.conn.execute(s)
@@ -353,8 +355,9 @@ class Node(DBWorker):
         rp = self.conn.execute(s)
         nodes = [r[0] for r in rp.fetchall()]
         rp.close()
-        s = self.nodes.delete().where(self.nodes.c.node.in_(nodes))
-        self.conn.execute(s).close()
+        if nodes:
+            s = self.nodes.delete().where(self.nodes.c.node.in_(nodes))
+            self.conn.execute(s).close()
 
         return hashes, size, serials
 
@@ -405,8 +408,9 @@ class Node(DBWorker):
         r = self.conn.execute(s)
         nodes = r.fetchall()
         r.close()
-        s = self.nodes.delete().where(self.nodes.c.node.in_(nodes))
-        self.conn.execute(s).close()
+        if nodes:
+            s = self.nodes.delete().where(self.nodes.c.node.in_(nodes))
+            self.conn.execute(s).close()
 
         return hashes, size, serials
 
index c633d85..663c479 100644 (file)
@@ -87,6 +87,8 @@ class Public(DBWorker):
         r.close()
 
     def public_unset_bulk(self, paths):
+        if not paths:
+            return
         s = self.public.update()
         s = s.where(self.public.c.path.in_(paths))
         s = s.values(active=False)
index d7bfaea..81d0d24 100644 (file)
@@ -128,7 +128,9 @@ class XFeatures(DBWorker):
 
     def xfeature_destroy_bulk(self, paths):
         """Destroy features and all their key, value pairs."""
-
+        
+        if not paths:
+            return
         s = self.xfeatures.delete().where(self.xfeatures.c.path.in_(paths))
         r = self.conn.execute(s)
         r.close()