public void SnQuery_Visitor_Rewrite_CSrv() { var tree = new LogicalPredicate( new [] { new LogicalClause(new LogicalPredicate( new [] { new LogicalClause(new SimplePredicate("F1", new IndexValue("V1")), Occurence.Should), new LogicalClause(new SimplePredicate("F2", new IndexValue("V2")), Occurence.Should) }), Occurence.Must), new LogicalClause(new LogicalPredicate( new [] { new LogicalClause(new SimplePredicate("F3", new IndexValue("V3")), Occurence.Should), new LogicalClause(new RangePredicate("F4", null, new IndexValue(10), true, true), Occurence.Should), }), Occurence.Must), }); var visitor = new TestVisitor(); var rewritten = visitor.Visit(tree); var dumper = new SnQueryToStringVisitor(); dumper.Visit(rewritten); Assert.AreEqual("+(F1:V1 F2:V2222) +(F3:V3 F4:<10)", dumper.Output); }
private SnQuery Test(string queryText, string expected = null) { var queryContext = new TestQueryContext(QuerySettings.Default, 0, _indexingInfo); var parser = new CqlParser(); var snQuery = parser.Parse(queryText, queryContext); var visitor = new SnQueryToStringVisitor(); visitor.Visit(snQuery.QueryTree); var actualResult = visitor.Output; Assert.AreEqual(expected ?? queryText, actualResult); return(snQuery); }
private Tuple <SnQuery, string> CreateQueryAndPrepare(string queryText, FilterStatus autoFilters, FilterStatus lifespanFilter) { var parser = new CqlParser(); var context = new TestQueryContext(QuerySettings.AdminSettings, 1, _indexingInfo); var query = new SnQuery { Querytext = queryText, QueryTree = parser.Parse(queryText, context).QueryTree, EnableAutofilters = autoFilters, EnableLifespanFilter = lifespanFilter }; SnQuery.PrepareQuery(query, context); var visitor = new SnQueryToStringVisitor(); visitor.Visit(query.QueryTree); return(new Tuple <SnQuery, string>(query, visitor.Output)); }
public void SnQuery_Parser_AggregateSettingsTest() { var indexingInfo = new Dictionary <string, IPerFieldIndexingInfo> { { "Id", new TestPerfieldIndexingInfoInt() } }; // tuple values: // Item1: QuerySettings // Item2: query text postfix // Item3: expected Top // Item4: expected Skip // Item5: expected EnableAutofilters // Item6: expected EnableLifespanFilter // Item7: expected QueryExecutionMode var settings = new List <Tuple <QuerySettings, string, int, int, FilterStatus, FilterStatus, QueryExecutionMode> > { Tuple.Create(new QuerySettings(), " .TOP:0", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .TOP:5", 5, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Top = 10 }, "", 10, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Top = 10 }, " .TOP:0", 10, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Top = 0 }, " .TOP:10", 10, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Top = 5 }, " .TOP:10", 5, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Top = 10 }, " .TOP:5", 5, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .SKIP:0", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .SKIP:1", int.MaxValue, 1, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Skip = 0 }, "", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Skip = 0 }, " .SKIP:1", int.MaxValue, 1, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Skip = 1 }, " .SKIP:0", int.MaxValue, 1, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Skip = 10 }, " .SKIP:5", int.MaxValue, 10, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Skip = 5 }, " .SKIP:10", int.MaxValue, 5, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .AUTOFILTERS:ON", int.MaxValue, 0, FilterStatus.Enabled, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { EnableAutofilters = FilterStatus.Default }, "", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { EnableAutofilters = FilterStatus.Enabled }, "", int.MaxValue, 0, FilterStatus.Enabled, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { EnableAutofilters = FilterStatus.Disabled }, " .AUTOFILTERS:ON", int.MaxValue, 0, FilterStatus.Disabled, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .LIFESPAN:ON", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Enabled, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { EnableLifespanFilter = FilterStatus.Default }, "", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { EnableLifespanFilter = FilterStatus.Enabled }, "", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Enabled, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { EnableLifespanFilter = FilterStatus.Disabled }, " .LIFESPAN:ON", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Disabled, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .QUICK", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Quick), Tuple.Create(new QuerySettings { QueryExecutionMode = QueryExecutionMode.Default }, "", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { QueryExecutionMode = QueryExecutionMode.Quick }, "", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Quick), Tuple.Create(new QuerySettings { QueryExecutionMode = QueryExecutionMode.Strict }, " .QUICK", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Strict), Tuple.Create(new QuerySettings { Sort = new List <SortInfo> { new SortInfo("Id") } }, "", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .SORT:Id", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings { Sort = new List <SortInfo> { new SortInfo("Id") } }, " .SORT:Name", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default), Tuple.Create(new QuerySettings(), " .SORT:Name .TOP:0 .SORT:DisplayName", int.MaxValue, 0, FilterStatus.Default, FilterStatus.Default, QueryExecutionMode.Default) }; var expectedSortInfo = new List <IEnumerable <SortInfo> >(); for (int i = 0; i < settings.Count - 4; i++) { expectedSortInfo.Add(null); } expectedSortInfo.Add(new List <SortInfo> { new SortInfo("Id") }); expectedSortInfo.Add(new List <SortInfo> { new SortInfo("Id") }); expectedSortInfo.Add(new List <SortInfo> { new SortInfo("Id") }); expectedSortInfo.Add(new List <SortInfo> { new SortInfo("Name"), new SortInfo("DisplayName") }); var parser = new CqlParser(); var queryText = "+Id:<1000"; foreach (var setting in settings) { var queryContext = new TestQueryContext(setting.Item1, 0, indexingInfo); var inputQueryText = queryText + setting.Item2; var expectedResultText = queryText; var snQuery = parser.Parse(inputQueryText, queryContext); var visitor = new SnQueryToStringVisitor(); visitor.Visit(snQuery.QueryTree); var actualResultText = visitor.Output; Assert.AreEqual(expectedResultText, actualResultText); Assert.AreEqual(setting.Item3, snQuery.Top); Assert.AreEqual(setting.Item4, snQuery.Skip); Assert.AreEqual(setting.Item5, snQuery.EnableAutofilters); Assert.AreEqual(setting.Item6, snQuery.EnableLifespanFilter); Assert.AreEqual(setting.Item7, snQuery.QueryExecutionMode); var sortIndex = settings.IndexOf(setting); Assert.IsTrue((!snQuery.Sort.Any() && expectedSortInfo[sortIndex] == null) || expectedSortInfo[sortIndex].Count() == snQuery.Sort.Length); } }