summaryrefslogtreecommitdiffstats
path: root/src/Statements/CreateStatement.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/Statements/CreateStatement.php')
-rw-r--r--src/Statements/CreateStatement.php326
1 files changed, 163 insertions, 163 deletions
diff --git a/src/Statements/CreateStatement.php b/src/Statements/CreateStatement.php
index 6510e52..808109e 100644
--- a/src/Statements/CreateStatement.php
+++ b/src/Statements/CreateStatement.php
@@ -279,41 +279,43 @@ class CreateStatement extends Statement
. OptionsArray::build($this->options) . ' '
. Expression::build($this->name) . ' '
. OptionsArray::build($this->entityOptions);
- } elseif ($this->options->has('TABLE') && !is_null($this->select)) {
- return 'CREATE '
- . OptionsArray::build($this->options) . ' '
- . Expression::build($this->name) . ' '
- . $this->select->build();
- } elseif ($this->options->has('TABLE') && !is_null($this->like)) {
- return 'CREATE '
- . OptionsArray::build($this->options) . ' '
- . Expression::build($this->name) . ' LIKE '
- . Expression::build($this->like);
} elseif ($this->options->has('TABLE')) {
- $partition = '';
+ if (!is_null($this->select)) {
+ return 'CREATE '
+ . OptionsArray::build($this->options) . ' '
+ . Expression::build($this->name) . ' '
+ . $this->select->build();
+ } elseif (!is_null($this->like)) {
+ return 'CREATE '
+ . OptionsArray::build($this->options) . ' '
+ . Expression::build($this->name) . ' LIKE '
+ . Expression::build($this->like);
+ } else {
+ $partition = '';
+
+ if (!empty($this->partitionBy)) {
+ $partition .= "\nPARTITION BY " . $this->partitionBy;
+ }
+ if (!empty($this->partitionsNum)) {
+ $partition .= "\nPARTITIONS " . $this->partitionsNum;
+ }
+ if (!empty($this->subpartitionBy)) {
+ $partition .= "\nSUBPARTITION BY " . $this->subpartitionBy;
+ }
+ if (!empty($this->subpartitionsNum)) {
+ $partition .= "\nSUBPARTITIONS " . $this->subpartitionsNum;
+ }
+ if (!empty($this->partitions)) {
+ $partition .= "\n" . PartitionDefinition::build($this->partitions);
+ }
- if (!empty($this->partitionBy)) {
- $partition .= "\nPARTITION BY " . $this->partitionBy;
- }
- if (!empty($this->partitionsNum)) {
- $partition .= "\nPARTITIONS " . $this->partitionsNum;
- }
- if (!empty($this->subpartitionBy)) {
- $partition .= "\nSUBPARTITION BY " . $this->subpartitionBy;
+ return 'CREATE '
+ . OptionsArray::build($this->options) . ' '
+ . Expression::build($this->name) . ' '
+ . $fields
+ . OptionsArray::build($this->entityOptions)
+ . $partition;
}
- if (!empty($this->subpartitionsNum)) {
- $partition .= "\nSUBPARTITIONS " . $this->subpartitionsNum;
- }
- if (!empty($this->partitions)) {
- $partition .= "\n" . PartitionDefinition::build($this->partitions);
- }
-
- return 'CREATE '
- . OptionsArray::build($this->options) . ' '
- . Expression::build($this->name) . ' '
- . $fields
- . OptionsArray::build($this->entityOptions)
- . $partition;
} elseif ($this->options->has('VIEW')) {
return 'CREATE '
. OptionsArray::build($this->options) . ' '
@@ -327,8 +329,8 @@ class CreateStatement extends Statement
. OptionsArray::build($this->entityOptions) . ' '
. 'ON ' . Expression::build($this->table) . ' '
. 'FOR EACH ROW ' . TokensList::build($this->body);
- } elseif (($this->options->has('PROCEDURE'))
- || ($this->options->has('FUNCTION'))
+ } elseif ($this->options->has('PROCEDURE')
+ || $this->options->has('FUNCTION')
) {
$tmp = '';
if ($this->options->has('FUNCTION')) {
@@ -370,7 +372,7 @@ class CreateStatement extends Statement
)
);
- if ((!isset($this->name)) || ($this->name === '')) {
+ if (!isset($this->name) || ($this->name === '')) {
$parser->error(
'The name of the entity was expected.',
$list->tokens[$list->idx]
@@ -386,7 +388,7 @@ class CreateStatement extends Statement
*/
$token = $list->tokens[$list->idx];
$nextidx = $list->idx + 1;
- while ($nextidx < $list->count && $list->tokens[$nextidx]->type == Token::TYPE_WHITESPACE) {
+ while ($nextidx < $list->count && $list->tokens[$nextidx]->type === Token::TYPE_WHITESPACE) {
++$nextidx;
}
@@ -396,150 +398,148 @@ class CreateStatement extends Statement
$list,
static::$DB_OPTIONS
);
- } elseif ($this->options->has('TABLE')
- && ($token->type == Token::TYPE_KEYWORD)
- && ($token->keyword == 'SELECT')
- ) {
- /* CREATE TABLE ... SELECT */
- $this->select = new SelectStatement($parser, $list);
- } elseif ($this->options->has('TABLE')
- && ($token->type == Token::TYPE_KEYWORD) && ($token->keyword == 'AS')
- && ($list->tokens[$nextidx]->type == Token::TYPE_KEYWORD)
- && ($list->tokens[$nextidx]->value == 'SELECT')
- ) {
- /* CREATE TABLE ... AS SELECT */
- $list->idx = $nextidx;
- $this->select = new SelectStatement($parser, $list);
- } elseif ($this->options->has('TABLE')
- && $token->type == Token::TYPE_KEYWORD
- && $token->keyword == 'LIKE'
- ) {
- /* CREATE TABLE `new_tbl` LIKE 'orig_tbl' */
- $list->idx = $nextidx;
- $this->like = Expression::parse(
- $parser,
- $list,
- array(
- 'parseField' => 'table',
- 'breakOnAlias' => true,
- )
- );
- // The 'LIKE' keyword was found, but no table_name was found next to it
- if ($this->like == null) {
- $parser->error(
- 'A table name was expected.',
- $list->tokens[$list->idx]
- );
- }
} elseif ($this->options->has('TABLE')) {
- $this->fields = CreateDefinition::parse($parser, $list);
- if (empty($this->fields)) {
- $parser->error(
- 'At least one column definition was expected.',
- $list->tokens[$list->idx]
+ if (($token->type === Token::TYPE_KEYWORD)
+ && ($token->keyword === 'SELECT')) {
+ /* CREATE TABLE ... SELECT */
+ $this->select = new SelectStatement($parser, $list);
+ } elseif (($token->type === Token::TYPE_KEYWORD) && ($token->keyword === 'AS')
+ && ($list->tokens[$nextidx]->type === Token::TYPE_KEYWORD)
+ && ($list->tokens[$nextidx]->value === 'SELECT')) {
+ /* CREATE TABLE ... AS SELECT */
+ $list->idx = $nextidx;
+ $this->select = new SelectStatement($parser, $list);
+ } elseif ($token->type === Token::TYPE_KEYWORD
+ && $token->keyword === 'LIKE') {
+ /* CREATE TABLE `new_tbl` LIKE 'orig_tbl' */
+ $list->idx = $nextidx;
+ $this->like = Expression::parse(
+ $parser,
+ $list,
+ array(
+ 'parseField' => 'table',
+ 'breakOnAlias' => true,
+ )
);
- }
- ++$list->idx;
+ // The 'LIKE' keyword was found, but no table_name was found next to it
+ if (is_null($this->like)) {
+ $parser->error(
+ 'A table name was expected.',
+ $list->tokens[$list->idx]
+ );
+ }
+ } else {
+ $this->fields = CreateDefinition::parse($parser, $list);
+ if (empty($this->fields)) {
+ $parser->error(
+ 'At least one column definition was expected.',
+ $list->tokens[$list->idx]
+ );
+ }
+ ++$list->idx;
- $this->entityOptions = OptionsArray::parse(
- $parser,
- $list,
- static::$TABLE_OPTIONS
- );
+ $this->entityOptions = OptionsArray::parse(
+ $parser,
+ $list,
+ static::$TABLE_OPTIONS
+ );
- /**
- * The field that is being filled (`partitionBy` or
- * `subpartitionBy`).
- *
- * @var string
- */
- $field = null;
-
- /**
- * The number of brackets. `false` means no bracket was found
- * previously. At least one bracket is required to validate the
- * expression.
- *
- * @var int|bool
- */
- $brackets = false;
-
- /*
- * Handles partitions.
- */
- for (; $list->idx < $list->count; ++$list->idx) {
/**
- * Token parsed at this moment.
+ * The field that is being filled (`partitionBy` or
+ * `subpartitionBy`).
*
- * @var Token
+ * @var string
*/
- $token = $list->tokens[$list->idx];
+ $field = null;
- // End of statement.
- if ($token->type === Token::TYPE_DELIMITER) {
- break;
- }
-
- // Skipping comments.
- if ($token->type === Token::TYPE_COMMENT) {
- continue;
- }
+ /**
+ * The number of brackets. `false` means no bracket was found
+ * previously. At least one bracket is required to validate the
+ * expression.
+ *
+ * @var int|bool
+ */
+ $brackets = false;
- if (($token->type === Token::TYPE_KEYWORD) && ($token->keyword === 'PARTITION BY')) {
- $field = 'partitionBy';
- $brackets = false;
- } elseif (($token->type === Token::TYPE_KEYWORD) && ($token->keyword === 'SUBPARTITION BY')) {
- $field = 'subpartitionBy';
- $brackets = false;
- } elseif (($token->type === Token::TYPE_KEYWORD) && ($token->keyword === '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->keyword === 'SUBPARTITIONS')) {
- $token = $list->getNextOfType(Token::TYPE_NUMBER);
- --$list->idx; // `getNextOfType` also advances one position.
- $this->subpartitionsNum = $token->value;
- } elseif (!empty($field)) {
- /*
- * Handling the content of `PARTITION BY` and `SUBPARTITION BY`.
+ /*
+ * Handles partitions.
+ */
+ for (; $list->idx < $list->count; ++$list->idx) {
+ /**
+ * Token parsed at this moment.
+ *
+ * @var Token
*/
+ $token = $list->tokens[$list->idx];
- // Counting brackets.
- if (($token->type === Token::TYPE_OPERATOR) && ($token->value === '(')) {
- // This is used instead of `++$brackets` because,
- // initially, `$brackets` is `false` cannot be
- // incremented.
- $brackets = $brackets + 1;
- } elseif (($token->type === Token::TYPE_OPERATOR) && ($token->value === ')')) {
- --$brackets;
+ // End of statement.
+ if ($token->type === Token::TYPE_DELIMITER) {
+ break;
}
- // Building the expression used for partitioning.
- $this->$field .= ($token->type === Token::TYPE_WHITESPACE) ? ' ' : $token->token;
-
- // Last bracket was read, the expression ended.
- // Comparing with `0` and not `false`, because `false` means
- // that no bracket was found and at least one must is
- // required.
- if ($brackets === 0) {
- $this->$field = trim($this->$field);
- $field = null;
+ // Skipping comments.
+ if ($token->type === Token::TYPE_COMMENT) {
+ continue;
}
- } elseif (($token->type === Token::TYPE_OPERATOR) && ($token->value === '(')) {
- if (!empty($this->partitionBy)) {
- $this->partitions = ArrayObj::parse(
- $parser,
- $list,
- array(
- 'type' => 'PhpMyAdmin\\SqlParser\\Components\\PartitionDefinition',
- )
- );
+
+ if (($token->type === Token::TYPE_KEYWORD) && ($token->keyword === 'PARTITION BY')) {
+ $field = 'partitionBy';
+ $brackets = false;
+ } elseif (($token->type === Token::TYPE_KEYWORD) && ($token->keyword === 'SUBPARTITION BY')) {
+ $field = 'subpartitionBy';
+ $brackets = false;
+ } elseif (($token->type === Token::TYPE_KEYWORD) && ($token->keyword === '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->keyword === 'SUBPARTITIONS')) {
+ $token = $list->getNextOfType(Token::TYPE_NUMBER);
+ --$list->idx; // `getNextOfType` also advances one position.
+ $this->subpartitionsNum = $token->value;
+ } elseif (!empty($field)) {
+ /*
+ * Handling the content of `PARTITION BY` and `SUBPARTITION BY`.
+ */
+
+ // Counting brackets.
+ if ($token->type === Token::TYPE_OPERATOR) {
+ if ($token->value === '(') {
+ // This is used instead of `++$brackets` because,
+ // initially, `$brackets` is `false` cannot be
+ // incremented.
+ $brackets = $brackets + 1;
+ } elseif ($token->value === ')') {
+ --$brackets;
+ }
+ }
+
+ // Building the expression used for partitioning.
+ $this->$field .= ($token->type === Token::TYPE_WHITESPACE) ? ' ' : $token->token;
+
+ // Last bracket was read, the expression ended.
+ // Comparing with `0` and not `false`, because `false` means
+ // that no bracket was found and at least one must is
+ // required.
+ if ($brackets === 0) {
+ $this->$field = trim($this->$field);
+ $field = null;
+ }
+ } elseif (($token->type === Token::TYPE_OPERATOR) && ($token->value === '(')) {
+ if (!empty($this->partitionBy)) {
+ $this->partitions = ArrayObj::parse(
+ $parser,
+ $list,
+ array(
+ 'type' => 'PhpMyAdmin\\SqlParser\\Components\\PartitionDefinition',
+ )
+ );
+ }
+ break;
}
- break;
}
}
- } elseif (($this->options->has('PROCEDURE'))
- || ($this->options->has('FUNCTION'))
+ } elseif ($this->options->has('PROCEDURE')
+ || $this->options->has('FUNCTION')
) {
$this->parameters = ParameterDefinition::parse($parser, $list);
if ($this->options->has('FUNCTION')) {