コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
 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)));
 }
コード例 #8
0
 protected HqlTreeNode VisitNhAverage(NhAverageExpression expression)
 {
     return(_hqlTreeBuilder.Cast(_hqlTreeBuilder.Average(VisitExpression(expression.Expression).AsExpression()), expression.Type));
 }
コード例 #9
0
 public override HqlExpression BuildHql(HqlExpression expression, ReadOnlyCollection <HqlExpression> arguments, HqlTreeBuilder treeBuilder)
 {
     return(treeBuilder.Cast(expression, _type));
 }
コード例 #10
0
 public HqlExpression BuildHql(HqlExpression expression, ReadOnlyCollection <HqlExpression> arguments, HqlTreeBuilder treeBuilder)
 {
     return(treeBuilder.CastToIType(NHibernateUtil.UtcDateTime, treeBuilder.Cast(expression, typeof(DateTime))));
 }
コード例 #11
0
 public HqlExpression BuildHql(HqlExpression expression, ReadOnlyCollection <HqlExpression> arguments, HqlTreeBuilder treeBuilder)
 {
     return(treeBuilder.Cast(expression, typeof(DateTimeOffset)).AsExpression());
 }