View file install/includes/parse_sql.php

File size: 2.94Kb
<?php

/*
////////////////////////////////////////////////////////////////////////////////
// JohnCMS                Mobile Content Management System                    //
// Project site:          http://johncms.com                                  //
// Support site:          http://gazenwagen.com                               //
////////////////////////////////////////////////////////////////////////////////
// Lead Developer:        Oleg Kasyanov   (AlkatraZ)  [email protected] //
// Development Team:      Eugene Ryabinin (john77)    [email protected]   //
//                        Dmitry Liseenko (FlySelf)   [email protected]     //
////////////////////////////////////////////////////////////////////////////////
*  Парсер SQL разработан на основе функций CMS Joomla
*/

defined('INSTALL') or die('Error: restricted access');

class parse_sql {
    public $errors = array ();

    /*
    -----------------------------------------------------------------
    Читаем SQL файл и заносим в базу данных
    -----------------------------------------------------------------
    */
    function __construct($file = false) {
        if ($file && file_exists($file)) {
            $query = fread(fopen($file, 'r'), filesize($file));
            $pieces = $this->split_sql($query);
            for ($i = 0; $i < count($pieces); $i++) {
                $pieces[$i] = trim($pieces[$i]);
                if (!empty($pieces[$i]) && $pieces[$i] != "#") {
                    if (!mysql_query($pieces[$i])) {
                        $this->errors[] = mysql_error();
                    }
                }
            }
        } else {
            $this->errors[] = 'Fatal error!';
            return false;
        }
    }

    /*
    -----------------------------------------------------------------
    Парсинг SQL
    -----------------------------------------------------------------
    */
    private function split_sql($sql) {
        $sql = trim($sql);
        $sql = ereg_replace("\n#[^\n]*\n", "\n", $sql);
        $buffer = array ();
        $ret = array ();
        $in_string = false;

        for ($i = 0; $i < strlen($sql) - 1; $i++) {
            if ($sql[$i] == ";" && !$in_string) {
                $ret[] = substr($sql, 0, $i);
                $sql = substr($sql, $i + 1);
                $i = 0;
            }
            if ($in_string && ($sql[$i] == $in_string) && $buffer[1] != "\\") {
                $in_string = false;
            }  elseif (!$in_string && ($sql[$i] == '"' || $sql[$i] == "'") && (!isset($buffer[0]) || $buffer[0] != "\\")) {
                $in_string = $sql[$i];
            }
            if (isset($buffer[1])) {
                $buffer[0] = $buffer[1];
            }
            $buffer[1] = $sql[$i];
        }

        if (!empty($sql)) {
            $ret[] = $sql;
        }
        return ($ret);
    }
}
?>