264 lines
6.1 KiB
PHP
264 lines
6.1 KiB
PHP
<?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_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_5()
|
|
{
|
|
$this->assertParser('SELECT * FROM `a_table` tbla INNER JOIN b_table` tblb ON tblb.id = tbla.id WHERE tblb.field1 != tbla.field1`;', array (
|
|
'raw' => 'SELECT * FROM `a_table` tbla INNER JOIN b_table` tblb ON tblb.id = tbla.id WHERE tblb.field1 != tbla.field1`;',
|
|
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' => '`a_table`',
|
|
'pos' => 0,
|
|
),
|
|
4 =>
|
|
array (
|
|
'type' => 'alpha_identifier',
|
|
'data' => 'tbla',
|
|
'pos' => 28,
|
|
'forbidden' => false,
|
|
),
|
|
5 =>
|
|
array (
|
|
'type' => 'alpha_reservedWord',
|
|
'data' => 'INNER',
|
|
'pos' => 34,
|
|
'forbidden' => true,
|
|
),
|
|
6 =>
|
|
array (
|
|
'type' => 'alpha_reservedWord',
|
|
'data' => 'JOIN',
|
|
'pos' => 39,
|
|
'forbidden' => true,
|
|
),
|
|
7 =>
|
|
array (
|
|
'type' => 'alpha_identifier',
|
|
'data' => 'b_table',
|
|
'pos' => 47,
|
|
'forbidden' => false,
|
|
),
|
|
8 =>
|
|
array (
|
|
'type' => 'quote_backtick',
|
|
'data' => '` tblb ON tblb.id = tbla.id WHERE tblb.field1 != tbla.field1`',
|
|
'pos' => 0,
|
|
),
|
|
9 =>
|
|
array (
|
|
'type' => 'punct_queryend',
|
|
'data' => ';',
|
|
'pos' => 0,
|
|
),
|
|
'len' => 10,
|
|
));
|
|
}
|
|
}
|
|
?>
|