diff options
author | William Desportes <williamdes@wdes.fr> | 2019-11-01 13:23:18 +0100 |
---|---|---|
committer | William Desportes <williamdes@wdes.fr> | 2019-11-01 13:25:00 +0100 |
commit | 3edeac32e02f1f53d72f404d196dfe5816cec2a8 (patch) | |
tree | b2230f26ad2fc5bde827fb1068e2e9900c58d9c9 | |
parent | 1a073cd8f0ffa74124123475753a3752717339a8 (diff) | |
parent | 4a919aebab5d1a1f7d7bae72ccfdf0bab23586aa (diff) | |
download | sql-parser-3edeac32e02f1f53d72f404d196dfe5816cec2a8.zip sql-parser-3edeac32e02f1f53d72f404d196dfe5816cec2a8.tar.gz sql-parser-3edeac32e02f1f53d72f404d196dfe5816cec2a8.tar.bz2 |
Merge branch 'QA'
Signed-off-by: William Desportes <williamdes@wdes.fr>
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | src/Components/PartitionDefinition.php | 14 | ||||
-rw-r--r-- | tests/Components/PartitionDefinitionTest.php | 12 |
3 files changed, 23 insertions, 4 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index bf72c73..a6c5078 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * Fix for PHP deprecations messages about implode for php 7.4+ (#258) * Parse CHECK keyword on table definition (#264) * Parse truncate statement (#221) +* Fix wrong parsing of partitions (#265) ## [5.0.0] - 2019-05-09 diff --git a/src/Components/PartitionDefinition.php b/src/Components/PartitionDefinition.php index e43f765..84322b8 100644 --- a/src/Components/PartitionDefinition.php +++ b/src/Components/PartitionDefinition.php @@ -170,10 +170,16 @@ class PartitionDefinition extends Component $ret->name = $token->value; // Looking ahead for a 'VALUES' keyword. - $idx = $list->idx; - $list->getNext(); - $nextToken = $list->getNext(); - $list->idx = $idx; + // Loop until the end of the partition name (delimited by a whitespace) + while ($nextToken = $list->tokens[++$list->idx]) { + if ($nextToken->type !== Token::TYPE_NONE) { + break; + } + $ret->name .= $nextToken->value; + } + $idx = $list->idx--; + // Get the first token after the white space. + $nextToken = $list->tokens[++$idx]; $state = ($nextToken->type === Token::TYPE_KEYWORD) && ($nextToken->value === 'VALUES') diff --git a/tests/Components/PartitionDefinitionTest.php b/tests/Components/PartitionDefinitionTest.php index 93bc4d5..2d26076 100644 --- a/tests/Components/PartitionDefinitionTest.php +++ b/tests/Components/PartitionDefinitionTest.php @@ -20,4 +20,16 @@ class PartitionDefinitionTest extends TestCase $this->assertEquals('LESS THAN', $component->type); $this->assertEquals('(1990)', $component->expr->expr); } + + public function testParseNameWithUnderscore() + { + $component = PartitionDefinition::parse( + new Parser(), + $this->getTokensList('PARTITION 2017_12 VALUES LESS THAN (\'2018-01-01 00:00:00\') ENGINE = MyISAM') + ); + $this->assertFalse($component->isSubpartition); + $this->assertEquals('2017_12', $component->name); + $this->assertEquals('LESS THAN', $component->type); + $this->assertEquals('(\'2018-01-01 00:00:00\')', $component->expr->expr); + } } |