/// <summary> /// Translate the given method call expression. /// </summary> /// <param name="methodCallExpression">Method call to be translated. Must match the method provided to the constructor.</param> /// <param name="expressionTreeVisitor"><see cref="N1QlExpressionTreeVisitor"/> to use to visit parameters.</param> /// <returns>Original or altered expression.</returns> public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor) { if (methodCallExpression == null) { throw new ArgumentNullException("methodCallExpression"); } if (expressionTreeVisitor == null) { throw new ArgumentNullException("expressionTreeVisitor"); } if (methodCallExpression.Method != MethodInfo) { throw new ArgumentException("Cannot translate a method other than the one provided to the constructor.", "methodCallExpression"); } expressionTreeVisitor.Expression.Append(N1QlFunctionName); expressionTreeVisitor.Expression.Append('('); for (var i = 0; i < methodCallExpression.Arguments.Count; i++) { if (i > 0) { expressionTreeVisitor.Expression.Append(", "); } expressionTreeVisitor.Visit(methodCallExpression.Arguments[i]); } expressionTreeVisitor.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 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 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('('); bool first = true; foreach (var argument in GetConcatenatedItems(methodCallExpression)) { if (first) { first = false; } else { expression.Append(" || "); } expressionTreeVisitor.Visit(argument); } expression.Append(')'); 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; 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.Visit(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"); } 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; 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; 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("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"); } if (methodCallExpression.Object == null) { throw new InvalidOperationException(); } if (methodCallExpression.Object.Type == typeof(string)) { expressionTreeVisitor.Visit(methodCallExpression.Object); } else { var expression = expressionTreeVisitor.Expression; expression.Append("TOSTRING("); expressionTreeVisitor.Visit(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("("); 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 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); }
/// <summary> /// Translate the given method call expression. /// </summary> /// <param name="methodCallExpression">Method call to be translated. Must match the method provided to the constructor.</param> /// <param name="expressionTreeVisitor"><see cref="N1QlExpressionTreeVisitor"/> to use to visit parameters.</param> /// <returns>Original or altered expression.</returns> public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor) { if (methodCallExpression == null) { throw new ArgumentNullException("methodCallExpression"); } if (expressionTreeVisitor == null) { throw new ArgumentNullException("expressionTreeVisitor"); } if (methodCallExpression.Method != MethodInfo) { throw new ArgumentException("Cannot translate a method other than the one provided to the constructor.", "methodCallExpression"); } expressionTreeVisitor.Expression.Append(N1QlFunctionName); expressionTreeVisitor.Expression.Append('('); for (var i = 0; i < methodCallExpression.Arguments.Count; i++) { if (i > 0) { expressionTreeVisitor.Expression.Append(", "); } expressionTreeVisitor.Visit(methodCallExpression.Arguments[i]); } expressionTreeVisitor.Expression.Append(')'); return methodCallExpression; }
public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor) { if (methodCallExpression == null) { throw new ArgumentNullException("methodCallExpression"); } if (expressionTreeVisitor == null) { throw new ArgumentNullException("expressionTreeVisitor"); } var expression = expressionTreeVisitor.Expression; expression.Append("("); expressionTreeVisitor.Visit(methodCallExpression.Object); expression.Append(" LIKE "); var constantExpression = methodCallExpression.Arguments[0] as ConstantExpression; if ((constantExpression != null) && (constantExpression.Type == typeof(string)) && (constantExpression.Value != null)) { // This is a string constant, so we can build the literal in advance var newExpression = Expression.Constant( (methodCallExpression.Method.Name != StartsWith ? "%" : "") + constantExpression.Value + (methodCallExpression.Method.Name != EndsWith ? "%" : "")); expressionTreeVisitor.Visit(newExpression); } else { // The argument is dynamic, so we must build the comparison in N1QL if (methodCallExpression.Method.Name != StartsWith) { expression.Append("\"%\" || "); } expressionTreeVisitor.Visit(methodCallExpression.Arguments[0]); if (methodCallExpression.Method.Name != EndsWith) { expression.Append(" || \"%\""); } } 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.Visit(methodCallExpression.Arguments[0]); return methodCallExpression; }
public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor) { if (methodCallExpression == null) { throw new ArgumentNullException("methodCallExpression"); } if (expressionTreeVisitor == null) { throw new ArgumentNullException("expressionTreeVisitor"); } var expression = expressionTreeVisitor.Expression; expression.Append("("); expressionTreeVisitor.Visit(methodCallExpression.Object); expression.Append(" LIKE "); var constantExpression = methodCallExpression.Arguments[0] as ConstantExpression; if ((constantExpression != null) && (constantExpression.Type == typeof(string)) && (constantExpression.Value != null)) { // This is a string constant, so we can build the literal in advance var newExpression = Expression.Constant( (methodCallExpression.Method.Name != StartsWith ? "%" : "") + constantExpression.Value + (methodCallExpression.Method.Name != EndsWith ? "%" : "")); expressionTreeVisitor.Visit(newExpression); } else { // The argument is dynamic, so we must build the comparison in N1QL if (methodCallExpression.Method.Name != StartsWith) { expression.Append("'%' || "); } expressionTreeVisitor.Visit(methodCallExpression.Arguments[0]); if (methodCallExpression.Method.Name != EndsWith) { expression.Append(" || '%'"); } } expression.Append(')'); return methodCallExpression; }
public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor) { if (methodCallExpression == null) { throw new ArgumentNullException("methodCallExpression"); } var expression = expressionTreeVisitor.Expression; expression.Append("LENGTH("); expressionTreeVisitor.Visit(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.Visit(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("LENGTH("); 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("META("); expressionTreeVisitor.Visit(methodCallExpression.Arguments[0]); expression.Append(").Id"); return methodCallExpression; }
public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor) { if (methodCallExpression == null) { throw new ArgumentNullException(nameof(methodCallExpression)); } var expression = expressionTreeVisitor.Expression; expression.Append("OBJECT_VALUES("); expressionTreeVisitor.Visit(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("META("); expressionTreeVisitor.VisitExpression(methodCallExpression.Arguments[0]); expression.Append(").Id"); 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.Visit(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("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; }
/// <summary> /// Translate the given method call expression. /// </summary> /// <param name="methodCallExpression">Method call to be translated. Must match the method provided to the constructor.</param> /// <param name="expressionTreeVisitor"><see cref="N1QlExpressionTreeVisitor"/> to use to visit parameters.</param> /// <returns>Original or altered expression.</returns> public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor) { if (methodCallExpression == null) { throw new ArgumentNullException("methodCallExpression"); } if (expressionTreeVisitor == null) { throw new ArgumentNullException("expressionTreeVisitor"); } if (methodCallExpression.Method != MethodInfo) { throw new ArgumentException("Cannot translate a method other than the one provided to the constructor.", "methodCallExpression"); } expressionTreeVisitor.Expression.Append(N1QlFunctionName); expressionTreeVisitor.Expression.Append('('); for (var i = 0; i < methodCallExpression.Arguments.Count; i++) { if (i > 0) { expressionTreeVisitor.Expression.Append(", "); } var argument = methodCallExpression.Arguments[i]; if (argument.Type == typeof(DateTime) && expressionTreeVisitor.QueryGenerationContext.IsUnixMillisecondsMember(argument)) { expressionTreeVisitor.Expression.Append("MILLIS_TO_STR("); expressionTreeVisitor.Visit(methodCallExpression.Arguments[i]); expressionTreeVisitor.Expression.Append(')'); } else { expressionTreeVisitor.Visit(methodCallExpression.Arguments[i]); } } expressionTreeVisitor.Expression.Append(')'); return(methodCallExpression); }
public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor) { if (methodCallExpression == null) { throw new ArgumentNullException("methodCallExpression"); } if (methodCallExpression.Arguments[0] is ConstantExpression keyExpression) { var expression = expressionTreeVisitor.Expression; expressionTreeVisitor.Visit(methodCallExpression.Object); expression.Append('.'); expression.Append(N1QlHelpers.EscapeIdentifier(keyExpression.Value.ToString())); } else { throw new NotSupportedException("Dictionary keys must be constants"); } return(methodCallExpression); }
public Expression Translate(MethodCallExpression methodCallExpression, N1QlExpressionTreeVisitor expressionTreeVisitor) { if (methodCallExpression == null) { throw new ArgumentNullException(nameof(methodCallExpression)); } if (expressionTreeVisitor == null) { throw new ArgumentNullException(nameof(expressionTreeVisitor)); } if (methodCallExpression.Object is ConstantExpression constantExpression && constantExpression.Value is ISerializationConverter conversion) { if (methodCallExpression.Method.Name == "ConvertTo") { conversion.RenderConvertTo(methodCallExpression.Arguments[0], expressionTreeVisitor); } else { conversion.RenderConvertFrom(methodCallExpression.Arguments[0], expressionTreeVisitor); } }