Tup.Cobar4Net.Parser.Recognizer.Mysql.Syntax.MySqlDdlParser.CreateTableDefs C# (CSharp) Метод

CreateTableDefs() приватный Метод

private CreateTableDefs ( DdlCreateTableStatement stmt ) : void
stmt Tup.Cobar4Net.Parser.Ast.Stmt.Ddl.DdlCreateTableStatement
Результат void
        private void CreateTableDefs(DdlCreateTableStatement stmt)
        {
            if (lexer.Token() != MySqlToken.PuncLeftParen)
            {
                return;
            }
            Match(MySqlToken.PuncLeftParen);
            IndexDefinition indexDef;
            Identifier id;
            for (var i = 0; lexer.Token() != MySqlToken.PuncRightParen; ++i)
            {
                if (i > 0)
                {
                    Match(MySqlToken.PuncComma);
                }
                switch (lexer.Token())
                {
                    case MySqlToken.KwPrimary:
                    {
                        lexer.NextToken();
                        Match(MySqlToken.KwKey);
                        indexDef = IndexDefinition();
                        stmt.SetPrimaryKey(indexDef);
                        break;
                    }

                    case MySqlToken.KwIndex:
                    case MySqlToken.KwKey:
                    {
                        lexer.NextToken();
                        if (lexer.Token() == MySqlToken.Identifier)
                        {
                            id = Identifier();
                        }
                        else
                        {
                            id = null;
                        }
                        indexDef = IndexDefinition();
                        stmt.AddIndex(id, indexDef);
                        break;
                    }

                    case MySqlToken.KwUnique:
                    {
                        switch (lexer.NextToken())
                        {
                            case MySqlToken.KwIndex:
                            case MySqlToken.KwKey:
                            {
                                lexer.NextToken();
                                break;
                            }
                        }
                        if (lexer.Token() == MySqlToken.Identifier)
                        {
                            id = Identifier();
                        }
                        else
                        {
                            id = null;
                        }
                        indexDef = IndexDefinition();
                        stmt.AddUniqueIndex(id, indexDef);
                        break;
                    }

                    case MySqlToken.KwFulltext:
                    {
                        switch (lexer.NextToken())
                        {
                            case MySqlToken.KwIndex:
                            case MySqlToken.KwKey:
                            {
                                lexer.NextToken();
                                break;
                            }
                        }
                        if (lexer.Token() == MySqlToken.Identifier)
                        {
                            id = Identifier();
                        }
                        else
                        {
                            id = null;
                        }
                        indexDef = IndexDefinition();
                        if (indexDef.IndexType != IndexType.None)
                        {
                            throw new SqlSyntaxErrorException("FULLTEXT INDEX can specify no index_type");
                        }
                        stmt.AddFullTextIndex(id, indexDef);
                        break;
                    }

                    case MySqlToken.KwSpatial:
                    {
                        switch (lexer.NextToken())
                        {
                            case MySqlToken.KwIndex:
                            case MySqlToken.KwKey:
                            {
                                lexer.NextToken();
                                break;
                            }
                        }
                        if (lexer.Token() == MySqlToken.Identifier)
                        {
                            id = Identifier();
                        }
                        else
                        {
                            id = null;
                        }
                        indexDef = IndexDefinition();
                        if (indexDef.IndexType != IndexType.None)
                        {
                            throw new SqlSyntaxErrorException("SPATIAL INDEX can specify no index_type");
                        }
                        stmt.AddSpatialIndex(id, indexDef);
                        break;
                    }

                    case MySqlToken.KwCheck:
                    {
                        lexer.NextToken();
                        Match(MySqlToken.PuncLeftParen);
                        var expr = exprParser.Expression();
                        Match(MySqlToken.PuncRightParen);
                        stmt.AddCheck(expr);
                        break;
                    }

                    case MySqlToken.Identifier:
                    {
                        var columnName = Identifier();
                        var columnDef = ColumnDefinition();
                        stmt.AddColumnDefinition(columnName, columnDef);
                        break;
                    }

                    default:
                    {
                        throw new SqlSyntaxErrorException("unsupportted column definition");
                    }
                }
            }
            Match(MySqlToken.PuncRightParen);
        }