예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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));
        }
예제 #4
0
        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);
            }
        }