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 + "'."); } } }
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 + "'."); } } }
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 + "'."); } } }
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 + "'."); } } }
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 + "'."); } } }
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 + "'."); } } } }
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."); } }
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" }); } }
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)); } }
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)); } }
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" }); } }
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" }); } }
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" }); } }
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."); } } }