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); } }
/// <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"); } } }