summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Desportes <williamdes@wdes.fr>2019-11-01 13:23:18 +0100
committerWilliam Desportes <williamdes@wdes.fr>2019-11-01 13:25:00 +0100
commit3edeac32e02f1f53d72f404d196dfe5816cec2a8 (patch)
treeb2230f26ad2fc5bde827fb1068e2e9900c58d9c9
parent1a073cd8f0ffa74124123475753a3752717339a8 (diff)
parent4a919aebab5d1a1f7d7bae72ccfdf0bab23586aa (diff)
downloadsql-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.md1
-rw-r--r--src/Components/PartitionDefinition.php14
-rw-r--r--tests/Components/PartitionDefinitionTest.php12
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);
+ }
}