The branch, master has been updated
via 90099b7b5de240e5789ea8bfd29fcb03e867d825 (commit)
from 2a10c7f4aa968122939dcd60123f9819e6c97efb (commit)
- Log -----------------------------------------------------------------
commit 90099b7b5de240e5789ea8bfd29fcb03e867d825
Author: Piotr Przybylski <piotrprz(a)gmail.com>
Date: Wed Jun 8 19:23:58 2011 +0200
Remove PMA_STR_binarySearchInArr in favor of isset and in_array
-----------------------------------------------------------------------
Summary of changes:
libraries/common.lib.php | 2 +-
libraries/sqlparser.data.php | 3 -
libraries/sqlparser.lib.php | 201 ++++++++++++++++++++----------------------
libraries/string.lib.php | 33 -------
4 files changed, 95 insertions(+), 144 deletions(-)
diff --git a/libraries/common.lib.php b/libraries/common.lib.php
index b09570c..999174b 100644
--- a/libraries/common.lib.php
+++ b/libraries/common.lib.php
@@ -827,7 +827,7 @@ function PMA_backquote($a_name, $do_it = true)
if (! $do_it) {
global $PMA_SQPdata_forbidden_word;
- if(! PMA_STR_binarySearchInArr(strtoupper($a_name), $PMA_SQPdata_forbidden_word, count($PMA_SQPdata_forbidden_word))) {
+ if(! in_array(strtoupper($a_name), $PMA_SQPdata_forbidden_word)) {
return $a_name;
}
}
diff --git a/libraries/sqlparser.data.php b/libraries/sqlparser.data.php
index 15fcb58..93132b3 100644
--- a/libraries/sqlparser.data.php
+++ b/libraries/sqlparser.data.php
@@ -11,9 +11,6 @@
* It has been extracted from the lex.h file in the MySQL BK tree
* (around 4.0.2) as well as the MySQL documentation.
*
- * Note: before adding a value in the arrays, ensure that you respect
- * proper sorting, especially with underscores.
- *
* It's easier to use only uppercase for proper sorting. In case of
* doubt, use the test case to verify.
*
diff --git a/libraries/sqlparser.lib.php b/libraries/sqlparser.lib.php
index 46ae2b2..8005886 100644
--- a/libraries/sqlparser.lib.php
+++ b/libraries/sqlparser.lib.php
@@ -198,8 +198,8 @@ if (! defined('PMA_MINIMUM_COMMON')) {
*/
function PMA_SQP_parse($sql)
{
- global $PMA_SQPdata_column_attrib, $PMA_SQPdata_reserved_word, $PMA_SQPdata_column_type;
- global $PMA_SQPdata_function_name, $PMA_SQPdata_forbidden_word;
+ static $PMA_SQPdata_column_attrib, $PMA_SQPdata_reserved_word, $PMA_SQPdata_column_type;
+ static $PMA_SQPdata_function_name, $PMA_SQPdata_forbidden_word;
global $mysql_charsets, $mysql_collations_flat;
// Convert all line feeds to Unix style
@@ -211,14 +211,14 @@ if (! defined('PMA_MINIMUM_COMMON')) {
return array();
}
- // Get counts of some arrays
- $PMA_SQPdata_column_attrib_cnt = count($PMA_SQPdata_column_attrib);
- $PMA_SQPdata_function_name_cnt = count($PMA_SQPdata_function_name);
- $PMA_SQPdata_reserved_word_cnt = count($PMA_SQPdata_reserved_word);
- $PMA_SQPdata_forbidden_word_cnt = count($PMA_SQPdata_forbidden_word);
- $PMA_SQPdata_column_type_cnt = count($PMA_SQPdata_column_type);
- $mysql_charsets_count = count($mysql_charsets);
- $mysql_collations_count = count($mysql_collations_flat);
+ // Create local hashtables
+ if (!isset($PMA_SQPdata_column_attrib_cnt)) {
+ $PMA_SQPdata_column_attrib = array_flip($GLOBALS['PMA_SQPdata_column_attrib']);
+ $PMA_SQPdata_function_name = array_flip($GLOBALS['PMA_SQPdata_function_name']);
+ $PMA_SQPdata_reserved_word = array_flip($GLOBALS['PMA_SQPdata_reserved_word']);
+ $PMA_SQPdata_forbidden_word = array_flip($GLOBALS['PMA_SQPdata_forbidden_word']);
+ $PMA_SQPdata_column_type = array_flip($GLOBALS['PMA_SQPdata_column_type']);
+ }
$sql_array = array();
$sql_array['raw'] = $sql;
@@ -234,20 +234,19 @@ if (! defined('PMA_MINIMUM_COMMON')) {
$digit_hexset = 'x';
$bracket_list = '()[]{}';
$allpunct_list = '-,;:!?/.^~\*&%+<=>|';
- $allpunct_list_pair = array (
- 0 => '!=',
- 1 => '&&',
- 2 => ':=',
- 3 => '<<',
- 4 => '<=',
- 5 => '<=>',
- 6 => '<>',
- 7 => '>=',
- 8 => '>>',
- 9 => '||',
- 10 => '==',
+ $allpunct_list_pair = array(
+ '!=' => 1,
+ '&&' => 1,
+ ':=' => 1,
+ '<<' => 1,
+ '<=' => 1,
+ '<=>' => 1,
+ '<>' => 1,
+ '>=' => 1,
+ '>>' => 1,
+ '||' => 1,
+ '==' => 1
);
- $allpunct_list_pair_size = 11; //count($allpunct_list_pair);
$quote_list = '\'"`';
$arraysize = 0;
@@ -608,7 +607,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
break;
}
PMA_SQP_arrayAdd($sql_array, 'punct' . $t_suffix, $punct_data, $arraysize);
- } elseif ($punct_data == $GLOBALS['sql_delimiter'] || PMA_STR_binarySearchInArr($punct_data, $allpunct_list_pair, $allpunct_list_pair_size)) {
+ } elseif ($punct_data == $GLOBALS['sql_delimiter'] || isset($allpunct_list_pair[$punct_data])) {
// Ok, we have one of the valid combined punct expressions
PMA_SQP_arrayAdd($sql_array, 'punct', $punct_data, $arraysize);
} else {
@@ -705,7 +704,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
} elseif (($t_next == 'punct_qualifier') || ($t_prev == 'punct_qualifier')) {
$t_suffix = '_identifier';
} elseif (($t_next == 'punct_bracket_open_round')
- && PMA_STR_binarySearchInArr($d_cur_upper, $PMA_SQPdata_function_name, $PMA_SQPdata_function_name_cnt)) {
+ && isset($PMA_SQPdata_function_name[$d_cur_upper])) {
/**
* @todo 2005-10-16: in the case of a CREATE TABLE containing
* a TIMESTAMP, since TIMESTAMP() is also a function, it's
@@ -717,7 +716,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
*/
$t_suffix = '_functionName';
/* There are functions which might be as well column types */
- } elseif (PMA_STR_binarySearchInArr($d_cur_upper, $PMA_SQPdata_column_type, $PMA_SQPdata_column_type_cnt)) {
+ } elseif (isset($PMA_SQPdata_column_type[$d_cur_upper])) {
$t_suffix = '_columnType';
/**
@@ -745,9 +744,9 @@ if (! defined('PMA_MINIMUM_COMMON')) {
// $sql_array[$i-1]['type'] = 'alpha_identifier';
//}
- } elseif (PMA_STR_binarySearchInArr($d_cur_upper, $PMA_SQPdata_reserved_word, $PMA_SQPdata_reserved_word_cnt)) {
+ } elseif (isset($PMA_SQPdata_reserved_word[$d_cur_upper])) {
$t_suffix = '_reservedWord';
- } elseif (PMA_STR_binarySearchInArr($d_cur_upper, $PMA_SQPdata_column_attrib, $PMA_SQPdata_column_attrib_cnt)) {
+ } elseif (isset($PMA_SQPdata_column_attrib[$d_cur_upper])) {
$t_suffix = '_columnAttrib';
// INNODB is a MySQL table type, but in "SHOW INNODB STATUS",
// it should be regarded as a reserved word.
@@ -764,18 +763,18 @@ if (! defined('PMA_MINIMUM_COMMON')) {
|| ($d_bef_prev_upper == 'SET' && $d_prev_upper == '=')
|| ($d_bef_prev_upper == 'CHARSET' && $d_prev_upper == '=')
|| $d_prev_upper == 'CHARSET'
- ) && PMA_STR_binarySearchInArr($d_cur, $mysql_charsets, count($mysql_charsets))) {
+ ) && in_array($d_cur, $mysql_charsets)) {
$t_suffix = '_charset';
}
- } elseif (PMA_STR_binarySearchInArr($d_cur, $mysql_charsets, $mysql_charsets_count)
- || PMA_STR_binarySearchInArr($d_cur, $mysql_collations_flat, $mysql_collations_count)
- || ($d_cur{0} == '_' && PMA_STR_binarySearchInArr(substr($d_cur, 1), $mysql_charsets, $mysql_charsets_count))) {
+ } elseif (in_array($d_cur, $mysql_charsets)
+ || in_array($d_cur, $mysql_collations_flat)
+ || ($d_cur{0} == '_' && in_array(substr($d_cur, 1), $mysql_charsets))) {
$t_suffix = '_charset';
} else {
// Do nothing
}
// check if present in the list of forbidden words
- if ($t_suffix == '_reservedWord' && PMA_STR_binarySearchInArr($d_cur_upper, $PMA_SQPdata_forbidden_word, $PMA_SQPdata_forbidden_word_cnt)) {
+ if ($t_suffix == '_reservedWord' && isset($PMA_SQPdata_forbidden_word[$d_cur_upper])) {
$sql_array[$i]['forbidden'] = true;
} else {
$sql_array[$i]['forbidden'] = false;
@@ -988,49 +987,42 @@ if (! defined('PMA_MINIMUM_COMMON')) {
// 'WHERE'
// );
$words_ending_table_ref = array(
- 'FOR',
- 'GROUP',
- 'HAVING',
- 'LIMIT',
- 'LOCK',
- 'ORDER',
- 'PROCEDURE',
- 'UNION',
- 'WHERE'
+ 'FOR' => 1,
+ 'GROUP' => 1,
+ 'HAVING' => 1,
+ 'LIMIT' => 1,
+ 'LOCK' => 1,
+ 'ORDER' => 1,
+ 'PROCEDURE' => 1,
+ 'UNION' => 1,
+ 'WHERE' => 1
);
- $words_ending_table_ref_cnt = 9; //count($words_ending_table_ref);
$words_ending_clauses = array(
- 'FOR',
- 'LIMIT',
- 'LOCK',
- 'PROCEDURE',
- 'UNION'
+ 'FOR' => 1,
+ 'LIMIT' => 1,
+ 'LOCK' => 1,
+ 'PROCEDURE' => 1,
+ 'UNION' => 1
);
- $words_ending_clauses_cnt = 5; //count($words_ending_clauses);
-
-
-
- // must be sorted
$supported_query_types = array(
- 'SELECT'
+ 'SELECT' => 1,
/*
// Support for these additional query types will come later on.
- 'DELETE',
- 'INSERT',
- 'REPLACE',
- 'TRUNCATE',
- 'UPDATE'
- 'EXPLAIN',
- 'DESCRIBE',
- 'SHOW',
- 'CREATE',
- 'SET',
- 'ALTER'
+ 'DELETE' => 1,
+ 'INSERT' => 1,
+ 'REPLACE' => 1,
+ 'TRUNCATE' => 1,
+ 'UPDATE' => 1,
+ 'EXPLAIN' => 1,
+ 'DESCRIBE' => 1,
+ 'SHOW' => 1,
+ 'CREATE' => 1,
+ 'SET' => 1,
+ 'ALTER' => 1
*/
);
- $supported_query_types_cnt = count($supported_query_types);
// loop #1 for each token: select_expr, table_ref for SELECT
@@ -1120,7 +1112,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
} // end if (querytype was empty)
// Check if we support this type of query
- if (!PMA_STR_binarySearchInArr($subresult['querytype'], $supported_query_types, $supported_query_types_cnt)) {
+ if (!isset($supported_query_types[$subresult['querytype']])) {
// Skip ahead to the next one if we don't
$seek_queryend = true;
continue;
@@ -1410,7 +1402,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
if (($i == $size-1)
|| ($arr[$i]['type'] == 'alpha_reservedWord'
&& !$in_group_concat
- && PMA_STR_binarySearchInArr($upper_data, $words_ending_table_ref, $words_ending_table_ref_cnt))) {
+ && isset($words_ending_table_ref[$upper_data]))) {
$seen_end_of_table_ref = true;
// to be able to save the last table ref, but do not
// set it true if we found a word like "ON" that has
@@ -1653,7 +1645,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
}
// if we find one of the words that could end the clause
- if (PMA_STR_binarySearchInArr($upper_data, $words_ending_clauses, $words_ending_clauses_cnt)) {
+ if (isset($words_ending_clauses[$upper_data])) {
$in_group_by = false;
$in_order_by = false;
@@ -2134,51 +2126,46 @@ if (! defined('PMA_MINIMUM_COMMON')) {
$space_alpha_reserved_word = ' ';
$keywords_with_brackets_1before = array(
- 'INDEX',
- 'KEY',
- 'ON',
- 'USING'
+ 'INDEX' => 1,
+ 'KEY' => 1,
+ 'ON' => 1,
+ 'USING' => 1
);
- $keywords_with_brackets_1before_cnt = 4;
$keywords_with_brackets_2before = array(
- 'IGNORE',
- 'INDEX',
- 'INTO',
- 'KEY',
- 'PRIMARY',
- 'PROCEDURE',
- 'REFERENCES',
- 'UNIQUE',
- 'USE'
+ 'IGNORE' => 1,
+ 'INDEX' => 1,
+ 'INTO' => 1,
+ 'KEY' => 1,
+ 'PRIMARY' => 1,
+ 'PROCEDURE' => 1,
+ 'REFERENCES' => 1,
+ 'UNIQUE' => 1,
+ 'USE' => 1
);
- // $keywords_with_brackets_2before_cnt = count($keywords_with_brackets_2before);
- $keywords_with_brackets_2before_cnt = 9;
// These reserved words do NOT get a newline placed near them.
$keywords_no_newline = array(
- 'AS',
- 'ASC',
- 'DESC',
- 'DISTINCT',
- 'DUPLICATE',
- 'HOUR',
- 'INTERVAL',
- 'IS',
- 'LIKE',
- 'NOT',
- 'NULL',
- 'ON',
- 'REGEXP'
+ 'AS' => 1,
+ 'ASC' => 1,
+ 'DESC' => 1,
+ 'DISTINCT' => 1,
+ 'DUPLICATE' => 1,
+ 'HOUR' => 1,
+ 'INTERVAL' => 1,
+ 'IS' => 1,
+ 'LIKE' => 1,
+ 'NOT' => 1,
+ 'NULL' => 1,
+ 'ON' => 1,
+ 'REGEXP' => 1
);
- $keywords_no_newline_cnt = 12;
// These reserved words introduce a privilege list
$keywords_priv_list = array(
- 'GRANT',
- 'REVOKE'
+ 'GRANT' => 1,
+ 'REVOKE' => 1
);
- $keywords_priv_list_cnt = 2;
if ($number_of_tokens == -1) {
$number_of_tokens = $arr['len'];
@@ -2228,9 +2215,9 @@ if (! defined('PMA_MINIMUM_COMMON')) {
if (($typearr[1] == 'alpha_functionName') || ($typearr[1] == 'alpha_columnType') || ($typearr[1] == 'punct')
|| ($typearr[3] == 'digit_integer') || ($typearr[3] == 'digit_hex') || ($typearr[3] == 'digit_float')
|| (($typearr[0] == 'alpha_reservedWord')
- && PMA_STR_binarySearchInArr(strtoupper($arr[$i - 2]['data']), $keywords_with_brackets_2before, $keywords_with_brackets_2before_cnt))
+ && isset($keywords_with_brackets_2before[strtoupper($arr[$i - 2]['data'])]))
|| (($typearr[1] == 'alpha_reservedWord')
- && PMA_STR_binarySearchInArr(strtoupper($arr[$i - 1]['data']), $keywords_with_brackets_1before, $keywords_with_brackets_1before_cnt))
+ && isset($keywords_with_brackets_1before[strtoupper($arr[$i - 1]['data'])]))
) {
$functionlevel++;
$infunction = true;
@@ -2420,9 +2407,9 @@ if (! defined('PMA_MINIMUM_COMMON')) {
if ((($typearr[1] != 'alpha_reservedWord')
|| (($typearr[1] == 'alpha_reservedWord')
- && PMA_STR_binarySearchInArr(strtoupper($arr[$i - 1]['data']), $keywords_no_newline, $keywords_no_newline_cnt)))
+ && isset($keywords_no_newline[strtoupper($arr[$i - 1]['data'])])))
&& ($typearr[1] != 'punct_level_plus')
- && (!PMA_STR_binarySearchInArr($arr[$i]['data'], $keywords_no_newline, $keywords_no_newline_cnt))) {
+ && (!isset($keywords_no_newline[$arr[$i]['data']]))) {
// do not put a space before the first token, because
// we use a lot of pattern matching checking for the
// first reserved word at beginning of query
@@ -2448,7 +2435,7 @@ if (! defined('PMA_MINIMUM_COMMON')) {
} else {
// on first keyword, check if it introduces a
// privilege list
- if (PMA_STR_binarySearchInArr($arr[$i]['data'], $keywords_priv_list, $keywords_priv_list_cnt)) {
+ if (isset($keywords_priv_list[$arr[$i]['data']])) {
$in_priv_list = true;
}
}
diff --git a/libraries/string.lib.php b/libraries/string.lib.php
index 650a2ef..96bfcfc 100644
--- a/libraries/string.lib.php
+++ b/libraries/string.lib.php
@@ -124,37 +124,4 @@ function PMA_STR_isSqlIdentifier($c, $dot_is_valid = false)
|| ($dot_is_valid != false && $c == '.'));
} // end of the "PMA_STR_isSqlIdentifier()" function
-
-/**
- * Binary search of a value in a sorted array
- *
- * $arr MUST be sorted, due to binary search
- *
- * @param string string to search for
- * @param array sorted array to search into
- * @param integer size of sorted array to search into
- *
- * @return boolean whether the string has been found or not
- */
-function PMA_STR_binarySearchInArr($str, $arr, $arrsize)
-{
- $top = $arrsize - 1;
- $bottom = 0;
- $found = false;
-
- while ($top >= $bottom && $found == false) {
- $mid = intval(($top + $bottom) / 2);
- $res = strcmp($str, $arr[$mid]);
- if ($res == 0) {
- $found = true;
- } elseif ($res < 0) {
- $top = $mid - 1;
- } else {
- $bottom = $mid + 1;
- }
- } // end while
-
- return $found;
-} // end of the "PMA_STR_binarySearchInArr()" function
-
?>
hooks/post-receive
--
phpMyAdmin