summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDan Ungureanu <udan1107@gmail.com>2015-07-15 16:46:40 +0300
committerDan Ungureanu <udan1107@gmail.com>2015-07-15 16:46:40 +0300
commit56ce2d7a37a1ed1d6aabf2b7908ae5da43863497 (patch)
tree86e013988fcf31139aa0ffb7396df227e7b1e0a6 /src
parent875fd4377a920e9d6e10a752cf96735c9ef41230 (diff)
downloadsql-parser-56ce2d7a37a1ed1d6aabf2b7908ae5da43863497.zip
sql-parser-56ce2d7a37a1ed1d6aabf2b7908ae5da43863497.tar.gz
sql-parser-56ce2d7a37a1ed1d6aabf2b7908ae5da43863497.tar.bz2
Better error detection. Fixed some of the old messages.
Minor coding style fixes.
Diffstat (limited to 'src')
-rw-r--r--src/Components/AlterOperation.php2
-rw-r--r--src/Components/Array2d.php4
-rw-r--r--src/Components/ArrayObj.php4
-rw-r--r--src/Components/Expression.php6
-rw-r--r--src/Components/FieldDefinition.php14
-rw-r--r--src/Components/OptionsArray.php2
-rw-r--r--src/Components/RenameOperation.php8
-rw-r--r--src/Context.php6
-rw-r--r--src/Parser.php4
-rw-r--r--src/Statement.php2
-rw-r--r--src/Statements/CreateStatement.php18
-rw-r--r--src/Utils/Misc.php1
12 files changed, 48 insertions, 23 deletions
diff --git a/src/Components/AlterOperation.php b/src/Components/AlterOperation.php
index 9bb56cf..9f859e2 100644
--- a/src/Components/AlterOperation.php
+++ b/src/Components/AlterOperation.php
@@ -187,7 +187,7 @@ class AlterOperation extends Component
}
if ($ret->options->isEmpty()) {
- $parser->error("Unrecognized ALTER operation.", $list->tokens[$list->idx]);
+ $parser->error('Unrecognized alter operation.', $list->tokens[$list->idx]);
return null;
}
diff --git a/src/Components/Array2d.php b/src/Components/Array2d.php
index 90be806..117ad75 100644
--- a/src/Components/Array2d.php
+++ b/src/Components/Array2d.php
@@ -92,7 +92,7 @@ class Array2d extends Component
if ($count === -1) {
$count = $arrCount;
} elseif ($arrCount != $count) {
- $parser->error("Expected {$count} values, found {$arrCount}.", $token);
+ $parser->error("{$count} values were expected, but found {$arrCount}.", $token);
}
$ret[] = $arr;
$parsed = true;
@@ -112,7 +112,7 @@ class Array2d extends Component
if (!$parsed) {
$parser->error(
- "Expected open bracket followed by a set of values.",
+ 'An opening bracket followed by a set of values was expected.',
$list->tokens[$list->idx]
);
}
diff --git a/src/Components/ArrayObj.php b/src/Components/ArrayObj.php
index 01571de..d38077c 100644
--- a/src/Components/ArrayObj.php
+++ b/src/Components/ArrayObj.php
@@ -97,7 +97,7 @@ class ArrayObj extends Component
if ($state === 0) {
if (($token->type !== Token::TYPE_OPERATOR) || ($token->value !== '(')) {
- $parser->error('An open bracket was expected.', $token);
+ $parser->error('An opening bracket was expected.', $token);
break;
}
$state = 1;
@@ -111,7 +111,7 @@ class ArrayObj extends Component
$state = 2;
} elseif ($state === 2) {
if (($token->type !== Token::TYPE_OPERATOR) || (($token->value !== ',') && ($token->value !== ')'))) {
- $parser->error('Symbols \')\' or \',\' were expected', $token);
+ $parser->error('A comma or a closing bracket was expected', $token);
break;
}
if ($token->value === ',') {
diff --git a/src/Components/Expression.php b/src/Components/Expression.php
index f20a8f7..964ceb9 100644
--- a/src/Components/Expression.php
+++ b/src/Components/Expression.php
@@ -146,7 +146,7 @@ class Expression extends Component
* Keeps track of the previous token.
* Possible values:
* string, if function was previously found;
- * true, if open bracket was previously found;
+ * true, if opening bracket was previously found;
* null, in any other case.
* @var string|bool $prev
*/
@@ -219,7 +219,7 @@ class Expression extends Component
break;
}
} elseif ($brackets < 0) {
- $parser->error('Unexpected bracket.', $token);
+ $parser->error('Unexpected closing bracket.', $token);
$brackets = 0;
}
} elseif ($token->value === ',') {
@@ -304,7 +304,7 @@ class Expression extends Component
}
if ($alias === 2) {
- $parser->error('Alias was expected.', $list->tokens[$list->idx - 1]);
+ $parser->error('An alias was expected.', $list->tokens[$list->idx - 1]);
}
// Whitespaces might be added at the end.
diff --git a/src/Components/FieldDefinition.php b/src/Components/FieldDefinition.php
index 717cc4f..4df98cb 100644
--- a/src/Components/FieldDefinition.php
+++ b/src/Components/FieldDefinition.php
@@ -171,7 +171,7 @@ class FieldDefinition extends Component
* 4 --------------------[ REFERENCES ]------------------> 4
*
* 5 ------------------------[ , ]-----------------------> 1
- * 5 ------------------------[ ) ]-----------------------> -1
+ * 5 ------------------------[ ) ]-----------------------> 6 (-1)
*
* @var int
*/
@@ -197,6 +197,9 @@ class FieldDefinition extends Component
if ($state === 0) {
if (($token->type === Token::TYPE_OPERATOR) && ($token->value === '(')) {
$state = 1;
+ } else {
+ $parser->error('An opening bracket was expected.', $token);
+ break;
}
} elseif ($state === 1) {
if (($token->type === Token::TYPE_KEYWORD) && ($token->value === 'CONSTRAINT')) {
@@ -231,13 +234,12 @@ class FieldDefinition extends Component
$expr = new FieldDefinition();
if ($token->value === ',') {
$state = 1;
- continue;
} elseif ($token->value === ')') {
+ $state = 6;
++$list->idx;
break;
}
}
-
}
// Last iteration was not saved.
@@ -245,12 +247,16 @@ class FieldDefinition extends Component
$ret[] = $expr;
}
+ if (($state !== 0) && ($state !== 6)) {
+ $parser->error('A closing bracket was expected.', $list->tokens[$list->idx - 1]);
+ }
+
--$list->idx;
return $ret;
}
/**
- * @param FieldDefinition[] $component The component to be built.
+ * @param FieldDefinition|FieldDefinition[] $component The component to be built.
*
* @return string
*/
diff --git a/src/Components/OptionsArray.php b/src/Components/OptionsArray.php
index 2a112ed..a6b612d 100644
--- a/src/Components/OptionsArray.php
+++ b/src/Components/OptionsArray.php
@@ -266,7 +266,7 @@ class OptionsArray extends Component
* Checks if it has the specified option and returns it value or true.
*
* @param string $key The key to be checked.
- * @param string $getExpr Gets the expression instead of the value.
+ * @param bool $getExpr Gets the expression instead of the value.
* The value is the processed form of the expression.
*
* @return mixed
diff --git a/src/Components/RenameOperation.php b/src/Components/RenameOperation.php
index fc73331..9a91f81 100644
--- a/src/Components/RenameOperation.php
+++ b/src/Components/RenameOperation.php
@@ -105,14 +105,14 @@ class RenameOperation extends Component
)
);
if (empty($expr->old)) {
- $parser->error('Expected old table name.', $token);
+ $parser->error('The old name of the table was expected.', $token);
}
$state = 1;
} elseif ($state === 1) {
if (($token->type === Token::TYPE_KEYWORD) && ($token->value === 'TO')) {
$state = 2;
} else {
- $parser->error('Expected `TO` keyword.', $token);
+ $parser->error('Keyword "TO" was expected.', $token);
break;
}
} elseif ($state === 2) {
@@ -126,7 +126,7 @@ class RenameOperation extends Component
)
);
if (empty($expr->new)) {
- $parser->error('Expected new table name.', $token);
+ $parser->error('The new name of the table was expected.', $token);
}
$state = 3;
$parsed = true;
@@ -144,7 +144,7 @@ class RenameOperation extends Component
}
if (!$parsed) {
- $parser->error('Expected a rename operation.', $list->tokens[$list->idx - 1]);
+ $parser->error('A rename operation was expected.', $list->tokens[$list->idx - 1]);
}
// Last iteration was not saved.
diff --git a/src/Context.php b/src/Context.php
index f917ed2..efcb8df 100644
--- a/src/Context.php
+++ b/src/Context.php
@@ -434,7 +434,7 @@ abstract class Context
* Loads the context with the closest version to the one specified.
*
* The closest context is found by replacing last digits with zero until one
- * is loaded succesfully.
+ * is loaded successfully.
*
* @see Context::load()
*
@@ -448,11 +448,11 @@ abstract class Context
/**
* The number of replaces done by `preg_replace`.
* This actually represents whether a new context was generated or not.
- * @var int
+ * @var int $count
*/
$count = 0;
- // As long as a new context can be generated, we try to laod it.
+ // As long as a new context can be generated, we try to load it.
do {
try {
// Trying to load the new context.
diff --git a/src/Parser.php b/src/Parser.php
index c095d1c..f476306 100644
--- a/src/Parser.php
+++ b/src/Parser.php
@@ -376,6 +376,10 @@ class Parser
&& ($lastStatement instanceof SelectStatement)
&& ($stmt instanceof SelectStatement)
) {
+ /**
+ * Last SELECT statement.
+ * @var SelectStatement $lastStatement
+ */
$lastStatement->union[] = $stmt;
$inUnion = false;
} else {
diff --git a/src/Statement.php b/src/Statement.php
index 1de84e8..4eb3ccb 100644
--- a/src/Statement.php
+++ b/src/Statement.php
@@ -244,7 +244,7 @@ abstract class Statement
// There is no parser for this keyword and isn't the beginning
// of a statement (so no options) either.
$parser->error(
- 'Unrecognized keyword "' . $token->value . '".',
+ 'Unrecognized keyword.',
$token
);
continue;
diff --git a/src/Statements/CreateStatement.php b/src/Statements/CreateStatement.php
index 8475448..afabc6a 100644
--- a/src/Statements/CreateStatement.php
+++ b/src/Statements/CreateStatement.php
@@ -287,7 +287,15 @@ class CreateStatement extends Statement
'skipColumn' => true,
)
);
- ++$list->idx; // Skipping field.
+
+ if (empty($this->name)) {
+ $parser->error(
+ 'The name of the entity was expected.',
+ $list->tokens[$list->idx]
+ );
+ } else {
+ ++$list->idx; // Skipping field.
+ }
if ($this->options->has('DATABASE')) {
$this->entityOptions = OptionsArray::parse(
@@ -297,6 +305,12 @@ class CreateStatement extends Statement
);
} elseif ($this->options->has('TABLE')) {
$this->fields = FieldDefinition::parse($parser, $list);
+ if (empty($this->fields)) {
+ $parser->error(
+ 'At least one field definition was expected.',
+ $list->tokens[$list->idx]
+ );
+ }
++$list->idx;
$this->entityOptions = OptionsArray::parse(
@@ -312,7 +326,7 @@ class CreateStatement extends Statement
$token = $list->getNextOfType(Token::TYPE_KEYWORD);
if ($token->value !== 'RETURNS') {
$parser->error(
- '\'RETURNS\' keyword was expected.',
+ 'A \'RETURNS\' keyword was expected.',
$token
);
} else {
diff --git a/src/Utils/Misc.php b/src/Utils/Misc.php
index 9d3dfa9..2107172 100644
--- a/src/Utils/Misc.php
+++ b/src/Utils/Misc.php
@@ -8,6 +8,7 @@
*/
namespace SqlParser\Utils;
+use SqlParser\Components\Expression;
use SqlParser\Statements\SelectStatement;
/**