示例#1
0
        private string VisitSortQuery(SortClause clause)
        {
            var visitor = new ElasticSearchDSLVisitor(SchemaRetrieverMock.CreateMockSchemaRetriever());

            visitor.Visit(clause);
            return(clause.KustoQL);
        }
示例#2
0
        public void Visit_WithMissingOrder_ThrowsException()
        {
            var sortClause = new SortClause
            {
                FieldName = "myField",
            };

            Assert.Throws(typeof(IllegalClauseException), () => VisitSortQuery(sortClause));
        }
示例#3
0
        public string TestInnerElasticSortVisitor()
        {
            var sortClause = new SortClause
            {
                FieldName = "_myInternalField",
            };

            return(VisitSortQuery(sortClause));
        }
示例#4
0
        public void Visit_WithMissingFields_ThrowsException()
        {
            var sortClause = new SortClause
            {
                Order = "Desc",
            };

            Assert.Throws(typeof(IllegalClauseException), () => VisitSortQuery(sortClause));
        }
示例#5
0
        public string TestBasicSortVisitor()
        {
            var sortClause = new SortClause
            {
                FieldName = "myFieldName",
                Order     = "ASC",
            };

            return(VisitSortQuery(sortClause));
        }
        public string GeneratesClauseQuery()
        {
            var sortClause = new SortClause()
            {
                FieldName = "wibble", Order = "asc"
            };

            var visitor = new ElasticSearchDSLVisitor(SchemaRetrieverMock.CreateMockSchemaRetriever());

            visitor.Visit(sortClause);

            return(sortClause.KustoQL);
        }
        public string IgnoresClausesWithUnderscore()
        {
            var sortClause = new SortClause()
            {
                FieldName = "_wibble"
            };

            var visitor = new ElasticSearchDSLVisitor(SchemaRetrieverMock.CreateMockSchemaRetriever());

            visitor.Visit(sortClause);

            return(sortClause.KustoQL);
        }
示例#8
0
        public override void VisitOrderByClause(OrderByClause orderByClause, QueryModel queryModel, int index)
        {
            int priority = _queryDescription.SortClauses.Count() - 1;

            foreach (var ordering in orderByClause.Orderings)
            {
                priority++;
                var expr          = ordering.Expression;
                var dir           = ordering.OrderingDirection;
                var crit          = GetFieldSelector(queryModel, expr);
                var sortDirection = (dir == OrderingDirection.Asc) ? SortDirection.Ascending : SortDirection.Descending;
                var clause        = new SortClause(crit, sortDirection, priority);
                _queryDescription.AddSortClause(clause);
            }
        }
示例#9
0
        /// <inheritdoc/>
        public override object ReadJson(
            JsonReader reader,
            Type objectType,
            object existingValue,
            JsonSerializer serializer)
        {
            var jo    = JObject.Load(reader);
            var first = (JProperty)jo.First;

            var obj = new SortClause
            {
                FieldName = first.Name,
                Order     = (string)first.First["order"],
            };

            return(obj);
        }
示例#10
0
        /// <inheritdoc/>
        public void Visit(SortClause sortClause)
        {
            Ensure.IsNotNull(sortClause, nameof(sortClause));
            Ensure.IsNotNull(sortClause, nameof(sortClause));
            EnsureClause.StringIsNotNullOrEmpty(sortClause.FieldName, nameof(sortClause.FieldName));

            if (sortClause.FieldName.StartsWith('_'))
            {
                // fields that start with "_" are internal to elastic and we want to disregard them
                sortClause.KustoQL = string.Empty;
            }
            else
            {
                EnsureClause.StringIsNotNullOrEmpty(sortClause.Order, nameof(sortClause.Order));

                sortClause.KustoQL = $"{sortClause.FieldName} {sortClause.Order}";
            }
        }
示例#11
0
        public void HiveQueryCacheKeyToFromJson()
        {
            var guid  = Guid.NewGuid();
            var guid2 = Guid.NewGuid();
            var guid3 = Guid.NewGuid();
            var resultFilterClause        = new ResultFilterClause(typeof(string), ResultFilterType.Any, 0);
            var hiveId                    = new HiveId(guid);
            var expected                  = new HiveId(guid2);
            var fullHiveId                = new HiveId(new Uri("content://blah/"), "nhibernate", new HiveIdValue(guid3));
            var scopeStartId              = new HiveId(Guid.NewGuid());
            var fromClause                = new FromClause(scopeStartId.AsEnumerableOfOne(), HierarchyScope.AncestorsOrSelf, FixedStatusTypes.Published, "default-type", new[] { hiveId, expected, fullHiveId });
            var fieldPredicateExpression  = new FieldPredicateExpression("title", ValuePredicateType.Equal, "blah");
            var fieldPredicateExpression2 = new FieldPredicateExpression("title", ValuePredicateType.Equal, "blah");
            var binary                    = Expression.MakeBinary(ExpressionType.ExclusiveOr, fieldPredicateExpression, fieldPredicateExpression2);
            var aSortClause               = new SortClause(new FieldSelectorExpression("tag"), SortDirection.Descending, 2);

            //var key = new HiveQueryCacheKey(new QueryDescription(resultFilterClause, fromClause, fieldPredicateExpression, Enumerable.Empty<SortClause>()));
            var key     = CacheKey.Create(new HiveQueryCacheKey(new QueryDescription(resultFilterClause, fromClause, fieldPredicateExpression, aSortClause.AsEnumerableOfOne())));
            var keyJson = key.ToJson();
            var keyBack = (CacheKey <HiveQueryCacheKey>)keyJson;

            // var keyJsonTwice = keyBack.ToJson();
            Assert.That(keyBack, Is.Not.Null);
            //Assert.That(keyJson, Is.EqualTo(keyJsonTwice));
            //NOTE: Criteria does not deserialize at the moment, but caching implementation should find matching keys OK still if it maintains an inner collection of original key objects if (key.Original.Criteria != null) Assert.That(keyBack.Original.Criteria, Is.Not.Null);
            Assert.True(keyBack.Original.ResultFilters.Any());
            Assert.That(keyBack.Original.ResultFilters.First().ResultType, Is.EqualTo(typeof(string)));
            Assert.That(keyBack.Original.SortClauses.Count(), Is.EqualTo(key.Original.SortClauses.Count()));
            Assert.That(keyBack.Original.SortClauses.FirstOrDefault().Direction, Is.EqualTo(SortDirection.Descending));
            Assert.That(keyBack.Original.SortClauses.FirstOrDefault().Priority, Is.EqualTo(2));
            Assert.That(keyBack.Original.From.HierarchyScope, Is.EqualTo(key.Original.From.HierarchyScope));
            Assert.That(keyBack.Original.From.RequiredEntityIds.Count(), Is.EqualTo(3));
            Assert.That(keyBack.Original.From.RequiredEntityIds.FirstOrDefault(), Is.EqualTo(hiveId));
            Assert.That(keyBack.Original.From.RequiredEntityIds.FirstOrDefault().Value.Type, Is.EqualTo(HiveIdValueTypes.Guid));
            Assert.That(keyBack.Original.From.RequiredEntityIds.ElementAt(1), Is.EqualTo(expected));
            Assert.That(keyBack.Original.From.RequiredEntityIds.ElementAt(1).Value.Type, Is.EqualTo(HiveIdValueTypes.Guid));

            Assert.That(keyBack.Original.From.RequiredEntityIds.ElementAt(2), Is.EqualTo(fullHiveId));
            Assert.That(keyBack.Original.From.RequiredEntityIds.ElementAt(2).Value.Type, Is.EqualTo(HiveIdValueTypes.Guid));
            Assert.That(keyBack.Original.From.RequiredEntityIds.ElementAt(2).ProviderId, Is.EqualTo("nhibernate"));
            Assert.That(keyBack.Original.From.RequiredEntityIds.ElementAt(2).ProviderGroupRoot.ToString(), Is.EqualTo(fullHiveId.ProviderGroupRoot.ToString()));
        }