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