Set namespace on DbQbe. Set namespace to 'DbSearch'. Split Advisor.class.php file. Change Advisor namespace. Rename DbQbe class and file. Set namespace on DisplayResults. Set namespace on Error. Use namespace for ErrorHandler. Add class autoloader. Change ErrorHandler filename. Remove some require. Update Config namespace path. Update PMA_Util to PMA\libraries\Util. Rename Font and File classes files. Use namespace for Footer. Set namespace in all libraries classes. Namespace OutputBuffering. Export SubPartition. Rename Partition file. Namespace PDF. Namespace RecentFavoriteTable. Replace PMA_Response by Response and PMA_Message by Message. Update uses and calls. Fix unit tests. Fix SqlParser autoload. Signed-off-by: Hugues Peccatte <hugues.peccatte@gmail.com>
201 lines
6.2 KiB
PHP
201 lines
6.2 KiB
PHP
<?php
|
|
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
|
/**
|
|
* SQL import plugin for phpMyAdmin
|
|
*
|
|
* @package PhpMyAdmin-Import
|
|
* @subpackage SQL
|
|
*/
|
|
if (! defined('PHPMYADMIN')) {
|
|
exit;
|
|
}
|
|
|
|
/* Get the import interface */
|
|
require_once 'libraries/plugins/ImportPlugin.class.php';
|
|
|
|
/**
|
|
* Handles the import for the SQL format
|
|
*
|
|
* @package PhpMyAdmin-Import
|
|
* @subpackage SQL
|
|
*/
|
|
class ImportSql extends ImportPlugin
|
|
{
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
public function __construct()
|
|
{
|
|
$this->setProperties();
|
|
}
|
|
|
|
/**
|
|
* Sets the import plugin properties.
|
|
* Called in the constructor.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected function setProperties()
|
|
{
|
|
$props = 'libraries/properties/';
|
|
include_once "$props/plugins/ImportPluginProperties.class.php";
|
|
include_once "$props/options/groups/OptionsPropertyRootGroup.class.php";
|
|
include_once "$props/options/groups/OptionsPropertyMainGroup.class.php";
|
|
include_once "$props/options/items/SelectPropertyItem.class.php";
|
|
include_once "$props/options/items/BoolPropertyItem.class.php";
|
|
|
|
$importPluginProperties = new ImportPluginProperties();
|
|
$importPluginProperties->setText('SQL');
|
|
$importPluginProperties->setExtension('sql');
|
|
$importPluginProperties->setOptionsText(__('Options'));
|
|
|
|
$compats = $GLOBALS['dbi']->getCompatibilities();
|
|
if (count($compats) > 0) {
|
|
$values = array();
|
|
foreach ($compats as $val) {
|
|
$values[$val] = $val;
|
|
}
|
|
|
|
// create the root group that will be the options field for
|
|
// $importPluginProperties
|
|
// this will be shown as "Format specific options"
|
|
$importSpecificOptions = new OptionsPropertyRootGroup();
|
|
$importSpecificOptions->setName("Format Specific Options");
|
|
|
|
// general options main group
|
|
$generalOptions = new OptionsPropertyMainGroup();
|
|
$generalOptions->setName("general_opts");
|
|
// create primary items and add them to the group
|
|
$leaf = new SelectPropertyItem();
|
|
$leaf->setName("compatibility");
|
|
$leaf->setText(__('SQL compatibility mode:'));
|
|
$leaf->setValues($values);
|
|
$leaf->setDoc(
|
|
array(
|
|
'manual_MySQL_Database_Administration',
|
|
'Server_SQL_mode',
|
|
)
|
|
);
|
|
$generalOptions->addProperty($leaf);
|
|
$leaf = new BoolPropertyItem();
|
|
$leaf->setName("no_auto_value_on_zero");
|
|
$leaf->setText(
|
|
__('Do not use <code>AUTO_INCREMENT</code> for zero values')
|
|
);
|
|
$leaf->setDoc(
|
|
array(
|
|
'manual_MySQL_Database_Administration',
|
|
'Server_SQL_mode',
|
|
'sqlmode_no_auto_value_on_zero'
|
|
)
|
|
);
|
|
$generalOptions->addProperty($leaf);
|
|
|
|
// add the main group to the root group
|
|
$importSpecificOptions->addProperty($generalOptions);
|
|
// set the options for the import plugin property item
|
|
$importPluginProperties->setOptions($importSpecificOptions);
|
|
}
|
|
|
|
$this->properties = $importPluginProperties;
|
|
}
|
|
|
|
/**
|
|
* Handles the whole import logic
|
|
*
|
|
* @param array &$sql_data 2-element array with sql data
|
|
*
|
|
* @return void
|
|
*/
|
|
public function doImport(&$sql_data = array())
|
|
{
|
|
global $error, $timeout_passed;
|
|
|
|
// Handle compatibility options.
|
|
$this->_setSQLMode($GLOBALS['dbi'], $_REQUEST);
|
|
|
|
$bq = new SqlParser\Utils\BufferedQuery();
|
|
if (isset($_POST['sql_delimiter'])) {
|
|
$bq->setDelimiter($_POST['sql_delimiter']);
|
|
}
|
|
|
|
/**
|
|
* Will be set in PMA_importGetNextChunk().
|
|
* @global bool $GLOBALS['finished']
|
|
*/
|
|
$GLOBALS['finished'] = false;
|
|
|
|
while ((!$error) && (!$timeout_passed)) {
|
|
|
|
// Getting the first statement, the remaining data and the last
|
|
// delimiter.
|
|
$statement = $bq->extract();
|
|
|
|
// If there is no full statement, we are looking for more data.
|
|
if (empty($statement)) {
|
|
|
|
// Importing new data.
|
|
$newData = PMA_importGetNextChunk();
|
|
|
|
// Subtract data we didn't handle yet and stop processing.
|
|
if ($newData === false) {
|
|
$GLOBALS['offset'] -= mb_strlen($bq->query);
|
|
break;
|
|
}
|
|
|
|
// Checking if the input buffer has finished.
|
|
if ($newData === true) {
|
|
$GLOBALS['finished'] = true;
|
|
break;
|
|
}
|
|
|
|
// Convert CR (but not CRLF) to LF otherwise all queries may
|
|
// not get executed on some platforms.
|
|
$bq->query .= preg_replace("/\r($|[^\n])/", "\n$1", $newData);
|
|
|
|
continue;
|
|
}
|
|
|
|
// Executing the query.
|
|
PMA_importRunQuery($statement, $statement, false, $sql_data);
|
|
}
|
|
|
|
// Extracting remaining statements.
|
|
while ((!$error) && (!$timeout_passed)
|
|
&& ($statement = $bq->extract(true))
|
|
) {
|
|
PMA_importRunQuery($statement, $statement, false, $sql_data);
|
|
}
|
|
|
|
// Finishing.
|
|
PMA_importRunQuery('', '', false, $sql_data);
|
|
}
|
|
|
|
/**
|
|
* Handle compatibility options
|
|
*
|
|
* @param PMA\libraries\DatabaseInterface $dbi Database interface
|
|
* @param array $request Request array
|
|
*
|
|
* @return void
|
|
*/
|
|
private function _setSQLMode($dbi, $request)
|
|
{
|
|
$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) {
|
|
$dbi->tryQuery(
|
|
'SET SQL_MODE="' . implode(',', $sql_modes) . '"'
|
|
);
|
|
}
|
|
}
|
|
}
|