예제 #1
0
 public virtual void Visit(SoqlLiteralExpression v)
 {
     if (v.LiteralValue is String)
     {
         Output.Write('\'');
         Output.Write(((string)v.LiteralValue).Replace("'", "''"));
         Output.Write('\'');
     }
     else if (v.LiteralValue is DateTime)
     {
         Output.Write('\'');
         Output.Write(((DateTime)v.LiteralValue).ToString("yyyyMMdd HH:mm:ss"));
         Output.Write('\'');
     }
     else if (v.LiteralValue == null)
     {
         Output.Write("null");
     }
     else
     {
         Output.Write(v.LiteralValue);
     }
 }
예제 #2
0
        private SoqlExpression ParseLiteralExpression()
        {
            if (tokenizer.IsToken(SoqlTokenType.LeftParen))
            {
                tokenizer.GetNextToken();
                SoqlExpression e;
                if (tokenizer.IsKeyword("select"))
                    e = ParseQuery();
                else
                    e = ParseExpression();
                tokenizer.Expect(SoqlTokenType.RightParen);
                return e;
            };

            if (tokenizer.IsNumber())
            {
                string numberString = (string)tokenizer.TokenValue;
                tokenizer.GetNextToken();
                if (numberString.IndexOf('.') >= 0)
                {
                    return new SoqlLiteralExpression(Double.Parse(numberString, CultureInfo.InvariantCulture));
                }
                else
                {
                    return new SoqlLiteralExpression(Int32.Parse(numberString, CultureInfo.InvariantCulture));
                }
            }

            if (tokenizer.TokenType == SoqlTokenType.String)
            {
                SoqlExpression e = new SoqlLiteralExpression(tokenizer.StringTokenValue);
                tokenizer.GetNextToken();
                return e;
            }

            if (tokenizer.TokenType == SoqlTokenType.LeftCurlyBrace)
            {
                tokenizer.GetNextToken();
                int val = Int32.Parse((string)tokenizer.TokenValue);
                tokenizer.GetNextToken();
                if (tokenizer.TokenType == SoqlTokenType.Colon)
                {
                    tokenizer.GetNextToken();
                    SoqlLiteralValueModifiers modifiers = ParseLiteralValueModifiers();
                    tokenizer.Expect(SoqlTokenType.RightCurlyBrace);
                    return new SoqlParameterLiteralExpression(val, modifiers);
                }
                else
                {
                    tokenizer.Expect(SoqlTokenType.RightCurlyBrace);
                    return new SoqlParameterLiteralExpression(val);
                }
            }

            if (tokenizer.TokenType == SoqlTokenType.Asterisk)
            {
                tokenizer.GetNextToken();
                return new SoqlAsteriskExpression(null);
            }

            if (tokenizer.TokenType == SoqlTokenType.Keyword)
            {
                string keyword = tokenizer.EatKeyword();

                if (0 == String.Compare(keyword, "not", true, System.Globalization.CultureInfo.InvariantCulture))
                    return new SoqlBooleanNegationExpression((SoqlBooleanExpression)ParseBooleanPredicate());

                if (0 == String.Compare(keyword, "null", true, System.Globalization.CultureInfo.InvariantCulture))
                    return new SoqlNullLiteral();

                if (0 == String.Compare(keyword, "true", true, System.Globalization.CultureInfo.InvariantCulture))
                    return new SoqlBooleanLiteralExpression(true);

                if (0 == String.Compare(keyword, "false", true, System.Globalization.CultureInfo.InvariantCulture))
                    return new SoqlBooleanLiteralExpression(false);

                /*if (tokenizer.IsKeyword("as"))
                {
                    tokenizer.GetNextToken();
                    string alias = tokenizer.EatKeyword();
                    string className = keyword;

                    return ParseSimplifiedQuery(className, alias);
                }
                */

                if (tokenizer.IsKeyword("where"))
                {
                    // className WHERE expr

                    return ParseSimplifiedQuery(keyword, String.Empty);
                }

                return ParsePathLikeExpression(keyword);
            }

            if (tokenizer.TokenType == SoqlTokenType.Sub)
            {
                tokenizer.GetNextToken();
                return new SoqlUnaryNegationExpression(ParseLiteralExpression());
            }

            throw new SoqlException("Unexpected token: " + tokenizer.TokenValue, tokenizer.TokenPosition);
        }
예제 #3
0
        private SoqlExpression ParseLiteralExpression()
        {
            if (tokenizer.IsToken(SoqlTokenType.LeftParen))
            {
                tokenizer.GetNextToken();
                SoqlExpression e;
                if (tokenizer.IsKeyword("select"))
                {
                    e = ParseQuery();
                }
                else
                {
                    e = ParseExpression();
                }
                tokenizer.Expect(SoqlTokenType.RightParen);
                return(e);
            }
            ;

            if (tokenizer.IsNumber())
            {
                string numberString = (string)tokenizer.TokenValue;
                tokenizer.GetNextToken();
                if (numberString.IndexOf('.') >= 0)
                {
                    return(new SoqlLiteralExpression(Double.Parse(numberString, CultureInfo.InvariantCulture)));
                }
                else
                {
                    return(new SoqlLiteralExpression(Int32.Parse(numberString, CultureInfo.InvariantCulture)));
                }
            }

            if (tokenizer.TokenType == SoqlTokenType.String)
            {
                SoqlExpression e = new SoqlLiteralExpression(tokenizer.StringTokenValue);
                tokenizer.GetNextToken();
                return(e);
            }

            if (tokenizer.TokenType == SoqlTokenType.LeftCurlyBrace)
            {
                tokenizer.GetNextToken();
                int val = Int32.Parse((string)tokenizer.TokenValue);
                tokenizer.GetNextToken();
                if (tokenizer.TokenType == SoqlTokenType.Colon)
                {
                    tokenizer.GetNextToken();
                    SoqlLiteralValueModifiers modifiers = ParseLiteralValueModifiers();
                    tokenizer.Expect(SoqlTokenType.RightCurlyBrace);
                    return(new SoqlParameterLiteralExpression(val, modifiers));
                }
                else
                {
                    tokenizer.Expect(SoqlTokenType.RightCurlyBrace);
                    return(new SoqlParameterLiteralExpression(val));
                }
            }

            if (tokenizer.TokenType == SoqlTokenType.Asterisk)
            {
                tokenizer.GetNextToken();
                return(new SoqlAsteriskExpression(null));
            }

            if (tokenizer.TokenType == SoqlTokenType.Keyword)
            {
                string keyword = tokenizer.EatKeyword();

                if (0 == String.Compare(keyword, "not", true, System.Globalization.CultureInfo.InvariantCulture))
                {
                    return(new SoqlBooleanNegationExpression((SoqlBooleanExpression)ParseBooleanPredicate()));
                }

                if (0 == String.Compare(keyword, "null", true, System.Globalization.CultureInfo.InvariantCulture))
                {
                    return(new SoqlNullLiteral());
                }

                if (0 == String.Compare(keyword, "true", true, System.Globalization.CultureInfo.InvariantCulture))
                {
                    return(new SoqlBooleanLiteralExpression(true));
                }

                if (0 == String.Compare(keyword, "false", true, System.Globalization.CultureInfo.InvariantCulture))
                {
                    return(new SoqlBooleanLiteralExpression(false));
                }

                /*if (tokenizer.IsKeyword("as"))
                 * {
                 *  tokenizer.GetNextToken();
                 *  string alias = tokenizer.EatKeyword();
                 *  string className = keyword;
                 *
                 *  return ParseSimplifiedQuery(className, alias);
                 * }
                 */

                if (tokenizer.IsKeyword("where"))
                {
                    // className WHERE expr

                    return(ParseSimplifiedQuery(keyword, String.Empty));
                }

                return(ParsePathLikeExpression(keyword));
            }

            if (tokenizer.TokenType == SoqlTokenType.Sub)
            {
                tokenizer.GetNextToken();
                return(new SoqlUnaryNegationExpression(ParseLiteralExpression()));
            }

            throw new SoqlException("Unexpected token: " + tokenizer.TokenValue, tokenizer.TokenPosition);
        }
예제 #4
0
 public virtual void Visit(SoqlLiteralExpression v)
 {
     if (v.LiteralValue is String)
     {
         Output.Write('\'');
         Output.Write(((string)v.LiteralValue).Replace("'", "''"));
         Output.Write('\'');
     }
     else if (v.LiteralValue is DateTime)
     {
         Output.Write('\'');
         Output.Write(((DateTime)v.LiteralValue).ToString("yyyyMMdd HH:mm:ss"));
         Output.Write('\'');
     }
     else if (v.LiteralValue == null)
     {
         Output.Write("null");
     }
     else
     {
         Output.Write(v.LiteralValue);
     }
 }
 void Sooda.QL.ISoqlVisitor.Visit(SoqlLiteralExpression v)
 {
     // nothing here
 }
 void Sooda.QL.ISoqlVisitor.Visit(SoqlLiteralExpression v)
 {
     // nothing here
 }
예제 #7
0
 public override void Visit(SoqlLiteralExpression v)
 {
     OutputLiteral(v.LiteralValue, v.Modifiers);
 }