/// <inheritdoc/> public virtual void RenderConvertFrom(Expression innerExpression, IN1QlExpressionTreeVisitor expressionTreeVisitor) { var unwrapped = UnwrapInverseMethod(innerExpression, ConvertToMethods.Values); if (unwrapped != null) { expressionTreeVisitor.Visit(unwrapped); } else { RenderConvertFromMethod(innerExpression, expressionTreeVisitor); } }
/// <inheritdoc/> protected override void RenderConvertedConstant(ConstantExpression constantExpression, IN1QlExpressionTreeVisitor expressionTreeVisitor) { if (constantExpression.Value == null) { // Don't try to convert nulls expressionTreeVisitor.Visit(constantExpression); } else { var dateTime = GetDateTime(constantExpression); var unixMilliseconds = (dateTime - UnixEpoch).TotalMilliseconds; // ReSharper disable once CompareOfFloatsByEqualityOperator if (Math.Floor(unixMilliseconds) == unixMilliseconds) { expressionTreeVisitor.Expression.Append((long)unixMilliseconds); } else { expressionTreeVisitor.Expression.Append(unixMilliseconds); } } }
/// <inheritdoc/> protected override void RenderConvertFromMethod(Expression innerExpression, IN1QlExpressionTreeVisitor expressionTreeVisitor) { expressionTreeVisitor.Expression.Append("MILLIS_TO_STR("); expressionTreeVisitor.Visit(innerExpression); expressionTreeVisitor.Expression.Append(')'); }
protected override void RenderConvertedConstant(ConstantExpression constantExpression, IN1QlExpressionTreeVisitor expressionTreeVisitor) { throw new NotImplementedException(); }
protected override void RenderConvertFromMethod(Expression innerExpression, IN1QlExpressionTreeVisitor expressionTreeVisitor) { throw new NotImplementedException(); }
/// <summary> /// Renders a constant which has been preconverted to the custom format onto a N1QL query. /// </summary> /// <param name="constantExpression">The expression being converted.</param> /// <param name="expressionTreeVisitor"><see cref="IN1QlExpressionTreeVisitor"/> rendering the query.</param> protected abstract void RenderConvertedConstant(ConstantExpression constantExpression, IN1QlExpressionTreeVisitor expressionTreeVisitor);
/// <summary> /// Renders a conversion from the custom format to the standard format onto a N1QL query. /// </summary> /// <param name="innerExpression">The expression being converted.</param> /// <param name="expressionTreeVisitor"><see cref="IN1QlExpressionTreeVisitor"/> rendering the query.</param> protected abstract void RenderConvertFromMethod(Expression innerExpression, IN1QlExpressionTreeVisitor expressionTreeVisitor);
/// <inheritdoc/> protected override void RenderConvertedConstant(ConstantExpression constantExpression, IN1QlExpressionTreeVisitor expressionTreeVisitor) { if (constantExpression.Value == null) { // Don't try to convert nulls expressionTreeVisitor.Visit(constantExpression); } else { using (var writer = new JTokenWriter()) { _jsonConverter.WriteJson(writer, constantExpression.Value, JsonSerializer.CreateDefault()); expressionTreeVisitor.Visit(Expression.Constant(writer.Token.ToString())); } } }
/// <inheritdoc/> protected override void RenderConvertFromMethod(Expression innerExpression, IN1QlExpressionTreeVisitor expressionTreeVisitor) { // Don't try to convert in N1QL, for enums we're only supporting constants as strings expressionTreeVisitor.Visit(innerExpression); }
protected override void RenderConvertToMethod(Expression innerExpression, IN1QlExpressionTreeVisitor expressionTreeVisitor) { expressionTreeVisitor.Visit(innerExpression); }
protected override void RenderConvertedConstant(ConstantExpression constantExpression, IN1QlExpressionTreeVisitor expressionTreeVisitor) { expressionTreeVisitor.Expression.Append("'"); expressionTreeVisitor.Visit(constantExpression); expressionTreeVisitor.Expression.Append("'"); }