Example #1
0
        public ReformatBetweenNonConstantParamsForge(IList<ExprNode> parameters)
        {
            _start = parameters[0];
            _startCoercer = DatetimeLongCoercerFactory.GetCoercer(_start.Forge.EvaluationType);
            _end = parameters[1];
            _secondCoercer = DatetimeLongCoercerFactory.GetCoercer(_end.Forge.EvaluationType);

            if (parameters.Count == 2) {
                _includeBoth = true;
                _includeLow = true;
                _includeHigh = true;
            }
            else {
                if (parameters[2].Forge.ForgeConstantType.IsCompileTimeConstant) {
                    _includeLow = GetBooleanValue(parameters[2]);
                }
                else {
                    _forgeIncludeLow = parameters[2].Forge;
                }

                if (parameters[3].Forge.ForgeConstantType.IsCompileTimeConstant) {
                    _includeHigh = GetBooleanValue(parameters[3]);
                }
                else {
                    _forgeIncludeHigh = parameters[3].Forge;
                }

                if (_includeLow.GetValueOrDefault(false) && _includeHigh.GetValueOrDefault(false)) {
                    _includeBoth = true;
                }
            }
        }
        private long GetLongValue(ExprNode exprNode)
        {
            var value = exprNode.ExprEvaluator.Evaluate(new EvaluateParams(null, true, null));

            if (value == null)
            {
                throw new ExprValidationException("Date-time method 'between' requires non-null parameter values");
            }
            return(DatetimeLongCoercerFactory.GetCoercer(value.GetType(), _timeZone).Coerce(value));
        }
        public ReformatOpBetweenNonConstantParams(IList <ExprNode> parameters, TimeZoneInfo timeZone)
        {
            _timeZone      = timeZone;
            _start         = parameters[0];
            _startEval     = _start.ExprEvaluator;
            _startCoercer  = DatetimeLongCoercerFactory.GetCoercer(_startEval.ReturnType, timeZone);
            _end           = parameters[1];
            _endEval       = _end.ExprEvaluator;
            _secondCoercer = DatetimeLongCoercerFactory.GetCoercer(_endEval.ReturnType, timeZone);

            if (parameters.Count == 2)
            {
                _includeBoth = true;
                _includeLow  = true;
                _includeHigh = true;
            }
            else
            {
                if (parameters[2].IsConstantResult)
                {
                    _includeLow = GetBooleanValue(parameters[2]);
                }
                else
                {
                    _evalIncludeLow = parameters[2].ExprEvaluator;
                }
                if (parameters[3].IsConstantResult)
                {
                    _includeHigh = GetBooleanValue(parameters[3]);
                }
                else
                {
                    _evalIncludeHigh = parameters[3].ExprEvaluator;
                }
                if (_includeLow != null && _includeHigh != null && _includeLow.Value && _includeHigh.Value)
                {
                    _includeBoth = true;
                }
            }
        }