]> git.joonet.de Git - adminer.git/commitdiff
Allow changing PostgreSQL indexes with same name
authorJakub Vrana <jakub@vrana.cz>
Tue, 25 Jun 2013 00:37:59 +0000 (17:37 -0700)
committerJakub Vrana <jakub@vrana.cz>
Tue, 25 Jun 2013 00:54:04 +0000 (17:54 -0700)
adminer/drivers/pgsql.inc.php

index 2f4af7ad3d0136126f49cb33d69f5bf62249e767..85c1c436a2aab853bcc7406b7768edf10255d254 100644 (file)
@@ -402,21 +402,31 @@ ORDER BY conkey, conname") as $row) {
        function alter_indexes($table, $alter) {
                $create = array();
                $drop = array();
+               $queries = array();
                foreach ($alter as $val) {
                        if ($val[0] != "INDEX") {
                                $create[] = ($val[2] == "DROP"
                                        ? "\nDROP CONSTRAINT " . idf_escape($val[1])
-                                       : "\nADD $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . $val[2]
+                                       : "\nADD" . ($val[1] != "" ? " CONSTRAINT " . idf_escape($val[1]) : "") . " $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . $val[2]
                                );
                        } elseif ($val[2] == "DROP") {
                                $drop[] = idf_escape($val[1]);
-                       } elseif (!queries("CREATE INDEX " . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table) . " $val[2]")) {
+                       } else {
+                               $queries[] = "CREATE INDEX " . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table) . " $val[2]";
+                       }
+               }
+               if ($create) {
+                       array_unshift($queries, "ALTER TABLE " . table($table) . implode(",", $create));
+               }
+               if ($drop) {
+                       array_unshift($queries, "DROP INDEX " . implode(", ", $drop));
+               }
+               foreach ($queries as $query) {
+                       if (!queries($query)) {
                                return false;
                        }
                }
-               return ((!$create || queries("ALTER TABLE " . table($table) . implode(",", $create)))
-                       && (!$drop || queries("DROP INDEX " . implode(", ", $drop)))
-               );
+               return true;
        }
        
        function truncate_tables($tables) {