public void GeneratefTSSearchQuery_singleToken_Test() { _mockTokenizer.Setup(t => t.Tokens).Returns(new string[] { "SingleToken" }); _mockTokenizer.Setup(t => t.GetMatchQuery()).Returns("SingleToken*"); var queryGenerator = new FtsQueryGenerator(_mockGroupingStrategy.Object, _mockTokenizer.Object); var expected = "SELECT MAX(LocationId) as LocationId, locations.TOWN_NAME,locations.POSTCODE, COUNT(*) as Number " + "from locations JOIN locations_srch ON locations.locationId = locations_srch.docid " + "WHERE locations_srch MATCH 'SingleToken*' GROUP BY locations.TOWN_NAME,locations.POSTCODE " + "ORDER by Number desc LIMIT 100;"; Assert.Equal(expected, queryGenerator.Generate()); }
public IEnumerable<LocationGroup> FindLocations(string addressLookup, ILocationGroupingStrategy groupingStrategy) { var tokenizer = new fTSQueryTokenizer(addressLookup); var statement = new FtsQueryGenerator(groupingStrategy, tokenizer).Generate(); List<LocationGroup> locations = new List<LocationGroup>(); using (IManagedDataReader reader = _connectionManager.GetReader(statement, new StatementParamaters() { { "@addressSearch", "'" + addressLookup + "*'" } })) { while (reader.Read()) { locations.Add(_locationGroupBuilder.Build(reader.DataReader, groupingStrategy.Fields)); } } return locations; }
public void GeneratefTSSearchQuery_multipleTokens_Test() { _mockTokenizer.Setup(t => t.Tokens).Returns(new string[] { "multiple","Tokens", "Test" }); _mockTokenizer.Setup(t => t.GetMatchQuery()).Returns("multiple Tokens"); _mockTokenizer.Setup(t => t.GetLikeQuery()).Returns("%Test%"); var queryGenerator = new FtsQueryGenerator(_mockGroupingStrategy.Object, _mockTokenizer.Object); var expected = "SELECT matchResults.* FROM (SELECT MAX(LocationId) as LocationId, locations.TOWN_NAME,locations.POSTCODE, COUNT(*) as Number " + "from locations JOIN locations_srch ON locations.locationId = locations_srch.docid " + "WHERE locations_srch MATCH 'multiple Tokens' " + "GROUP BY locations.TOWN_NAME,locations.POSTCODE ORDER by Number desc ) as matchResults " + "WHERE matchResults.TOWN_NAME like '%Test%' " + "OR matchResults.POSTCODE like '%Test%' " + "LIMIT 100;"; Assert.Equal(expected, queryGenerator.Generate()); }