From 90f7aa9e39e744e708a597ff6d1ac83f7c4fcef5 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Tue, 29 Apr 2014 05:34:43 -0400
Subject: [PATCH] Fix varius db_prefix issues (#1489839) - Move DDL script execution code to rcube_db class(es). - Improve prefix replacement code, so index names are also modified

---
 bin/updatedb.sh |   64 +------------------------------
 1 files changed, 3 insertions(+), 61 deletions(-)

diff --git a/bin/updatedb.sh b/bin/updatedb.sh
index 1f5e184..f504634 100755
--- a/bin/updatedb.sh
+++ b/bin/updatedb.sh
@@ -146,20 +146,9 @@
     global $DB;
 
     // read DDL file
-    if ($lines = file($file)) {
-        $sql = '';
-        foreach ($lines as $line) {
-            if (preg_match('/^--/', $line) || trim($line) == '')
-                continue;
-
-            $sql .= $line . "\n";
-            if (preg_match('/(;|^GO)$/', trim($line))) {
-                @$DB->query(fix_table_names($sql));
-                $sql = '';
-                if ($error = $DB->is_error()) {
-                    return $error;
-                }
-            }
+    if ($sql = file_get_contents($file)) {
+        if (!$DB->exec_script($sql)) {
+            return $DB->is_error();
         }
     }
 
@@ -183,53 +172,6 @@
     }
 
     return $DB->is_error();
-}
-
-function fix_table_names($sql)
-{
-    global $DB, $RC, $dir;
-    static $tables;
-    static $sequences;
-
-    $prefix = $RC->config->get('db_prefix');
-    $engine = $DB->db_provider;
-
-    if (empty($prefix)) {
-        return $sql;
-    }
-
-    if ($tables === null) {
-        $tables    = array();
-        $sequences = array();
-
-        // read complete schema (initial) file
-        $filename = "$dir/../$engine.initial.sql";
-        $schema    = @file_get_contents($filename);
-
-        // find table names
-        if (preg_match_all('/CREATE TABLE (\[dbo\]\.|IF NOT EXISTS )?[`"\[\]]*([^`"\[\] \r\n]+)/i', $schema, $matches)) {
-            foreach ($matches[2] as $table) {
-                $tables[$table] = $prefix . $table;
-            }
-        }
-        // find sequence names
-        if ($engine == 'postgres' && preg_match_all('/CREATE SEQUENCE (IF NOT EXISTS )?"?([^" \n\r]+)/i', $schema, $matches)) {
-            foreach ($matches[2] as $sequence) {
-                $sequences[$sequence] = $prefix . $sequence;
-            }
-        }
-    }
-
-    // replace table names
-    foreach ($tables as $table => $real_table) {
-        $sql = preg_replace("/([^a-zA-Z0-9_])$table([^a-zA-Z0-9_])/", "\\1$real_table\\2", $sql);
-    }
-    // replace sequence names
-    foreach ($sequences as $sequence => $real_sequence) {
-        $sql = preg_replace("/([^a-zA-Z0-9_])$sequence([^a-zA-Z0-9_])/", "\\1$real_sequence\\2", $sql);
-    }
-
-    return $sql;
 }
 
 ?>

--
Gitblit v1.9.1