internal DbSqlParserTable FindTableForColumn(DbSqlParserColumn column)
        {
            DbSqlParserTableCollection tables = this.Tables;
            int count = tables.Count;

            for (int i = 0; i < count; i++)
            {
                DbSqlParserTable table = tables[i];
                if ((System.Data.Common.ADP.IsEmpty(column.DatabaseName) && System.Data.Common.ADP.IsEmpty(column.SchemaName)) && this.CatalogMatch(column.TableName, table.CorrelationName))
                {
                    return(table);
                }
                if (((System.Data.Common.ADP.IsEmpty(column.DatabaseName) || this.CatalogMatch(column.DatabaseName, table.DatabaseName)) && (System.Data.Common.ADP.IsEmpty(column.SchemaName) || this.CatalogMatch(column.SchemaName, table.SchemaName))) && (System.Data.Common.ADP.IsEmpty(column.TableName) || this.CatalogMatch(column.TableName, table.TableName)))
                {
                    return(table);
                }
            }
            return(null);
        }
        private void Parse2(string statementText)
        {
            bool flag;
            PARSERSTATE nOTHINGYET = PARSERSTATE.NOTHINGYET;
            Token[] namePart = new Token[4];
            int maxPart = 0;
            Token @null = Token.Null;
            TokenType type7 = TokenType.Null;
            int num2 = 0;
            this._columns = null;
            this._tables = null;
            Match match = SqlTokenParser.Match(statementText);
            Token token2 = TokenFromMatch(match);
        Label_003B:
            flag = false;
            switch (nOTHINGYET)
            {
                case PARSERSTATE.NOTHINGYET:
                    if (token2.Type != TokenType.Keyword_SELECT)
                    {
                        throw System.Data.Common.ADP.InvalidOperation(Res.GetString("ADP_SQLParserInternalError"));
                    }
                    nOTHINGYET = PARSERSTATE.SELECT;
                    goto Label_061A;

                case PARSERSTATE.SELECT:
                {
                    TokenType type2 = token2.Type;
                    if (type2 > TokenType.Other_Star)
                    {
                        switch (type2)
                        {
                            case TokenType.Keyword_DISTINCT:
                            case TokenType.Keyword_ALL:
                                goto Label_061A;

                            case TokenType.Keyword_FROM:
                                nOTHINGYET = PARSERSTATE.FROM;
                                goto Label_061A;
                        }
                        break;
                    }
                    switch (type2)
                    {
                        case TokenType.Identifier:
                        case TokenType.QuotedIdentifier:
                            nOTHINGYET = PARSERSTATE.COLUMN;
                            maxPart = 0;
                            namePart[0] = token2;
                            goto Label_061A;

                        case TokenType.Other_LeftParen:
                            nOTHINGYET = PARSERSTATE.EXPRESSION;
                            num2++;
                            goto Label_061A;

                        case TokenType.Other_RightParen:
                            throw System.Data.Common.ADP.SyntaxErrorMissingParenthesis();

                        case TokenType.Other_Star:
                            nOTHINGYET = PARSERSTATE.COLUMNALIAS;
                            maxPart = 0;
                            namePart[0] = token2;
                            goto Label_061A;
                    }
                    break;
                }
                case PARSERSTATE.COLUMN:
                {
                    TokenType type = token2.Type;
                    if (type > TokenType.Other_Star)
                    {
                        switch (type)
                        {
                            case TokenType.Keyword_AS:
                                goto Label_061A;

                            case TokenType.Keyword_FROM:
                                goto Label_01FF;
                        }
                    }
                    else
                    {
                        switch (type)
                        {
                            case TokenType.Identifier:
                            case TokenType.QuotedIdentifier:
                                if (TokenType.Other_Period != type7)
                                {
                                    nOTHINGYET = PARSERSTATE.COLUMNALIAS;
                                    @null = token2;
                                }
                                else
                                {
                                    namePart[++maxPart] = token2;
                                }
                                goto Label_061A;

                            case TokenType.Other_Comma:
                                goto Label_01FF;

                            case TokenType.Other_Period:
                                if (maxPart > 3)
                                {
                                    throw System.Data.Common.ADP.SyntaxErrorTooManyNameParts();
                                }
                                goto Label_061A;

                            case TokenType.Other_LeftParen:
                                nOTHINGYET = PARSERSTATE.EXPRESSION;
                                num2++;
                                maxPart = -1;
                                goto Label_061A;

                            case TokenType.Other_RightParen:
                                throw System.Data.Common.ADP.SyntaxErrorMissingParenthesis();

                            case TokenType.Other_Star:
                                nOTHINGYET = PARSERSTATE.COLUMNALIAS;
                                namePart[++maxPart] = token2;
                                goto Label_061A;
                        }
                    }
                    nOTHINGYET = PARSERSTATE.EXPRESSION;
                    maxPart = -1;
                    goto Label_061A;
                }
                case PARSERSTATE.COLUMNALIAS:
                {
                    TokenType type9 = token2.Type;
                    if ((type9 != TokenType.Other_Comma) && (type9 != TokenType.Keyword_FROM))
                    {
                        throw System.Data.Common.ADP.SyntaxErrorExpectedCommaAfterColumn();
                    }
                    nOTHINGYET = (token2.Type == TokenType.Keyword_FROM) ? PARSERSTATE.FROM : PARSERSTATE.SELECT;
                    this.AddColumn(maxPart, namePart, @null);
                    maxPart = -1;
                    @null = Token.Null;
                    goto Label_061A;
                }
                case PARSERSTATE.TABLE:
                    switch (token2.Type)
                    {
                        case TokenType.Null:
                        case TokenType.Keyword_COMPUTE:
                        case TokenType.Keyword_FOR:
                        case TokenType.Keyword_GROUP:
                        case TokenType.Keyword_HAVING:
                        case TokenType.Keyword_INTERSECT:
                        case TokenType.Keyword_MINUS:
                        case TokenType.Keyword_ORDER:
                        case TokenType.Keyword_UNION:
                        case TokenType.Keyword_WHERE:
                            nOTHINGYET = PARSERSTATE.DONE;
                            flag = true;
                            goto Label_061A;

                        case TokenType.Identifier:
                        case TokenType.QuotedIdentifier:
                            if (TokenType.Other_Period != type7)
                            {
                                nOTHINGYET = PARSERSTATE.TABLEALIAS;
                                @null = token2;
                            }
                            else
                            {
                                namePart[++maxPart] = token2;
                            }
                            goto Label_061A;

                        case TokenType.Other_Comma:
                        case TokenType.Keyword_JOIN:
                            nOTHINGYET = PARSERSTATE.FROM;
                            flag = true;
                            goto Label_061A;

                        case TokenType.Other_Period:
                            if (maxPart > 2)
                            {
                                throw System.Data.Common.ADP.SyntaxErrorTooManyNameParts();
                            }
                            goto Label_061A;

                        case TokenType.Keyword_AS:
                            goto Label_061A;

                        case TokenType.Keyword_CROSS:
                        case TokenType.Keyword_LEFT:
                        case TokenType.Keyword_NATURAL:
                        case TokenType.Keyword_RIGHT:
                            nOTHINGYET = PARSERSTATE.JOIN;
                            flag = true;
                            goto Label_061A;

                        case TokenType.Keyword_ON:
                        case TokenType.Keyword_USING:
                            nOTHINGYET = PARSERSTATE.JOINCONDITION;
                            flag = true;
                            goto Label_061A;
                    }
                    throw System.Data.Common.ADP.SyntaxErrorExpectedNextPart();

                case PARSERSTATE.TABLEALIAS:
                    flag = true;
                    switch (token2.Type)
                    {
                        case TokenType.Keyword_COMPUTE:
                        case TokenType.Keyword_FOR:
                        case TokenType.Keyword_GROUP:
                        case TokenType.Keyword_HAVING:
                        case TokenType.Keyword_INTERSECT:
                        case TokenType.Keyword_MINUS:
                        case TokenType.Keyword_ORDER:
                        case TokenType.Keyword_UNION:
                        case TokenType.Keyword_WHERE:
                        case TokenType.Null:
                            nOTHINGYET = PARSERSTATE.DONE;
                            goto Label_061A;

                        case TokenType.Keyword_CROSS:
                        case TokenType.Keyword_LEFT:
                        case TokenType.Keyword_NATURAL:
                        case TokenType.Keyword_RIGHT:
                            nOTHINGYET = PARSERSTATE.JOIN;
                            goto Label_061A;

                        case TokenType.Keyword_JOIN:
                        case TokenType.Other_Comma:
                            nOTHINGYET = PARSERSTATE.FROM;
                            goto Label_061A;

                        case TokenType.Keyword_ON:
                        case TokenType.Keyword_USING:
                            nOTHINGYET = PARSERSTATE.JOINCONDITION;
                            goto Label_061A;
                    }
                    throw System.Data.Common.ADP.SyntaxErrorExpectedCommaAfterTable();

                case PARSERSTATE.FROM:
                    switch (token2.Type)
                    {
                        case TokenType.Identifier:
                        case TokenType.QuotedIdentifier:
                            nOTHINGYET = PARSERSTATE.TABLE;
                            maxPart = 0;
                            namePart[0] = token2;
                            goto Label_061A;
                    }
                    throw System.Data.Common.ADP.SyntaxErrorExpectedIdentifier();

                case PARSERSTATE.EXPRESSION:
                    switch (token2.Type)
                    {
                        case TokenType.Identifier:
                        case TokenType.QuotedIdentifier:
                            if (num2 == 0)
                            {
                                @null = token2;
                            }
                            break;

                        case TokenType.Other_Comma:
                        case TokenType.Keyword_FROM:
                            if (num2 == 0)
                            {
                                nOTHINGYET = (token2.Type == TokenType.Keyword_FROM) ? PARSERSTATE.FROM : PARSERSTATE.SELECT;
                                this.AddColumn(maxPart, namePart, @null);
                                maxPart = -1;
                                @null = Token.Null;
                            }
                            break;

                        case TokenType.Other_LeftParen:
                            num2++;
                            break;

                        case TokenType.Other_RightParen:
                            num2--;
                            break;
                    }
                    goto Label_061A;

                case PARSERSTATE.JOIN:
                    switch (token2.Type)
                    {
                        case TokenType.Keyword_INNER:
                        case TokenType.Keyword_OUTER:
                            goto Label_061A;

                        case TokenType.Keyword_JOIN:
                            nOTHINGYET = PARSERSTATE.FROM;
                            goto Label_061A;
                    }
                    throw System.Data.Common.ADP.SyntaxErrorExpectedNextPart();

                case PARSERSTATE.JOINCONDITION:
                    switch (token2.Type)
                    {
                        case TokenType.Other_LeftParen:
                            num2++;
                            goto Label_061A;

                        case TokenType.Other_RightParen:
                            num2--;
                            goto Label_061A;
                    }
                    if (num2 == 0)
                    {
                        switch (token2.Type)
                        {
                            case TokenType.Keyword_COMPUTE:
                            case TokenType.Keyword_FOR:
                            case TokenType.Keyword_GROUP:
                            case TokenType.Keyword_HAVING:
                            case TokenType.Keyword_INTERSECT:
                            case TokenType.Keyword_MINUS:
                            case TokenType.Keyword_ORDER:
                            case TokenType.Keyword_UNION:
                            case TokenType.Keyword_WHERE:
                            case TokenType.Null:
                                nOTHINGYET = PARSERSTATE.DONE;
                                break;

                            case TokenType.Keyword_CROSS:
                            case TokenType.Keyword_LEFT:
                            case TokenType.Keyword_NATURAL:
                            case TokenType.Keyword_RIGHT:
                                nOTHINGYET = PARSERSTATE.JOIN;
                                break;

                            case TokenType.Keyword_JOIN:
                                nOTHINGYET = PARSERSTATE.FROM;
                                break;
                        }
                    }
                    goto Label_061A;

                case PARSERSTATE.DONE:
                    return;

                default:
                    throw System.Data.Common.ADP.InvalidOperation(Res.GetString("ADP_SQLParserInternalError"));
            }
            nOTHINGYET = PARSERSTATE.EXPRESSION;
            goto Label_061A;
        Label_01FF:
            nOTHINGYET = (token2.Type == TokenType.Keyword_FROM) ? PARSERSTATE.FROM : PARSERSTATE.SELECT;
            this.AddColumn(maxPart, namePart, @null);
            maxPart = -1;
            @null = Token.Null;
        Label_061A:
            if (flag)
            {
                this.AddTable(maxPart, namePart, @null);
                maxPart = -1;
                @null = Token.Null;
                flag = false;
            }
            type7 = token2.Type;
            match = match.NextMatch();
            token2 = TokenFromMatch(match);
            goto Label_003B;
        }
        private void CompleteSchemaInformation()
        {
            DbSqlParserColumnCollection columns = this.Columns;
            DbSqlParserTableCollection  tables  = this.Tables;
            int count = columns.Count;
            int num10 = tables.Count;

            for (int i = 0; i < num10; i++)
            {
                DbSqlParserTable            table2   = tables[i];
                DbSqlParserColumnCollection columns4 = this.GatherTableColumns(table2);
                table2.Columns = columns4;
            }
            for (int j = 0; j < count; j++)
            {
                DbSqlParserColumn column = columns[j];
                DbSqlParserTable  table  = this.FindTableForColumn(column);
                if (!column.IsExpression)
                {
                    if ("*" == column.ColumnName)
                    {
                        columns.RemoveAt(j);
                        if (column.TableName.Length != 0)
                        {
                            DbSqlParserColumnCollection columns3 = table.Columns;
                            int num9 = columns3.Count;
                            for (int m = 0; m < num9; m++)
                            {
                                columns.Insert(j + m, columns3[m]);
                            }
                            count += num9 - 1;
                            j     += num9 - 1;
                        }
                        else
                        {
                            for (int n = 0; n < num10; n++)
                            {
                                table = tables[n];
                                DbSqlParserColumnCollection columns2 = table.Columns;
                                int num8 = columns2.Count;
                                for (int num2 = 0; num2 < num8; num2++)
                                {
                                    columns.Insert(j + num2, columns2[num2]);
                                }
                                count += num8 - 1;
                                j     += num8;
                            }
                        }
                    }
                    else
                    {
                        DbSqlParserColumn completedColumn = this.FindCompletedColumn(table, column);
                        if (completedColumn != null)
                        {
                            column.CopySchemaInfoFrom(completedColumn);
                        }
                        else
                        {
                            column.CopySchemaInfoFrom(table);
                        }
                    }
                }
            }
            for (int k = 0; k < num10; k++)
            {
                DbSqlParserTable table3 = tables[k];
                this.GatherKeyColumns(table3);
            }
        }
        private void Parse2(string statementText)
        {
            bool        flag;
            PARSERSTATE nOTHINGYET = PARSERSTATE.NOTHINGYET;

            Token[]   namePart = new Token[4];
            int       maxPart  = 0;
            Token     @null    = Token.Null;
            TokenType type7    = TokenType.Null;
            int       num2     = 0;

            this._columns = null;
            this._tables  = null;
            Match match  = SqlTokenParser.Match(statementText);
            Token token2 = TokenFromMatch(match);

Label_003B:
            flag = false;
            switch (nOTHINGYET)
            {
            case PARSERSTATE.NOTHINGYET:
                if (token2.Type != TokenType.Keyword_SELECT)
                {
                    throw System.Data.Common.ADP.InvalidOperation(Res.GetString("ADP_SQLParserInternalError"));
                }
                nOTHINGYET = PARSERSTATE.SELECT;
                goto Label_061A;

            case PARSERSTATE.SELECT:
            {
                TokenType type2 = token2.Type;
                if (type2 > TokenType.Other_Star)
                {
                    switch (type2)
                    {
                    case TokenType.Keyword_DISTINCT:
                    case TokenType.Keyword_ALL:
                        goto Label_061A;

                    case TokenType.Keyword_FROM:
                        nOTHINGYET = PARSERSTATE.FROM;
                        goto Label_061A;
                    }
                    break;
                }
                switch (type2)
                {
                case TokenType.Identifier:
                case TokenType.QuotedIdentifier:
                    nOTHINGYET  = PARSERSTATE.COLUMN;
                    maxPart     = 0;
                    namePart[0] = token2;
                    goto Label_061A;

                case TokenType.Other_LeftParen:
                    nOTHINGYET = PARSERSTATE.EXPRESSION;
                    num2++;
                    goto Label_061A;

                case TokenType.Other_RightParen:
                    throw System.Data.Common.ADP.SyntaxErrorMissingParenthesis();

                case TokenType.Other_Star:
                    nOTHINGYET  = PARSERSTATE.COLUMNALIAS;
                    maxPart     = 0;
                    namePart[0] = token2;
                    goto Label_061A;
                }
                break;
            }

            case PARSERSTATE.COLUMN:
            {
                TokenType type = token2.Type;
                if (type > TokenType.Other_Star)
                {
                    switch (type)
                    {
                    case TokenType.Keyword_AS:
                        goto Label_061A;

                    case TokenType.Keyword_FROM:
                        goto Label_01FF;
                    }
                }
                else
                {
                    switch (type)
                    {
                    case TokenType.Identifier:
                    case TokenType.QuotedIdentifier:
                        if (TokenType.Other_Period != type7)
                        {
                            nOTHINGYET = PARSERSTATE.COLUMNALIAS;
                            @null      = token2;
                        }
                        else
                        {
                            namePart[++maxPart] = token2;
                        }
                        goto Label_061A;

                    case TokenType.Other_Comma:
                        goto Label_01FF;

                    case TokenType.Other_Period:
                        if (maxPart > 3)
                        {
                            throw System.Data.Common.ADP.SyntaxErrorTooManyNameParts();
                        }
                        goto Label_061A;

                    case TokenType.Other_LeftParen:
                        nOTHINGYET = PARSERSTATE.EXPRESSION;
                        num2++;
                        maxPart = -1;
                        goto Label_061A;

                    case TokenType.Other_RightParen:
                        throw System.Data.Common.ADP.SyntaxErrorMissingParenthesis();

                    case TokenType.Other_Star:
                        nOTHINGYET          = PARSERSTATE.COLUMNALIAS;
                        namePart[++maxPart] = token2;
                        goto Label_061A;
                    }
                }
                nOTHINGYET = PARSERSTATE.EXPRESSION;
                maxPart    = -1;
                goto Label_061A;
            }

            case PARSERSTATE.COLUMNALIAS:
            {
                TokenType type9 = token2.Type;
                if ((type9 != TokenType.Other_Comma) && (type9 != TokenType.Keyword_FROM))
                {
                    throw System.Data.Common.ADP.SyntaxErrorExpectedCommaAfterColumn();
                }
                nOTHINGYET = (token2.Type == TokenType.Keyword_FROM) ? PARSERSTATE.FROM : PARSERSTATE.SELECT;
                this.AddColumn(maxPart, namePart, @null);
                maxPart = -1;
                @null   = Token.Null;
                goto Label_061A;
            }

            case PARSERSTATE.TABLE:
                switch (token2.Type)
                {
                case TokenType.Null:
                case TokenType.Keyword_COMPUTE:
                case TokenType.Keyword_FOR:
                case TokenType.Keyword_GROUP:
                case TokenType.Keyword_HAVING:
                case TokenType.Keyword_INTERSECT:
                case TokenType.Keyword_MINUS:
                case TokenType.Keyword_ORDER:
                case TokenType.Keyword_UNION:
                case TokenType.Keyword_WHERE:
                    nOTHINGYET = PARSERSTATE.DONE;
                    flag       = true;
                    goto Label_061A;

                case TokenType.Identifier:
                case TokenType.QuotedIdentifier:
                    if (TokenType.Other_Period != type7)
                    {
                        nOTHINGYET = PARSERSTATE.TABLEALIAS;
                        @null      = token2;
                    }
                    else
                    {
                        namePart[++maxPart] = token2;
                    }
                    goto Label_061A;

                case TokenType.Other_Comma:
                case TokenType.Keyword_JOIN:
                    nOTHINGYET = PARSERSTATE.FROM;
                    flag       = true;
                    goto Label_061A;

                case TokenType.Other_Period:
                    if (maxPart > 2)
                    {
                        throw System.Data.Common.ADP.SyntaxErrorTooManyNameParts();
                    }
                    goto Label_061A;

                case TokenType.Keyword_AS:
                    goto Label_061A;

                case TokenType.Keyword_CROSS:
                case TokenType.Keyword_LEFT:
                case TokenType.Keyword_NATURAL:
                case TokenType.Keyword_RIGHT:
                    nOTHINGYET = PARSERSTATE.JOIN;
                    flag       = true;
                    goto Label_061A;

                case TokenType.Keyword_ON:
                case TokenType.Keyword_USING:
                    nOTHINGYET = PARSERSTATE.JOINCONDITION;
                    flag       = true;
                    goto Label_061A;
                }
                throw System.Data.Common.ADP.SyntaxErrorExpectedNextPart();

            case PARSERSTATE.TABLEALIAS:
                flag = true;
                switch (token2.Type)
                {
                case TokenType.Keyword_COMPUTE:
                case TokenType.Keyword_FOR:
                case TokenType.Keyword_GROUP:
                case TokenType.Keyword_HAVING:
                case TokenType.Keyword_INTERSECT:
                case TokenType.Keyword_MINUS:
                case TokenType.Keyword_ORDER:
                case TokenType.Keyword_UNION:
                case TokenType.Keyword_WHERE:
                case TokenType.Null:
                    nOTHINGYET = PARSERSTATE.DONE;
                    goto Label_061A;

                case TokenType.Keyword_CROSS:
                case TokenType.Keyword_LEFT:
                case TokenType.Keyword_NATURAL:
                case TokenType.Keyword_RIGHT:
                    nOTHINGYET = PARSERSTATE.JOIN;
                    goto Label_061A;

                case TokenType.Keyword_JOIN:
                case TokenType.Other_Comma:
                    nOTHINGYET = PARSERSTATE.FROM;
                    goto Label_061A;

                case TokenType.Keyword_ON:
                case TokenType.Keyword_USING:
                    nOTHINGYET = PARSERSTATE.JOINCONDITION;
                    goto Label_061A;
                }
                throw System.Data.Common.ADP.SyntaxErrorExpectedCommaAfterTable();

            case PARSERSTATE.FROM:
                switch (token2.Type)
                {
                case TokenType.Identifier:
                case TokenType.QuotedIdentifier:
                    nOTHINGYET  = PARSERSTATE.TABLE;
                    maxPart     = 0;
                    namePart[0] = token2;
                    goto Label_061A;
                }
                throw System.Data.Common.ADP.SyntaxErrorExpectedIdentifier();

            case PARSERSTATE.EXPRESSION:
                switch (token2.Type)
                {
                case TokenType.Identifier:
                case TokenType.QuotedIdentifier:
                    if (num2 == 0)
                    {
                        @null = token2;
                    }
                    break;

                case TokenType.Other_Comma:
                case TokenType.Keyword_FROM:
                    if (num2 == 0)
                    {
                        nOTHINGYET = (token2.Type == TokenType.Keyword_FROM) ? PARSERSTATE.FROM : PARSERSTATE.SELECT;
                        this.AddColumn(maxPart, namePart, @null);
                        maxPart = -1;
                        @null   = Token.Null;
                    }
                    break;

                case TokenType.Other_LeftParen:
                    num2++;
                    break;

                case TokenType.Other_RightParen:
                    num2--;
                    break;
                }
                goto Label_061A;

            case PARSERSTATE.JOIN:
                switch (token2.Type)
                {
                case TokenType.Keyword_INNER:
                case TokenType.Keyword_OUTER:
                    goto Label_061A;

                case TokenType.Keyword_JOIN:
                    nOTHINGYET = PARSERSTATE.FROM;
                    goto Label_061A;
                }
                throw System.Data.Common.ADP.SyntaxErrorExpectedNextPart();

            case PARSERSTATE.JOINCONDITION:
                switch (token2.Type)
                {
                case TokenType.Other_LeftParen:
                    num2++;
                    goto Label_061A;

                case TokenType.Other_RightParen:
                    num2--;
                    goto Label_061A;
                }
                if (num2 == 0)
                {
                    switch (token2.Type)
                    {
                    case TokenType.Keyword_COMPUTE:
                    case TokenType.Keyword_FOR:
                    case TokenType.Keyword_GROUP:
                    case TokenType.Keyword_HAVING:
                    case TokenType.Keyword_INTERSECT:
                    case TokenType.Keyword_MINUS:
                    case TokenType.Keyword_ORDER:
                    case TokenType.Keyword_UNION:
                    case TokenType.Keyword_WHERE:
                    case TokenType.Null:
                        nOTHINGYET = PARSERSTATE.DONE;
                        break;

                    case TokenType.Keyword_CROSS:
                    case TokenType.Keyword_LEFT:
                    case TokenType.Keyword_NATURAL:
                    case TokenType.Keyword_RIGHT:
                        nOTHINGYET = PARSERSTATE.JOIN;
                        break;

                    case TokenType.Keyword_JOIN:
                        nOTHINGYET = PARSERSTATE.FROM;
                        break;
                    }
                }
                goto Label_061A;

            case PARSERSTATE.DONE:
                return;

            default:
                throw System.Data.Common.ADP.InvalidOperation(Res.GetString("ADP_SQLParserInternalError"));
            }
            nOTHINGYET = PARSERSTATE.EXPRESSION;
            goto Label_061A;
Label_01FF:
            nOTHINGYET = (token2.Type == TokenType.Keyword_FROM) ? PARSERSTATE.FROM : PARSERSTATE.SELECT;
            this.AddColumn(maxPart, namePart, @null);
            maxPart = -1;
            @null   = Token.Null;
Label_061A:
            if (flag)
            {
                this.AddTable(maxPart, namePart, @null);
                maxPart = -1;
                @null   = Token.Null;
                flag    = false;
            }
            type7  = token2.Type;
            match  = match.NextMatch();
            token2 = TokenFromMatch(match);
            goto Label_003B;
        }