phpmyadmin/libraries/sql-parser/src/Statements/CreateStatement.php
Dan Ungureanu d2b5498565 Fix failing tests.
Updated sql-parser library.

Signed-off-by: Dan Ungureanu <udan1107@gmail.com>
2015-07-10 23:18:15 +03:00

166 lines
4.4 KiB
PHP

<?php
/**
* `CREATE` statement.
*
* @package SqlParser
* @subpackage Statements
*/
namespace SqlParser\Statements;
use SqlParser\Parser;
use SqlParser\Statement;
use SqlParser\Token;
use SqlParser\TokensList;
use SqlParser\Fragments\CreateDefFragment;
use SqlParser\Fragments\DataTypeFragment;
use SqlParser\Fragments\FieldDefFragment;
use SqlParser\Fragments\OptionsFragment;
use SqlParser\Fragments\ParamDefFragment;
/**
* `CREATE` statement.
*
* @category Statements
* @package SqlParser
* @subpackage Statements
* @author Dan Ungureanu <udan1107@gmail.com>
* @license http://opensource.org/licenses/GPL-2.0 GNU Public License
*/
class CreateStatement extends Statement
{
/**
* Options for `CREATE` statements.
*
* @var array
*/
public static $OPTIONS = array(
'DATABASE' => 1,
'EVENT' => 1,
'FUNCTION' => 1,
'INDEX' => 1,
'PROCEDURE' => 1,
'SERVER' => 1,
'TABLE' => 1,
'TABLESPACE' => 1,
'TRIGGER' => 1,
'USER' => 1,
'VIEW' => 1,
'TEMPORARY' => 2,
'IF NOT EXISTS' => 3,
'DEFINER' => array(4, 'var'),
);
/**
* The name of the enw table.
*
* @var CreateDefFragment
*/
public $name;
/**
* The options of the entity (table, procedure, function, etc.).
*
* @var OptionsFragment
*
* @see CreateDefFragment::$TABLE_OPTIONS
* @see CreateDefFragment::$FUNC_OPTIONS
*/
public $entityOptions;
/**
* Field created by this statement.
*
* @var FieldDefFragment[]
*/
public $fields;
/**
* The return data type of this routine.
*
* @var DataTypeFragment
*/
public $return;
/**
* The parameters of this routine.
*
* @var ParamDefFragment[]
*/
public $parameters;
/**
* The body of this function or procedure.
*
* @var Token[]
*/
public $body;
/**
* Function called before the token is processed.
*
* Parsing the `CREATE` statement.
*
* @param Parser $parser The instance that requests parsing.
* @param TokensList $list The list of tokens to be parsed.
* @param Token $token The token that is being parsed.
*
* @return void
*/
public function before(Parser $parser, TokensList $list, Token $token)
{
++$list->idx;
$this->name = CreateDefFragment::parse($parser, $list);
if ($this->options->has('TABLE')) {
++$list->idx;
$this->fields = FieldDefFragment::parse($parser, $list);
++$list->idx;
$this->entityOptions = OptionsFragment::parse(
$parser,
$list,
CreateDefFragment::$TABLE_OPTIONS
);
} elseif (($this->options->has('PROCEDURE'))
|| ($this->options->has('FUNCTION'))
) {
++$list->idx;
$this->parameters = ParamDefFragment::parse($parser, $list);
if ($this->options->has('FUNCTION')) {
$token = $list->getNextOfType(Token::TYPE_KEYWORD);
if ($token->value !== 'RETURNS') {
$parser->error(
'\'RETURNS\' keyword was expected.',
$token
);
} else {
++$list->idx;
$this->return = DataTypeFragment::parse(
$parser,
$list
);
}
}
++$list->idx;
$this->entityOptions = OptionsFragment::parse(
$parser,
$list,
CreateDefFragment::$FUNC_OPTIONS
);
++$list->idx;
$this->body = array();
for (; $list->idx < $list->count; ++$list->idx) {
$token = $list->tokens[$list->idx];
$this->body[] = $token;
if (($token->type === Token::TYPE_KEYWORD)
&& ($token->value === 'END')
) {
break;
}
}
}
}
}