Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
802bce5b23
@ -59,16 +59,16 @@ if (is_array($foreignData['disp_row'])) {
|
||||
|
||||
if ($foreignData['the_total'] > $GLOBALS['cfg']['MaxRows']) {
|
||||
$gotopage = PMA_pageselector(
|
||||
$session_max_rows,
|
||||
$pageNow,
|
||||
$nbTotalPage,
|
||||
200,
|
||||
5,
|
||||
5,
|
||||
20,
|
||||
10,
|
||||
__('Page number:')
|
||||
);
|
||||
$session_max_rows,
|
||||
$pageNow,
|
||||
$nbTotalPage,
|
||||
200,
|
||||
5,
|
||||
5,
|
||||
20,
|
||||
10,
|
||||
__('Page number:')
|
||||
);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@ -220,9 +220,10 @@ if (is_array($foreignData['disp_row'])) {
|
||||
} else {
|
||||
$val_ordered_current_val_title =
|
||||
htmlspecialchars($val_ordered_current_val);
|
||||
$val_ordered_current_val =
|
||||
htmlspecialchars(PMA_substr($val_ordered_current_val, 0,
|
||||
$cfg['LimitChars']) . '...');
|
||||
$val_ordered_current_val = htmlspecialchars(
|
||||
PMA_substr($val_ordered_current_val, 0, $cfg['LimitChars'])
|
||||
. '...'
|
||||
);
|
||||
}
|
||||
if (PMA_strlen($key_ordered_current_val) <= $cfg['LimitChars']) {
|
||||
$key_ordered_current_val = htmlspecialchars($key_ordered_current_val);
|
||||
|
||||
@ -106,9 +106,12 @@ class PMA_Theme_Manager
|
||||
|
||||
if (! $this->checkTheme($GLOBALS['cfg']['ThemeDefault'])) {
|
||||
trigger_error(
|
||||
sprintf(__('Default theme %s not found!'),
|
||||
htmlspecialchars($GLOBALS['cfg']['ThemeDefault'])),
|
||||
E_USER_ERROR);
|
||||
sprintf(
|
||||
__('Default theme %s not found!'),
|
||||
htmlspecialchars($GLOBALS['cfg']['ThemeDefault'])
|
||||
),
|
||||
E_USER_ERROR
|
||||
);
|
||||
$GLOBALS['cfg']['ThemeDefault'] = false;
|
||||
}
|
||||
|
||||
@ -144,7 +147,10 @@ class PMA_Theme_Manager
|
||||
{
|
||||
if (! $this->checkTheme($theme)) {
|
||||
trigger_error(
|
||||
sprintf(__('Theme %s not found!'), htmlspecialchars($theme)),
|
||||
sprintf(
|
||||
__('Theme %s not found!'),
|
||||
htmlspecialchars($theme)
|
||||
),
|
||||
E_USER_ERROR);
|
||||
return false;
|
||||
}
|
||||
@ -203,7 +209,7 @@ class PMA_Theme_Manager
|
||||
* @param string $folder
|
||||
* @return boolean
|
||||
*/
|
||||
/*private*/ function _checkThemeFolder($folder)
|
||||
private function _checkThemeFolder($folder)
|
||||
{
|
||||
if (! is_dir($folder)) {
|
||||
trigger_error(
|
||||
|
||||
@ -50,21 +50,21 @@ function PMA_pow($base, $exp, $use_function = false)
|
||||
return false;
|
||||
}
|
||||
switch ($use_function) {
|
||||
case 'bcpow' :
|
||||
// bcscale() needed for testing PMA_pow() with base values < 1
|
||||
bcscale(10);
|
||||
$pow = bcpow($base, $exp);
|
||||
break;
|
||||
case 'gmp_pow' :
|
||||
$pow = gmp_strval(gmp_pow($base, $exp));
|
||||
break;
|
||||
case 'pow' :
|
||||
$base = (float) $base;
|
||||
$exp = (int) $exp;
|
||||
$pow = pow($base, $exp);
|
||||
break;
|
||||
default:
|
||||
$pow = $use_function($base, $exp);
|
||||
case 'bcpow' :
|
||||
// bcscale() needed for testing PMA_pow() with base values < 1
|
||||
bcscale(10);
|
||||
$pow = bcpow($base, $exp);
|
||||
break;
|
||||
case 'gmp_pow' :
|
||||
$pow = gmp_strval(gmp_pow($base, $exp));
|
||||
break;
|
||||
case 'pow' :
|
||||
$base = (float) $base;
|
||||
$exp = (int) $exp;
|
||||
$pow = pow($base, $exp);
|
||||
break;
|
||||
default:
|
||||
$pow = $use_function($base, $exp);
|
||||
}
|
||||
|
||||
return $pow;
|
||||
@ -301,23 +301,23 @@ function PMA_formatSql($parsed_sql, $unparsed_sql = '')
|
||||
$formatted_sql = '';
|
||||
|
||||
switch ($cfg['SQP']['fmtType']) {
|
||||
case 'none':
|
||||
if ($unparsed_sql != '') {
|
||||
$formatted_sql = '<span class="inner_sql"><pre>' . "\n"
|
||||
. PMA_SQP_formatNone(array('raw' => $unparsed_sql)) . "\n"
|
||||
. '</pre></span>';
|
||||
} else {
|
||||
$formatted_sql = PMA_SQP_formatNone($parsed_sql);
|
||||
}
|
||||
break;
|
||||
case 'html':
|
||||
$formatted_sql = PMA_SQP_formatHtml($parsed_sql, 'color');
|
||||
break;
|
||||
case 'text':
|
||||
$formatted_sql = PMA_SQP_formatHtml($parsed_sql, 'text');
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case 'none':
|
||||
if ($unparsed_sql != '') {
|
||||
$formatted_sql = '<span class="inner_sql"><pre>' . "\n"
|
||||
. PMA_SQP_formatNone(array('raw' => $unparsed_sql)) . "\n"
|
||||
. '</pre></span>';
|
||||
} else {
|
||||
$formatted_sql = PMA_SQP_formatNone($parsed_sql);
|
||||
}
|
||||
break;
|
||||
case 'html':
|
||||
$formatted_sql = PMA_SQP_formatHtml($parsed_sql, 'color');
|
||||
break;
|
||||
case 'text':
|
||||
$formatted_sql = PMA_SQP_formatHtml($parsed_sql, 'text');
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
} // end switch
|
||||
|
||||
return $formatted_sql;
|
||||
@ -350,57 +350,57 @@ function PMA_showMySQLDocu($chapter, $link, $big_icon = false, $anchor = '', $ju
|
||||
$link = str_replace('_', '-', strtolower($link));
|
||||
|
||||
switch ($cfg['MySQLManualType']) {
|
||||
case 'chapters':
|
||||
if (empty($chapter)) {
|
||||
$chapter = 'index';
|
||||
case 'chapters':
|
||||
if (empty($chapter)) {
|
||||
$chapter = 'index';
|
||||
}
|
||||
if (empty($anchor)) {
|
||||
$anchor = $link;
|
||||
}
|
||||
$url = $cfg['MySQLManualBase'] . '/' . $chapter . '.html#' . $anchor;
|
||||
break;
|
||||
case 'big':
|
||||
if (empty($anchor)) {
|
||||
$anchor = $link;
|
||||
}
|
||||
$url = $cfg['MySQLManualBase'] . '#' . $anchor;
|
||||
break;
|
||||
case 'searchable':
|
||||
if (empty($link)) {
|
||||
$link = 'index';
|
||||
}
|
||||
$url = $cfg['MySQLManualBase'] . '/' . $link . '.html';
|
||||
if (!empty($anchor)) {
|
||||
$url .= '#' . $anchor;
|
||||
}
|
||||
break;
|
||||
case 'viewable':
|
||||
default:
|
||||
if (empty($link)) {
|
||||
$link = 'index';
|
||||
}
|
||||
$mysql = '5.0';
|
||||
$lang = 'en';
|
||||
if (defined('PMA_MYSQL_INT_VERSION')) {
|
||||
if (PMA_MYSQL_INT_VERSION >= 50500) {
|
||||
$mysql = '5.5';
|
||||
/* l10n: Language to use for MySQL 5.5 documentation, please use only languages which do exist in official documentation. */
|
||||
$lang = _pgettext('MySQL 5.5 documentation language', 'en');
|
||||
} else if (PMA_MYSQL_INT_VERSION >= 50100) {
|
||||
$mysql = '5.1';
|
||||
/* l10n: Language to use for MySQL 5.1 documentation, please use only languages which do exist in official documentation. */
|
||||
$lang = _pgettext('MySQL 5.1 documentation language', 'en');
|
||||
} else {
|
||||
$mysql = '5.0';
|
||||
/* l10n: Language to use for MySQL 5.0 documentation, please use only languages which do exist in official documentation. */
|
||||
$lang = _pgettext('MySQL 5.0 documentation language', 'en');
|
||||
}
|
||||
if (empty($anchor)) {
|
||||
$anchor = $link;
|
||||
}
|
||||
$url = $cfg['MySQLManualBase'] . '/' . $chapter . '.html#' . $anchor;
|
||||
break;
|
||||
case 'big':
|
||||
if (empty($anchor)) {
|
||||
$anchor = $link;
|
||||
}
|
||||
$url = $cfg['MySQLManualBase'] . '#' . $anchor;
|
||||
break;
|
||||
case 'searchable':
|
||||
if (empty($link)) {
|
||||
$link = 'index';
|
||||
}
|
||||
$url = $cfg['MySQLManualBase'] . '/' . $link . '.html';
|
||||
if (!empty($anchor)) {
|
||||
$url .= '#' . $anchor;
|
||||
}
|
||||
break;
|
||||
case 'viewable':
|
||||
default:
|
||||
if (empty($link)) {
|
||||
$link = 'index';
|
||||
}
|
||||
$mysql = '5.0';
|
||||
$lang = 'en';
|
||||
if (defined('PMA_MYSQL_INT_VERSION')) {
|
||||
if (PMA_MYSQL_INT_VERSION >= 50500) {
|
||||
$mysql = '5.5';
|
||||
/* l10n: Language to use for MySQL 5.5 documentation, please use only languages which do exist in official documentation. */
|
||||
$lang = _pgettext('MySQL 5.5 documentation language', 'en');
|
||||
} else if (PMA_MYSQL_INT_VERSION >= 50100) {
|
||||
$mysql = '5.1';
|
||||
/* l10n: Language to use for MySQL 5.1 documentation, please use only languages which do exist in official documentation. */
|
||||
$lang = _pgettext('MySQL 5.1 documentation language', 'en');
|
||||
} else {
|
||||
$mysql = '5.0';
|
||||
/* l10n: Language to use for MySQL 5.0 documentation, please use only languages which do exist in official documentation. */
|
||||
$lang = _pgettext('MySQL 5.0 documentation language', 'en');
|
||||
}
|
||||
}
|
||||
$url = $cfg['MySQLManualBase'] . '/' . $mysql . '/' . $lang . '/' . $link . '.html';
|
||||
if (!empty($anchor)) {
|
||||
$url .= '#' . $anchor;
|
||||
}
|
||||
break;
|
||||
}
|
||||
$url = $cfg['MySQLManualBase'] . '/' . $mysql . '/' . $lang . '/' . $link . '.html';
|
||||
if (!empty($anchor)) {
|
||||
$url .= '#' . $anchor;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
$open_link = '<a href="' . PMA_linkURL($url) . '" target="mysql_doc">';
|
||||
@ -615,14 +615,14 @@ function PMA_mysqlDie($error_message = '', $the_query = '',
|
||||
$_SESSION['Import_message']['message'] = $error_msg_output;
|
||||
|
||||
if ($exit) {
|
||||
/**
|
||||
* If in an Ajax request
|
||||
* - avoid displaying a Back link
|
||||
* - use PMA_ajaxResponse() to transmit the message and exit
|
||||
*/
|
||||
if ($GLOBALS['is_ajax_request'] == true) {
|
||||
PMA_ajaxResponse($error_msg_output, false);
|
||||
}
|
||||
/**
|
||||
* If in an Ajax request
|
||||
* - avoid displaying a Back link
|
||||
* - use PMA_ajaxResponse() to transmit the message and exit
|
||||
*/
|
||||
if ($GLOBALS['is_ajax_request'] == true) {
|
||||
PMA_ajaxResponse($error_msg_output, false);
|
||||
}
|
||||
if (! empty($back_url)) {
|
||||
if (strstr($back_url, '?')) {
|
||||
$back_url .= '&no_history=true';
|
||||
@ -635,13 +635,13 @@ function PMA_mysqlDie($error_message = '', $the_query = '',
|
||||
$error_msg_output .= '<fieldset class="tblFooters">';
|
||||
$error_msg_output .= '[ <a href="' . $back_url . '">' . __('Back') . '</a> ]';
|
||||
$error_msg_output .= '</fieldset>' . "\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
echo $error_msg_output;
|
||||
/**
|
||||
* display footer and exit
|
||||
*/
|
||||
require './libraries/footer.inc.php';
|
||||
echo $error_msg_output;
|
||||
/**
|
||||
* display footer and exit
|
||||
*/
|
||||
require './libraries/footer.inc.php';
|
||||
} else {
|
||||
echo $error_msg_output;
|
||||
}
|
||||
@ -855,8 +855,9 @@ function PMA_reloadNavigation($jsonly=false)
|
||||
unset($_SESSION['tmp_user_values']['table_limit_offset']);
|
||||
echo "\n";
|
||||
$reload_url = './navigation.php?' . PMA_generate_common_url($GLOBALS['db'], '', '&');
|
||||
if (!$jsonly)
|
||||
echo '<script type="text/javascript">' . PHP_EOL;
|
||||
if (!$jsonly) {
|
||||
echo '<script type="text/javascript">' . PHP_EOL;
|
||||
}
|
||||
?>
|
||||
//<![CDATA[
|
||||
if (typeof(window.parent) != 'undefined'
|
||||
@ -866,8 +867,9 @@ if (typeof(window.parent) != 'undefined'
|
||||
}
|
||||
//]]>
|
||||
<?php
|
||||
if (!$jsonly)
|
||||
echo '</script>' . PHP_EOL;
|
||||
if (!$jsonly) {
|
||||
echo '</script>' . PHP_EOL;
|
||||
}
|
||||
|
||||
unset($GLOBALS['reload']);
|
||||
}
|
||||
@ -1204,8 +1206,8 @@ function PMA_showMessage($message, $sql_query = null, $type = 'notice', $is_view
|
||||
// mode because 1) it currently does not work and 2) we would
|
||||
// have two similar mechanisms on the page for the same goal
|
||||
if ($is_select || $GLOBALS['is_ajax_request'] === false && ! $query_too_big) {
|
||||
// see in js/functions.js the jQuery code attached to id inline_edit
|
||||
// document.write conflicts with jQuery, hence used $().append()
|
||||
// see in js/functions.js the jQuery code attached to id inline_edit
|
||||
// document.write conflicts with jQuery, hence used $().append()
|
||||
echo "<script type=\"text/javascript\">\n" .
|
||||
"//<![CDATA[\n" .
|
||||
"$('.tools form').last().after('[<a href=\"#\" title=\"" .
|
||||
@ -1497,44 +1499,44 @@ function PMA_extractValueFromFormattedSize($formatted_size)
|
||||
function PMA_localisedDate($timestamp = -1, $format = '')
|
||||
{
|
||||
$month = array(
|
||||
/* l10n: Short month name */
|
||||
/* l10n: Short month name */
|
||||
__('Jan'),
|
||||
/* l10n: Short month name */
|
||||
/* l10n: Short month name */
|
||||
__('Feb'),
|
||||
/* l10n: Short month name */
|
||||
/* l10n: Short month name */
|
||||
__('Mar'),
|
||||
/* l10n: Short month name */
|
||||
/* l10n: Short month name */
|
||||
__('Apr'),
|
||||
/* l10n: Short month name */
|
||||
/* l10n: Short month name */
|
||||
_pgettext('Short month name', 'May'),
|
||||
/* l10n: Short month name */
|
||||
/* l10n: Short month name */
|
||||
__('Jun'),
|
||||
/* l10n: Short month name */
|
||||
/* l10n: Short month name */
|
||||
__('Jul'),
|
||||
/* l10n: Short month name */
|
||||
/* l10n: Short month name */
|
||||
__('Aug'),
|
||||
/* l10n: Short month name */
|
||||
/* l10n: Short month name */
|
||||
__('Sep'),
|
||||
/* l10n: Short month name */
|
||||
/* l10n: Short month name */
|
||||
__('Oct'),
|
||||
/* l10n: Short month name */
|
||||
/* l10n: Short month name */
|
||||
__('Nov'),
|
||||
/* l10n: Short month name */
|
||||
/* l10n: Short month name */
|
||||
__('Dec'));
|
||||
$day_of_week = array(
|
||||
/* l10n: Short week day name */
|
||||
/* l10n: Short week day name */
|
||||
_pgettext('Short week day name', 'Sun'),
|
||||
/* l10n: Short week day name */
|
||||
/* l10n: Short week day name */
|
||||
__('Mon'),
|
||||
/* l10n: Short week day name */
|
||||
/* l10n: Short week day name */
|
||||
__('Tue'),
|
||||
/* l10n: Short week day name */
|
||||
/* l10n: Short week day name */
|
||||
__('Wed'),
|
||||
/* l10n: Short week day name */
|
||||
/* l10n: Short week day name */
|
||||
__('Thu'),
|
||||
/* l10n: Short week day name */
|
||||
/* l10n: Short week day name */
|
||||
__('Fri'),
|
||||
/* l10n: Short week day name */
|
||||
/* l10n: Short week day name */
|
||||
__('Sat'));
|
||||
|
||||
if ($format == '') {
|
||||
@ -1808,6 +1810,12 @@ function PMA_linkOrButton($url, $message, $tag_params = array(),
|
||||
} // end of the 'PMA_linkOrButton()' function
|
||||
|
||||
|
||||
/**
|
||||
* Splits a URL string by parameter
|
||||
*
|
||||
* @param string $url the URL
|
||||
* @return array the parameter/value pairs, for example [0] db=sakila
|
||||
*/
|
||||
function PMA_splitURLQuery($url) {
|
||||
// decode encoded url separators
|
||||
$separator = PMA_get_arg_separator();
|
||||
@ -2700,13 +2708,13 @@ function PMA_extractFieldSpec($fieldspec)
|
||||
if (! $in_string) {
|
||||
$in_string = true;
|
||||
$working = "";
|
||||
// Otherwise, it may be either an end of a string, or a 'double quote' which can be handled as-is
|
||||
} else {
|
||||
// Check out the next character (if possible)
|
||||
// Otherwise, it may be either an end of a string, or a 'double quote' which can be handled as-is
|
||||
// Check out the next character (if possible)
|
||||
$has_next = isset($fieldspec[$index + 1]);
|
||||
$next = $has_next ? $fieldspec[$index + 1] : null;
|
||||
|
||||
// If we have reached the end of our 'working' string (because there are no more chars, or the next char is not another quote)
|
||||
// If we have reached the end of our 'working' string (because there are no more chars, or the next char is not another quote)
|
||||
if (! $has_next || $next != "'") {
|
||||
$enum_set_values[] = $working;
|
||||
$in_string = false;
|
||||
@ -2718,12 +2726,12 @@ function PMA_extractFieldSpec($fieldspec)
|
||||
$index++;
|
||||
}
|
||||
}
|
||||
// escaping of a quote?
|
||||
} elseif ('\\' == $char && isset($fieldspec[$index + 1]) && "'" == $fieldspec[$index + 1]) {
|
||||
// escaping of a quote?
|
||||
$working .= "'";
|
||||
$index++;
|
||||
// Otherwise, add it to our working string like normal
|
||||
} else {
|
||||
// Otherwise, add it to our working string like normal
|
||||
$working .= $char;
|
||||
}
|
||||
// Increment character index
|
||||
|
||||
@ -210,200 +210,200 @@ function PMA_getCollationDescr($collation)
|
||||
}
|
||||
$descr = '';
|
||||
switch ($parts[1]) {
|
||||
case 'bulgarian':
|
||||
$descr = __('Bulgarian');
|
||||
break;
|
||||
case 'chinese':
|
||||
if ($parts[0] == 'gb2312' || $parts[0] == 'gbk') {
|
||||
$descr = __('Simplified Chinese');
|
||||
} elseif ($parts[0] == 'big5') {
|
||||
$descr = __('Traditional Chinese');
|
||||
}
|
||||
break;
|
||||
case 'ci':
|
||||
$descr = __('case-insensitive');
|
||||
break;
|
||||
case 'cs':
|
||||
$descr = __('case-sensitive');
|
||||
break;
|
||||
case 'croatian':
|
||||
$descr = __('Croatian');
|
||||
break;
|
||||
case 'czech':
|
||||
$descr = __('Czech');
|
||||
break;
|
||||
case 'danish':
|
||||
$descr = __('Danish');
|
||||
break;
|
||||
case 'english':
|
||||
$descr = __('English');
|
||||
break;
|
||||
case 'esperanto':
|
||||
$descr = __('Esperanto');
|
||||
break;
|
||||
case 'estonian':
|
||||
$descr = __('Estonian');
|
||||
break;
|
||||
case 'german1':
|
||||
$descr = __('German') . ' (' . __('dictionary') . ')';
|
||||
break;
|
||||
case 'german2':
|
||||
$descr = __('German') . ' (' . __('phone book') . ')';
|
||||
break;
|
||||
case 'hungarian':
|
||||
$descr = __('Hungarian');
|
||||
break;
|
||||
case 'icelandic':
|
||||
$descr = __('Icelandic');
|
||||
break;
|
||||
case 'japanese':
|
||||
$descr = __('Japanese');
|
||||
break;
|
||||
case 'latvian':
|
||||
$descr = __('Latvian');
|
||||
break;
|
||||
case 'lithuanian':
|
||||
$descr = __('Lithuanian');
|
||||
break;
|
||||
case 'korean':
|
||||
$descr = __('Korean');
|
||||
break;
|
||||
case 'persian':
|
||||
$descr = __('Persian');
|
||||
break;
|
||||
case 'polish':
|
||||
$descr = __('Polish');
|
||||
break;
|
||||
case 'roman':
|
||||
$descr = __('West European');
|
||||
break;
|
||||
case 'romanian':
|
||||
$descr = __('Romanian');
|
||||
break;
|
||||
case 'slovak':
|
||||
$descr = __('Slovak');
|
||||
break;
|
||||
case 'slovenian':
|
||||
$descr = __('Slovenian');
|
||||
break;
|
||||
case 'spanish':
|
||||
$descr = __('Spanish');
|
||||
break;
|
||||
case 'spanish2':
|
||||
$descr = __('Traditional Spanish');
|
||||
break;
|
||||
case 'swedish':
|
||||
$descr = __('Swedish');
|
||||
break;
|
||||
case 'thai':
|
||||
$descr = __('Thai');
|
||||
break;
|
||||
case 'turkish':
|
||||
$descr = __('Turkish');
|
||||
break;
|
||||
case 'ukrainian':
|
||||
$descr = __('Ukrainian');
|
||||
break;
|
||||
case 'unicode':
|
||||
case 'bulgarian':
|
||||
$descr = __('Bulgarian');
|
||||
break;
|
||||
case 'chinese':
|
||||
if ($parts[0] == 'gb2312' || $parts[0] == 'gbk') {
|
||||
$descr = __('Simplified Chinese');
|
||||
} elseif ($parts[0] == 'big5') {
|
||||
$descr = __('Traditional Chinese');
|
||||
}
|
||||
break;
|
||||
case 'ci':
|
||||
$descr = __('case-insensitive');
|
||||
break;
|
||||
case 'cs':
|
||||
$descr = __('case-sensitive');
|
||||
break;
|
||||
case 'croatian':
|
||||
$descr = __('Croatian');
|
||||
break;
|
||||
case 'czech':
|
||||
$descr = __('Czech');
|
||||
break;
|
||||
case 'danish':
|
||||
$descr = __('Danish');
|
||||
break;
|
||||
case 'english':
|
||||
$descr = __('English');
|
||||
break;
|
||||
case 'esperanto':
|
||||
$descr = __('Esperanto');
|
||||
break;
|
||||
case 'estonian':
|
||||
$descr = __('Estonian');
|
||||
break;
|
||||
case 'german1':
|
||||
$descr = __('German') . ' (' . __('dictionary') . ')';
|
||||
break;
|
||||
case 'german2':
|
||||
$descr = __('German') . ' (' . __('phone book') . ')';
|
||||
break;
|
||||
case 'hungarian':
|
||||
$descr = __('Hungarian');
|
||||
break;
|
||||
case 'icelandic':
|
||||
$descr = __('Icelandic');
|
||||
break;
|
||||
case 'japanese':
|
||||
$descr = __('Japanese');
|
||||
break;
|
||||
case 'latvian':
|
||||
$descr = __('Latvian');
|
||||
break;
|
||||
case 'lithuanian':
|
||||
$descr = __('Lithuanian');
|
||||
break;
|
||||
case 'korean':
|
||||
$descr = __('Korean');
|
||||
break;
|
||||
case 'persian':
|
||||
$descr = __('Persian');
|
||||
break;
|
||||
case 'polish':
|
||||
$descr = __('Polish');
|
||||
break;
|
||||
case 'roman':
|
||||
$descr = __('West European');
|
||||
break;
|
||||
case 'romanian':
|
||||
$descr = __('Romanian');
|
||||
break;
|
||||
case 'slovak':
|
||||
$descr = __('Slovak');
|
||||
break;
|
||||
case 'slovenian':
|
||||
$descr = __('Slovenian');
|
||||
break;
|
||||
case 'spanish':
|
||||
$descr = __('Spanish');
|
||||
break;
|
||||
case 'spanish2':
|
||||
$descr = __('Traditional Spanish');
|
||||
break;
|
||||
case 'swedish':
|
||||
$descr = __('Swedish');
|
||||
break;
|
||||
case 'thai':
|
||||
$descr = __('Thai');
|
||||
break;
|
||||
case 'turkish':
|
||||
$descr = __('Turkish');
|
||||
break;
|
||||
case 'ukrainian':
|
||||
$descr = __('Ukrainian');
|
||||
break;
|
||||
case 'unicode':
|
||||
$descr = __('Unicode') . ' (' . __('multilingual') . ')';
|
||||
break;
|
||||
case 'bin':
|
||||
$is_bin = true;
|
||||
case 'general':
|
||||
switch ($parts[0]) {
|
||||
// Unicode charsets
|
||||
case 'ucs2':
|
||||
case 'utf8':
|
||||
$descr = __('Unicode') . ' (' . __('multilingual') . ')';
|
||||
break;
|
||||
case 'bin':
|
||||
$is_bin = true;
|
||||
case 'general':
|
||||
switch ($parts[0]) {
|
||||
// Unicode charsets
|
||||
case 'ucs2':
|
||||
case 'utf8':
|
||||
$descr = __('Unicode') . ' (' . __('multilingual') . ')';
|
||||
break;
|
||||
// West European charsets
|
||||
case 'ascii':
|
||||
case 'cp850':
|
||||
case 'dec8':
|
||||
case 'hp8':
|
||||
case 'latin1':
|
||||
case 'macroman':
|
||||
$descr = __('West European') . ' (' . __('multilingual') . ')';
|
||||
break;
|
||||
// Central European charsets
|
||||
case 'cp1250':
|
||||
case 'cp852':
|
||||
case 'latin2':
|
||||
case 'macce':
|
||||
$descr = __('Central European') . ' (' . __('multilingual') . ')';
|
||||
break;
|
||||
// Russian charsets
|
||||
case 'cp866':
|
||||
case 'koi8r':
|
||||
$descr = __('Russian');
|
||||
break;
|
||||
// Simplified Chinese charsets
|
||||
case 'gb2312':
|
||||
case 'gbk':
|
||||
$descr = __('Simplified Chinese');
|
||||
break;
|
||||
// Japanese charsets
|
||||
case 'sjis':
|
||||
case 'ujis':
|
||||
case 'cp932':
|
||||
case 'eucjpms':
|
||||
$descr = __('Japanese');
|
||||
break;
|
||||
// Baltic charsets
|
||||
case 'cp1257':
|
||||
case 'latin7':
|
||||
$descr = __('Baltic') . ' (' . __('multilingual') . ')';
|
||||
break;
|
||||
// Other
|
||||
case 'armscii8':
|
||||
case 'armscii':
|
||||
$descr = __('Armenian');
|
||||
break;
|
||||
case 'big5':
|
||||
$descr = __('Traditional Chinese');
|
||||
break;
|
||||
case 'cp1251':
|
||||
$descr = __('Cyrillic') . ' (' . __('multilingual') . ')';
|
||||
break;
|
||||
case 'cp1256':
|
||||
$descr = __('Arabic');
|
||||
break;
|
||||
case 'euckr':
|
||||
$descr = __('Korean');
|
||||
break;
|
||||
case 'hebrew':
|
||||
$descr = __('Hebrew');
|
||||
break;
|
||||
case 'geostd8':
|
||||
$descr = __('Georgian');
|
||||
break;
|
||||
case 'greek':
|
||||
$descr = __('Greek');
|
||||
break;
|
||||
case 'keybcs2':
|
||||
$descr = __('Czech-Slovak');
|
||||
break;
|
||||
case 'koi8u':
|
||||
$descr = __('Ukrainian');
|
||||
break;
|
||||
case 'latin5':
|
||||
$descr = __('Turkish');
|
||||
break;
|
||||
case 'swe7':
|
||||
$descr = __('Swedish');
|
||||
break;
|
||||
case 'tis620':
|
||||
$descr = __('Thai');
|
||||
break;
|
||||
default:
|
||||
$descr = __('unknown');
|
||||
break;
|
||||
}
|
||||
if (!empty($is_bin)) {
|
||||
$descr .= ', ' . __('Binary');
|
||||
}
|
||||
// West European charsets
|
||||
case 'ascii':
|
||||
case 'cp850':
|
||||
case 'dec8':
|
||||
case 'hp8':
|
||||
case 'latin1':
|
||||
case 'macroman':
|
||||
$descr = __('West European') . ' (' . __('multilingual') . ')';
|
||||
break;
|
||||
default: $descr = __('unknown');
|
||||
// Central European charsets
|
||||
case 'cp1250':
|
||||
case 'cp852':
|
||||
case 'latin2':
|
||||
case 'macce':
|
||||
$descr = __('Central European') . ' (' . __('multilingual') . ')';
|
||||
break;
|
||||
// Russian charsets
|
||||
case 'cp866':
|
||||
case 'koi8r':
|
||||
$descr = __('Russian');
|
||||
break;
|
||||
// Simplified Chinese charsets
|
||||
case 'gb2312':
|
||||
case 'gbk':
|
||||
$descr = __('Simplified Chinese');
|
||||
break;
|
||||
// Japanese charsets
|
||||
case 'sjis':
|
||||
case 'ujis':
|
||||
case 'cp932':
|
||||
case 'eucjpms':
|
||||
$descr = __('Japanese');
|
||||
break;
|
||||
// Baltic charsets
|
||||
case 'cp1257':
|
||||
case 'latin7':
|
||||
$descr = __('Baltic') . ' (' . __('multilingual') . ')';
|
||||
break;
|
||||
// Other
|
||||
case 'armscii8':
|
||||
case 'armscii':
|
||||
$descr = __('Armenian');
|
||||
break;
|
||||
case 'big5':
|
||||
$descr = __('Traditional Chinese');
|
||||
break;
|
||||
case 'cp1251':
|
||||
$descr = __('Cyrillic') . ' (' . __('multilingual') . ')';
|
||||
break;
|
||||
case 'cp1256':
|
||||
$descr = __('Arabic');
|
||||
break;
|
||||
case 'euckr':
|
||||
$descr = __('Korean');
|
||||
break;
|
||||
case 'hebrew':
|
||||
$descr = __('Hebrew');
|
||||
break;
|
||||
case 'geostd8':
|
||||
$descr = __('Georgian');
|
||||
break;
|
||||
case 'greek':
|
||||
$descr = __('Greek');
|
||||
break;
|
||||
case 'keybcs2':
|
||||
$descr = __('Czech-Slovak');
|
||||
break;
|
||||
case 'koi8u':
|
||||
$descr = __('Ukrainian');
|
||||
break;
|
||||
case 'latin5':
|
||||
$descr = __('Turkish');
|
||||
break;
|
||||
case 'swe7':
|
||||
$descr = __('Swedish');
|
||||
break;
|
||||
case 'tis620':
|
||||
$descr = __('Thai');
|
||||
break;
|
||||
default:
|
||||
$descr = __('unknown');
|
||||
break;
|
||||
}
|
||||
if (!empty($is_bin)) {
|
||||
$descr .= ', ' . __('Binary');
|
||||
}
|
||||
break;
|
||||
default: $descr = __('unknown');
|
||||
}
|
||||
if (!empty($parts[2])) {
|
||||
if ($parts[2] == 'ci') {
|
||||
|
||||
@ -186,134 +186,134 @@ function PMA_langDetect($str, $envType)
|
||||
function PMA_langDetails($lang)
|
||||
{
|
||||
switch ($lang) {
|
||||
case 'af':
|
||||
return array('af|afrikaans', 'af', '');
|
||||
case 'ar':
|
||||
return array('ar|arabic', 'ar', 'العربية');
|
||||
case 'az':
|
||||
return array('az|azerbaijani', 'az', 'Azərbaycanca');
|
||||
case 'bn':
|
||||
return array('bn|bangla', 'bn', 'বাংলা');
|
||||
case 'be':
|
||||
return array('be|belarusian', 'be', 'Беларуская');
|
||||
case 'be@latin':
|
||||
return array('be[-_]lat|belarusian latin', 'be-lat', 'Biełaruskaja');
|
||||
case 'bg':
|
||||
return array('bg|bulgarian', 'bg', 'Български');
|
||||
case 'bs':
|
||||
return array('bs|bosnian', 'bs', 'Bosanski');
|
||||
case 'br':
|
||||
return array('br|breton', 'br', 'Brezhoneg');
|
||||
case 'ca':
|
||||
return array('ca|catalan', 'ca', 'Català');
|
||||
case 'cs':
|
||||
return array('cs|czech', 'cs', 'Čeština');
|
||||
case 'cy':
|
||||
return array('cy|welsh', 'cy', 'Cymraeg');
|
||||
case 'da':
|
||||
return array('da|danish', 'da', 'Dansk');
|
||||
case 'de':
|
||||
return array('de|german', 'de', 'Deutsch');
|
||||
case 'el':
|
||||
return array('el|greek', 'el', 'Ελληνικά');
|
||||
case 'en':
|
||||
return array('en|english', 'en', '');
|
||||
case 'en_GB':
|
||||
return array('en[_-]gb|english (United Kingdom)', 'en-gb', '');
|
||||
case 'es':
|
||||
return array('es|spanish', 'es', 'Español');
|
||||
case 'et':
|
||||
return array('et|estonian', 'et', 'Eesti');
|
||||
case 'eu':
|
||||
return array('eu|basque', 'eu', 'Euskara');
|
||||
case 'fa':
|
||||
return array('fa|persian', 'fa', 'فارسی');
|
||||
case 'fi':
|
||||
return array('fi|finnish', 'fi', 'Suomi');
|
||||
case 'fr':
|
||||
return array('fr|french', 'fr', 'Français');
|
||||
case 'gl':
|
||||
return array('gl|galician', 'gl', 'Galego');
|
||||
case 'he':
|
||||
return array('he|hebrew', 'he', 'עברית');
|
||||
case 'hi':
|
||||
return array('hi|hindi', 'hi', 'हिन्दी');
|
||||
case 'hr':
|
||||
return array('hr|croatian', 'hr', 'Hrvatski');
|
||||
case 'hu':
|
||||
return array('hu|hungarian', 'hu', 'Magyar');
|
||||
case 'id':
|
||||
return array('id|indonesian', 'id', 'Bahasa Indonesia');
|
||||
case 'it':
|
||||
return array('it|italian', 'it', 'Italiano');
|
||||
case 'ja':
|
||||
return array('ja|japanese', 'ja', '日本語');
|
||||
case 'ko':
|
||||
return array('ko|korean', 'ko', '한국어');
|
||||
case 'ka':
|
||||
return array('ka|georgian', 'ka', 'ქართული');
|
||||
case 'lt':
|
||||
return array('lt|lithuanian', 'lt', 'Lietuvių');
|
||||
case 'lv':
|
||||
return array('lv|latvian', 'lv', 'Latviešu');
|
||||
case 'mk':
|
||||
return array('mk|macedonian', 'mk', 'Macedonian');
|
||||
case 'mn':
|
||||
return array('mn|mongolian', 'mn', 'Монгол');
|
||||
case 'ms':
|
||||
return array('ms|malay', 'ms', 'Bahasa Melayu');
|
||||
case 'nl':
|
||||
return array('nl|dutch', 'nl', 'Nederlands');
|
||||
case 'nb':
|
||||
return array('nb|norwegian', 'nb', 'Norsk');
|
||||
case 'pl':
|
||||
return array('pl|polish', 'pl', 'Polski');
|
||||
case 'pt_BR':
|
||||
return array('pt[-_]br|brazilian portuguese', 'pt-BR', 'Português');
|
||||
case 'pt':
|
||||
return array('pt|portuguese', 'pt', 'Português');
|
||||
case 'ro':
|
||||
return array('ro|romanian', 'ro', 'Română');
|
||||
case 'ru':
|
||||
return array('ru|russian', 'ru', 'Русский');
|
||||
case 'si':
|
||||
return array('si|sinhala', 'si', 'සිංහල');
|
||||
case 'sk':
|
||||
return array('sk|slovak', 'sk', 'Slovenčina');
|
||||
case 'sl':
|
||||
return array('sl|slovenian', 'sl', 'Slovenščina');
|
||||
case 'sq':
|
||||
return array('sq|albanian', 'sq', 'Shqip');
|
||||
case 'sr@latin':
|
||||
return array('sr[-_]lat|serbian latin', 'sr-lat', 'Srpski');
|
||||
case 'sr':
|
||||
return array('sr|serbian', 'sr', 'Српски');
|
||||
case 'sv':
|
||||
return array('sv|swedish', 'sv', 'Svenska');
|
||||
case 'ta':
|
||||
return array('ta|tamil', 'ta', 'தமிழ்');
|
||||
case 'te':
|
||||
return array('te|telugu', 'te', 'తెలుగు');
|
||||
case 'th':
|
||||
return array('th|thai', 'th', 'ภาษาไทย');
|
||||
case 'tr':
|
||||
return array('tr|turkish', 'tr', 'Türkçe');
|
||||
case 'tt':
|
||||
return array('tt|tatarish', 'tt', 'Tatarça');
|
||||
case 'ug':
|
||||
return array('ug|uyghur', 'ug', 'ئۇيغۇرچە');
|
||||
case 'uk':
|
||||
return array('uk|ukrainian', 'uk', 'Українська');
|
||||
case 'ur':
|
||||
return array('ur|urdu', 'ur', 'اُردوُ');
|
||||
case 'uz@latin':
|
||||
return array('uz[-_]lat|uzbek-latin', 'uz-lat', 'O‘zbekcha');
|
||||
case 'uz':
|
||||
return array('uz[-_]cyr|uzbek-cyrillic', 'uz-cyr', 'Ўзбекча');
|
||||
case 'zh_TW':
|
||||
return array('zh[-_](tw|hk)|chinese traditional', 'zh-TW', '中文');
|
||||
case 'zh_CN':
|
||||
return array('zh|chinese simplified', 'zh', '中文');
|
||||
case 'af':
|
||||
return array('af|afrikaans', 'af', '');
|
||||
case 'ar':
|
||||
return array('ar|arabic', 'ar', 'العربية');
|
||||
case 'az':
|
||||
return array('az|azerbaijani', 'az', 'Azərbaycanca');
|
||||
case 'bn':
|
||||
return array('bn|bangla', 'bn', 'বাংলা');
|
||||
case 'be':
|
||||
return array('be|belarusian', 'be', 'Беларуская');
|
||||
case 'be@latin':
|
||||
return array('be[-_]lat|belarusian latin', 'be-lat', 'Biełaruskaja');
|
||||
case 'bg':
|
||||
return array('bg|bulgarian', 'bg', 'Български');
|
||||
case 'bs':
|
||||
return array('bs|bosnian', 'bs', 'Bosanski');
|
||||
case 'br':
|
||||
return array('br|breton', 'br', 'Brezhoneg');
|
||||
case 'ca':
|
||||
return array('ca|catalan', 'ca', 'Català');
|
||||
case 'cs':
|
||||
return array('cs|czech', 'cs', 'Čeština');
|
||||
case 'cy':
|
||||
return array('cy|welsh', 'cy', 'Cymraeg');
|
||||
case 'da':
|
||||
return array('da|danish', 'da', 'Dansk');
|
||||
case 'de':
|
||||
return array('de|german', 'de', 'Deutsch');
|
||||
case 'el':
|
||||
return array('el|greek', 'el', 'Ελληνικά');
|
||||
case 'en':
|
||||
return array('en|english', 'en', '');
|
||||
case 'en_GB':
|
||||
return array('en[_-]gb|english (United Kingdom)', 'en-gb', '');
|
||||
case 'es':
|
||||
return array('es|spanish', 'es', 'Español');
|
||||
case 'et':
|
||||
return array('et|estonian', 'et', 'Eesti');
|
||||
case 'eu':
|
||||
return array('eu|basque', 'eu', 'Euskara');
|
||||
case 'fa':
|
||||
return array('fa|persian', 'fa', 'فارسی');
|
||||
case 'fi':
|
||||
return array('fi|finnish', 'fi', 'Suomi');
|
||||
case 'fr':
|
||||
return array('fr|french', 'fr', 'Français');
|
||||
case 'gl':
|
||||
return array('gl|galician', 'gl', 'Galego');
|
||||
case 'he':
|
||||
return array('he|hebrew', 'he', 'עברית');
|
||||
case 'hi':
|
||||
return array('hi|hindi', 'hi', 'हिन्दी');
|
||||
case 'hr':
|
||||
return array('hr|croatian', 'hr', 'Hrvatski');
|
||||
case 'hu':
|
||||
return array('hu|hungarian', 'hu', 'Magyar');
|
||||
case 'id':
|
||||
return array('id|indonesian', 'id', 'Bahasa Indonesia');
|
||||
case 'it':
|
||||
return array('it|italian', 'it', 'Italiano');
|
||||
case 'ja':
|
||||
return array('ja|japanese', 'ja', '日本語');
|
||||
case 'ko':
|
||||
return array('ko|korean', 'ko', '한국어');
|
||||
case 'ka':
|
||||
return array('ka|georgian', 'ka', 'ქართული');
|
||||
case 'lt':
|
||||
return array('lt|lithuanian', 'lt', 'Lietuvių');
|
||||
case 'lv':
|
||||
return array('lv|latvian', 'lv', 'Latviešu');
|
||||
case 'mk':
|
||||
return array('mk|macedonian', 'mk', 'Macedonian');
|
||||
case 'mn':
|
||||
return array('mn|mongolian', 'mn', 'Монгол');
|
||||
case 'ms':
|
||||
return array('ms|malay', 'ms', 'Bahasa Melayu');
|
||||
case 'nl':
|
||||
return array('nl|dutch', 'nl', 'Nederlands');
|
||||
case 'nb':
|
||||
return array('nb|norwegian', 'nb', 'Norsk');
|
||||
case 'pl':
|
||||
return array('pl|polish', 'pl', 'Polski');
|
||||
case 'pt_BR':
|
||||
return array('pt[-_]br|brazilian portuguese', 'pt-BR', 'Português');
|
||||
case 'pt':
|
||||
return array('pt|portuguese', 'pt', 'Português');
|
||||
case 'ro':
|
||||
return array('ro|romanian', 'ro', 'Română');
|
||||
case 'ru':
|
||||
return array('ru|russian', 'ru', 'Русский');
|
||||
case 'si':
|
||||
return array('si|sinhala', 'si', 'සිංහල');
|
||||
case 'sk':
|
||||
return array('sk|slovak', 'sk', 'Slovenčina');
|
||||
case 'sl':
|
||||
return array('sl|slovenian', 'sl', 'Slovenščina');
|
||||
case 'sq':
|
||||
return array('sq|albanian', 'sq', 'Shqip');
|
||||
case 'sr@latin':
|
||||
return array('sr[-_]lat|serbian latin', 'sr-lat', 'Srpski');
|
||||
case 'sr':
|
||||
return array('sr|serbian', 'sr', 'Српски');
|
||||
case 'sv':
|
||||
return array('sv|swedish', 'sv', 'Svenska');
|
||||
case 'ta':
|
||||
return array('ta|tamil', 'ta', 'தமிழ்');
|
||||
case 'te':
|
||||
return array('te|telugu', 'te', 'తెలుగు');
|
||||
case 'th':
|
||||
return array('th|thai', 'th', 'ภาษาไทย');
|
||||
case 'tr':
|
||||
return array('tr|turkish', 'tr', 'Türkçe');
|
||||
case 'tt':
|
||||
return array('tt|tatarish', 'tt', 'Tatarça');
|
||||
case 'ug':
|
||||
return array('ug|uyghur', 'ug', 'ئۇيغۇرچە');
|
||||
case 'uk':
|
||||
return array('uk|ukrainian', 'uk', 'Українська');
|
||||
case 'ur':
|
||||
return array('ur|urdu', 'ur', 'اُردوُ');
|
||||
case 'uz@latin':
|
||||
return array('uz[-_]lat|uzbek-latin', 'uz-lat', 'O‘zbekcha');
|
||||
case 'uz':
|
||||
return array('uz[-_]cyr|uzbek-cyrillic', 'uz-cyr', 'Ўзбекча');
|
||||
case 'zh_TW':
|
||||
return array('zh[-_](tw|hk)|chinese traditional', 'zh-TW', '中文');
|
||||
case 'zh_CN':
|
||||
return array('zh|chinese simplified', 'zh', '中文');
|
||||
}
|
||||
return array("$lang|$lang", $lang, $lang);
|
||||
}
|
||||
|
||||
@ -645,13 +645,12 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
} elseif (($last == '-') || ($last == '+') || ($last == '!')) {
|
||||
$count2--;
|
||||
$punct_data = PMA_substr($sql, $count1, $count2 - $count1);
|
||||
/**
|
||||
* @todo for negation operator, split in 2 tokens ?
|
||||
* "select x&~1 from t"
|
||||
* becomes "select x & ~ 1 from t" ?
|
||||
*/
|
||||
|
||||
} elseif ($last != '~') {
|
||||
/**
|
||||
* @todo for negation operator, split in 2 tokens ?
|
||||
* "select x&~1 from t"
|
||||
* becomes "select x & ~ 1 from t" ?
|
||||
*/
|
||||
$debugstr = __('Unknown Punctuation String') . ' @ ' . ($count1+1) . "\n"
|
||||
. 'STR: ' . htmlspecialchars($punct_data);
|
||||
PMA_SQP_throwError($debugstr, $sql);
|
||||
@ -812,16 +811,16 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
return $sql_array;
|
||||
} // end of the "PMA_SQP_parse()" function
|
||||
|
||||
/**
|
||||
* Checks for token types being what we want...
|
||||
*
|
||||
* @param string String of type that we have
|
||||
* @param string String of type that we want
|
||||
*
|
||||
* @return boolean result of check
|
||||
*
|
||||
* @access private
|
||||
*/
|
||||
/**
|
||||
* Checks for token types being what we want...
|
||||
*
|
||||
* @param string String of type that we have
|
||||
* @param string String of type that we want
|
||||
*
|
||||
* @return boolean result of check
|
||||
*
|
||||
* @access private
|
||||
*/
|
||||
function PMA_SQP_typeCheck($toCheck, $whatWeWant)
|
||||
{
|
||||
$typeSeperator = '_';
|
||||
@ -890,122 +889,122 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
// for GROUP_CONCAT(...)
|
||||
$in_group_concat = false;
|
||||
|
||||
/* Description of analyzer results
|
||||
*
|
||||
* db, table, column, alias
|
||||
* ------------------------
|
||||
*
|
||||
* Inside the $subresult array, we create ['select_expr'] and ['table_ref'] arrays.
|
||||
*
|
||||
* The SELECT syntax (simplified) is
|
||||
*
|
||||
* SELECT
|
||||
* select_expression,...
|
||||
* [FROM [table_references]
|
||||
*
|
||||
*
|
||||
* ['select_expr'] is filled with each expression, the key represents the
|
||||
* expression position in the list (0-based) (so we don't lose track of
|
||||
* multiple occurences of the same column).
|
||||
*
|
||||
* ['table_ref'] is filled with each table ref, same thing for the key.
|
||||
*
|
||||
* I create all sub-values empty, even if they are
|
||||
* not present (for example no select_expression alias).
|
||||
*
|
||||
* There is a debug section at the end of loop #1, if you want to
|
||||
* see the exact contents of select_expr and table_ref
|
||||
*
|
||||
* queryflags
|
||||
* ----------
|
||||
*
|
||||
* In $subresult, array 'queryflags' is filled, according to what we
|
||||
* find in the query.
|
||||
*
|
||||
* Currently, those are generated:
|
||||
*
|
||||
* ['queryflags']['need_confirm'] = 1; if the query needs confirmation
|
||||
* ['queryflags']['select_from'] = 1; if this is a real SELECT...FROM
|
||||
* ['queryflags']['distinct'] = 1; for a DISTINCT
|
||||
* ['queryflags']['union'] = 1; for a UNION
|
||||
* ['queryflags']['join'] = 1; for a JOIN
|
||||
* ['queryflags']['offset'] = 1; for the presence of OFFSET
|
||||
* ['queryflags']['procedure'] = 1; for the presence of PROCEDURE
|
||||
*
|
||||
* query clauses
|
||||
* -------------
|
||||
*
|
||||
* The select is splitted in those clauses:
|
||||
* ['select_expr_clause']
|
||||
* ['from_clause']
|
||||
* ['group_by_clause']
|
||||
* ['order_by_clause']
|
||||
* ['having_clause']
|
||||
* ['limit_clause']
|
||||
* ['where_clause']
|
||||
*
|
||||
* The identifiers of the WHERE clause are put into the array
|
||||
* ['where_clause_identifier']
|
||||
*
|
||||
* For a SELECT, the whole query without the ORDER BY clause is put into
|
||||
* ['unsorted_query']
|
||||
*
|
||||
* foreign keys
|
||||
* ------------
|
||||
* The CREATE TABLE may contain FOREIGN KEY clauses, so they get
|
||||
* analyzed and ['foreign_keys'] is an array filled with
|
||||
* the constraint name, the index list,
|
||||
* the REFERENCES table name and REFERENCES index list,
|
||||
* and ON UPDATE | ON DELETE clauses
|
||||
*
|
||||
* position_of_first_select
|
||||
* ------------------------
|
||||
*
|
||||
* The array index of the first SELECT we find. Will be used to
|
||||
* insert a SQL_CALC_FOUND_ROWS.
|
||||
*
|
||||
* create_table_fields
|
||||
* -------------------
|
||||
*
|
||||
* Used to detect the DEFAULT CURRENT_TIMESTAMP and
|
||||
* ON UPDATE CURRENT_TIMESTAMP clauses of the CREATE TABLE query.
|
||||
* Also used to store the default value of the field.
|
||||
* An array, each element is the identifier name.
|
||||
* Note that for now, the timestamp_not_null element is created
|
||||
* even for non-TIMESTAMP fields.
|
||||
*
|
||||
* Sub-elements: ['type'] which contains the column type
|
||||
* optional (currently they are never false but can be absent):
|
||||
* ['default_current_timestamp'] boolean
|
||||
* ['on_update_current_timestamp'] boolean
|
||||
* ['timestamp_not_null'] boolean
|
||||
*
|
||||
* section_before_limit, section_after_limit
|
||||
* -----------------------------------------
|
||||
*
|
||||
* Marks the point of the query where we can insert a LIMIT clause;
|
||||
* so the section_before_limit will contain the left part before
|
||||
* a possible LIMIT clause
|
||||
*
|
||||
*
|
||||
* End of description of analyzer results
|
||||
*/
|
||||
/* Description of analyzer results
|
||||
*
|
||||
* db, table, column, alias
|
||||
* ------------------------
|
||||
*
|
||||
* Inside the $subresult array, we create ['select_expr'] and ['table_ref'] arrays.
|
||||
*
|
||||
* The SELECT syntax (simplified) is
|
||||
*
|
||||
* SELECT
|
||||
* select_expression,...
|
||||
* [FROM [table_references]
|
||||
*
|
||||
*
|
||||
* ['select_expr'] is filled with each expression, the key represents the
|
||||
* expression position in the list (0-based) (so we don't lose track of
|
||||
* multiple occurences of the same column).
|
||||
*
|
||||
* ['table_ref'] is filled with each table ref, same thing for the key.
|
||||
*
|
||||
* I create all sub-values empty, even if they are
|
||||
* not present (for example no select_expression alias).
|
||||
*
|
||||
* There is a debug section at the end of loop #1, if you want to
|
||||
* see the exact contents of select_expr and table_ref
|
||||
*
|
||||
* queryflags
|
||||
* ----------
|
||||
*
|
||||
* In $subresult, array 'queryflags' is filled, according to what we
|
||||
* find in the query.
|
||||
*
|
||||
* Currently, those are generated:
|
||||
*
|
||||
* ['queryflags']['need_confirm'] = 1; if the query needs confirmation
|
||||
* ['queryflags']['select_from'] = 1; if this is a real SELECT...FROM
|
||||
* ['queryflags']['distinct'] = 1; for a DISTINCT
|
||||
* ['queryflags']['union'] = 1; for a UNION
|
||||
* ['queryflags']['join'] = 1; for a JOIN
|
||||
* ['queryflags']['offset'] = 1; for the presence of OFFSET
|
||||
* ['queryflags']['procedure'] = 1; for the presence of PROCEDURE
|
||||
*
|
||||
* query clauses
|
||||
* -------------
|
||||
*
|
||||
* The select is splitted in those clauses:
|
||||
* ['select_expr_clause']
|
||||
* ['from_clause']
|
||||
* ['group_by_clause']
|
||||
* ['order_by_clause']
|
||||
* ['having_clause']
|
||||
* ['limit_clause']
|
||||
* ['where_clause']
|
||||
*
|
||||
* The identifiers of the WHERE clause are put into the array
|
||||
* ['where_clause_identifier']
|
||||
*
|
||||
* For a SELECT, the whole query without the ORDER BY clause is put into
|
||||
* ['unsorted_query']
|
||||
*
|
||||
* foreign keys
|
||||
* ------------
|
||||
* The CREATE TABLE may contain FOREIGN KEY clauses, so they get
|
||||
* analyzed and ['foreign_keys'] is an array filled with
|
||||
* the constraint name, the index list,
|
||||
* the REFERENCES table name and REFERENCES index list,
|
||||
* and ON UPDATE | ON DELETE clauses
|
||||
*
|
||||
* position_of_first_select
|
||||
* ------------------------
|
||||
*
|
||||
* The array index of the first SELECT we find. Will be used to
|
||||
* insert a SQL_CALC_FOUND_ROWS.
|
||||
*
|
||||
* create_table_fields
|
||||
* -------------------
|
||||
*
|
||||
* Used to detect the DEFAULT CURRENT_TIMESTAMP and
|
||||
* ON UPDATE CURRENT_TIMESTAMP clauses of the CREATE TABLE query.
|
||||
* Also used to store the default value of the field.
|
||||
* An array, each element is the identifier name.
|
||||
* Note that for now, the timestamp_not_null element is created
|
||||
* even for non-TIMESTAMP fields.
|
||||
*
|
||||
* Sub-elements: ['type'] which contains the column type
|
||||
* optional (currently they are never false but can be absent):
|
||||
* ['default_current_timestamp'] boolean
|
||||
* ['on_update_current_timestamp'] boolean
|
||||
* ['timestamp_not_null'] boolean
|
||||
*
|
||||
* section_before_limit, section_after_limit
|
||||
* -----------------------------------------
|
||||
*
|
||||
* Marks the point of the query where we can insert a LIMIT clause;
|
||||
* so the section_before_limit will contain the left part before
|
||||
* a possible LIMIT clause
|
||||
*
|
||||
*
|
||||
* End of description of analyzer results
|
||||
*/
|
||||
|
||||
// must be sorted
|
||||
// TODO: current logic checks for only one word, so I put only the
|
||||
// first word of the reserved expressions that end a table ref;
|
||||
// maybe this is not ok (the first word might mean something else)
|
||||
// $words_ending_table_ref = array(
|
||||
// 'FOR UPDATE',
|
||||
// 'GROUP BY',
|
||||
// 'HAVING',
|
||||
// 'LIMIT',
|
||||
// 'LOCK IN SHARE MODE',
|
||||
// 'ORDER BY',
|
||||
// 'PROCEDURE',
|
||||
// 'UNION',
|
||||
// 'WHERE'
|
||||
// );
|
||||
// $words_ending_table_ref = array(
|
||||
// 'FOR UPDATE',
|
||||
// 'GROUP BY',
|
||||
// 'HAVING',
|
||||
// 'LIMIT',
|
||||
// 'LOCK IN SHARE MODE',
|
||||
// 'ORDER BY',
|
||||
// 'PROCEDURE',
|
||||
// 'UNION',
|
||||
// 'WHERE'
|
||||
// );
|
||||
$words_ending_table_ref = array(
|
||||
'FOR' => 1,
|
||||
'GROUP' => 1,
|
||||
@ -1047,7 +1046,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
// loop #1 for each token: select_expr, table_ref for SELECT
|
||||
|
||||
for ($i = 0; $i < $size; $i++) {
|
||||
//DEBUG echo "Loop1 <strong>" . $arr[$i]['data'] . "</strong> (" . $arr[$i]['type'] . ")<br />";
|
||||
//DEBUG echo "Loop1 <strong>" . $arr[$i]['data'] . "</strong> (" . $arr[$i]['type'] . ")<br />";
|
||||
|
||||
// High speed seek for locating the end of the current query
|
||||
if ($seek_queryend == true) {
|
||||
@ -1068,7 +1067,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
continue;
|
||||
} // end if (type == punct_queryend)
|
||||
|
||||
// ==============================================================
|
||||
// ==============================================================
|
||||
if ($arr[$i]['type'] == 'punct_bracket_open_round') {
|
||||
$number_of_brackets++;
|
||||
if ($in_extract) {
|
||||
@ -1078,7 +1077,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
$number_of_brackets_in_group_concat++;
|
||||
}
|
||||
}
|
||||
// ==============================================================
|
||||
// ==============================================================
|
||||
if ($arr[$i]['type'] == 'punct_bracket_close_round') {
|
||||
$number_of_brackets--;
|
||||
if ($number_of_brackets == 0) {
|
||||
@ -1109,7 +1108,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
// ==============================================================
|
||||
// ==============================================================
|
||||
if ($arr[$i]['type'] == 'alpha_functionName') {
|
||||
$upper_data = strtoupper($arr[$i]['data']);
|
||||
if ($upper_data =='EXTRACT') {
|
||||
@ -1122,10 +1121,10 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
}
|
||||
}
|
||||
|
||||
// ==============================================================
|
||||
// ==============================================================
|
||||
if ($arr[$i]['type'] == 'alpha_reservedWord'
|
||||
// && $arr[$i]['forbidden'] == false) {
|
||||
) {
|
||||
//&& $arr[$i]['forbidden'] == false) {
|
||||
) {
|
||||
// We don't know what type of query yet, so run this
|
||||
if ($subresult['querytype'] == '') {
|
||||
$subresult['querytype'] = strtoupper($arr[$i]['data']);
|
||||
@ -1168,7 +1167,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
// reserved words below
|
||||
} // end if (type == alpha_reservedWord)
|
||||
|
||||
// ==============================
|
||||
// ==============================
|
||||
if ($arr[$i]['type'] == 'quote_backtick'
|
||||
|| $arr[$i]['type'] == 'quote_double'
|
||||
|| $arr[$i]['type'] == 'quote_single'
|
||||
@ -1229,7 +1228,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
} // end if (querytype SELECT)
|
||||
} // end if (quote_backtick or double quote or alpha_identifier)
|
||||
|
||||
// ===================================
|
||||
// ===================================
|
||||
if ($arr[$i]['type'] == 'punct_qualifier') {
|
||||
// to be able to detect an identifier following another
|
||||
$previous_was_identifier = false;
|
||||
@ -1498,7 +1497,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
$in_subquery = false;
|
||||
|
||||
for ($i = 0; $i < $size; $i++) {
|
||||
//DEBUG echo "Loop2 <strong>" . $arr[$i]['data'] . "</strong> (" . $arr[$i]['type'] . ")<br />";
|
||||
//DEBUG echo "Loop2 <strong>" . $arr[$i]['data'] . "</strong> (" . $arr[$i]['type'] . ")<br />";
|
||||
|
||||
// need_confirm
|
||||
//
|
||||
@ -1988,10 +1987,10 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
if ($seen_references) {
|
||||
if ($seen_alter && $brackets_level > 0) {
|
||||
$foreign[$foreign_key_number]['ref_index_list'][] = $identifier;
|
||||
// here, the first bracket level corresponds to the
|
||||
// bracket of CREATE TABLE
|
||||
// so if we are on level 2, it must be the index list
|
||||
// of the foreign key REFERENCES
|
||||
// here, the first bracket level corresponds to the
|
||||
// bracket of CREATE TABLE
|
||||
// so if we are on level 2, it must be the index list
|
||||
// of the foreign key REFERENCES
|
||||
} elseif ($brackets_level > 1) {
|
||||
$foreign[$foreign_key_number]['ref_index_list'][] = $identifier;
|
||||
} elseif ($arr[$i+1]['type'] == 'punct_qualifier') {
|
||||
@ -2200,7 +2199,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
|
||||
$in_priv_list = false;
|
||||
for ($i = $start_token; $i < $number_of_tokens; $i++) {
|
||||
// DEBUG echo "Loop format <strong>" . $arr[$i]['data'] . "</strong> " . $arr[$i]['type'] . "<br />";
|
||||
// DEBUG echo "Loop format <strong>" . $arr[$i]['data'] . "</strong> " . $arr[$i]['type'] . "<br />";
|
||||
$before = '';
|
||||
$after = '';
|
||||
// array_shift($typearr);
|
||||
@ -2307,7 +2306,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
// select 20 -9
|
||||
// )
|
||||
if ($typearr[3] != 'digit_integer') {
|
||||
$after .= ' ';
|
||||
$after .= ' ';
|
||||
}
|
||||
break;
|
||||
case 'punct_bracket_close_round':
|
||||
@ -2453,8 +2452,8 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|
||||
$before .= $space_alpha_reserved_word;
|
||||
}
|
||||
} else {
|
||||
// on first keyword, check if it introduces a
|
||||
// privilege list
|
||||
// on first keyword, check if it introduces a
|
||||
// privilege list
|
||||
if (isset($keywords_priv_list[$arr[$i]['data']])) {
|
||||
$in_priv_list = true;
|
||||
}
|
||||
|
||||
4
po/lt.po
4
po/lt.po
@ -10038,7 +10038,7 @@ msgid "Query analyzer"
|
||||
msgstr "Užklausos analizatorius"
|
||||
|
||||
#: server_status.php:1593
|
||||
#, php-format
|
||||
#, php-format, fuzzy
|
||||
#| msgid "Second"
|
||||
msgid "%d second"
|
||||
msgid_plural "%d seconds"
|
||||
@ -10047,7 +10047,7 @@ msgstr[1] "Sekundės"
|
||||
msgstr[2] "Sekundžių"
|
||||
|
||||
#: server_status.php:1595
|
||||
#, php-format
|
||||
#, php-format, fuzzy
|
||||
#| msgid "Minute"
|
||||
msgid "%d minute"
|
||||
msgid_plural "%d minutes"
|
||||
|
||||
@ -101,10 +101,10 @@ foreach ($the_tables as $key => $table) {
|
||||
$columns = PMA_DBI_get_columns($db, $table);
|
||||
|
||||
|
||||
// We need this to correctly learn if a TIMESTAMP is NOT NULL, since
|
||||
// SHOW FULL FIELDS or INFORMATION_SCHEMA incorrectly says NULL
|
||||
// and SHOW CREATE TABLE says NOT NULL (tested
|
||||
// in MySQL 4.0.25 and 5.0.21, http://bugs.mysql.com/20910).
|
||||
// We need this to correctly learn if a TIMESTAMP is NOT NULL, since
|
||||
// SHOW FULL FIELDS or INFORMATION_SCHEMA incorrectly says NULL
|
||||
// and SHOW CREATE TABLE says NOT NULL (tested
|
||||
// in MySQL 4.0.25 and 5.0.21, http://bugs.mysql.com/20910).
|
||||
|
||||
$show_create_table = PMA_DBI_fetch_value(
|
||||
'SHOW CREATE TABLE ' . PMA_backquote($db) . '.' . PMA_backquote($table),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user