function parseAndExecuteSqlFile($sqlScript, $forStepQuery = '', $resumeFromQuery = '') { global $sugar_config; $alterTableSchema = ''; $sqlErrors = array(); if (!isset($_SESSION['sqlSkippedQueries'])) { $_SESSION['sqlSkippedQueries'] = array(); } $db = DBManagerFactory::getInstance(); $disable_keys = $db->dbType == "mysql"; // have to use old way for now for upgrades if (strpos($resumeFromQuery, ",") != false) { $resumeFromQuery = explode(",", $resumeFromQuery); } if (file_exists($sqlScript)) { $fp = fopen($sqlScript, 'r'); $contents = stream_get_contents($fp); $anyScriptChanges = $contents; $resumeAfterFound = false; if (rewind($fp)) { $completeLine = ''; $count = 0; while ($line = fgets($fp)) { if (strpos($line, '--') === false) { $completeLine .= " " . trim($line); if (strpos($line, ';') !== false) { $query = ''; $query = str_replace(';', '', $completeLine); //if resume from query is not null then find out from where //it should start executing the query. if ($query != null && $resumeFromQuery != null) { if (!$resumeAfterFound) { if (strpos($query, ",") != false) { $queArray = explode(",", $query); for ($i = 0; $i < sizeof($resumeFromQuery); $i++) { if (strcasecmp(trim($resumeFromQuery[$i]), trim($queArray[$i])) == 0) { $resumeAfterFound = true; } else { $resumeAfterFound = false; break; } } //for } elseif (strcasecmp(trim($resumeFromQuery), trim($query)) == 0) { $resumeAfterFound = true; } } if ($resumeAfterFound) { $count++; } // if $count=1 means it is just found so skip the query. Run the next one if ($query != null && $resumeAfterFound && $count > 1) { $tableName = getAlterTable($query); if ($disable_keys) { handleExecuteSqlKeys($db, $tableName, true); } $db->query($query); if ($db->checkError()) { //put in the array to use later on $_SESSION['sqlSkippedQueries'][] = $query; } if ($disable_keys) { handleExecuteSqlKeys($db, $tableName, false); } $progQuery[$forStepQuery] = $query; post_install_progress($progQuery, $action = 'set'); } //if } elseif ($query != null) { $tableName = getAlterTable($query); if ($disable_keys) { handleExecuteSqlKeys($db, $tableName, true); } $db->query($query); if ($disable_keys) { handleExecuteSqlKeys($db, $tableName, false); } $progQuery[$forStepQuery] = $query; post_install_progress($progQuery, $action = 'set'); if ($db->checkError()) { //put in the array to use later on $_SESSION['sqlSkippedQueries'][] = $query; } } $completeLine = ''; } } } //while } } }
function parseAndExecuteSqlFile($sqlScript, $forStepQuery = '', $resumeFromQuery = '') { global $sugar_config; $alterTableSchema = ''; $sqlErrors = array(); if (!isset($_SESSION['sqlSkippedQueries'])) { $_SESSION['sqlSkippedQueries'] = array(); } $db =& DBManagerFactory::getInstance(); $is_mysql = false; if ($sugar_config['dbconfig']['db_type'] == 'mysql') { $is_mysql = true; } if ($sugar_config['dbconfig']['db_type'] == 'oci8') { $db->query("CREATE OR REPLACE FUNCTION blob_to_clob (blob_in IN BLOB)\n\t\t\t\t\tRETURN CLOB\n\t\t\t\t\tAS\n\t\t\t\t\t v_clob CLOB;\n\t\t\t\t\t v_varchar VARCHAR2(32767);\n\t\t\t\t\t v_start PLS_INTEGER := 1;\n\t\t\t\t\t v_buffer PLS_INTEGER := 32767;\n\t\t\t\t\tBEGIN\n\t\t\t\t\t DBMS_LOB.CREATETEMPORARY(v_clob, TRUE);\n\t\t\t\t\t \n\t\t\t\t\t FOR i IN 1..CEIL(DBMS_LOB.GETLENGTH(blob_in) / v_buffer)\n\t\t\t\t\t LOOP\n\t\t\t\t\t \n\t\t\t\t\t v_varchar := UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(blob_in, v_buffer, v_start));\n\t\t\t\t\t \n\t\t\t\t\t DBMS_LOB.WRITEAPPEND(v_clob, LENGTH(v_varchar), v_varchar);\n\t\t\t\t\t \n\t\t\t\t\t v_start := v_start + v_buffer;\n\t\t\t\t\t END LOOP;\n\t\t\t\t\t \n\t\t\t\t\t RETURN v_clob;\n\t\t\t\t\t \n\t\t\t\t\tEND blob_to_clob;"); } if (strpos($resumeFromQuery, ",") != false) { $resumeFromQuery = explode(",", $resumeFromQuery); if (is_array($resumeFromQuery)) { //print_r('RES ARRAY '.$resumeFromQuery[0].'</br>'); } } if (file_exists($sqlScript)) { $fp = fopen($sqlScript, 'r'); $contents = fread($fp, filesize($sqlScript)); $anyScriptChanges = $contents; $resumeAfterFound = false; if (rewind($fp)) { $completeLine = ''; $count = 0; while ($line = fgets($fp)) { if (strpos($line, '--') === false) { $completeLine .= " " . trim($line); if (strpos($line, ';') !== false) { $query = ''; $query = str_replace(';', '', $completeLine); //if resume from query is not null then find out from where //it should start executing the query. if ($query != null && $resumeFromQuery != null) { if (!$resumeAfterFound) { if (strpos($query, ",") != false) { $queArray = array(); $queArray = explode(",", $query); for ($i = 0; $i < sizeof($resumeFromQuery); $i++) { if (strcmp(strtolower(trim($resumeFromQuery[$i])), strtolower(trim($queArray[$i]))) == 0) { //echo 'mat found '.$queArray[$i].'</br>'; $resumeAfterFound = true; } else { $resumeAfterFound = false; break; } } //for } elseif (strcmp(strtolower(trim($resumeFromQuery)), strtolower(trim($query))) == 0) { $resumeAfterFound = true; } } if ($resumeAfterFound) { $count++; } // if $count=1 means it is just found so skip the query. Run the next one if ($query != null && $resumeAfterFound && $count > 1) { $tableName = ''; if ($is_mysql) { $tableName = getAlterTable($query); if (!empty($tableName)) { $db->query('ALTER TABLE ' . $tableName . ' DISABLE KEYS'); } } $db->query($query); if (!empty($tableName)) { $db->query('ALTER TABLE ' . $tableName . ' ENABLE KEYS'); } $progQuery[$forStepQuery] = $query; post_install_progress($progQuery, $action = 'set'); if ($db->checkError()) { //put in the array to use later on $_SESSION['sqlSkippedQueries'][] = $query; } } //if } elseif ($query != null) { $tableName = ''; if ($is_mysql) { $tableName = getAlterTable($query); if (!empty($tableName)) { $db->query('ALTER TABLE ' . $tableName . ' DISABLE KEYS'); } } $db->query($query); if (!empty($tableName)) { $db->query('ALTER TABLE ' . $tableName . ' ENABLE KEYS'); } $progQuery[$forStepQuery] = $query; post_install_progress($progQuery, $action = 'set'); if ($db->checkError()) { //put in the array to use later on $_SESSION['sqlSkippedQueries'][] = $query; } } $completeLine = ''; } } } //while } } }