<?php /** * `ALTER` statement. */ namespace SqlParser\Statements; use SqlParser\Parser; use SqlParser\Statement; use SqlParser\Token; use SqlParser\TokensList; use SqlParser\Components\AlterOperation; use SqlParser\Components\Expression; use SqlParser\Components\OptionsArray; /** * `ALTER` statement. * * @category Statements * * @license https://www.gnu.org/licenses/gpl-2.0.txt GPL-2.0+ */ class AlterStatement extends Statement { /** * Table affected. * * @var Expression */ public $table; /** * Column affected by this statement. * * @var AlterOperation[] */ public $altered = array(); /** * Options of this statement. * * @var array */ public static $OPTIONS = array( 'ONLINE' => 1, 'OFFLINE' => 1, 'IGNORE' => 2, 'DATABASE' => 3, 'EVENT' => 3, 'FUNCTION' => 3, 'PROCEDURE' => 3, 'SERVER' => 3, 'TABLE' => 3, 'TABLESPACE' => 3, 'VIEW' => 3, ); /** * @param Parser $parser the instance that requests parsing * @param TokensList $list the list of tokens to be parsed */ public function parse(Parser $parser, TokensList $list) { ++$list->idx; // Skipping `ALTER`. $this->options = OptionsArray::parse( $parser, $list, static::$OPTIONS ); ++$list->idx; // Parsing affected table. $this->table = Expression::parse( $parser, $list, array( 'parseField' => 'table', 'breakOnAlias' => true, ) ); ++$list->idx; // Skipping field. /** * The state of the parser. * * Below are the states of the parser. * * 0 -----------------[ alter operation ]-----------------> 1 * * 1 -------------------------[ , ]-----------------------> 0 * * @var int */ $state = 0; for (; $list->idx < $list->count; ++$list->idx) { /** * Token parsed at this moment. * * @var Token */ $token = $list->tokens[$list->idx]; // End of statement. if ($token->type === Token::TYPE_DELIMITER) { break; } // Skipping whitespaces and comments. if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { continue; } if ($state === 0) { $options = array(); if ($this->options->has('DATABASE')) { $options = AlterOperation::$DB_OPTIONS; } elseif ($this->options->has('TABLE')) { $options = AlterOperation::$TABLE_OPTIONS; } elseif ($this->options->has('VIEW')) { $options = AlterOperation::$VIEW_OPTIONS; } $this->altered[] = AlterOperation::parse($parser, $list, $options); $state = 1; } elseif ($state === 1) { if (($token->type === Token::TYPE_OPERATOR) && ($token->value === ',')) { $state = 0; } } } } /** * @return string */ public function build() { $tmp = array(); foreach ($this->altered as $altered) { $tmp[] = $altered::build($altered); } return 'ALTER ' . OptionsArray::build($this->options) . ' ' . Expression::build($this->table) . ' ' . implode(', ', $tmp); } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
AlterStatement.php | File | 3.67 KB | 0644 |
|
AnalyzeStatement.php | File | 680 B | 0644 |
|
BackupStatement.php | File | 563 B | 0644 |
|
CallStatement.php | File | 491 B | 0644 |
|
CheckStatement.php | File | 593 B | 0644 |
|
ChecksumStatement.php | File | 517 B | 0644 |
|
CreateStatement.php | File | 19.84 KB | 0644 |
|
DeleteStatement.php | File | 10.59 KB | 0644 |
|
DropStatement.php | File | 1.33 KB | 0644 |
|
ExplainStatement.php | File | 261 B | 0644 |
|
InsertStatement.php | File | 7.18 KB | 0644 |
|
MaintenanceStatement.php | File | 1.46 KB | 0644 |
|
NotImplementedStatement.php | File | 1.36 KB | 0644 |
|
OptimizeStatement.php | File | 685 B | 0644 |
|
RenameStatement.php | File | 1.2 KB | 0644 |
|
RepairStatement.php | File | 636 B | 0644 |
|
ReplaceStatement.php | File | 5.2 KB | 0644 |
|
RestoreStatement.php | File | 513 B | 0644 |
|
SelectStatement.php | File | 6.23 KB | 0644 |
|
SetStatement.php | File | 1.21 KB | 0644 |
|
ShowStatement.php | File | 1.31 KB | 0644 |
|
TransactionStatement.php | File | 2.35 KB | 0644 |
|
TruncateStatement.php | File | 567 B | 0644 |
|
UpdateStatement.php | File | 2.11 KB | 0644 |
|