public void GroupingAddedToSorting()
        {
            var loadOptions = new SampleLoadOptions {
                Sort = new[] {
                    new SortingInfo {
                        Selector = "Item2"
                    },
                    new SortingInfo {
                        Selector = "Item3"
                    }
                },
                Group = new[] {
                    new GroupingInfo {
                        Selector = "Item1"
                    },
                    new GroupingInfo {
                        Selector = "Item2", Desc = true
                    }                                                     // this must win
                }
            };

            var builder = new DataSourceExpressionBuilder <Tuple <int, int, int> >(loadOptions);

            Assert.Equal(
                "data.OrderBy(obj => obj.Item1).ThenByDescending(obj => obj.Item2).ThenBy(obj => obj.Item3)",
                builder.BuildLoadExpr().ToString()
                );

            loadOptions.Sort = null;
            Assert.Contains("OrderBy", builder.BuildLoadExpr().ToString());
        }
        public void DefaultSortAndPrimaryKey()
        {
            var options = new SampleLoadOptions {
                PrimaryKey  = new[] { "Item1" },
                DefaultSort = "Item1",
                Sort        = new[] { new SortingInfo {
                                          Selector = "Item1"
                                      } }
            };

            var builder = new DataSourceExpressionBuilder <Tuple <int, int, int> >(options, false);

            Assert.Equal(
                "data.OrderBy(obj => obj.Item1)",
                builder.BuildLoadExpr().Body.ToString()
                );

            options.DefaultSort      = "Item2";
            options.Sort[0].Selector = "Item3";

            Assert.Equal(
                "data.OrderBy(obj => obj.Item3).ThenBy(obj => obj.Item2).ThenBy(obj => obj.Item1)",
                builder.BuildLoadExpr().Body.ToString()
                );
        }
        public void Build_FilterAsEmptyList()
        {
            // To mitigate cases like https://devexpress.com/issue=T483154

            var builder = new DataSourceExpressionBuilder <int>(new SampleLoadOptions {
                Filter = new object[0]
            });

            Assert.DoesNotContain(".Where", builder.BuildLoadExpr().ToString());
        }
        public void Build_Filter()
        {
            var builder = new DataSourceExpressionBuilder <int> {
                Filter = new object[] { "this", ">", 123 }
            };

            var expr = builder.Build(false);

            Assert.Equal("data.Where(obj => (obj > 123))", expr.Body.ToString());
        }
        public void Build_Filter()
        {
            var builder = new DataSourceExpressionBuilder <int>(new SampleLoadOptions {
                Filter = new object[] { "this", ">", 123 }
            });

            var expr = builder.BuildLoadExpr();

            Assert.Equal("data.Where(obj => (obj > 123))", expr.ToString());
        }
        public void Build_SkipTake()
        {
            var builder = new DataSourceExpressionBuilder <int> {
                Skip = 111,
                Take = 222
            };

            var expr = builder.Build(false);

            Assert.Equal("data.Skip(111).Take(222)", expr.Body.ToString());
        }
        public void Build_SkipTake()
        {
            var builder = new DataSourceExpressionBuilder <int>(new SampleLoadOptions {
                Skip = 111,
                Take = 222
            });

            var expr = builder.BuildLoadExpr();

            Assert.Equal("data.Skip(111).Take(222)", expr.ToString());
        }
        public void AlwaysOrderDataByPrimaryKey()
        {
            var options = new SampleLoadOptions {
                PrimaryKey = new[] { "Item2", "Item1" }
            };

            var builder = new DataSourceExpressionBuilder <Tuple <int, int> >(options, false);

            Assert.Equal(
                "data.OrderBy(obj => obj.Item2).ThenBy(obj => obj.Item1)",
                builder.BuildLoadExpr().Body.ToString()
                );
        }
        public void MultiIntervalGroupsSortedOnce()
        {
            var builder = new DataSourceExpressionBuilder <int>(new SampleLoadOptions {
                Group = new[] {
                    new GroupingInfo {
                        Selector = "this", GroupInterval = "a"
                    },
                    new GroupingInfo {
                        Selector = "this", GroupInterval = "b"
                    }
                }
            });

            Assert.Equal("data.OrderBy(obj => obj)", builder.BuildLoadExpr().ToString());
        }
예제 #10
0
        public void BuildLoadExpr_WithGuardNulls()
        {
            var expr = new DataSourceExpressionBuilder <Tuple <DateTime?> >(CreateFullStuffedLoadOptions(), true).BuildLoadExpr();

            Assert.Equal(
                "data"
                // All selectors are guarded and use conversion to Nullable
                + $".Where(obj => ({FormatExpectedSelectorExpr(true, true)} == 123))"
                + $".OrderBy(obj => {FormatExpectedSelectorExpr(true, true)})"
                + ".Select(obj => new AnonType`1("
                + $"I0 = {FormatExpectedSelectorExpr(true, true)}"
                + "))",
                expr.ToString()
                );
        }
예제 #11
0
        public void BuildLoadExpr_NoGuardNulls()
        {
            var expr = new DataSourceExpressionBuilder <Tuple <DateTime?> >(CreateFullStuffedLoadOptions(), false).BuildLoadExpr();

            Assert.Equal(
                "data"
                // Where and OrderBy use simple selectors
                + $".Where(obj => ({FormatExpectedSelectorExpr(false, false)} == 123))"
                + $".OrderBy(obj => {FormatExpectedSelectorExpr(false, false)})"

                // Select uses conversion to Nullable
                + ".Select(obj => new AnonType`1() {"
                + $"I0 = {FormatExpectedSelectorExpr(true, false)}"
                + "})",
                expr.ToString()
                );
        }
        public void Build_Sorting()
        {
            var builder = new DataSourceExpressionBuilder <Tuple <int, string> >(new SampleLoadOptions {
                Sort = new[] {
                    new SortingInfo {
                        Selector = "Item1"
                    },
                    new SortingInfo {
                        Selector = "Item2",
                        Desc     = true
                    }
                }
            });

            var expr = builder.BuildLoadExpr();

            Assert.Equal("data.OrderBy(obj => obj.Item1).ThenByDescending(obj => obj.Item2)", expr.ToString());
        }
예제 #13
0
        public void BuildLoadGroupsExpr_NoGuardNulls()
        {
            var expr = new DataSourceExpressionBuilder <Tuple <DateTime?> >(CreateFullStuffedLoadOptions(), false).BuildLoadGroupsExpr();

            Assert.Equal(
                // Only selectors that land in .Select() use conversion to Nullable
                "data"
                + $".Where(obj => ({FormatExpectedSelectorExpr(false, false)} == 123))"
                + $".GroupBy(obj => new AnonType`1(I0 = {FormatExpectedSelectorExpr(true, false)}))"
                + ".OrderBy(g => g.Key.I0)"
                + ".Select(g => new AnonType`4("
                + "I0 = g.Count(), "
                + "I1 = g.Key.I0, "
                + $"I2 = g.Max(obj => {FormatExpectedSelectorExpr(true, false)}), "
                + $"I3 = g.Max(obj => {FormatExpectedSelectorExpr(true, false)})"
                + "))",
                expr.ToString()
                );
        }
        public void PR202()
        {
            // https://github.com/DevExpress/DevExtreme.AspNet.Data/pull/202

            var options = new SampleLoadOptions {
                DefaultSort = "item1",
                Sort        = new[] {
                    new SortingInfo {
                        Selector = "ITEM1"
                    }
                }
            };

            var builder = new DataSourceExpressionBuilder <Tuple <int> >(options, false);

            Assert.Equal(
                "data.OrderBy(obj => obj.Item1)",
                builder.BuildLoadExpr().ToString()
                );
        }
        public void NoUnnecessaryOrderingForRemoteGroups()
        {
            var options = new SampleLoadOptions {
                RemoteGrouping = true,
                Group          = new[] {
                    new GroupingInfo {
                        Selector = "Item1"
                    }
                },
                Sort = new[] {
                    new SortingInfo {
                        Selector = "Item2"
                    }
                }
            };

            var builder = new DataSourceExpressionBuilder <Tuple <int, int> >(options, false);
            var expr    = builder.BuildLoadGroupsExpr().Body.ToString();

            Assert.True(expr.StartsWith("data.GroupBy"));
        }
        public void DefaultSort()
        {
            var options = new SampleLoadOptions {
                DefaultSort = "Item1"
            };

            var builder = new DataSourceExpressionBuilder <Tuple <int, int> >(options, false);

            Assert.Equal("data.OrderBy(obj => obj.Item1)", builder.BuildLoadExpr(false).ToString());

            options.Sort = new[] {
                new SortingInfo {
                    Selector = "Item2"
                }
            };

            Assert.Equal("data.OrderBy(obj => obj.Item2).ThenBy(obj => obj.Item1)", builder.BuildLoadExpr(false).ToString());

            options.Sort[0].Selector = "Item1";
            Assert.Equal("data.OrderBy(obj => obj.Item1)", builder.BuildLoadExpr(false).ToString());
        }
        public void GuardNulls()
        {
            var builder = new DataSourceExpressionBuilder <Tuple <int?, string, DateTime?> >(new SampleLoadOptions {
                Filter = new[] {
                    new[] { "Item1", ">", "0" },
                    new[] { "Item2", "contains", "z" },
                    new[] { "Item2.Length", ">", "1" },
                    new[] { "Item3.Year", ">", "0" }
                },
                Sort = new[] {
                    new SortingInfo {
                        Selector = "Item1"
                    },
                    new SortingInfo {
                        Selector = "Item2.Length"
                    },
                    new SortingInfo {
                        Selector = "Item3.Year"
                    },
                }
            }, true);

            var data = new[] {
                // filtered out
                null,
                Tuple.Create <int?, string, DateTime?>(null, "zz", new DateTime(2000, 1, 1)),
                Tuple.Create <int?, string, DateTime?>(1, null, new DateTime(2000, 1, 1)),
                Tuple.Create <int?, string, DateTime?>(1, "zz", null),


                // kept
                Tuple.Create <int?, string, DateTime?>(1, "zz", new DateTime(2000, 1, 2)),
                Tuple.Create <int?, string, DateTime?>(1, "zz", new DateTime(2000, 1, 1))
            }.AsQueryable();

            var expr   = builder.BuildLoadExpr(data.Expression);
            var result = data.Provider.CreateQuery <object>(expr).ToArray();

            Assert.Equal(2, result.Length);
        }
        public void Build_CountQuery()
        {
            var builder = new DataSourceExpressionBuilder <int>(new SampleLoadOptions {
                Skip   = 111,
                Take   = 222,
                Filter = new object[] { "this", 123 },
                Sort   = new[] {
                    new SortingInfo {
                        Selector = "this"
                    }
                },
            });

            var expr = builder.BuildCountExpr();
            var text = expr.ToString();

            Assert.Contains("Where", text);
            Assert.DoesNotContain("Skip", text);
            Assert.DoesNotContain("Take", text);
            Assert.DoesNotContain("OrderBy", text);
            Assert.Contains(".Count()", text);
        }
예제 #19
0
 public static Expression BuildLoadGroupsExpr <T>(this DataSourceExpressionBuilder <T> builder)
 {
     return(builder.BuildLoadGroupsExpr(CreateSourceExpr <T>()));
 }
예제 #20
0
 public static Expression BuildLoadGroupsExpr <T>(this DataSourceExpressionBuilder <T> builder) => builder.BuildLoadGroupsExpr(false);
예제 #21
0
 public static Expression BuildLoadExpr <T>(this DataSourceExpressionBuilder <T> builder) => builder.BuildLoadExpr(true);
예제 #22
0
 public static Expression BuildLoadExpr <T>(this DataSourceExpressionBuilder <T> builder, bool paginate = true)
 {
     return(builder.BuildLoadExpr(CreateSourceExpr <T>(), paginate));
 }