public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var argument = methodCallExpression.Arguments[0];
            var methodCallArgument = argument as MethodCallExpression;

            if ((methodCallArgument != null) && SupportMethods.Contains(methodCallArgument.Method))
            {
                // Two method calls are reversing each other, so just skip them both

                return expressionTreeVisitor.VisitExpression(methodCallArgument.Arguments[0]);
            }

            var expression = expressionTreeVisitor.Expression;

            if (methodCallExpression.Method.Name == "FromDateTime")
            {
                expression.Append("STR_TO_MILLIS(");
            }
            else
            {
                expression.Append("MILLIS_TO_STR(");
            }

            expressionTreeVisitor.VisitExpression(argument);

            expression.Append(')');

            return methodCallExpression;
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }
            if (methodCallExpression.Object == null)
            {
                throw new InvalidOperationException();
            }

            if (methodCallExpression.Object.Type == typeof(string))
            {
                expressionTreeVisitor.VisitExpression(methodCallExpression.Object);
            }
            else
            {
                var expression = expressionTreeVisitor.Expression;

                expression.Append("TOSTRING(");
                expressionTreeVisitor.VisitExpression(methodCallExpression.Object);
                expression.Append(")");
            }

            return(methodCallExpression);
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expression.Append("SUBSTR(");
            expressionTreeVisitor.VisitExpression(methodCallExpression.Object);
            expression.Append(", ");
            expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[0]);

            if (methodCallExpression.Arguments.Count > 1)
            {
                expression.Append(", ");
                expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[1]);
            }
            else if (methodCallExpression.Method.Name == "get_Chars")
            {
                // Called str[i], so return a single character at i
                expression.Append(", 1");
            }

            expression.Append(")");

            return methodCallExpression;
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expression.Append("(");
            expressionTreeVisitor.VisitExpression(methodCallExpression.Object);
            expression.Append(" LIKE '%");

            var indexInsertStarted = expression.Length;

            expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[0]);

            var indexInsertEnded = expression.Length;

            expression.Append("%')");

            //Remove extra quote marks which have been added due to the string in the clause, these aren't needed as they have been added already in this case.
            expression.Remove(indexInsertStarted, 1);
            expression.Remove(indexInsertEnded - 2, 1);

            return(methodCallExpression);
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var argument           = methodCallExpression.Arguments[0];
            var methodCallArgument = argument as MethodCallExpression;

            if ((methodCallArgument != null) && SupportMethods.Contains(methodCallArgument.Method))
            {
                // Two method calls are reversing each other, so just skip them both

                return(expressionTreeVisitor.VisitExpression(methodCallArgument.Arguments[0]));
            }

            var expression = expressionTreeVisitor.Expression;

            if (methodCallExpression.Method.Name == "FromDateTime")
            {
                expression.Append("STR_TO_MILLIS(");
            }
            else
            {
                expression.Append("MILLIS_TO_STR(");
            }

            expressionTreeVisitor.VisitExpression(argument);

            expression.Append(')');

            return(methodCallExpression);
        }
Exemple #6
0
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expression.Append("SUBSTR(");
            expressionTreeVisitor.VisitExpression(methodCallExpression.Object);
            expression.Append(", ");
            expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[0]);

            if (methodCallExpression.Arguments.Count > 1)
            {
                expression.Append(", ");
                expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[1]);
            }
            else if (methodCallExpression.Method.Name == "get_Chars")
            {
                // Called str[i], so return a single character at i
                expression.Append(", 1");
            }

            expression.Append(")");

            return(methodCallExpression);
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expression.Append("(");
            expressionTreeVisitor.VisitExpression(methodCallExpression.Object);
            expression.Append(" LIKE '%");

            var indexInsertStarted = expression.Length;

            expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[0]);

            var indexInsertEnded = expression.Length;

            expression.Append("%')");

            //Remove extra quote marks which have been added due to the string in the clause, these aren't needed as they have been added already in this case.
            expression.Remove(indexInsertStarted, 1);
            expression.Remove(indexInsertEnded - 2, 1);

            return methodCallExpression;
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }
            if (methodCallExpression.Object == null)
            {
                throw new InvalidOperationException();
            }

            if (methodCallExpression.Object.Type == typeof (string))
            {
                expressionTreeVisitor.VisitExpression(methodCallExpression.Object);
            }
            else
            {
                var expression = expressionTreeVisitor.Expression;

                expression.Append("TOSTRING(");
                expressionTreeVisitor.VisitExpression(methodCallExpression.Object);
                expression.Append(")");
            }

            return methodCallExpression;
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expressionTreeVisitor.VisitExpression(methodCallExpression.Object);
            expression.Append('[');
            expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[0]);
            expression.Append(']');

            return(methodCallExpression);
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expression.Append('(');

            bool first = true;
            foreach (var argument in GetConcatenatedItems(methodCallExpression))
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    expression.Append(" || ");
                }

                expressionTreeVisitor.VisitExpression(argument);
            }

            expression.Append(')');

            return methodCallExpression;
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            string functionName;
            if (!SupportedMethodNames.TryGetValue(methodCallExpression.Method.Name, out functionName))
            {
                throw new NotSupportedException("Unsupported Math Method");
            }

            expression.AppendFormat("{0}(", functionName);

            for (var i=0; i<methodCallExpression.Arguments.Count; i++)
            {
                if (i > 0)
                {
                    expression.Append(", ");
                }

                expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[i]);
            }

            expression.Append(')');

            return methodCallExpression;
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            string functionName;

            if (!SupportedMethodNames.TryGetValue(methodCallExpression.Method.Name, out functionName))
            {
                throw new NotSupportedException("Unsupported Math Method");
            }

            expression.AppendFormat("{0}(", functionName);

            for (var i = 0; i < methodCallExpression.Arguments.Count; i++)
            {
                if (i > 0)
                {
                    expression.Append(", ");
                }

                expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[i]);
            }

            expression.Append(')');

            return(methodCallExpression);
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expressionTreeVisitor.VisitExpression(methodCallExpression.Object);
            expression.Append('[');
            expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[0]);
            expression.Append(']');

            return methodCallExpression;
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[0]);

            if (methodCallExpression.Arguments.Count > 1)
            {
                var constantExpression = methodCallExpression.Arguments[1] as ConstantExpression;
                if (constantExpression == null)
                {
                    throw new NotSupportedException("IsMissing and IsNotMissing propertyName parameter must be a constant");
                }

                expression.AppendFormat(".{0}",
                    N1QlHelpers.EscapeIdentifier(constantExpression.Value.ToString()));
            }

            expression.Append(methodCallExpression.Method.Name == "IsMissing" ? " IS MISSING" : " IS NOT MISSING");

            return methodCallExpression;
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[0]);

            if (methodCallExpression.Arguments.Count > 1)
            {
                var constantExpression = methodCallExpression.Arguments[1] as ConstantExpression;
                if (constantExpression == null)
                {
                    throw new NotSupportedException("IsValued and IsNotValued propertyName parameter must be a constant");
                }

                expression.AppendFormat(".{0}",
                                        N1QlHelpers.EscapeIdentifier(constantExpression.Value.ToString()));
            }

            expression.Append(methodCallExpression.Method.Name == "IsValued" ? " IS VALUED" : " IS NOT VALUED");

            return(methodCallExpression);
        }
Exemple #16
0
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expression.Append('(');

            bool first = true;

            foreach (var argument in GetConcatenatedItems(methodCallExpression))
            {
                if (first)
                {
                    first = false;
                }
                else
                {
                    expression.Append(" || ");
                }

                expressionTreeVisitor.VisitExpression(argument);
            }

            expression.Append(')');

            return(methodCallExpression);
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expression.Append("SPLIT(");
            expressionTreeVisitor.VisitExpression(methodCallExpression.Object);

            if (methodCallExpression.Arguments[0].Type != typeof(char[]))
            {
                throw new NotSupportedException("String Split Operations Expect Character Array Parameters");
            }

            try
            {
                var lambda = Expression.Lambda<Func<char[]>>(methodCallExpression.Arguments[0]).Compile();
                var chars = lambda.Invoke();

                if ((chars != null) && (chars.Length > 0))
                {
                    if (chars.Length > 1)
                    {
                        throw new NotSupportedException("Cannot Split With More Than One Character");
                    }

                    expression.Append(", ");

                    expressionTreeVisitor.VisitExpression(Expression.Constant(chars[0], typeof(char)));
                }
            }
            catch (NotSupportedException ex)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new NotSupportedException("Unable To Parse Split Character Set.  Dynamic Expressions Are Not Supported", ex);
            }

            expression.Append(")");

            return methodCallExpression;
        }
Exemple #18
0
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expression.Append("SPLIT(");
            expressionTreeVisitor.VisitExpression(methodCallExpression.Object);

            if (methodCallExpression.Arguments[0].Type != typeof(char[]))
            {
                throw new NotSupportedException("String Split Operations Expect Character Array Parameters");
            }

            try
            {
                var lambda = Expression.Lambda <Func <char[]> >(methodCallExpression.Arguments[0]).Compile();
                var chars  = lambda.Invoke();

                if ((chars != null) && (chars.Length > 0))
                {
                    if (chars.Length > 1)
                    {
                        throw new NotSupportedException("Cannot Split With More Than One Character");
                    }

                    expression.Append(", ");

                    expressionTreeVisitor.VisitExpression(Expression.Constant(chars[0], typeof(char)));
                }
            }
            catch (NotSupportedException ex)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new NotSupportedException("Unable To Parse Split Character Set.  Dynamic Expressions Are Not Supported", ex);
            }

            expression.Append(")");

            return(methodCallExpression);
        }
Exemple #19
0
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expression.Append(methodCallExpression.Method.Name == "TrimStart" ? "LTRIM(" :
                              methodCallExpression.Method.Name == "TrimEnd" ? "RTRIM(" : "TRIM(");
            expressionTreeVisitor.VisitExpression(methodCallExpression.Object);

            if (methodCallExpression.Arguments.Count > 0)
            {
                if (methodCallExpression.Arguments[0].Type != typeof(char[]))
                {
                    throw new NotSupportedException("String Trim Operations Expect Character Array Parameters");
                }

                try
                {
                    var lambda = Expression.Lambda <Func <char[]> >(methodCallExpression.Arguments[0]).Compile();
                    var chars  = lambda.Invoke();

                    if ((chars != null) && (chars.Length > 0))
                    {
                        expression.Append(", ");

                        expressionTreeVisitor.VisitExpression(Expression.Constant(new String(chars), typeof(string)));
                    }
                }
                catch (NotSupportedException ex)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    throw new NotSupportedException("Unable To Parse Trim Character Set.  Dynamic Expressions Are Not Supported", ex);
                }
            }

            expression.Append(")");

            return(methodCallExpression);
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expression.Append(methodCallExpression.Method.Name == "TrimStart" ? "LTRIM(" :
                methodCallExpression.Method.Name == "TrimEnd" ? "RTRIM(" : "TRIM(");
            expressionTreeVisitor.VisitExpression(methodCallExpression.Object);

            if (methodCallExpression.Arguments.Count > 0)
            {
                if (methodCallExpression.Arguments[0].Type != typeof (char[]))
                {
                    throw new NotSupportedException("String Trim Operations Expect Character Array Parameters");
                }

                try
                {
                    var lambda = Expression.Lambda<Func<char[]>>(methodCallExpression.Arguments[0]).Compile();
                    var chars = lambda.Invoke();

                    if ((chars != null) && (chars.Length > 0))
                    {
                        expression.Append(", ");

                        expressionTreeVisitor.VisitExpression(Expression.Constant(new String(chars), typeof (string)));
                    }
                }
                catch (NotSupportedException ex)
                {
                    throw;
                }
                catch (Exception ex)
                {
                    throw new NotSupportedException("Unable To Parse Trim Character Set.  Dynamic Expressions Are Not Supported", ex);
                }
            }

            expression.Append(")");

            return methodCallExpression;
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            // Do not process ToArray, ToList, or AsEnumerable.  Instead just visit the list in the first argument.

            expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[0]);

            return methodCallExpression;
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            // Do not process ToArray, ToList, or AsEnumerable.  Instead just visit the list in the first argument.

            expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[0]);

            return(methodCallExpression);
        }
Exemple #23
0
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expression.Append(methodCallExpression.Method.Name == "ToLower" ? "LOWER(" : "UPPER(");
            expressionTreeVisitor.VisitExpression(methodCallExpression.Object);
            expression.Append(")");

            return(methodCallExpression);
        }
        public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor)
        {
            if (methodCallExpression == null)
            {
                throw new ArgumentNullException("methodCallExpression");
            }

            var expression = expressionTreeVisitor.Expression;

            expression.Append(methodCallExpression.Method.Name == "ToLower" ? "LOWER(" : "UPPER(");
            expressionTreeVisitor.VisitExpression(methodCallExpression.Object);
            expression.Append(")");

            return methodCallExpression;
        }