public override HqlExpression BuildHql(HqlExpression expression, ReadOnlyCollection <HqlExpression> arguments, HqlTreeBuilder treeBuilder) { HqlExpression factor = treeBuilder.Constant(_factor); if (_transformer != null) { return(treeBuilder.Multiply(treeBuilder.Cast(_transformer.BuildHql(expression, arguments, treeBuilder), typeof(long)), factor)); } return(treeBuilder.Multiply(treeBuilder.Cast(expression, typeof(long)), factor)); }
protected HqlTreeNode VisitNhAverage(NhAverageExpression expression) { var hqlExpression = VisitExpression(expression.Expression).AsExpression(); if (expression.Type != expression.Expression.Type) { hqlExpression = _hqlTreeBuilder.Cast(hqlExpression, expression.Type); } return(_hqlTreeBuilder.Cast(_hqlTreeBuilder.Average(hqlExpression), expression.Type)); }
public override HqlTreeNode BuildHql( MethodInfo method, Expression targetObject, ReadOnlyCollection <Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { if (method == _nextDouble) { return(treeBuilder.MethodCall(_randomFunctionName)); } switch (arguments.Count) { case 0: return(treeBuilder.Cast( treeBuilder.MethodCall( _floorFunctionName, treeBuilder.Multiply( treeBuilder.MethodCall(_randomFunctionName), treeBuilder.Constant(int.MaxValue))), typeof(int))); case 1: return(treeBuilder.Cast( treeBuilder.MethodCall( _floorFunctionName, treeBuilder.Multiply( treeBuilder.MethodCall(_randomFunctionName), visitor.Visit(arguments[0]).AsExpression())), typeof(int))); case 2: var minValue = visitor.Visit(arguments[0]).AsExpression(); var maxValue = visitor.Visit(arguments[1]).AsExpression(); return(treeBuilder.Cast( treeBuilder.Add( treeBuilder.MethodCall( _floorFunctionName, treeBuilder.Multiply( treeBuilder.MethodCall(_randomFunctionName), treeBuilder.Subtract(maxValue, minValue))), minValue), typeof(int))); default: throw new NotSupportedException(); } }
protected HqlTreeNode VisitNhAverage(NhAverageExpression expression) { // We need to cast the argument when its type is different from Average method return type, // otherwise the result may be incorrect. In SQL Server avg always returns int // when the argument is int. var hqlExpression = VisitExpression(expression.Expression).AsExpression(); hqlExpression = IsCastRequired(expression.Expression, expression.Type, out _) ? (HqlExpression)_hqlTreeBuilder.Cast(hqlExpression, expression.Type) : _hqlTreeBuilder.TransparentCast(hqlExpression, expression.Type); // In Oracle the avg function can return a number with up to 40 digits which cannot be retrieved from the data reader due to the lack of such // numeric type in .NET. In order to avoid that we have to add a cast to trim the number so that it can be converted into a .NET numeric type. return(_hqlTreeBuilder.Cast(_hqlTreeBuilder.Average(hqlExpression), expression.Type)); }
public override HqlTreeNode BuildHql( MethodInfo method, Expression targetObject, ReadOnlyCollection <Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { var left = treeBuilder.Cast(visitor.Visit(targetObject).AsExpression(), typeof(string)); var right = treeBuilder.Cast(visitor.Visit(arguments.First()).AsExpression(), typeof(string)); var leftSubstring = treeBuilder.MethodCall("substring", left, treeBuilder.Constant(4)); var rightSubstring = treeBuilder.MethodCall("substring", right, treeBuilder.Constant(4)); var equals = treeBuilder.Equality(leftSubstring, rightSubstring); return(equals); }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection <Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { HqlExpression argument0Expression = visitor.Visit(arguments[0]).AsExpression(); HqlTreeNode result = treeBuilder.Cast(argument0Expression, method.ReturnType); return(result); }
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection <Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) { return(treeBuilder.Cast(visitor.Visit(arguments[0]).AsExpression(), typeof(Int64))); }
protected HqlTreeNode VisitNhAverage(NhAverageExpression expression) { return(_hqlTreeBuilder.Cast(_hqlTreeBuilder.Average(VisitExpression(expression.Expression).AsExpression()), expression.Type)); }
public override HqlExpression BuildHql(HqlExpression expression, ReadOnlyCollection <HqlExpression> arguments, HqlTreeBuilder treeBuilder) { return(treeBuilder.Cast(expression, _type)); }
public HqlExpression BuildHql(HqlExpression expression, ReadOnlyCollection <HqlExpression> arguments, HqlTreeBuilder treeBuilder) { return(treeBuilder.CastToIType(NHibernateUtil.UtcDateTime, treeBuilder.Cast(expression, typeof(DateTime)))); }
public HqlExpression BuildHql(HqlExpression expression, ReadOnlyCollection <HqlExpression> arguments, HqlTreeBuilder treeBuilder) { return(treeBuilder.Cast(expression, typeof(DateTimeOffset)).AsExpression()); }