diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Components/ArrayObj.php | 6 | ||||
-rw-r--r-- | src/Components/PartitionDefinition.php | 26 | ||||
-rw-r--r-- | src/Statements/CreateStatement.php | 6 |
3 files changed, 28 insertions, 10 deletions
diff --git a/src/Components/ArrayObj.php b/src/Components/ArrayObj.php index 431ed6d..0e0b183 100644 --- a/src/Components/ArrayObj.php +++ b/src/Components/ArrayObj.php @@ -115,7 +115,11 @@ class ArrayObj extends Component $ret->values[] = $token->value; $ret->raw[] = $token->token; } else { - $ret[] = $options['type']::parse($parser, $list); + $ret[] = $options['type']::parse( + $parser, + $list, + empty($options['typeOptions']) ? array() : $options['typeOptions'] + ); } $state = 2; } elseif ($state === 2) { diff --git a/src/Components/PartitionDefinition.php b/src/Components/PartitionDefinition.php index c7546b0..c46252d 100644 --- a/src/Components/PartitionDefinition.php +++ b/src/Components/PartitionDefinition.php @@ -155,7 +155,18 @@ class PartitionDefinition extends Component $ret->type = $token->value; $state = 4; } elseif ($state === 4) { - $ret->expr = Expression::parse($parser, $list, array('noAlias' => true, 'bracketsDelimited' => true)); + if ($token->value === 'MAXVALUE') { + $ret->expr = $token->value; + } else { + $ret->expr = Expression::parse( + $parser, + $list, + array( + 'bracketsDelimited' => true, + 'noAlias' => true, + ) + ); + } $state = 5; } elseif ($state === 5) { $ret->options = OptionsArray::parse($parser, $list, static::$OPTIONS); @@ -166,12 +177,12 @@ class PartitionDefinition extends Component $parser, $list, array( - 'type' => 'SqlParser\Components\PartitionDefinition' + 'type' => 'SqlParser\\Components\\PartitionDefinition' ) ); - } else { - break; + ++$list->idx; } + break; } } @@ -196,11 +207,10 @@ class PartitionDefinition extends Component if ($component->isSubpartition) { return 'SUBPARTITION ' . $component->name; } else { - if (!empty($component->subpartitions)) { - $subpartitions = ' ' . PartitionDefinition::build($component->subpartitions); - } + $subpartitions = empty($component->subpartitions) + ? '' : ' ' . PartitionDefinition::build($component->subpartitions); return 'PARTITION ' . $component->name - . ' VALUES ' . $component->type . $component->expr + . ' VALUES ' . $component->type . ' ' . $component->expr . $subpartitions; } diff --git a/src/Statements/CreateStatement.php b/src/Statements/CreateStatement.php index 0f2e565..bc7cf73 100644 --- a/src/Statements/CreateStatement.php +++ b/src/Statements/CreateStatement.php @@ -421,9 +421,11 @@ class CreateStatement extends Statement $brackets = false; } elseif (($token->type === Token::TYPE_KEYWORD) && ($token->value === 'PARTITIONS')) { $token = $list->getNextOfType(Token::TYPE_NUMBER); + --$list->idx; // `getNextOfType` also advances one position. $this->partitionsNum = $token->value; } elseif (($token->type === Token::TYPE_KEYWORD) && ($token->value === 'SUBPARTITIONS')) { $token = $list->getNextOfType(Token::TYPE_NUMBER); + --$list->idx; // `getNextOfType` also advances one position. $this->subpartitionsNum = $token->value; } elseif (!empty($field)) { @@ -457,7 +459,9 @@ class CreateStatement extends Statement $this->partitions = ArrayObj::parse( $parser, $list, - array('type' => 'SqlParser\Components\PartitionDefinition') + array( + 'type' => 'SqlParser\\Components\\PartitionDefinition' + ) ); } break; |