コード例 #1
0
        public void SearchOnIndexTable()
        {
            Assert.IsTrue(dataPrepared.Value);

            using (var container = new RhetosTestContainer(false))
            {
                var tests = new Dictionary <string, string>
                {
                    { "\"ab*\"", "ab, abc, cd ab" },
                    { "\"12*\"", "123, ab, xy" },
                    { "a'b", "" },
                    { "a'#'b", "" },
                };

                var repository = container.Resolve <Common.DomRepository>();

                foreach (var test in tests)
                {
                    Console.WriteLine("Searching '" + test.Key + "'");

                    var filtered = repository.TestFullTextSearch.Simple_Search.Query()
                                   .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, test.Key, "TestFullTextSearch.Simple_Search", "*"))
                                   .Select(item => item.Base.Name).ToList();
                    Assert.AreEqual(test.Value, TestUtility.DumpSorted(filtered), "Searching '" + test.Key + "'.");

                    filtered = repository.TestFullTextSearch.Simple_Search.Query()
                               .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, test.Key, "TestFullTextSearch.Simple_Search", "Text"))
                               .Select(item => item.Base.Name).ToList();
                    Assert.AreEqual(test.Value, TestUtility.DumpSorted(filtered), "Searching '" + test.Key + "'.");
                }
            }
        }
コード例 #2
0
        public void SearchOnComplexQuery()
        {
            Assert.IsTrue(dataPrepared.Value);

            using (var container = new RhetosTestContainer(false))
            {
                var tests = new Dictionary <string, string>
                {
                    { "\"ab*\"", "12-ab, 3-abc, 4-cd ab" },
                    { "\"12*\"", "-123-xy, 12-ab, 56-123" },
                };

                var repository = container.Resolve <Common.DomRepository>();

                foreach (var test in tests)
                {
                    Console.WriteLine("Searching '" + test.Key + "'");

                    var filter = repository.TestFullTextSearch.SimpleBrowse.Query()
                                 .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, test.Key, "TestFullTextSearch.Simple_Search", "*"))
                                 // Testing combination of filters on different tables:
                                 .Where(item => item.Base.Extension_SimpleInfo.Description.Length > 0)
                                 .Select(item => item.Base.Extension_SimpleInfo.Description);

                    Console.WriteLine(filter.ToString());
                    var filtered = filter.ToList();

                    Assert.AreEqual(test.Value, TestUtility.DumpSorted(filtered), "Searching '" + test.Key + "'.");
                }
            }
        }
コード例 #3
0
        public void SearchOnBaseEntityWithSortAndPaging()
        {
            Assert.IsTrue(dataPrepared.Value);

            using (var container = new RhetosTestContainer(false))
            {
                var repository = container.Resolve <Common.DomRepository>();

                {
                    string pattern = "\"ab*\"";
                    string result  = "cd ab, abc, ab";

                    Console.WriteLine("Searching '" + pattern + "'");
                    var filtered = repository.TestFullTextSearch.Simple.Query()
                                   .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, pattern, "TestFullTextSearch.Simple_Search", "*"))
                                   .OrderByDescending(item => item.Name)
                                   .Select(item => item.Name).ToList();
                    Assert.AreEqual(result, TestUtility.Dump(filtered), "Searching '" + pattern + "'.");
                }

                {
                    string pattern = "\"ab*\"";
                    string result  = "abc";

                    Console.WriteLine("Searching '" + pattern + "'");
                    var filtered = repository.TestFullTextSearch.Simple.Query()
                                   .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, pattern, "TestFullTextSearch.Simple_Search", "*"))
                                   .OrderByDescending(item => item.Name)
                                   .Skip(1)
                                   .Take(1)
                                   .Select(item => item.Name).ToList();
                    Assert.AreEqual(result, TestUtility.Dump(filtered), "Searching '" + pattern + "'.");
                }
            }
        }
コード例 #4
0
        public void SearchOnBaseEntityWithSortAndPaging()
        {
            PrepareData();

            using (var scope = TestScope.Create())
            {
                var repository = scope.Resolve <Common.DomRepository>();

                {
                    string pattern = "\"ab*\"";
                    string result  = "cd ab, abc, ab";

                    Console.WriteLine("Searching '" + pattern + "'");
                    var filtered = repository.TestFullTextSearch.Simple.Query()
                                   .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, pattern, "TestFullTextSearch.SimpleFTS", "*"))
                                   .OrderByDescending(item => item.Name)
                                   .Select(item => item.Name).ToList();
                    Assert.AreEqual(result, TestUtility.Dump(filtered), "Searching '" + pattern + "'.");
                }

                {
                    string pattern = "\"ab*\"";
                    string result  = "abc";

                    Console.WriteLine("Searching '" + pattern + "'");
                    var filtered = repository.TestFullTextSearch.Simple.Query()
                                   .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, pattern, "TestFullTextSearch.SimpleFTS", "*"))
                                   .OrderByDescending(item => item.Name)
                                   .Skip(1)
                                   .Take(1)
                                   .Select(item => item.Name).ToList();
                    Assert.AreEqual(result, TestUtility.Dump(filtered), "Searching '" + pattern + "'.");
                }
            }
        }
コード例 #5
0
        public void SearchOnBrowse()
        {
            PrepareData();

            using (var scope = TestScope.Create())
            {
                var tests = new Dictionary <string, string>
                {
                    { "\"ab*\"", "ab, abc, cd ab" },
                    { "\"12*\"", "123, ab, xy" },
                };

                var repository = scope.Resolve <Common.DomRepository>();

                foreach (var test in tests)
                {
                    Console.WriteLine("Searching '" + test.Key + "'");

                    var filtered = repository.TestFullTextSearch.SimpleBrowse.Query()
                                   .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, test.Key, "TestFullTextSearch.SimpleFTS", "*"))
                                   .Select(item => item.Name).ToList();

                    Assert.AreEqual(test.Value, TestUtility.DumpSorted(filtered), "Searching '" + test.Key + "'.");
                }
            }
        }
コード例 #6
0
        public void SearchAlternativeIntegerKey()
        {
            PrepareData();

            using (var container = new RhetosTestContainer(false))
            {
                var tests = new Dictionary <string, string>
                {
                    { "\"ab*\"", "ab, abc, cd ab" },
                    { "\"12*\"", "123, ab, xy" },
                };

                var repository = container.Resolve <Common.DomRepository>();

                foreach (var test in tests)
                {
                    Console.WriteLine("Searching '" + test.Key + "'");

                    {
                        var filtered = repository.TestFullTextSearch.AlternativeEntity.Query()
                                       .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.AlternativeKey.Value, test.Key, "TestFullTextSearch.AlternativeEntity", "*"));
                        Assert.AreEqual(test.Value, TestUtility.DumpSorted(filtered, item => item.Text1), "Searching '" + test.Key + "'.");
                    }
                    {
                        var filtered = repository.TestFullTextSearch.AlternativeEntity.Query()
                                       .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.AlternativeKey.Value, test.Key, "TestFullTextSearch.AlternativeEntity", "(Text1, Text2)"));
                        Assert.AreEqual(test.Value, TestUtility.DumpSorted(filtered, item => item.Text1), "Searching Text1, Text2 '" + test.Key + "'.");
                    }
                    {
                        var filtered = repository.TestFullTextSearch.AlternativeEntity.Query()
                                       .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.AlternativeKey.Value, test.Key, "TestFullTextSearch.AlternativeEntity", "*", 10));
                        Assert.AreEqual(test.Value, TestUtility.DumpSorted(filtered, item => item.Text1), "Searching top 10 '" + test.Key + "'.");
                    }
                    {
                        var filtered = repository.TestFullTextSearch.AlternativeEntity.Query()
                                       .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.AlternativeKey.Value, test.Key, "TestFullTextSearch.AlternativeEntity", "(Text1, Text2)", 10));
                        Assert.AreEqual(test.Value, TestUtility.DumpSorted(filtered, item => item.Text1), "Searching top 10 Text1, Text2 '" + test.Key + "'.");
                    }
                    {
                        var filtered = repository.TestFullTextSearch.AlternativeEntity.Query()
                                       .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.AlternativeKey.Value, test.Key, "TestFullTextSearch.AlternativeEntity", "*", 2));
                        Assert.AreEqual(2, filtered.Count(), "Searching top 2 (literal) * '" + test.Key + "'.");
                    }
                    {
                        int top      = 2;
                        var filtered = repository.TestFullTextSearch.AlternativeEntity.Query()
                                       .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.AlternativeKey.Value, test.Key, "TestFullTextSearch.AlternativeEntity", "*", top));
                        Assert.AreEqual(2, filtered.Count(), "Searching top 2 (var) *'" + test.Key + "'.");
                    }
                    {
                        var filtered = repository.TestFullTextSearch.AlternativeEntity.Query()
                                       .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.AlternativeKey.Value, test.Key, "TestFullTextSearch.AlternativeEntity", "(Text1, Text2)", 2));
                        Assert.AreEqual(2, filtered.Count(), "Searching top 2 (literal) Text1, Text2 '" + test.Key + "'.");
                    }
                }
            }
        }
コード例 #7
0
 public void NullArgument()
 {
     using (var container = new RhetosTestContainer(false))
     {
         var repository = container.Resolve <Common.DomRepository>();
         var ex         = TestUtility.ShouldFail(
             () => repository.TestFullTextSearch.Simple_Search.Query()
             .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, null, "TestFullTextSearch.Simple_Search", "*"))
             .Select(item => item.Base.Name).ToList());
         TestUtility.AssertContains(ex.ToString(), "Search pattern must not be NULL.");
     }
 }
コード例 #8
0
 public void ColumnsParameter()
 {
     using (var container = new RhetosTestContainer(false))
     {
         var    repository = container.Resolve <Common.DomRepository>();
         string columns    = "*";
         var    ex         = TestUtility.ShouldFail(
             () => repository.TestFullTextSearch.Simple_Search.Query()
             .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, "a", "TestFullTextSearch.Simple_Search", columns))
             .Select(item => item.Base.Name).ToList());
         TestUtility.AssertContains(ex.ToString(), new[] { "Please use a string literal", "searchColumns" });
     }
 }
コード例 #9
0
        public void SearchOnIndexTable_StringLiteralPattern()
        {
            Assert.IsTrue(dataPrepared.Value);

            using (var container = new RhetosTestContainer(false))
            {
                var repository = container.Resolve <Common.DomRepository>();

                var filtered = repository.TestFullTextSearch.Simple_Search.Query()
                               .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, "\"ab*\"", "TestFullTextSearch.Simple_Search", "*"))
                               .Select(item => item.Base.Name).ToList();
                Assert.AreEqual("ab, abc, cd ab", TestUtility.DumpSorted(filtered));
            }
        }
コード例 #10
0
        public void SearchOnIndexTable_StringLiteralPattern()
        {
            PrepareData();

            using (var scope = TestScope.Create())
            {
                var repository = scope.Resolve <Common.DomRepository>();

                var filtered = repository.TestFullTextSearch.SimpleFTS.Query()
                               .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, "\"ab*\"", "TestFullTextSearch.SimpleFTS", "*"))
                               .Select(item => item.Base.Name).ToList();
                Assert.AreEqual("ab, abc, cd ab", TestUtility.DumpSorted(filtered));
            }
        }
コード例 #11
0
        public void RankTopParameter()
        {
            // SQL Server does not support the rankTop parameter to be an expression.

            using (var container = new RhetosTestContainer(false))
            {
                var repository = container.Resolve <Common.DomRepository>();
                int topValue   = 10;
                var ex         = TestUtility.ShouldFail(
                    () => repository.TestFullTextSearch.SimpleFTS.Query()
                    .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, "a", "TestFullTextSearch.SimpleFTS", "*", topValue + 1))
                    .Select(item => item.Base.Name).ToList());
                TestUtility.AssertContains(ex.ToString(), new[] { "Please use a simple integer variable", "rankTop" });
            }
        }
コード例 #12
0
        public void TableParameter()
        {
            // SQL Server does not support the table parameter to be a variable.

            using (var container = new RhetosTestContainer(false))
            {
                var    repository = container.Resolve <Common.DomRepository>();
                string table      = "TestFullTextSearch.SimpleFTS";
                var    ex         = TestUtility.ShouldFail(
                    () => repository.TestFullTextSearch.SimpleFTS.Query()
                    .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, "a", table, "*"))
                    .Select(item => item.Base.Name).ToList());
                TestUtility.AssertContains(ex.ToString(), new[] { "Please use a string literal", "tableName" });
            }
        }
コード例 #13
0
        public void ColumnsParameter()
        {
            // SQL Server does not support the columns parameter to be a variable.

            using (var scope = TestScope.Create())
            {
                var    repository = scope.Resolve <Common.DomRepository>();
                string columns    = "*";
                var    ex         = TestUtility.ShouldFail(
                    () => repository.TestFullTextSearch.SimpleFTS.Query()
                    .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, "a", "TestFullTextSearch.SimpleFTS", columns))
                    .Select(item => item.Base.Name).ToList());
                TestUtility.AssertContains(ex.ToString(), new[] { "Please use a string literal", "searchColumns" });
            }
        }
コード例 #14
0
        public void SearchWithRankTop()
        {
            PrepareData();

            using (var container = new RhetosTestContainer(false))
            {
                var tests = new Dictionary <string, string>
                {
                    { "\"ab*\"", "ab, abc, cd ab" },
                    { "\"12*\"", "123, ab, xy" },
                };

                var repository = container.Resolve <Common.DomRepository>();

                foreach (var test in tests)
                {
                    Console.WriteLine("Searching '" + test.Key + "'");

                    // rankTop > count:

                    int rankTop       = 10;
                    var filteredQuery = repository.TestFullTextSearch.SimpleBrowse.Query()
                                        .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, test.Key,
                                                                                                 "TestFullTextSearch.SimpleFTS", "*", rankTop));
                    Console.WriteLine(filteredQuery.ToString());
                    Assert.AreEqual(test.Value, TestUtility.DumpSorted(filteredQuery, item => item.Name), $"Searching top {rankTop} '{test.Key}'.");

                    // rankTop < count:

                    rankTop = 2;
                    Assert.AreEqual(rankTop, filteredQuery.ToList().Count(), $"Searching top {rankTop} '{test.Key}'.");

                    // rankTop as a literal:

                    filteredQuery = repository.TestFullTextSearch.SimpleBrowse.Query()
                                    .Where(item => DatabaseExtensionFunctions.FullTextSearch(item.ID, test.Key,
                                                                                             "TestFullTextSearch.SimpleFTS", "*", 2));
                    Assert.AreEqual(rankTop, filteredQuery.ToList().Count(), $"Searching '{test.Key}' with rankTop int literal.");
                }
            }
        }