summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Ungureanu <udan1107@gmail.com>2015-08-18 02:24:42 +0300
committerDan Ungureanu <udan1107@gmail.com>2015-08-18 02:24:42 +0300
commit14c54da98c3b4f18c78ff44c22fbdd20e8ef6e18 (patch)
treea4604f6b1d1095790e313b71bf226e4291788ca8
parent1568adba1af7bf061354a30afd169e29fa43f133 (diff)
downloadsql-parser-14c54da98c3b4f18c78ff44c22fbdd20e8ef6e18.zip
sql-parser-14c54da98c3b4f18c78ff44c22fbdd20e8ef6e18.tar.gz
sql-parser-14c54da98c3b4f18c78ff44c22fbdd20e8ef6e18.tar.bz2
Replaced explicit calls to Component::build() with implicit calls to Component::__toString().
Fixed bugs that caused field names like '0', '0.0', etc. to be considered invalid. Refactoring.
-rw-r--r--src/Components/AlterOperation.php7
-rw-r--r--src/Components/ArrayObj.php19
-rw-r--r--src/Components/Condition.php8
-rw-r--r--src/Components/CreateDefinition.php16
-rw-r--r--src/Components/DataType.php6
-rw-r--r--src/Components/Expression.php38
-rw-r--r--src/Components/FunctionCall.php2
-rw-r--r--src/Components/IntoKeyword.php2
-rw-r--r--src/Components/JoinKeyword.php4
-rw-r--r--src/Components/Key.php5
-rw-r--r--src/Components/OptionsArray.php7
-rw-r--r--src/Components/OrderKeyword.php10
-rw-r--r--src/Components/ParameterDefinition.php17
-rw-r--r--src/Components/PartitionDefinition.php7
-rw-r--r--src/Components/Reference.php2
-rw-r--r--src/Components/RenameOperation.php9
-rw-r--r--src/Components/SetOperation.php6
-rw-r--r--src/Components/UnionKeyword.php6
-rw-r--r--src/Lexer.php2
-rw-r--r--src/Statements/CreateStatement.php2
-rw-r--r--src/Utils/Misc.php25
-rw-r--r--src/Utils/Query.php26
-rw-r--r--tests/Components/CreateDefinitionTest.php2
-rw-r--r--tests/Components/ExpressionTest.php10
-rw-r--r--tools/TestGenerator.php8
25 files changed, 112 insertions, 134 deletions
diff --git a/src/Components/AlterOperation.php b/src/Components/AlterOperation.php
index c99d391..348f81f 100644
--- a/src/Components/AlterOperation.php
+++ b/src/Components/AlterOperation.php
@@ -202,7 +202,6 @@ class AlterOperation extends Component
__('Unrecognized alter operation.'),
$list->tokens[$list->idx]
);
- return null;
}
--$list->idx;
@@ -216,9 +215,9 @@ class AlterOperation extends Component
*/
public static function build($component)
{
- $ret = OptionsArray::build($component->options) . ' ';
- if (!empty($component->field)) {
- $ret .= Expression::build($component->field) . ' ';
+ $ret = $component->options . ' ';
+ if ((isset($component->field)) && ($component->field !== '')) {
+ $ret .= $component->field . ' ';
}
$ret .= TokensList::build($component->unknown);
return $ret;
diff --git a/src/Components/ArrayObj.php b/src/Components/ArrayObj.php
index 0e0b183..d3017fa 100644
--- a/src/Components/ArrayObj.php
+++ b/src/Components/ArrayObj.php
@@ -136,7 +136,6 @@ class ArrayObj extends Component
break;
}
}
-
}
return $ret;
@@ -150,21 +149,11 @@ class ArrayObj extends Component
public static function build($component)
{
if (is_array($component)) {
- $values = array();
- foreach ($component as $c) {
- $values[] = static::build($c);
- }
- return implode(', ', $values);
+ return implode(', ', $component);
+ } elseif (!empty($component->raw)) {
+ return '(' . implode(', ', $component->raw) . ')';
} else {
- $values = array();
- if (!empty($component->raw)) {
- $values = $component->raw;
- } else {
- foreach ($component->values as $value) {
- $values[] = $value;
- }
- }
- return '(' . implode(', ', $values) . ')';
+ return '(' . implode(', ', $component->values) . ')';
}
}
}
diff --git a/src/Components/Condition.php b/src/Components/Condition.php
index 1f515dc..c8b4d1e 100644
--- a/src/Components/Condition.php
+++ b/src/Components/Condition.php
@@ -202,10 +202,10 @@ class Condition extends Component
*/
public static function build($component)
{
- $ret = array();
- foreach ($component as $c) {
- $ret[] = $c->expr;
+ if (is_array($component)) {
+ return implode(' ', $component);
+ } else {
+ return $component->expr;
}
- return implode(' ', $ret);
}
}
diff --git a/src/Components/CreateDefinition.php b/src/Components/CreateDefinition.php
index 5671801..54c2475 100644
--- a/src/Components/CreateDefinition.php
+++ b/src/Components/CreateDefinition.php
@@ -278,11 +278,7 @@ class CreateDefinition extends Component
public static function build($component)
{
if (is_array($component)) {
- $ret = array();
- foreach ($component as $c) {
- $ret[] = static::build($c);
- }
- return "(\n" . implode(",\n", $ret) . "\n)";
+ return "(\n" . implode(",\n", $component) . "\n)";
} else {
$tmp = '';
@@ -290,23 +286,23 @@ class CreateDefinition extends Component
$tmp .= 'CONSTRAINT ';
}
- if (!empty($component->name)) {
+ if ((isset($component->name)) && ($component->name !== '')) {
$tmp .= Context::escape($component->name) . ' ';
}
if (!empty($component->type)) {
- $tmp .= DataType::build($component->type) . ' ';
+ $tmp .= $component->type . ' ';
}
if (!empty($component->key)) {
- $tmp .= Key::build($component->key) . ' ';
+ $tmp .= $component->key . ' ';
}
if (!empty($component->references)) {
- $tmp .= 'REFERENCES ' . Reference::build($component->references) . ' ';
+ $tmp .= 'REFERENCES ' . $component->references . ' ';
}
- $tmp .= OptionsArray::build($component->options);
+ $tmp .= $component->options;
return trim($tmp);
}
diff --git a/src/Components/DataType.php b/src/Components/DataType.php
index 48ce5b7..8d42ea1 100644
--- a/src/Components/DataType.php
+++ b/src/Components/DataType.php
@@ -160,9 +160,7 @@ class DataType extends Component
if (!empty($component->parameters)) {
$tmp = '(' . implode(', ', $component->parameters) . ')';
}
- return trim(
- $component->name . $tmp . ' '
- . OptionsArray::build($component->options)
- );
+
+ return trim($component->name . $tmp . ' ' . $component->options);
}
}
diff --git a/src/Components/Expression.php b/src/Components/Expression.php
index 11e7132..ad4d5e8 100644
--- a/src/Components/Expression.php
+++ b/src/Components/Expression.php
@@ -350,32 +350,36 @@ class Expression extends Component
}
/**
- * @param Expression $component The component to be built.
+ * @param Expression|Expression[] $component The component to be built.
*
* @return string
*/
public static function build($component)
{
- if (!empty($component->expr)) {
- $ret = $component->expr;
+ if (is_array($component)) {
+ return implode($component, ', ');
} else {
- $fields = array();
- if (!empty($component->database)) {
- $fields[] = $component->database;
- }
- if (!empty($component->table)) {
- $fields[] = $component->table;
+ if (!empty($component->expr)) {
+ $ret = $component->expr;
+ } else {
+ $fields = array();
+ if ((isset($component->database)) && ($component->database !== '')) {
+ $fields[] = $component->database;
+ }
+ if ((isset($component->table)) && ($component->table !== '')) {
+ $fields[] = $component->table;
+ }
+ if ((isset($component->column)) && ($component->column !== '')) {
+ $fields[] = $component->column;
+ }
+ $ret = implode('.', Context::escape($fields));
}
- if (!empty($component->column)) {
- $fields[] = $component->column;
+
+ if (!empty($component->alias)) {
+ $ret .= ' AS ' . Context::escape($component->alias);
}
- $ret = implode('.', Context::escape($fields));
- }
- if (!empty($component->alias)) {
- $ret .= ' AS ' . Context::escape($component->alias);
+ return $ret;
}
-
- return $ret;
}
}
diff --git a/src/Components/FunctionCall.php b/src/Components/FunctionCall.php
index 43eb082..55d9e2c 100644
--- a/src/Components/FunctionCall.php
+++ b/src/Components/FunctionCall.php
@@ -120,6 +120,6 @@ class FunctionCall extends Component
*/
public static function build($component)
{
- return $component->name . ArrayObj::build($component->parameters);
+ return $component->name . $component->parameters;
}
}
diff --git a/src/Components/IntoKeyword.php b/src/Components/IntoKeyword.php
index 5e4afcb..05540e6 100644
--- a/src/Components/IntoKeyword.php
+++ b/src/Components/IntoKeyword.php
@@ -141,7 +141,7 @@ class IntoKeyword extends Component
if ($component->dest instanceof Expression) {
$columns = !empty($component->columns) ?
'(' . implode(', ', $component->columns) . ')' : '';
- return Expression::build($component->dest) . $columns;
+ return $component->dest . $columns;
} else {
return 'OUTFILE "' . $component->dest . '"';
}
diff --git a/src/Components/JoinKeyword.php b/src/Components/JoinKeyword.php
index 237022a..b95912e 100644
--- a/src/Components/JoinKeyword.php
+++ b/src/Components/JoinKeyword.php
@@ -158,8 +158,8 @@ class JoinKeyword extends Component
{
$ret = array();
foreach ($component as $c) {
- $ret[] = (($c->type === 'JOIN') ? 'JOIN ' : ($c->type . ' JOIN ')) .
- Expression::build($c->expr) . ' ON ' . Condition::build($c->on);
+ $ret[] = (($c->type === 'JOIN') ? 'JOIN ' : ($c->type . ' JOIN '))
+ . $c->expr . ' ON ' . Condition::build($c->on);
}
return implode(' ', $ret);
}
diff --git a/src/Components/Key.php b/src/Components/Key.php
index 1364a8c..ef5d3a8 100644
--- a/src/Components/Key.php
+++ b/src/Components/Key.php
@@ -145,7 +145,6 @@ class Key extends Component
++$list->idx;
break;
}
-
}
--$list->idx;
@@ -163,8 +162,8 @@ class Key extends Component
if (!empty($component->name)) {
$ret .= Context::escape($component->name) . ' ';
}
- $ret .= '(' . implode(', ', Context::escape($component->columns)) . ')';
- $ret .= OptionsArray::build($component->options);
+ $ret .= '(' . implode(', ', Context::escape($component->columns)) . ') '
+ . $component->options;
return trim($ret);
}
}
diff --git a/src/Components/OptionsArray.php b/src/Components/OptionsArray.php
index 6b43844..a496273 100644
--- a/src/Components/OptionsArray.php
+++ b/src/Components/OptionsArray.php
@@ -256,9 +256,10 @@ class OptionsArray extends Component
*/
public static function build($component)
{
- if ((empty($component)) || (!is_array($component->options))) {
+ if (empty($component->options)) {
return '';
}
+
$options = array();
foreach ($component->options as $option) {
if (!is_array($option)) {
@@ -266,9 +267,7 @@ class OptionsArray extends Component
} else {
$options[] = $option['name']
. (!empty($option['equals']) ? '=' : ' ')
- . (!empty($option['expr']) ? ((string) $option['expr']) : $option['value']);
- // If `$option['expr']` happens to be a component, the magic
- // method will build it automatically.
+ . (!empty($option['expr']) ? $option['expr'] : $option['value']);
}
}
return implode(' ', $options);
diff --git a/src/Components/OrderKeyword.php b/src/Components/OrderKeyword.php
index 81bff2f..b6918e9 100644
--- a/src/Components/OrderKeyword.php
+++ b/src/Components/OrderKeyword.php
@@ -126,20 +126,16 @@ class OrderKeyword extends Component
}
/**
- * @param OrderKeyword $component The component to be built.
+ * @param OrderKeyword|OrderKeyword[] $component The component to be built.
*
* @return string
*/
public static function build($component)
{
if (is_array($component)) {
- $ret = array();
- foreach ($component as $c) {
- $ret[] = static::build($c);
- }
- return implode(", ", $ret);
+ return implode(', ', $component);
} else {
- return Expression::build($component->expr) . ' ' . $component->type;
+ return $component->expr . ' ' . $component->type;
}
}
}
diff --git a/src/Components/ParameterDefinition.php b/src/Components/ParameterDefinition.php
index 79b4845..d24aefc 100644
--- a/src/Components/ParameterDefinition.php
+++ b/src/Components/ParameterDefinition.php
@@ -130,7 +130,7 @@ class ParameterDefinition extends Component
}
// Last iteration was not saved.
- if (!empty($expr->name)) {
+ if ((isset($expr->name)) && ($expr->name !== '')) {
$ret[] = $expr;
}
@@ -145,18 +145,17 @@ class ParameterDefinition extends Component
*/
public static function build($component)
{
- $ret = array();
- foreach ($component as $c) {
+ if (is_array($component)) {
+ return '(' . implode(', ', $component) . ')';
+ } else {
$tmp = '';
- if (!empty($c->inOut)) {
- $tmp .= $c->inOut . ' ';
+ if (!empty($component->inOut)) {
+ $tmp .= $component->inOut . ' ';
}
- $ret[] = trim(
- $tmp . Context::escape($c->name) . ' ' .
- DataType::build($c->type)
+ return trim(
+ $tmp . Context::escape($component->name) . ' ' . $component->type
);
}
- return '(' . implode(', ', $ret) . ')';
}
}
diff --git a/src/Components/PartitionDefinition.php b/src/Components/PartitionDefinition.php
index df6d3f6..ad31176 100644
--- a/src/Components/PartitionDefinition.php
+++ b/src/Components/PartitionDefinition.php
@@ -198,11 +198,7 @@ class PartitionDefinition extends Component
public static function build($component)
{
if (is_array($component)) {
- $ret = array();
- foreach ($component as $c) {
- $ret[] = static::build($c);
- }
- return "(\n" . implode(",\n", $ret) . "\n)";
+ return "(\n" . implode(",\n", $component) . "\n)";
} else {
if ($component->isSubpartition) {
return 'SUBPARTITION ' . $component->name;
@@ -213,7 +209,6 @@ class PartitionDefinition extends Component
. ' VALUES ' . $component->type . ' ' . $component->expr
. $subpartitions;
}
-
}
}
}
diff --git a/src/Components/Reference.php b/src/Components/Reference.php
index 36d3971..3515791 100644
--- a/src/Components/Reference.php
+++ b/src/Components/Reference.php
@@ -145,7 +145,7 @@ class Reference extends Component
return trim(
Context::escape($component->table)
. ' (' . implode(', ', Context::escape($component->columns)) . ') '
- . OptionsArray::build($component->options)
+ . $component->options
);
}
}
diff --git a/src/Components/RenameOperation.php b/src/Components/RenameOperation.php
index 34c62bb..b8b1691 100644
--- a/src/Components/RenameOperation.php
+++ b/src/Components/RenameOperation.php
@@ -168,14 +168,9 @@ class RenameOperation extends Component
public static function build($component)
{
if (is_array($component)) {
- $values = array();
- foreach ($component as $c) {
- $values[] = static::build($c);
- }
- return implode(', ', $values);
+ return implode(', ', $component);
} else {
- return Expression::build($component->old) . ' TO '
- . Expression::build($component->new);
+ return $component->old . ' TO ' . $component->new;
}
}
}
diff --git a/src/Components/SetOperation.php b/src/Components/SetOperation.php
index 8b6af87..d272cab 100644
--- a/src/Components/SetOperation.php
+++ b/src/Components/SetOperation.php
@@ -128,11 +128,7 @@ class SetOperation extends Component
public static function build($component)
{
if (is_array($component)) {
- $ret = array();
- foreach ($component as $c) {
- $ret[] = static::build($c);
- }
- return implode(", ", $ret);
+ return implode(', ', $component);
} else {
return $component->column . ' = ' . $component->value;
}
diff --git a/src/Components/UnionKeyword.php b/src/Components/UnionKeyword.php
index cbdb529..8cf8a9f 100644
--- a/src/Components/UnionKeyword.php
+++ b/src/Components/UnionKeyword.php
@@ -30,10 +30,6 @@ class UnionKeyword extends Component
*/
public static function build($component)
{
- $ret = array();
- foreach ($component as $c) {
- $ret[] = $c->build();
- }
- return implode(" UNION ", $ret);
+ return implode(' UNION ', $component);
}
}
diff --git a/src/Lexer.php b/src/Lexer.php
index 1d18399..e4561de 100644
--- a/src/Lexer.php
+++ b/src/Lexer.php
@@ -331,7 +331,7 @@ namespace SqlParser {
$pos = $this->last + 1;
// Parsing the delimiter.
- $this->delimiter = '';
+ $this->delimiter = null;
while ((++$this->last < $this->len) && (!Context::isWhitespace($this->str[$this->last]))) {
$this->delimiter .= $this->str[$this->last];
}
diff --git a/src/Statements/CreateStatement.php b/src/Statements/CreateStatement.php
index bc7cf73..9b07737 100644
--- a/src/Statements/CreateStatement.php
+++ b/src/Statements/CreateStatement.php
@@ -343,7 +343,7 @@ class CreateStatement extends Statement
)
);
- if (empty($this->name)) {
+ if ((!isset($this->name)) || ($this->name === '')) {
$parser->error(
__('The name of the entity was expected.'),
$list->tokens[$list->idx]
diff --git a/src/Utils/Misc.php b/src/Utils/Misc.php
index 1597648..cec5653 100644
--- a/src/Utils/Misc.php
+++ b/src/Utils/Misc.php
@@ -60,11 +60,12 @@ class Misc
}
foreach ($expressions as $expr) {
- if (empty($expr->table)) {
+ if ((!isset($expr->table)) || ($expr->table === '')) {
continue;
}
- $thisDb = empty($expr->database) ? $database : $expr->database;
+ $thisDb = ((isset($expr->database)) && ($expr->database !== '')) ?
+ $expr->database : $database;
if (!isset($retval[$thisDb])) {
$retval[$thisDb] = array(
@@ -75,7 +76,8 @@ class Misc
if (!isset($retval[$thisDb]['tables'][$expr->table])) {
$retval[$thisDb]['tables'][$expr->table] = array(
- 'alias' => empty($expr->alias) ? null : $expr->alias,
+ 'alias' => ((isset($expr->alias)) && ($expr->alias !== '')) ?
+ $expr->alias : null,
'columns' => array(),
);
}
@@ -87,20 +89,23 @@ class Misc
}
foreach ($statement->expr as $expr) {
- if ((empty($expr->column)) || (empty($expr->alias))) {
+ if ((!isset($expr->column)) || ($expr->column === '')
+ || (!isset($expr->alias)) || ($expr->alias === '')
+ ) {
continue;
}
- $thisDb = empty($expr->database) ? $database : $expr->database;
+ $thisDb = ((isset($expr->database)) && ($expr->database !== '')) ?
+ $expr->database : $database;
- if (empty($expr->table)) {
- foreach ($retval[$thisDb]['tables'] as &$table) {
- $table['columns'][$expr->column] = $expr->alias;
- }
- } else {
+ if ((isset($expr->table)) && ($expr->table !== '')) {
$thisTable = isset($tables[$thisDb][$expr->table]) ?
$tables[$thisDb][$expr->table] : $expr->table;
$retval[$thisDb]['tables'][$thisTable]['columns'][$expr->column] = $expr->alias;
+ } else {
+ foreach ($retval[$thisDb]['tables'] as &$table) {
+ $table['columns'][$expr->column] = $expr->alias;
+ }
}
}
diff --git a/src/Utils/Query.php b/src/Utils/Query.php
index 5723ec6..4325b65 100644
--- a/src/Utils/Query.php
+++ b/src/Utils/Query.php
@@ -372,7 +372,7 @@ class Query
{
$parser = new Parser($query);
- if (!isset($parser->statements[0])) {
+ if (empty($parser->statements[0])) {
return array();
}
@@ -390,10 +390,12 @@ class Query
// Finding tables' aliases and their associated real names.
$tableAliases = array();
foreach ($statement->from as $expr) {
- if ((!empty($expr->table)) && (!empty($expr->alias))) {
+ if ((isset($expr->table)) && ($expr->table !== '')
+ && (isset($expr->alias)) && ($expr->alias !== '')
+ ) {
$tableAliases[$expr->alias] = array(
$expr->table,
- !empty($expr->database) ? $expr->database : null
+ isset($expr->database) ? $expr->database : null
);
}
}
@@ -402,14 +404,15 @@ class Query
// Sometimes, this is not possible because the tables aren't defined
// explicitly (e.g. SELECT * FROM film, SELECT film_id FROM film).
foreach ($statement->expr as $expr) {
- if (!empty($expr->table)) {
- if (empty($tableAliases[$expr->table])) {
+ if ((isset($expr->table)) && ($expr->table !== '')) {
+ if (isset($tableAliases[$expr->table])) {
+ $arr = $tableAliases[$expr->table];
+ } else {
$arr = array(
$expr->table,
- !empty($expr->database) ? $expr->database : null
+ ((isset($expr->database)) && ($expr->database !== '')) ?
+ $expr->database : null
);
- } else {
- $arr = $tableAliases[$expr->table];
}
if (!in_array($arr, $ret['select_tables'])) {
$ret['select_tables'][] = $arr;
@@ -424,10 +427,11 @@ class Query
// extracted from the FROM clause.
if (empty($ret['select_tables'])) {
foreach ($statement->from as $expr) {
- if (!empty($expr->table)) {
+ if ((isset($expr->table)) && ($expr->table !== '')) {
$arr = array(
$expr->table,
- !empty($expr->database) ? $expr->database : null
+ ((isset($expr->database)) && ($expr->database !== '')) ?
+ $expr->database : null
);
if (!in_array($arr, $ret['select_tables'])) {
$ret['select_tables'][] = $arr;
@@ -607,7 +611,7 @@ class Query
}
if ($brackets == 0) {
- // Checking if we changed sections.
+ // Checking if the section was changed.
if (($token->type === Token::TYPE_KEYWORD)
&& (isset($clauses[$token->value]))
&& ($clauses[$token->value] >= $currIdx)
diff --git a/tests/Components/CreateDefinitionTest.php b/tests/Components/CreateDefinitionTest.php
index 81c8ba8..a7b7f86 100644
--- a/tests/Components/CreateDefinitionTest.php
+++ b/tests/Components/CreateDefinitionTest.php
@@ -19,7 +19,7 @@ class CreateDefinitionTest extends TestCase
$this->assertEquals('str', $component[0]->name);
$this->assertEquals('FULLTEXT INDEX', $component[1]->key->type);
$this->assertEquals('indx', $component[1]->key->name);
- $this->assertEquals('FULLTEXT INDEX `indx` (`str`)', $component[1]);
+ $this->assertEquals('FULLTEXT INDEX `indx` (`str`)', (string) $component[1]);
}
public function testParseErr1()
diff --git a/tests/Components/ExpressionTest.php b/tests/Components/ExpressionTest.php
index 01492fd..863d914 100644
--- a/tests/Components/ExpressionTest.php
+++ b/tests/Components/ExpressionTest.php
@@ -60,7 +60,13 @@ class ExpressionTest extends TestCase
public function testBuild()
{
- $component = new Expression('1 + 2', 'three');
- $this->assertEquals(Expression::build($component), '1 + 2 AS `three`');
+ $component = array(
+ new Expression('1 + 2', 'three'),
+ new Expression('1 + 3', 'four')
+ );
+ $this->assertEquals(
+ Expression::build($component),
+ '1 + 2 AS `three`, 1 + 3 AS `four`'
+ );
}
}
diff --git a/tools/TestGenerator.php b/tools/TestGenerator.php
index 1d1be2d..d833463 100644
--- a/tools/TestGenerator.php
+++ b/tools/TestGenerator.php
@@ -158,9 +158,11 @@ class TestGenerator
// Creating required directories to maintain the structure.
// Ignoring errors if the folder structure exists already.
- @mkdir($outputFile);
- if ($debug !== null) {
- @mkdir($debugFile);
+ if (!is_dir($outputFile)) {
+ mkdir($outputFile);
+ }
+ if (($debug !== null) && (!is_dir($debugFile))) {
+ mkdir($debugFile);
}
// Generating tests recursively.