diff options
Diffstat (limited to 'libraries/sqlparser.lib.php')
-rw-r--r-- | libraries/sqlparser.lib.php | 141 |
1 files changed, 70 insertions, 71 deletions
diff --git a/libraries/sqlparser.lib.php b/libraries/sqlparser.lib.php index f940be116b..daac5c71dd 100644 --- a/libraries/sqlparser.lib.php +++ b/libraries/sqlparser.lib.php @@ -222,7 +222,7 @@ function PMA_SQP_parse($sql) $sql = str_replace("\r\n", "\n", $sql); $sql = str_replace("\r", "\n", $sql); - $len = $pmaString->strlen($sql); + $len = /*overload*/mb_strlen($sql); if ($len == 0) { return array(); } @@ -277,7 +277,7 @@ function PMA_SQP_parse($sql) $this_was_quote = false; while ($count2 < $len) { - $c = $pmaString->substr($sql, $count2, 1); + $c = /*overload*/mb_substr($sql, $count2, 1); $count1 = $count2; $previous_was_space = $this_was_space; @@ -309,12 +309,12 @@ function PMA_SQP_parse($sql) // MySQL style # // C style /* */ // ANSI style -- - $next_c = $pmaString->substr($sql, $count2 + 1, 1); + $next_c = /*overload*/mb_substr($sql, $count2 + 1, 1); if (($c == '#') || (($count2 + 1 < $len) && ($c == '/') && ($next_c == '*')) || (($count2 + 2 == $len) && ($c == '-') && ($next_c == '-')) || (($count2 + 2 < $len) && ($c == '-') && ($next_c == '-') - && (($pmaString->substr($sql, $count2 + 2, 1) <= ' '))) + && ((/*overload*/mb_substr($sql, $count2 + 2, 1) <= ' '))) ) { $count2++; $pos = 0; @@ -322,22 +322,22 @@ function PMA_SQP_parse($sql) switch ($c) { case '#': $type = 'mysql'; - $pos = $pmaString->strpos($sql, "\n", $count2); + $pos = /*overload*/mb_strpos($sql, "\n", $count2); break; case '-': $type = 'ansi'; - $pos = $pmaString->strpos($sql, "\n", $count2); + $pos = /*overload*/mb_strpos($sql, "\n", $count2); break; case '/': $type = 'c'; - $pos = $pmaString->strpos($sql, '*/', $count2); + $pos = /*overload*/mb_strpos($sql, '*/', $count2); $pos += 2; break; default: break; } // end switch $count2 = ($pos < $count2) ? $len : $pos; - $str = $pmaString->substr( + $str = /*overload*/mb_substr( $sql, $count1, $count2 - $count1 ); PMA_SQP_arrayAdd( @@ -347,14 +347,14 @@ function PMA_SQP_parse($sql) } // end if // Checks for something inside quotation marks - if ($pmaString->strpos($quote_list, $c) !== false) { + if (/*overload*/mb_strpos($quote_list, $c) !== false) { $startquotepos = $count2; $quotetype = $c; $count2++; $pos = $count2; do { $oldpos = $pos; - $pos = $pmaString->strpos( + $pos = /*overload*/mb_strpos( ' ' . $sql, $quotetype, $oldpos + 1 ) - 1; // ($pos === false) @@ -371,7 +371,7 @@ function PMA_SQP_parse($sql) * * SELECT * FROM `table` */ - $pos_quote_separator = $pmaString->strpos( + $pos_quote_separator = /*overload*/mb_strpos( ' ' . $sql, $GLOBALS['sql_delimiter'], $oldpos + 1 ) - 1; if ($pos_quote_separator < 0) { @@ -381,9 +381,9 @@ function PMA_SQP_parse($sql) $pos = $len; } else { $len += 1; - $sql = $pmaString->substr( + $sql = /*overload*/mb_substr( $sql, 0, $pos_quote_separator - ) . '`' . $pmaString->substr( + ) . '`' . /*overload*/mb_substr( $sql, $pos_quote_separator ); $sql_array['raw'] = $sql; @@ -420,8 +420,8 @@ function PMA_SQP_parse($sql) $pos ++; continue; } elseif (($pos + 1 < $len) - && ($pmaString->substr($sql, $pos, 1) == $quotetype) - && ($pmaString->substr($sql, $pos + 1, 1) == $quotetype) + && (/*overload*/mb_substr($sql, $pos, 1) == $quotetype) + && (/*overload*/mb_substr($sql, $pos + 1, 1) == $quotetype) ) { $pos = $pos + 2; continue; @@ -449,25 +449,25 @@ function PMA_SQP_parse($sql) default: break; } // end switch - $data = $pmaString->substr($sql, $count1, $count2 - $count1); + $data = /*overload*/mb_substr($sql, $count1, $count2 - $count1); PMA_SQP_arrayAdd($sql_array, $type, $data, $arraysize, $count2); continue; } // Checks for brackets - if ($pmaString->strpos($bracket_list, $c) !== false) { + if (/*overload*/mb_strpos($bracket_list, $c) !== false) { // All bracket tokens are only one item long $this_was_bracket = true; $count2++; - if ($pmaString->strpos('([{', $c) !== false) { + if (/*overload*/mb_strpos('([{', $c) !== false) { $type_type = 'open'; } else { $type_type = 'close'; } - if ($pmaString->strpos('()', $c) !== false) { + if (/*overload*/mb_strpos('()', $c) !== false) { $type_style = 'round'; - } elseif ($pmaString->strpos('[]', $c) !== false) { + } elseif (/*overload*/mb_strpos('[]', $c) !== false) { $type_style = 'square'; } else { $type_style = 'curly'; @@ -498,7 +498,7 @@ function PMA_SQP_parse($sql) if ($pmaString->isSqlIdentifier($c, false) || $c == '@' || ($c == '.' - && $pmaString->isDigit($pmaString->substr($sql, $count2 + 1, 1)) + && $pmaString->isDigit(/*overload*/mb_substr($sql, $count2 + 1, 1)) && ($previous_was_space || $previous_was_bracket || $previous_was_listsep)) ) { @@ -526,7 +526,7 @@ function PMA_SQP_parse($sql) $is_digit && $c == '0' && $count2 < $len - && $pmaString->substr($sql, $count2, 1) == 'x' + && /*overload*/mb_substr($sql, $count2, 1) == 'x' ); $is_float_digit = $c == '.'; $is_float_digit_exponent = false; @@ -558,11 +558,11 @@ function PMA_SQP_parse($sql) while (($count2 < $len) && $pmaString->isSqlIdentifier( - $pmaString->substr($sql, $count2, 1), + /*overload*/mb_substr($sql, $count2, 1), ($is_sql_variable || $is_digit) ) ) { - $c2 = $pmaString->substr($sql, $count2, 1); + $c2 = /*overload*/mb_substr($sql, $count2, 1); if ($is_sql_variable && ($c2 == '.')) { $count2++; continue; @@ -576,7 +576,7 @@ function PMA_SQP_parse($sql) $debugstr = __('Invalid Identifer') . ' @ ' . ($count1+1) . "\n" . 'STR: ' . htmlspecialchars( - $pmaString->substr( + /*overload*/mb_substr( $sql, $count1, $count2 - $count1 ) ); @@ -612,7 +612,7 @@ function PMA_SQP_parse($sql) } // end while $l = $count2 - $count1; - $str = $pmaString->substr($sql, $count1, $l); + $str = /*overload*/mb_substr($sql, $count1, $l); if ($is_digit || $is_float_digit || $is_hex_digit) { $type = 'digit'; @@ -636,10 +636,10 @@ function PMA_SQP_parse($sql) } // Checks for punct - if ($pmaString->strpos($allpunct_list, $c) !== false) { + if (/*overload*/mb_strpos($allpunct_list, $c) !== false) { while (($count2 < $len) - && $pmaString->strpos( - $allpunct_list, $pmaString->substr( + && /*overload*/mb_strpos( + $allpunct_list, /*overload*/mb_substr( $sql, $count2, 1 ) ) !== false @@ -650,7 +650,7 @@ function PMA_SQP_parse($sql) if ($l == 1) { $punct_data = $c; } else { - $punct_data = $pmaString->substr($sql, $count1, $l); + $punct_data = /*overload*/mb_substr($sql, $count1, $l); } // Special case, sometimes, although two characters are @@ -702,15 +702,15 @@ function PMA_SQP_parse($sql) } elseif (($last2 == '/*') || (($last2 == '--') && ($count2 == $len - || $pmaString->substr($sql, $count2, 1) <= ' ')) + || /*overload*/mb_substr($sql, $count2, 1) <= ' ')) ) { $count2 -= 2; - $punct_data = $pmaString->substr( + $punct_data = /*overload*/mb_substr( $sql, $count1, $count2 - $count1 ); } elseif (($last == '-') || ($last == '+') || ($last == '!')) { $count2--; - $punct_data = $pmaString->substr( + $punct_data = /*overload*/mb_substr( $sql, $count1, $count2 - $count1 ); } elseif ($last != '~') { @@ -737,7 +737,7 @@ function PMA_SQP_parse($sql) $count2++; $debugstr = 'C1 C2 LEN: ' . $count1 . ' ' . $count2 . ' ' . $len . "\n" - . 'STR: ' . $pmaString->substr( + . 'STR: ' . /*overload*/mb_substr( $sql, $count1, $count2 - $count1 ) . "\n"; PMA_SQP_bug($debugstr, $sql); @@ -759,7 +759,7 @@ function PMA_SQP_parse($sql) $d_prev = ''; $d_cur = ''; $d_next_upper = $t_next == 'alpha' - ? $pmaString->strtoupper($d_next) + ? /*overload*/mb_strtoupper($d_next) : $d_next; $d_prev_upper = ''; $d_cur_upper = ''; @@ -777,7 +777,7 @@ function PMA_SQP_parse($sql) $t_next = $sql_array[$i + 1]['type']; $d_next = $sql_array[$i + 1]['data']; $d_next_upper - = $t_next == 'alpha' ? $pmaString->strtoupper($d_next) : $d_next; + = $t_next == 'alpha' ? /*overload*/mb_strtoupper($d_next) : $d_next; } else { $t_next = ''; $d_next = ''; @@ -874,7 +874,7 @@ function PMA_SQP_parse($sql) } elseif (in_array($d_cur, $mysql_charsets) || in_array($d_cur, $mysql_collations_flat) || ($d_cur{0} == '_' - && in_array($pmaString->substr($d_cur, 1), $mysql_charsets)) + && in_array(/*overload*/mb_substr($d_cur, 1), $mysql_charsets)) ) { $t_suffix = '_charset'; } else { @@ -921,13 +921,13 @@ function PMA_SQP_typeCheck($toCheck, $whatWeWant) /** @var PMA_String $pmaString */ $pmaString = $GLOBALS['PMA_String']; - if ($pmaString->strpos($whatWeWant, $typeSeparator) !== false) { + if (/*overload*/mb_strpos($whatWeWant, $typeSeparator) !== false) { return false; } return strncmp( $whatWeWant, $toCheck, - $pmaString->strpos($toCheck, $typeSeparator) + /*overload*/mb_strpos($toCheck, $typeSeparator) ) == 0; } @@ -1233,7 +1233,7 @@ function PMA_SQP_analyze($arr) } // ============================================================== if ($arr[$i]['type'] == 'alpha_functionName') { - $upper_data = $pmaString->strtoupper($arr[$i]['data']); + $upper_data = /*overload*/mb_strtoupper($arr[$i]['data']); if ($upper_data =='EXTRACT') { $in_extract = true; $number_of_brackets_in_extract = 0; @@ -1248,7 +1248,7 @@ function PMA_SQP_analyze($arr) if ($arr[$i]['type'] == 'alpha_reservedWord') { // We don't know what type of query yet, so run this if ($subresult['querytype'] == '') { - $subresult['querytype'] = $pmaString->strtoupper($arr[$i]['data']); + $subresult['querytype'] = /*overload*/mb_strtoupper($arr[$i]['data']); } // end if (querytype was empty) // Check if we support this type of query @@ -1259,7 +1259,7 @@ function PMA_SQP_analyze($arr) } // end if (query not supported) // upper once - $upper_data = $pmaString->strtoupper($arr[$i]['data']); + $upper_data = /*overload*/mb_strtoupper($arr[$i]['data']); /** * @todo reset for each query? */ @@ -1394,7 +1394,7 @@ function PMA_SQP_analyze($arr) ); if (isset($alias_for_select_expr) - && $pmaString->strlen($alias_for_select_expr) + && /*overload*/mb_strlen($alias_for_select_expr) ) { // we had found an alias for this select expression $subresult['select_expr'][$current_select_expr]['alias'] @@ -1469,7 +1469,7 @@ function PMA_SQP_analyze($arr) 'table_true_name' => '' ); if (isset($alias_for_table_ref) - && $pmaString->strlen($alias_for_table_ref) + && /*overload*/mb_strlen($alias_for_table_ref) ) { $subresult['table_ref'][$current_table_ref]['table_alias'] = $alias_for_table_ref; @@ -1514,7 +1514,7 @@ function PMA_SQP_analyze($arr) $truename = $subresult['table_ref'][$tr]['table_true_name']; for ($se=0; $se <= $current_select_expr; $se++) { if (isset($alias) - && $pmaString->strlen($alias) + && /*overload*/mb_strlen($alias) && $subresult['select_expr'][$se]['table_true_name'] == $alias ) { $subresult['select_expr'][$se]['table_true_name'] @@ -1669,7 +1669,7 @@ function PMA_SQP_analyze($arr) } if ($arr[$i]['type'] == 'alpha_reservedWord') { - $upper_data = $pmaString->strtoupper($arr[$i]['data']); + $upper_data = /*overload*/mb_strtoupper($arr[$i]['data']); if ($upper_data == 'SELECT' && $number_of_brackets > 0) { $in_subquery = true; @@ -1725,7 +1725,7 @@ function PMA_SQP_analyze($arr) } if ($upper_data == 'LIMIT' && ! $in_subquery) { - $section_before_limit = $pmaString->substr( + $section_before_limit = /*overload*/mb_substr( $arr['raw'], 0, $arr[$i]['pos'] - 5 ); $in_limit = true; @@ -1744,7 +1744,7 @@ function PMA_SQP_analyze($arr) && $subresult['queryflags']['select_from'] == 1 && ($i + 1) < $size && $arr[$i + 1]['type'] == 'alpha_reservedWord' - && $pmaString->strtoupper($arr[$i + 1]['data']) == 'ANALYSE' + && /*overload*/mb_strtoupper($arr[$i + 1]['data']) == 'ANALYSE' ) { $subresult['queryflags']['is_analyse'] = 1; } @@ -1756,7 +1756,7 @@ function PMA_SQP_analyze($arr) && $subresult['queryflags']['select_from'] == 1 && ($i + 1) < $size && $arr[$i + 1]['type'] == 'alpha_reservedWord' - && $pmaString->strtoupper($arr[$i + 1]['data']) == 'OUTFILE' + && /*overload*/mb_strtoupper($arr[$i + 1]['data']) == 'OUTFILE' ) { $subresult['queryflags']['is_export'] = 1; } @@ -1773,7 +1773,7 @@ function PMA_SQP_analyze($arr) && !isset($subresult['queryflags']['is_group']) && ($i + 1) < $size && $arr[$i + 1]['type'] == 'alpha_functionName' - && $pmaString->strtoupper($arr[$i + 1]['data']) == 'COUNT' + && /*overload*/mb_strtoupper($arr[$i + 1]['data']) == 'COUNT' ) { $subresult['queryflags']['is_count'] = 1; } @@ -1831,12 +1831,12 @@ function PMA_SQP_analyze($arr) && ($i + 1) < $size && $arr[$i + 1]['type'] == 'alpha_reservedWord' && in_array( - $pmaString->strtoupper($arr[$i + 1]['data']), + /*overload*/mb_strtoupper($arr[$i + 1]['data']), $arrayKeyWords ) && ($i + 2) < $size && $arr[$i + 2]['type'] == 'alpha_reservedWord' - && $pmaString->strtoupper($arr[$i + 2]['data']) == 'DISTINCT' + && /*overload*/mb_strtoupper($arr[$i + 2]['data']) == 'DISTINCT' ) { $subresult['queryflags']['is_group'] = 1; } @@ -1887,7 +1887,7 @@ function PMA_SQP_analyze($arr) // We use $GLOBALS['PMA_String']->substr() to be charset-safe; // otherwise if the table name contains accents, the unsorted // query would be missing some characters. - $unsorted_query = $GLOBALS['PMA_String']->substr( + $unsorted_query = /*overload*/mb_substr( $arr['raw'], 0, $arr[$i]['pos'] - 8 ); $in_order_by = true; @@ -1916,7 +1916,7 @@ function PMA_SQP_analyze($arr) $sep = ' '; if ($arr[$i]['type'] == 'alpha_functionName') { $sep=''; - $upper_data = $pmaString->strtoupper($arr[$i]['data']); + $upper_data = /*overload*/mb_strtoupper($arr[$i]['data']); if ($upper_data =='GROUP_CONCAT') { $in_group_concat = true; $number_of_brackets_in_group_concat = 0; @@ -1953,11 +1953,11 @@ function PMA_SQP_analyze($arr) // for the presence of INSERT|LOAD DATA if ($arr[$i]['type'] == 'alpha_identifier' - && $pmaString->strtoupper($arr[$i]['data']) == 'DATA' + && /*overload*/mb_strtoupper($arr[$i]['data']) == 'DATA' && ($i - 1) >= 0 && $arr[$i - 1]['type'] == 'alpha_reservedWord' && in_array( - $pmaString->strtoupper($arr[$i - 1]['data']), + /*overload*/mb_strtoupper($arr[$i - 1]['data']), array("INSERT", "LOAD") ) ) { @@ -1967,7 +1967,7 @@ function PMA_SQP_analyze($arr) // for the presence of SUM|AVG|STD|STDDEV|MIN|MAX|BIT_OR|BIT_AND if ($arr[$i]['type'] == 'alpha_functionName' - && in_array($pmaString->strtoupper($arr[$i]['data']), $arrayFunctions) + && in_array(/*overload*/mb_strtoupper($arr[$i]['data']), $arrayFunctions) && isset($subresult['queryflags']['select_from']) && $subresult['queryflags']['select_from'] == 1 && !isset($subresult['queryflags']['is_group']) @@ -2070,7 +2070,7 @@ function PMA_SQP_analyze($arr) for ($i = 0; $i < $size; $i++) { if ($arr[$i]['type'] == 'alpha_reservedWord') { - $upper_data = $pmaString->strtoupper($arr[$i]['data']); + $upper_data = /*overload*/mb_strtoupper($arr[$i]['data']); if ($upper_data == 'NOT' && $in_timestamp_options) { if (! isset($create_table_fields)) { @@ -2133,7 +2133,7 @@ function PMA_SQP_analyze($arr) if (isset($arr[$i+1]) && $arr[$i+1]['type'] == 'alpha_reservedWord' ) { - $second_upper_data = $pmaString->strtoupper($arr[$i+1]['data']); + $second_upper_data = /*overload*/mb_strtoupper($arr[$i+1]['data']); if ($second_upper_data == 'DELETE') { $clause = 'on_delete'; } @@ -2147,10 +2147,9 @@ function PMA_SQP_analyze($arr) if (isset($clause) && ($arr[$i+2]['type'] == 'alpha_reservedWord' || ($arr[$i+2]['type'] == 'alpha_identifier' - && $pmaString->strtoupper($arr[$i+2]['data'])=='NO')) + && /*overload*/mb_strtoupper($arr[$i+2]['data'])=='NO')) ) { - $third_upper_data = $pmaString - ->strtoupper($arr[$i+2]['data']); + $third_upper_data = /*overload*/mb_strtoupper($arr[$i+2]['data']); if ($third_upper_data == 'CASCADE' || $third_upper_data == 'RESTRICT' ) { @@ -2160,7 +2159,7 @@ function PMA_SQP_analyze($arr) ) { if ($arr[$i+3]['type'] == 'alpha_reservedWord') { $value = $third_upper_data . '_' - . $pmaString->strtoupper($arr[$i+3]['data']); + . /*overload*/mb_strtoupper($arr[$i+3]['data']); } } elseif ($third_upper_data == 'CURRENT_TIMESTAMP') { if ($clause == 'on_update' @@ -2204,7 +2203,7 @@ function PMA_SQP_analyze($arr) } if (($arr[$i]['type'] == 'alpha_columnAttrib')) { - $upper_data = $pmaString->strtoupper($arr[$i]['data']); + $upper_data = /*overload*/mb_strtoupper($arr[$i]['data']); if ($seen_create_table && $in_create_table_fields) { if ($upper_data == 'DEFAULT') { $seen_default = true; @@ -2220,7 +2219,7 @@ function PMA_SQP_analyze($arr) if (($arr[$i]['type'] == 'alpha_columnType') || ($arr[$i]['type'] == 'alpha_functionName' && $seen_create_table) ) { - $upper_data = $pmaString->strtoupper($arr[$i]['data']); + $upper_data = /*overload*/mb_strtoupper($arr[$i]['data']); if ($seen_create_table && $in_create_table_fields && isset($current_identifier) ) { @@ -2475,12 +2474,12 @@ function PMA_SQP_format( $infunction = false; $keyword_brackets_2before = isset( $keywords_with_brackets_2before[ - $pmaString->strtoupper($arr[$i - 2]['data']) + /*overload*/mb_strtoupper($arr[$i - 2]['data']) ] ); $keyword_brackets_1before = isset( $keywords_with_brackets_1before[ - $pmaString->strtoupper($arr[$i - 1]['data']) + /*overload*/mb_strtoupper($arr[$i - 1]['data']) ] ); // Make sure this array is sorted! @@ -2613,7 +2612,7 @@ function PMA_SQP_format( // select * from mysql.user where binary user="root" // binary is marked as alpha_columnAttrib // but should be marked as a reserved word - if ($pmaString->strtoupper($arr[$i]['data']) == 'BINARY' + if (/*overload*/mb_strtoupper($arr[$i]['data']) == 'BINARY' && $typearr[3] == 'alpha_identifier' ) { $after .= ' '; @@ -2629,7 +2628,7 @@ function PMA_SQP_format( // as an identifier name) if ($mode != 'query_only') { - $arr[$i]['data'] = $pmaString->strtoupper($arr[$i]['data']); + $arr[$i]['data'] = /*overload*/mb_strtoupper($arr[$i]['data']); } list($before, $in_priv_list) = PMA_SQP_format_getBeforeAndInPrivList( @@ -2747,7 +2746,7 @@ function PMA_SQP_format_getBeforeAndInPrivList( if (!((($typearr[1] != 'alpha_reservedWord') || (($typearr[1] == 'alpha_reservedWord') - && isset($keywords_no_newline[$GLOBALS['PMA_String']->strtoupper($data)]))) + && isset($keywords_no_newline[/*overload*/mb_strtoupper($data)]))) && ($typearr[1] != 'punct_level_plus') && (!isset($keywords_no_newline[$arr[$index]['data']]))) ) { @@ -2909,7 +2908,7 @@ function PMA_SQP_isKeyWord($column) { global $PMA_SQPdata_forbidden_word; return in_array( - $GLOBALS['PMA_String']->strtoupper($column), + /*overload*/mb_strtoupper($column), $PMA_SQPdata_forbidden_word ); } |