Ejemplo n.º 1
0
        public static Number String2Number(string str)
        {
            if (str == null)
            {
                return(0);
            }

            //TODO --ExprEvalUtils-String2Number
            try
            {
                return(Convert.ToInt32(str));
            }
            catch (Exception ex)
            {
                Console.WriteLine("String2Number-ToInt32-{0}-{1}", str, ex);
            }
            try
            {
                return(Convert.ToInt64(str));
            }
            catch (Exception ex)
            {
                Console.WriteLine("String2Number-ToInt64-{0}-{1}", str, ex);
            }
            try
            {
                var lexer = new MySqlLexer(str);
                switch (lexer.Token())
                {
                case MySqlToken.LiteralNumPureDigit:
                {
                    return(lexer.GetIntegerValue());
                }

                case MySqlToken.LiteralNumMixDigit:
                {
                    return(lexer.GetDecimalValue());
                }

                default:
                {
                    throw new ArgumentException("unrecognized number: " + str);
                }
                }
            }
            catch (SqlSyntaxErrorException e)
            {
                throw new ArgumentException("str", e);
            }
        }
Ejemplo n.º 2
0
        /// <summary>nothing has been pre-consumed</summary>
        /// <returns>null if there is no order limit</returns>
        /// <exception cref="System.SqlSyntaxErrorException" />
        public virtual Limit Limit()
        {
            if (lexer.Token() != MySqlToken.KwLimit)
            {
                return(null);
            }
            int    paramIndex1;
            int    paramIndex2;
            Number num1;

            switch (lexer.NextToken())
            {
            case MySqlToken.LiteralNumPureDigit:
            {
                num1 = lexer.GetIntegerValue();
                switch (lexer.NextToken())
                {
                case MySqlToken.PuncComma:
                {
                    switch (lexer.NextToken())
                    {
                    case MySqlToken.LiteralNumPureDigit:
                    {
                        var num2 = lexer.GetIntegerValue();
                        lexer.NextToken();
                        return(new Limit(num1, num2));
                    }

                    case MySqlToken.QuestionMark:
                    {
                        paramIndex1 = lexer.ParamIndex;
                        lexer.NextToken();
                        return(new Limit(num1, CreateParam(paramIndex1)));
                    }

                    default:
                    {
                        throw Err("expect digit or ? after , for limit");
                    }
                    }
                    //goto case MySqlToken.Identifier;
                }

                case MySqlToken.Identifier:
                {
                    if ("OFFSET".Equals(lexer.GetStringValueUppercase()))
                    {
                        switch (lexer.NextToken())
                        {
                        case MySqlToken.LiteralNumPureDigit:
                        {
                            var num2_1 = lexer.GetIntegerValue();
                            lexer.NextToken();
                            return(new Limit(num2_1, num1));
                        }

                        case MySqlToken.QuestionMark:
                        {
                            paramIndex1 = lexer.ParamIndex;
                            lexer.NextToken();
                            return(new Limit(CreateParam(paramIndex1), num1));
                        }

                        default:
                        {
                            throw Err("expect digit or ? after , for limit");
                        }
                        }
                    }
                    break;
                }
                }
                return(new Limit(0, num1));
            }

            case MySqlToken.QuestionMark:
            {
                paramIndex1 = lexer.ParamIndex;
                switch (lexer.NextToken())
                {
                case MySqlToken.PuncComma:
                {
                    switch (lexer.NextToken())
                    {
                    case MySqlToken.LiteralNumPureDigit:
                    {
                        num1 = lexer.GetIntegerValue();
                        lexer.NextToken();
                        return(new Limit(CreateParam(paramIndex1), num1));
                    }

                    case MySqlToken.QuestionMark:
                    {
                        paramIndex2 = lexer.ParamIndex;
                        lexer.NextToken();
                        return(new Limit(CreateParam(paramIndex1), CreateParam(paramIndex2)));
                    }

                    default:
                    {
                        throw Err("expect digit or ? after , for limit");
                    }
                    }
                    //goto case MySqlToken.Identifier;
                }

                case MySqlToken.Identifier:
                {
                    if ("OFFSET".Equals(lexer.GetStringValueUppercase()))
                    {
                        switch (lexer.NextToken())
                        {
                        case MySqlToken.LiteralNumPureDigit:
                        {
                            num1 = lexer.GetIntegerValue();
                            lexer.NextToken();
                            return(new Limit(num1, CreateParam(paramIndex1)));
                        }

                        case MySqlToken.QuestionMark:
                        {
                            paramIndex2 = lexer.ParamIndex;
                            lexer.NextToken();
                            return(new Limit(CreateParam(paramIndex2), CreateParam(paramIndex1)));
                        }

                        default:
                        {
                            throw Err("expect digit or ? after , for limit");
                        }
                        }
                    }
                    break;
                }
                }
                return(new Limit(0, CreateParam(paramIndex1)));
            }

            default:
            {
                throw Err("expect digit or ? after limit");
            }
            }
        }