diff options
author | Dan Ungureanu <udan1107@gmail.com> | 2015-07-15 16:46:40 +0300 |
---|---|---|
committer | Dan Ungureanu <udan1107@gmail.com> | 2015-07-15 16:46:40 +0300 |
commit | 56ce2d7a37a1ed1d6aabf2b7908ae5da43863497 (patch) | |
tree | 86e013988fcf31139aa0ffb7396df227e7b1e0a6 /src | |
parent | 875fd4377a920e9d6e10a752cf96735c9ef41230 (diff) | |
download | sql-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.php | 2 | ||||
-rw-r--r-- | src/Components/Array2d.php | 4 | ||||
-rw-r--r-- | src/Components/ArrayObj.php | 4 | ||||
-rw-r--r-- | src/Components/Expression.php | 6 | ||||
-rw-r--r-- | src/Components/FieldDefinition.php | 14 | ||||
-rw-r--r-- | src/Components/OptionsArray.php | 2 | ||||
-rw-r--r-- | src/Components/RenameOperation.php | 8 | ||||
-rw-r--r-- | src/Context.php | 6 | ||||
-rw-r--r-- | src/Parser.php | 4 | ||||
-rw-r--r-- | src/Statement.php | 2 | ||||
-rw-r--r-- | src/Statements/CreateStatement.php | 18 | ||||
-rw-r--r-- | src/Utils/Misc.php | 1 |
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; /** |