Esempio n. 1
0
 public override object EvalExpression(IDmlfNamespace ns)
 {
     var inner = Argument.EvalExpression(ns);
     var dt = inner as DateTime?;
     if (dt.HasValue) return (int)dt.Value.DayOfWeek;
     return null;
 }
Esempio n. 2
0
        public override object EvalExpression(IDmlfNamespace ns)
        {
            var inner = Argument.EvalExpression(ns);
            var dt    = ExtractDate(inner);

            if (dt.HasValue)
            {
                return((int)dt.Value.DayOfWeek);
            }
            return(null);
        }
Esempio n. 3
0
        public override object EvalExpression(IDmlfNamespace ns)
        {
            var inner = Argument.EvalExpression(ns);
            var dt    = inner as DateTime?;

            if (dt.HasValue)
            {
                return(dt.Value.Day);
            }
            return(null);
        }
Esempio n. 4
0
        public override bool EvalCondition(IDmlfNamespace ns)
        {
            if (Value == null)
            {
                return(false);
            }
            object val = Expr.EvalExpression(ns);

            if (val == null)
            {
                return(false);
            }
            return(Test(Convert.ToString(val, CultureInfo.InvariantCulture)));
        }
Esempio n. 5
0
        protected bool EvalBetween(IDmlfNamespace ns)
        {
            var cond = new DmlfAndCondition();

            cond.Conditions.Add(new DmlfRelationCondition
            {
                LeftExpr  = LowerBound,
                Relation  = "<=",
                RightExpr = Expr,
            });
            cond.Conditions.Add(new DmlfRelationCondition
            {
                LeftExpr  = Expr,
                Relation  = "<=",
                RightExpr = UpperBound,
            });
            return(cond.EvalCondition(ns));
        }
Esempio n. 6
0
        public override object EvalExpression(IDmlfNamespace ns)
        {
            switch (FuncName.ToUpper())
            {
            case "LTRIM":
                return(Arguments[0].EvalExpression(ns)?.ToString()?.TrimStart());

            case "RTRIM":
                return(Arguments[0].EvalExpression(ns)?.ToString()?.TrimEnd());

            case "DATEPART":
                string partName = Arguments[0].EvalExpression(ns)?.ToString();
                var    date     = ExtractDate(Arguments[1].EvalExpression(ns));
                switch (partName?.ToUpper() ?? "")
                {
                case "HOUR":
                    return(date?.Hour);

                case "MINUTE":
                    return(date?.Minute);

                case "SECOND":
                    return(date?.Second);

                case "YEAR":
                    return(date?.Year);

                case "MONTH":
                    return(date?.Month);

                case "DAY":
                    return(date?.Day);
                }
                return(0);

            case "MONTH":
                return(ExtractDate(Arguments[0].EvalExpression(ns))?.Month);

            case "YEAR":
                return(ExtractDate(Arguments[0].EvalExpression(ns))?.Year);
            }
            return(base.EvalExpression(ns));
        }
Esempio n. 7
0
 public virtual object EvalExpression(IDmlfNamespace ns)
 {
     throw new InternalError("DBSH-00157 Eval not implemented:" + GetType().FullName);
 }
Esempio n. 8
0
 public override bool EvalCondition(IDmlfNamespace ns)
 {
     object value = Expr.EvalExpression(ns);
     return value != null && value != DBNull.Value;
 }
Esempio n. 9
0
 public override bool EvalCondition(IDmlfNamespace ns)
 {
     return Conditions.Any(x => x.EvalCondition(ns));
 }
Esempio n. 10
0
 public override bool EvalCondition(IDmlfNamespace ns)
 {
     return !Expr.EvalCondition(ns);
 }
Esempio n. 11
0
 public override bool EvalCondition(IDmlfNamespace ns)
 {
     return EvalRelation(LeftExpr, RightExpr, Relation, ns);
 }
Esempio n. 12
0
 public override bool EvalCondition(IDmlfNamespace ns)
 {
     return(Conditions.Any(x => x.EvalCondition(ns)));
 }
Esempio n. 13
0
 public override bool EvalCondition(IDmlfNamespace ns)
 {
     return(!Expr.EvalCondition(ns));
 }
Esempio n. 14
0
        public static bool EvalRelation(DmlfExpression leftExpr, DmlfExpression rightExpr, string relation, IDmlfNamespace ns)
        {
            object left  = leftExpr.EvalExpression(ns);
            object right = rightExpr.EvalExpression(ns);

            if (left == null || right == null)
            {
                return(false);
            }

            left  = ConvertBoolToInt(left);
            right = ConvertBoolToInt(right);

            var leftType  = left.GetType();
            var rightType = right.GetType();

            string leftStr  = Convert.ToString(left, CultureInfo.InvariantCulture);
            string rightStr = Convert.ToString(right, CultureInfo.InvariantCulture);

            if (leftStr.ToLower() == "true" && rightStr == "1" && relation == "=")
            {
                return(true);
            }
            if (rightStr.ToLower() == "true" && leftStr == "1" && relation == "=")
            {
                return(true);
            }
            if (leftStr.ToLower() == "false" && rightStr == "0" && relation == "=")
            {
                return(true);
            }
            if (rightStr.ToLower() == "false" && leftStr == "0" && relation == "=")
            {
                return(true);
            }

            if (leftType.IsNumberType() || rightType.IsNumberType())
            {
                double leftValue, rightValue;
                if (Double.TryParse(leftStr, NumberStyles.Number, CultureInfo.InvariantCulture, out leftValue) &&
                    Double.TryParse(rightStr, NumberStyles.Number, CultureInfo.InvariantCulture, out rightValue))
                {
                    switch (relation)
                    {
                    case "=":
                        return(leftValue == rightValue);

                    case "<=":
                        return(leftValue <= rightValue);

                    case ">=":
                        return(leftValue >= rightValue);

                    case "<":
                        return(leftValue < rightValue);

                    case ">":
                        return(leftValue > rightValue);

                    case "<>":
                        return(leftValue != rightValue);
                    }
                }
            }

            if (leftType == typeof(DateTime) || rightType == typeof(DateTime))
            {
                DateTime?leftValue = null, rightValue = null;
                DateTime tmp;
                if (leftType == typeof(DateTime))
                {
                    leftValue = (DateTime)left;
                }
                else if (DateTime.TryParse(leftStr, CultureInfo.InvariantCulture, DateTimeStyles.None, out tmp))
                {
                    leftValue = tmp;
                }
                if (rightType == typeof(DateTime))
                {
                    rightValue = (DateTime)right;
                }
                else if (DateTime.TryParse(rightStr, CultureInfo.InvariantCulture, DateTimeStyles.None, out tmp))
                {
                    rightValue = tmp;
                }
                if (leftValue.HasValue && rightValue.HasValue)
                {
                    switch (relation)
                    {
                    case "=":
                        return(leftValue == rightValue);

                    case "<=":
                        return(leftValue <= rightValue);

                    case ">=":
                        return(leftValue >= rightValue);

                    case "<":
                        return(leftValue < rightValue);

                    case ">":
                        return(leftValue > rightValue);

                    case "<>":
                        return(leftValue != rightValue);
                    }
                }
            }

            switch (relation)
            {
            case "=":
                return(System.String.Compare(leftStr, rightStr, System.StringComparison.OrdinalIgnoreCase) == 0);

            case "<=":
                return(System.String.Compare(leftStr, rightStr, System.StringComparison.OrdinalIgnoreCase) <= 0);

            case ">=":
                return(System.String.Compare(leftStr, rightStr, System.StringComparison.OrdinalIgnoreCase) >= 0);

            case "<":
                return(System.String.Compare(leftStr, rightStr, System.StringComparison.OrdinalIgnoreCase) < 0);

            case ">":
                return(System.String.Compare(leftStr, rightStr, System.StringComparison.OrdinalIgnoreCase) > 0);

            case "<>":
                return(System.String.Compare(leftStr, rightStr, System.StringComparison.OrdinalIgnoreCase) != 0);
            }

            return(false);
        }
Esempio n. 15
0
 public override bool EvalCondition(IDmlfNamespace ns)
 {
     return(EvalRelation(LeftExpr, RightExpr, Relation, ns));
 }
Esempio n. 16
0
 public override bool EvalCondition(IDmlfNamespace ns)
 {
     return(EvalBetween(ns));
 }
Esempio n. 17
0
 public virtual bool EvalCondition(IDmlfNamespace ns)
 {
     throw new InternalError("DBSH-00156 Eval not implemented:" + GetType().FullName);
 }
Esempio n. 18
0
 public override bool EvalCondition(IDmlfNamespace ns)
 {
     return DmlfRelationCondition.EvalRelation(LeftExpr, RightExpr, "<=", ns);
 }
Esempio n. 19
0
 public override bool EvalCondition(IDmlfNamespace ns)
 {
     return(false);
 }
Esempio n. 20
0
        public static bool EvalRelation(DmlfExpression leftExpr, DmlfExpression rightExpr, string relation, IDmlfNamespace ns)
        {
            object left = leftExpr.EvalExpression(ns);
            object right = rightExpr.EvalExpression(ns);

            if (left == null || right == null) return false;

            left = ConvertBoolToInt(left);
            right = ConvertBoolToInt(right);

            var leftType = left.GetType();
            var rightType = right.GetType();

            string leftStr = Convert.ToString(left, CultureInfo.InvariantCulture);
            string rightStr = Convert.ToString(right, CultureInfo.InvariantCulture);

            if (leftStr.ToLower() == "true" && rightStr == "1" && relation == "=") return true;
            if (rightStr.ToLower() == "true" && leftStr == "1" && relation == "=") return true;
            if (leftStr.ToLower() == "false" && rightStr == "0" && relation == "=") return true;
            if (rightStr.ToLower() == "false" && leftStr == "0" && relation == "=") return true;

            if (leftType.IsNumberType() || rightType.IsNumberType())
            {
                double leftValue, rightValue;
                if (Double.TryParse(leftStr, NumberStyles.Number, CultureInfo.InvariantCulture, out leftValue) 
                    && Double.TryParse(rightStr, NumberStyles.Number, CultureInfo.InvariantCulture, out rightValue))
                {
                    switch (relation)
                    {
                        case "=":
                            return leftValue == rightValue;
                        case "<=":
                            return leftValue <= rightValue;
                        case ">=":
                            return leftValue >= rightValue;
                        case "<":
                            return leftValue < rightValue;
                        case ">":
                            return leftValue > rightValue;
                        case "<>":
                            return leftValue != rightValue;
                    }
                }
            }

            if (leftType == typeof(DateTime) || rightType == typeof(DateTime))
            {
                DateTime? leftValue = null, rightValue = null;
                DateTime tmp;
                if (leftType == typeof (DateTime))
                {
                    leftValue = (DateTime) left;
                }
                else if (DateTime.TryParse(leftStr, CultureInfo.InvariantCulture, DateTimeStyles.None, out tmp))
                {
                    leftValue = tmp;
                }
                if (rightType == typeof (DateTime))
                {
                    rightValue = (DateTime) right;
                }
                else if (DateTime.TryParse(rightStr, CultureInfo.InvariantCulture, DateTimeStyles.None, out tmp))
                {
                    rightValue = tmp;
                }
                if (leftValue.HasValue && rightValue.HasValue)
                {
                    switch (relation)
                    {
                        case "=":
                            return leftValue == rightValue;
                        case "<=":
                            return leftValue <= rightValue;
                        case ">=":
                            return leftValue >= rightValue;
                        case "<":
                            return leftValue < rightValue;
                        case ">":
                            return leftValue > rightValue;
                        case "<>":
                            return leftValue != rightValue;
                    }
                }
            }

            switch (relation)
            {
                case "=":
                    return System.String.Compare(leftStr, rightStr, System.StringComparison.OrdinalIgnoreCase) == 0;
                case "<=":
                    return System.String.Compare(leftStr, rightStr, System.StringComparison.OrdinalIgnoreCase) <= 0;
                case ">=":
                    return System.String.Compare(leftStr, rightStr, System.StringComparison.OrdinalIgnoreCase) >= 0;
                case "<":
                    return System.String.Compare(leftStr, rightStr, System.StringComparison.OrdinalIgnoreCase) < 0;
                case ">":
                    return System.String.Compare(leftStr, rightStr, System.StringComparison.OrdinalIgnoreCase) > 0;
                case "<>":
                    return System.String.Compare(leftStr, rightStr, System.StringComparison.OrdinalIgnoreCase) != 0;
            }

            return false;
        }
Esempio n. 21
0
        public override bool EvalCondition(IDmlfNamespace ns)
        {
            object value = Expr.EvalExpression(ns);

            return(value != null && value != DBNull.Value);
        }
Esempio n. 22
0
 public override bool EvalCondition(IDmlfNamespace ns)
 {
     if (Value == null) return false;
     object val = Expr.EvalExpression(ns);
     if (val == null) return false;
     return Test(Convert.ToString(val, CultureInfo.InvariantCulture));
 }
 public override object EvalExpression(IDmlfNamespace ns)
 {
     return Value;
 }
Esempio n. 24
0
 public override bool EvalCondition(IDmlfNamespace ns)
 {
     return false;
 }
 public override object EvalExpression(IDmlfNamespace ns)
 {
     return(ns.GetValue(Value));
 }
Esempio n. 26
0
 public override object EvalExpression(IDmlfNamespace ns)
 {
     return((int)Value);
 }
Esempio n. 27
0
 public override object EvalExpression(IDmlfNamespace ns)
 {
     return ns.GetValue(Value);
 }
Esempio n. 28
0
 public virtual object EvalExpression(IDmlfNamespace ns)
 {
     throw new InternalError("DBSH-00157 Eval not implemented:" + GetType().FullName);
 }
Esempio n. 29
0
 public virtual bool EvalCondition(IDmlfNamespace ns)
 {
     throw new InternalError("DBSH-00156 Eval not implemented:" + GetType().FullName);
 }