diff options
Diffstat (limited to 'libraries/import/sql.php')
-rw-r--r-- | libraries/import/sql.php | 307 |
1 files changed, 0 insertions, 307 deletions
diff --git a/libraries/import/sql.php b/libraries/import/sql.php deleted file mode 100644 index d736bbe940..0000000000 --- a/libraries/import/sql.php +++ /dev/null @@ -1,307 +0,0 @@ -<?php -/* vim: set expandtab sw=4 ts=4 sts=4: */ -/** - * SQL import plugin for phpMyAdmin - * - * @version $Id$ - * @package phpMyAdmin-Import - */ -if (! defined('PHPMYADMIN')) { - exit; -} - -/** - * - */ -if (isset($plugin_list)) { - $plugin_list['sql'] = array( - 'text' => 'strSQL', - 'extension' => 'sql', - 'options_text' => 'strOptions', - ); - $compats = PMA_DBI_getCompatibilities(); - if (count($compats) > 0) { - $values = array(); - foreach($compats as $val) { - $values[$val] = $val; - } - $plugin_list['sql']['options'] = array( - array( - 'type' => 'select', - 'name' => 'compatibility', - 'text' => 'strSQLCompatibility', - 'values' => $values, - 'doc' => array( - 'manual_MySQL_Database_Administration', - 'Server_SQL_mode', - ), - ), - array( - 'type' => 'bool', - 'name' => 'no_auto_value_on_zero', - 'text' => 'strDoNotAutoIncrementZeroValues', - 'doc' => array( - 'manual_MySQL_Database_Administration', - 'Server_SQL_mode', - 'sqlmode_no_auto_value_on_zero' - ), - - ), - ); - } - - /* We do not define function when plugin is just queried for information above */ - return; -} - -$buffer = ''; -// Defaults for parser -$sql = ''; -$start_pos = 0; -$i = 0; -$len= 0; -$big_value = 2147483647; -$delimiter_keyword = 'DELIMITER '; // include the space because it's mandatory -$length_of_delimiter_keyword = strlen($delimiter_keyword); - -if (isset($_POST['sql_delimiter'])) { - $sql_delimiter = $_POST['sql_delimiter']; -} else { - $sql_delimiter = ';'; -} - -// Handle compatibility options -$sql_modes = array(); -if (isset($_REQUEST['sql_compatibility']) && 'NONE' != $_REQUEST['sql_compatibility']) { - $sql_modes[] = $_REQUEST['sql_compatibility']; -} -if (isset($_REQUEST['sql_no_auto_value_on_zero'])) { - $sql_modes[] = 'NO_AUTO_VALUE_ON_ZERO'; -} -if (count($sql_modes) > 0) { - PMA_DBI_try_query('SET SQL_MODE="' . implode(',', $sql_modes) . '"'); -} -unset($sql_modes); - -/** - * will be set in PMA_importGetNextChunk() - * - * @global boolean $GLOBALS['finished'] - */ -$GLOBALS['finished'] = false; - -while (!($GLOBALS['finished'] && $i >= $len) && !$error && !$timeout_passed) { - $data = PMA_importGetNextChunk(); - if ($data === FALSE) { - // subtract data we didn't handle yet and stop processing - $offset -= strlen($buffer); - break; - } elseif ($data === TRUE) { - // Handle rest of buffer - } else { - // Append new data to buffer - $buffer .= $data; - // free memory - unset($data); - // Do not parse string when we're not at the end and don't have ; inside - if ((strpos($buffer, $sql_delimiter, $i) === FALSE) && !$GLOBALS['finished']) { - continue; - } - } - // Current length of our buffer - $len = strlen($buffer); - - // Grab some SQL queries out of it - while ($i < $len) { - $found_delimiter = false; - // Find first interesting character - $old_i = $i; - // this is about 7 times faster that looking for each sequence i - // one by one with strpos() - if (preg_match('/(\'|"|#|-- |\/\*|`|(?i)(?<![A-Z0-9_])' . $delimiter_keyword . ')/', $buffer, $matches, PREG_OFFSET_CAPTURE, $i)) { - // in $matches, index 0 contains the match for the complete - // expression but we don't use it - $first_position = $matches[1][1]; - } else { - $first_position = $big_value; - } - /** - * @todo we should not look for a delimiter that might be - * inside quotes (or even double-quotes) - */ - // the cost of doing this one with preg_match() would be too high - $first_sql_delimiter = strpos($buffer, $sql_delimiter, $i); - if ($first_sql_delimiter === FALSE) { - $first_sql_delimiter = $big_value; - } else { - $found_delimiter = true; - } - - // set $i to the position of the first quote, comment.start or delimiter found - $i = min($first_position, $first_sql_delimiter); - - if ($i == $big_value) { - // none of the above was found in the string - - $i = $old_i; - if (!$GLOBALS['finished']) { - break; - } - // at the end there might be some whitespace... - if (trim($buffer) == '') { - $buffer = ''; - $len = 0; - break; - } - // We hit end of query, go there! - $i = strlen($buffer) - 1; - } - - // Grab current character - $ch = $buffer[$i]; - - // Quotes - if (strpos('\'"`', $ch) !== FALSE) { - $quote = $ch; - $endq = FALSE; - while (!$endq) { - // Find next quote - $pos = strpos($buffer, $quote, $i + 1); - // No quote? Too short string - if ($pos === FALSE) { - // We hit end of string => unclosed quote, but we handle it as end of query - if ($GLOBALS['finished']) { - $endq = TRUE; - $i = $len - 1; - } - $found_delimiter = false; - break; - } - // Was not the quote escaped? - $j = $pos - 1; - while ($buffer[$j] == '\\') $j--; - // Even count means it was not escaped - $endq = (((($pos - 1) - $j) % 2) == 0); - // Skip the string - $i = $pos; - - if ($first_sql_delimiter < $pos) { - $found_delimiter = false; - } - } - if (!$endq) { - break; - } - $i++; - // Aren't we at the end? - if ($GLOBALS['finished'] && $i == $len) { - $i--; - } else { - continue; - } - } - - // Not enough data to decide - if ((($i == ($len - 1) && ($ch == '-' || $ch == '/')) - || ($i == ($len - 2) && (($ch == '-' && $buffer[$i + 1] == '-') - || ($ch == '/' && $buffer[$i + 1] == '*')))) && !$GLOBALS['finished']) { - break; - } - - // Comments - if ($ch == '#' - || ($i < ($len - 1) && $ch == '-' && $buffer[$i + 1] == '-' - && (($i < ($len - 2) && $buffer[$i + 2] <= ' ') - || ($i == ($len - 1) && $GLOBALS['finished']))) - || ($i < ($len - 1) && $ch == '/' && $buffer[$i + 1] == '*') - ) { - // Copy current string to SQL - if ($start_pos != $i) { - $sql .= substr($buffer, $start_pos, $i - $start_pos); - } - // Skip the rest - $start_of_comment = $i; - // do not use PHP_EOL here instead of "\n", because the export - // file might have been produced on a different system - $i = strpos($buffer, $ch == '/' ? '*/' : "\n", $i); - // didn't we hit end of string? - if ($i === FALSE) { - if ($GLOBALS['finished']) { - $i = $len - 1; - } else { - break; - } - } - // Skip * - if ($ch == '/') { - $i++; - } - // Skip last char - $i++; - // We need to send the comment part in case we are defining - // a procedure or function and comments in it are valuable - $sql .= substr($buffer, $start_of_comment, $i - $start_of_comment); - // Next query part will start here - $start_pos = $i; - // Aren't we at the end? - if ($i == $len) { - $i--; - } else { - continue; - } - } - // Change delimiter, if redefined, and skip it (don't send to server!) - if (strtoupper(substr($buffer, $i, $length_of_delimiter_keyword)) == $delimiter_keyword - && ($i + $length_of_delimiter_keyword < $len)) { - // look for EOL on the character immediately after 'DELIMITER ' - // (see previous comment about PHP_EOL) - $new_line_pos = strpos($buffer, "\n", $i + $length_of_delimiter_keyword); - // it might happen that there is no EOL - if (FALSE === $new_line_pos) { - $new_line_pos = $len; - } - $sql_delimiter = substr($buffer, $i + $length_of_delimiter_keyword, $new_line_pos - $i - $length_of_delimiter_keyword); - $i = $new_line_pos + 1; - // Next query part will start here - $start_pos = $i; - continue; - } - - // End of SQL - if ($found_delimiter || ($GLOBALS['finished'] && ($i == $len - 1))) { - $tmp_sql = $sql; - if ($start_pos < $len) { - $length_to_grab = $i - $start_pos; - - if (! $found_delimiter) { - $length_to_grab++; - } - $tmp_sql .= substr($buffer, $start_pos, $length_to_grab); - unset($length_to_grab); - } - // Do not try to execute empty SQL - if (! preg_match('/^([\s]*;)*$/', trim($tmp_sql))) { - $sql = $tmp_sql; - PMA_importRunQuery($sql, substr($buffer, 0, $i + strlen($sql_delimiter))); - $buffer = substr($buffer, $i + strlen($sql_delimiter)); - // Reset parser: - $len = strlen($buffer); - $sql = ''; - $i = 0; - $start_pos = 0; - // Any chance we will get a complete query? - //if ((strpos($buffer, ';') === FALSE) && !$GLOBALS['finished']) { - if ((strpos($buffer, $sql_delimiter) === FALSE) && !$GLOBALS['finished']) { - break; - } - } else { - $i++; - $start_pos = $i; - } - } - } // End of parser loop -} // End of import loop -// Commit any possible data in buffers -PMA_importRunQuery('', substr($buffer, 0, $len)); -PMA_importRunQuery(); -?> |