]> git.decadent.org.uk Git - dak.git/commitdiff
Check for the existance of the function before trying to drop it.
authorAllan Lyons <Allan_Lyons@wycliffe.ca>
Fri, 1 May 2009 18:28:47 +0000 (12:28 -0600)
committerAllan Lyons <Allan_Lyons@wycliffe.ca>
Fri, 1 May 2009 18:28:47 +0000 (12:28 -0600)
At least on my machine, ignoring the error if the function doesn't exist
doesn't work since psycopg2 bombs.  So, we attempt to at least check if
there are any functions with a similar name before trying to drop it.
This way it should work better on an empty database where the function
has never existed.

Signed-off-by: Allan Lyons <Allan_Lyons@wycliffe.ca>
dak/dakdb/update3.py

index 406cc89b3212a59ead022c4037f29663f2f46932..5a5562fbedfe2659c5c2990f7ba125b3a25ac00c 100755 (executable)
@@ -36,12 +36,15 @@ def do_update(self):
 
     try:
         c = self.db.cursor()
-        try:
-            # This might not exist on a fresh install, so don't fail
-            # needlessly
+        # The reason we try and check to see if it exists is that
+        # psycopg2 might leave the cursor invalid if the drop fails
+        c.execute("SELECT proname from pg_catalog.pg_proc WHERE proname = 'versioncmp'")
+        rows = c.fetchall()
+        if rows:
             c.execute("DROP FUNCTION versioncmp(text, text);")
-        except:
-            pass
+        else:
+            print "function already does not exist"
+
         c.execute("UPDATE config SET value = '3' WHERE name = 'db_revision'")
 
         self.db.commit()