private DdlCreateTableStatement CreateTable(bool temp)
{
var ifNotExists = false;
if (lexer.Token() == MySqlToken.KwIf)
{
lexer.NextToken();
Match(MySqlToken.KwNot);
Match(MySqlToken.KwExists);
ifNotExists = true;
}
var table = Identifier();
var stmt = new DdlCreateTableStatement(temp, ifNotExists, table);
CreateTableDefs(stmt);
var options = new DdlTableOptions();
stmt.SetTableOptions(options);
TableOptions(options);
var selectOpt = CreateTableSelectOption.None;
switch (lexer.Token())
{
case MySqlToken.KwIgnore:
{
selectOpt = CreateTableSelectOption.Ignored;
if (lexer.NextToken() == MySqlToken.KwAs)
{
lexer.NextToken();
}
break;
}
case MySqlToken.KwReplace:
{
selectOpt = CreateTableSelectOption.Replace;
if (lexer.NextToken() == MySqlToken.KwAs)
{
lexer.NextToken();
}
break;
}
case MySqlToken.KwAs:
{
lexer.NextToken();
goto case MySqlToken.KwSelect;
}
case MySqlToken.KwSelect:
{
break;
}
case MySqlToken.Eof:
{
return stmt;
}
default:
{
throw new SqlSyntaxErrorException("Ddl CREATE TABLE statement not end properly");
}
}
var select = new MySqlDmlSelectParser(lexer, exprParser).Select();
stmt.SetSelect(selectOpt, select);
Match(MySqlToken.Eof);
return stmt;
}