handlers.dispatch: skip update on pk-only table
authorMarko Kreen <markokr@gmail.com>
Tue, 4 Oct 2011 14:37:50 +0000 (16:37 +0200)
committerMarko Kreen <markokr@gmail.com>
Tue, 4 Oct 2011 14:37:50 +0000 (16:37 +0200)
python/londiste/handlers/dispatch.py

index 71c9655c83223676b5d22288316d02f779515670..c584d3ff1d78c68c95f905d7c9aacc393fe6d275 100644 (file)
@@ -314,12 +314,6 @@ class BaseBulkTempLoader(BaseBulkCollectingLoader):
                 for f in self.keys)
         return ' and '.join(stmt)
 
-    def _set(self):
-        tmpl = "%(col)s = t.%(col)s"
-        stmt = (tmpl % {'col': quote_ident(f)}
-                for f in self.nonkeys())
-        return ", ".join(stmt)
-
     def _cols(self):
         return ','.join(quote_ident(f) for f in self.fields)
 
@@ -329,8 +323,18 @@ class BaseBulkTempLoader(BaseBulkCollectingLoader):
         return self.logexec(curs, sql)
 
     def update(self, curs):
+        qcols = [quote_ident(c) for c in self.nonkeys()]
+
+        # no point to update pk-only table
+        if not qcols:
+            return
+
+        tmpl = "%s = t.%s"
+        eqlist = [tmpl % (c,c) for c in qcols]
+        _set =  ", ".join(eqlist)
+
         sql = "update only %s set %s from %s as t where %s" % (
-                self.qtable, self._set(), self.qtemp, self._where())
+                self.qtable, _set, self.qtemp, self._where())
         return self.logexec(curs, sql)
 
     def delete(self, curs):