Ejemplo n.º 1
0
        public static string JavaScriptRelation(DmlfExpression leftExpr, DmlfExpression rightExpr, string relation)
        {
            string left  = leftExpr.JavaScriptExpression;
            string right = rightExpr.JavaScriptExpression;

            return($"({left}){relation}({right})");
        }
Ejemplo n.º 2
0
        public override void LoadFromXml(XmlElement xml)
        {
            base.LoadFromXml(xml);
            var xe = xml.FindElement("Expr");

            if (xe != null)
            {
                Expr = DmlfExpression.Load(xe);
            }
        }
Ejemplo n.º 3
0
        private DmlfExpression CreateConvertExpression(string type, DmlfExpression expr)
        {
            var res = new DmlfFuncCallExpression
            {
                FuncName = "CONVERT"
            };
            res.Arguments.Add(new DmlfSqlValueExpression { Value = type });
            res.Arguments.Add(expr);
            return res;

        }
Ejemplo n.º 4
0
 public DmlfExpression CreateCompareExpression(DmlfExpression expr)
 {
     if (Info?.DataType?.ToLower()?.Contains("geo") ?? false)
     {
         return CreateConvertExpression("varchar(max)", expr);
     }
     if (Info?.DataType?.ToLower()?.Contains("xml") ?? false)
     {
         return CreateConvertExpression("nvarchar(max)", expr);
     }
     return expr;
 }
Ejemplo n.º 5
0
        protected DmlfExpression CreateAggregate(DmlfExpression expr)
        {
            if (Info?.DataType?.ToLower()?.Contains("bit") ?? false)
            {
                expr = CreateConvertExpression("int", expr);
            }

            var res = new DmlfFuncCallExpression
            {
                FuncName = "MAX",
            };
            res.Arguments.Add(expr);
            return res;
        }
Ejemplo n.º 6
0
        public override void LoadFromXml(XmlElement xml)
        {
            base.LoadFromXml(xml);
            var xl = xml.FindElement("LeftExpr");

            if (xl != null)
            {
                LeftExpr = DmlfExpression.Load(xl);
            }
            var xr = xml.FindElement("RightExpr");

            if (xr != null)
            {
                RightExpr = DmlfExpression.Load(xr);
            }
        }
Ejemplo n.º 7
0
 private static DmlfConditionBase ParseDateTime(DmlfExpression columnValue, string expression, Action<DbShellFilterAntlrParser> initParser = null)
 {
     var lexer = new DateTimeFilterLexer(new ANTLRReaderStream(new StringReader(expression)));
     var tokens = new CommonTokenStream(lexer);
     var parser = new DateTimeFilterParser(tokens);
     if (initParser != null) initParser(parser);
     parser.ColumnValue = columnValue;
     try
     {
         parser.expr();
     }
     catch
     {
         return null;
     }
     if (parser.Errors != null) return null;
     return parser.Condition;
 }
Ejemplo n.º 8
0
        public override void LoadFromXml(XmlElement xml)
        {
            base.LoadFromXml(xml);
            var xe = xml.FindElement("Expr");

            if (xe != null)
            {
                Expr = DmlfExpression.Load(xe);
            }
            var xl = xml.FindElement("LowerBound");

            if (xl != null)
            {
                LowerBound = DmlfExpression.Load(xl);
            }
            var xu = xml.FindElement("UpperBound");

            if (xu != null)
            {
                UpperBound = DmlfExpression.Load(xu);
            }
        }
Ejemplo n.º 9
0
 public override void LoadFromXml(XmlElement xml)
 {
     base.LoadFromXml(xml);
     var xl = xml.FindElement("LeftExpr");
     if (xl != null) LeftExpr = DmlfExpression.Load(xl);
     var xr = xml.FindElement("RightExpr");
     if (xr != null) RightExpr = DmlfExpression.Load(xr);
 }
Ejemplo n.º 10
0
        public static bool IsNullLiteral(DmlfExpression expr)
        {
            var literal = expr as DmlfLiteralExpression;

            return(literal != null && literal.Value == null);
        }
Ejemplo n.º 11
0
 public static DmlfConditionBase ParseFilterExpression(ExpressionType type, DmlfExpression columnValue, string expression, Action<DbShellFilterAntlrParser> initParser = null)
 {
     if (expression == null) return null;
     var res = DoParseFilterExpression(type, columnValue, expression, initParser);
     if (res != null) res = res.SimplifyCondition();
     return res;
 }
Ejemplo n.º 12
0
 public static DmlfConditionBase ParseFilterExpression(DbTypeBase type, DmlfExpression columnValue, string expression, Action<DbShellFilterAntlrParser> initParser = null)
 {
     return ParseFilterExpression(GetExpressionType(type), columnValue, expression, initParser);
 }
Ejemplo n.º 13
0
 public override void LoadFromXml(XmlElement xml)
 {
     base.LoadFromXml(xml);
     var xe = xml.FindElement("Expr");
     if (xe != null) Expr = DmlfExpression.Load(xe);
 }
 public DmlfCountDistinctExpression(DmlfExpression arg)
 {
     Argument = arg;
 }
Ejemplo n.º 15
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);
        }
Ejemplo n.º 16
0
 public override void LoadFromXml(XmlElement xml)
 {
     base.LoadFromXml(xml);
     var xe = xml.FindElement("Expr");
     if (xe != null) Expr = DmlfExpression.Load(xe);
     var xl = xml.FindElement("LowerBound");
     if (xl != null) LowerBound = DmlfExpression.Load(xl);
     var xu = xml.FindElement("UpperBound");
     if (xu != null) UpperBound = DmlfExpression.Load(xu);
 }
Ejemplo n.º 17
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;
        }
Ejemplo n.º 18
0
 protected DmlfExpression GetExprOrAggregate(DmlfExpression expr, bool aggregate)
 {
     if (aggregate) return CreateAggregate(expr);
     return expr;
 }
Ejemplo n.º 19
0
 public DmlfCountDistinctExpression(DmlfExpression arg)
 {
     Argument = arg;
 }
Ejemplo n.º 20
0
        private static DmlfConditionBase DoParseFilterExpression(ExpressionType type, DmlfExpression columnValue, string expression, Action<DbShellFilterAntlrParser> initParser = null)
        {
            expression = TransformExpression(expression);

            switch (type)
            {
                case ExpressionType.Number:
                    return ParseNumber(columnValue, expression, initParser);
                case ExpressionType.String:
                    return ParseString(columnValue, expression, initParser);
                case ExpressionType.DateTime:
                    return ParseDateTime(columnValue, expression, initParser);
                case ExpressionType.Logical:
                    return ParseLogical(columnValue, expression, initParser);
            }
            return new DmlfEqualCondition
                {
                    LeftExpr = columnValue,
                    RightExpr = new DmlfStringExpression {Value = expression},
                };
        }