Merge branch 'master' of ssh://phpmyadmin.git.sourceforge.net/gitroot/phpmyadmin/phpmyadmin

This commit is contained in:
Marc Delisle
2010-08-30 10:18:12 -04:00
4 changed files with 194 additions and 12 deletions

View File

@@ -1039,6 +1039,9 @@ function PMA_showMessage($message, $sql_query = null, $type = 'notice', $is_view
} else {
// Parse SQL if needed
$parsed_sql = PMA_SQP_parse($query_base);
if (PMA_SQP_isError()) {
unset($parsed_sql);
}
}
// Analyze it
@@ -1242,8 +1245,8 @@ function PMA_showMessage($message, $sql_query = null, $type = 'notice', $is_view
}
echo '</div><br />' . "\n";
// If we are in an Ajax request, we have most probably been called in
// PMA_ajaxResponse(). Hence, collect the buffer contents and return it
// If we are in an Ajax request, we have most probably been called in
// PMA_ajaxResponse(). Hence, collect the buffer contents and return it
// to PMA_ajaxResponse(), which will encode it for JSON.
if( $GLOBALS['is_ajax_request'] == true && !isset($GLOBALS['buffer_message']) ) {
$buffer_contents = ob_get_contents();

View File

@@ -717,10 +717,6 @@ function PMA_displayTableHeaders(&$is_display, &$fields_meta, $fields_cnt = 0, $
$GLOBALS['mime_map'] = PMA_getMIME($db, $table);
}
if ($is_display['sort_lnk'] == '1') {
$select_expr = $analyzed_sql[0]['select_expr_clause'];
}
// See if we have to highlight any header fields of a WHERE query.
// Uses SQL-Parser results.
$highlight_columns = array();
@@ -1299,7 +1295,7 @@ function PMA_displayTableBody(&$dt_result, &$is_display, $map, $analyzed_sql) {
// reset $class from $data_inline_edit_class to '' as we can't edit binary data
$class = '';
if (stristr($field_flags, 'BINARY')) {
if (!isset($row[$i]) || is_null($row[$i])) {
$vertical_display['data'][$row_no][$i] = ' <td align="right"' . $mouse_events . ' class="' . $class . ($condition_field ? ' condition' : '') . '"><i>NULL</i></td>' . "\n";
@@ -2094,7 +2090,7 @@ function PMA_displayTable(&$dt_result, &$the_disp_mode, $analyzed_sql)
'submit_mult_change', __('Change'), 'b_edit.png');
PMA_buttonOrImage('submit_mult', 'mult_submit',
'submit_mult_delete', $delete_text, 'b_drop.png');
if ($analyzed_sql[0]['querytype'] == 'SELECT') {
if (isset($analyzed_sql[0]) && $analyzed_sql[0]['querytype'] == 'SELECT') {
PMA_buttonOrImage('submit_mult', 'mult_submit',
'submit_mult_export', __('Export'),
'b_tblexport.png');
@@ -2352,7 +2348,7 @@ function PMA_prepare_row_data($mouse_events, $class, $condition_field, $analyzed
}
// continue the <td> tag started before calling this function:
$result = $mouse_events . ' class="' . $class . ($condition_field ? ' condition' : '') . $nowrap
$result = $mouse_events . ' class="' . $class . ($condition_field ? ' condition' : '') . $nowrap
. ' ' . ($is_field_truncated ? ' truncated' : '')
. ($transform_function != $default_function ? ' transformed' : '')
. (isset($map[$meta->name]) ? ' relation' : '')

View File

@@ -43,7 +43,9 @@ if (! defined('PMA_MINIMUM_COMMON')) {
* Include data for the SQL Parser
*/
require_once './libraries/sqlparser.data.php';
require_once './libraries/mysql_charsets.lib.php';
if (!defined('TESTSUITE')) {
require_once './libraries/mysql_charsets.lib.php';
}
if (!isset($mysql_charsets)) {
$mysql_charsets = array();
$mysql_charsets_count = 0;
@@ -2091,8 +2093,8 @@ if (! defined('PMA_MINIMUM_COMMON')) {
$docu = TRUE;
break;
} // end switch
// inner_sql is a span that exists for all cases
// of $cfg['SQP']['fmtType'] to make possible a replacement
// inner_sql is a span that exists for all cases
// of $cfg['SQP']['fmtType'] to make possible a replacement
// for inline editing
$str .= '<span class="inner_sql">';
$close_docu_link = false;

View File

@@ -0,0 +1,181 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* tests for correctness of SQL parser
*
* @package phpMyAdmin-test
*/
/**
* Tests core.
*/
require_once 'PHPUnit/Framework.php';
define('PHPMYADMIN', 1);
define('TESTSUITE', 1);
$GLOBALS['charset'] = 'utf-8';
function __($s) {
return $s;
}
/**
* Include to test.
*/
require_once './libraries/sqlparser.lib.php';
/**
* Test for SQL parser
*
* @package phpMyAdmin-test
*/
class PMA_SQL_parser_test extends PHPUnit_Framework_TestCase
{
private function assertParser($sql, $expected, $error = '')
{
$parsed_sql = PMA_SQP_parse($sql);
$this->assertEquals(PMA_SQP_getErrorString(), $error);
$this->assertEquals($parsed_sql, $expected);
}
public function testParse_1()
{
$this->assertParser('SELECT 1;', array (
'raw' => 'SELECT 1;',
0 =>
array (
'type' => 'alpha_reservedWord',
'data' => 'SELECT',
'pos' => 6,
'forbidden' => true,
),
1 =>
array (
'type' => 'digit_integer',
'data' => '1',
'pos' => 8,
),
2 =>
array (
'type' => 'punct_queryend',
'data' => ';',
'pos' => 0,
),
'len' => 3,
));
}
public function testParse_2()
{
$this->assertParser('SELECT * from aaa;', array (
'raw' => 'SELECT * from aaa;',
0 =>
array (
'type' => 'alpha_reservedWord',
'data' => 'SELECT',
'pos' => 6,
'forbidden' => true,
),
1 =>
array (
'type' => 'punct',
'data' => '*',
'pos' => 0,
),
2 =>
array (
'type' => 'alpha_reservedWord',
'data' => 'from',
'pos' => 13,
'forbidden' => true,
),
3 =>
array (
'type' => 'alpha_identifier',
'data' => 'aaa',
'pos' => 17,
'forbidden' => false,
),
4 =>
array (
'type' => 'punct_queryend',
'data' => ';',
'pos' => 0,
),
'len' => 5,
));
}
public function testParse_3()
{
$this->assertParser('SELECT * from `aaa`;', array (
'raw' => 'SELECT * from `aaa`;',
0 =>
array (
'type' => 'alpha_reservedWord',
'data' => 'SELECT',
'pos' => 6,
'forbidden' => true,
),
1 =>
array (
'type' => 'punct',
'data' => '*',
'pos' => 0,
),
2 =>
array (
'type' => 'alpha_reservedWord',
'data' => 'from',
'pos' => 13,
'forbidden' => true,
),
3 =>
array (
'type' => 'quote_backtick',
'data' => '`aaa`',
'pos' => 0,
),
4 =>
array (
'type' => 'punct_queryend',
'data' => ';',
'pos' => 0,
),
'len' => 5,
));
}
public function testParse_4()
{
$this->assertParser('SELECT * from `aaa;', array (
'raw' => 'SELECT * from `aaa;',
0 =>
array (
'type' => 'alpha',
'data' => 'SELECT',
'pos' => 6,
),
1 =>
array (
'type' => 'punct',
'data' => '*',
'pos' => 0,
),
2 =>
array (
'type' => 'alpha',
'data' => 'from',
'pos' => 13,
),
),
'<p>There seems to be an error in your SQL query. The MySQL server error output below, if there is any, may also help you in diagnosing the problem</p>
<pre>
ERROR: Unclosed quote @ 14
STR: `
SQL: SELECT * from `aaa;
</pre>
');
}
}
?>