Tup.Cobar4Net.Parser.Recognizer.Mysql.Syntax.MySqlExprParser.Type4specialFunc C# (CSharp) Method

Type4specialFunc() private method

private Type4specialFunc ( ) : Pair>
return Pair>
        private Pair<string, Pair<IExpression, IExpression>> Type4specialFunc()
        {
            IExpression exp1 = null;
            IExpression exp2 = null;
            // DATE
            // DATETIME
            // SIGNED [INTEGER]
            // TIME
            string typeName;
            switch (lexer.Token())
            {
                case MySqlToken.KwBinary:
                case MySqlToken.KwChar:
                {
                    typeName = lexer.Token().KeyWordToString();
                    if (lexer.NextToken() == MySqlToken.PuncLeftParen)
                    {
                        lexer.NextToken();
                        exp1 = Expression();
                        Match(MySqlToken.PuncRightParen);
                    }
                    return ConstructTypePair(typeName, exp1, exp2);
                }

                case MySqlToken.KwDecimal:
                {
                    typeName = lexer.Token().KeyWordToString();
                    if (lexer.NextToken() == MySqlToken.PuncLeftParen)
                    {
                        lexer.NextToken();
                        exp1 = Expression();
                        if (lexer.Token() == MySqlToken.PuncComma)
                        {
                            lexer.NextToken();
                            exp2 = Expression();
                        }
                        Match(MySqlToken.PuncRightParen);
                    }
                    return ConstructTypePair(typeName, exp1, exp2);
                }

                case MySqlToken.KwUnsigned:
                {
                    typeName = lexer.Token().KeyWordToString();
                    if (lexer.NextToken() == MySqlToken.KwInteger)
                    {
                        lexer.NextToken();
                    }
                    return ConstructTypePair(typeName, null, null);
                }

                case MySqlToken.Identifier:
                {
                    typeName = lexer.GetStringValueUppercase();
                    lexer.NextToken();
                    if ("SIGNED".Equals(typeName))
                    {
                        if (lexer.Token() == MySqlToken.KwInteger)
                        {
                            lexer.NextToken();
                        }
                    }
                    else
                    {
                        if (!"DATE".Equals(typeName) && !"DATETIME".Equals(typeName) && !"TIME".Equals(typeName))
                        {
                            throw Err("invalide type name: " + typeName);
                        }
                    }
                    return ConstructTypePair(typeName, null, null);
                }

                default:
                {
                    throw Err("invalide type name: " + lexer.GetStringValueUppercase());
                }
            }
        }