/** * execute all sql srips from the upgrade folder * * @param string $baseDir directory to the module folder updgrades are in. * @param string $upgrade_folder folder version name */ public function execute_sql_scripts($baseDir, $upgrade_folder, $appName, &$last_run_script) { $file_name = array(); $full_upgrade_folder = $baseDir . "db/" . $upgrade_folder; // get last executed sql file name. If not in the parameter (which loads from the db via the // system model), then it could be from an old version of Indicia pre 0.8 so has the last // run script saved as a file in the db scripts folder. Or we could just be starting a new folder. if (empty($last_run_script)) { $last_run_script = $this->get_last_executed_sql_file_name($full_upgrade_folder, $appName); } $original_last_run_script = $last_run_script; if (($handle = @opendir($full_upgrade_folder)) != FALSE) { while (($file = readdir($handle)) != false) { if (!preg_match("/^20.*\\.sql\$/", $file)) { continue; } $file_name[] = $file; } @closedir($handle); } else { throw new Exception("Cant open dir " . $full_upgrade_folder); } sort($file_name); try { foreach ($file_name as $name) { if (strcmp($name, $last_run_script) > 0 || empty($last_run_script)) { if (false === ($_db_file = file_get_contents($full_upgrade_folder . '/' . $name))) { throw new Exception("Can't open file " . $full_upgrade_folder . '/' . $name); } kohana::log('debug', "Upgrading file {$name}"); // @todo Look into why utf8 files do not run without conversion to ascii. if (!utf8::is_ascii($_db_file)) { $_db_file = utf8::strip_non_ascii($_db_file); } if (substr($_db_file, 0, 18) === '-- #postgres user#') { $this->scriptsForPgUser .= $_db_file . "\n\n"; } elseif (substr($_db_file, 0, 16) === '-- #slow script#' && $this->couldBeSlow) { $this->slowScripts .= $_db_file . "\n\n"; } else { $result = $this->db->query($_db_file); } $last_run_script = $name; } } } catch (Exception $e) { kohana::log('error', "Error in file: " . $full_upgrade_folder . '/' . $name); kohana::log('error', $e->getMessage()); throw $e; } $this->update_last_executed_sql_file($full_upgrade_folder, $appName, $original_last_run_script, $last_run_script); return true; }