コード例 #1
0
ファイル: uw_utils.php プロジェクト: omusico/sugar_work
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
        }
    }
}
コード例 #2
0
ファイル: uw_utils.php プロジェクト: Terradex/sugar
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
        }
    }
}