Esempio n. 1
0
 private static void CopyLocks(QueryPlan into, params QueryPlan[] src)
 {
     foreach (var @lock in src.SelectMany(s => s._locks))
     {
         @into.AddLock(@lock);
     }
 }
Esempio n. 2
0
        public static QueryPlan Or(QueryPlan left, QueryPlan right)
        {
            var result = new QueryPlan(() => left._evalCore().Or(right._evalCore()));

            CopyLocks(result, left, right);
            return(result);
        }
        public QueryResult Run(QueryData data)
        {
            if (string.IsNullOrEmpty(data.Query))
            {
                return(new QueryResult());
            }
            string         parsedQuery = _queryParser.Parse(data.Query);
            QueryPlan      queryPlan   = _queryPlanBuilder.Build(data, parsedQuery);
            QueryRunResult result      = _queryPlanExecutor.Run(queryPlan, Map(data.Page));

            return(CreateResult(result, data));
        }
        private Maybe <QueryPlan> BuildNoSquadEntityProjectContextPlan(QueryData data, DocumentIndexTypeToken project, DocumentIndexTypeToken entityType)
        {
            var projectContextPlan = BuildProjectContextPlan(data.ProjectIds, data.IncludeNoProject, project);

            if (!projectContextPlan.HasValue)
            {
                return(Maybe.Nothing);
            }
            string         noSquadEntityTypeIdsQuery = String.Join(" ", _entityTypeProvider.NoSquadEntityTypeNames);
            IDocumentIndex entityTypeIndex           = _documentIndexProvider.GetOrCreateDocumentIndex(_pluginContext, entityType);
            QueryPlan      noSquadEntityPlan         = entityTypeIndex.BuildExecutionPlan(new ParsedQuery(words: noSquadEntityTypeIdsQuery), _profile.Initialized);

            return(Maybe.Return(QueryPlan.And(noSquadEntityPlan, projectContextPlan.Value)));
        }
		public QueryRunResult Run(QueryPlan plan, Page page)
		{
			int entitiesTotalCount = 0;
			int commentsTotalCount = 0;
			var entityDocuments = plan.EntityPlan.HasValue ? FindEntities(plan.EntityPlan.Value, page, out entitiesTotalCount) : Tuple.Create(Enumerable.Empty<EntityDocument>(),0);
			var commentDocuments = plan.CommentPlan.HasValue ? FindComments(plan.CommentPlan.Value, page, entityDocuments.Item1, entitiesTotalCount, out commentsTotalCount) : Tuple.Create(Enumerable.Empty<hOOt.Document>(), 0);
			return new QueryRunResult
				{
					Entities = entityDocuments.Item1,
					Comments = commentDocuments.Item1,
					EntitiesTotalCount = entitiesTotalCount,
					CommentsTotalCount = commentsTotalCount,
					LastIndexedEntityId = entityDocuments.Item2,
					LastIndexedCommentId = commentDocuments.Item2
				};
		}
        public QueryRunResult Run(QueryPlan plan, Page page)
        {
            int entitiesTotalCount = 0;
            int commentsTotalCount = 0;
            var entityDocuments    = plan.EntityPlan.HasValue ? FindEntities(plan.EntityPlan.Value, page, out entitiesTotalCount) : Tuple.Create(Enumerable.Empty <EntityDocument>(), 0);
            var commentDocuments   = plan.CommentPlan.HasValue ? FindComments(plan.CommentPlan.Value, page, entityDocuments.Item1, entitiesTotalCount, out commentsTotalCount) : Tuple.Create(Enumerable.Empty <hOOt.Document>(), 0);

            return(new QueryRunResult
            {
                Entities = entityDocuments.Item1,
                Comments = commentDocuments.Item1,
                EntitiesTotalCount = entitiesTotalCount,
                CommentsTotalCount = commentsTotalCount,
                LastIndexedEntityId = entityDocuments.Item2,
                LastIndexedCommentId = commentDocuments.Item2
            });
        }
        private static Maybe <QueryPlan> Op(Maybe <QueryPlan> left, Maybe <QueryPlan> right, Operation operation)
        {
            if (left.HasValue && right.HasValue)
            {
                switch (operation)
                {
                case Operation.And:
                    return(Maybe.Return(QueryPlan.And(left.Value, right.Value)));

                case Operation.Or:
                    return(Maybe.Return(QueryPlan.Or(left.Value, right.Value)));

                default:
                    throw new ArgumentException("{0} is not supported.".Fmt(operation));
                }
            }
            return(left.HasValue ? left : right);
        }
        private Maybe <QueryPlan> CreateEntityPlan(QueryData queryData, ParsedQuery parsedQuery)
        {
            if (queryData.IsCommentEntityType)
            {
                return(Maybe.Nothing);
            }
            var contextPlan = _contextQueryPlanBuilder.Build(queryData, DocumentIndexTypeToken.EntityProject, DocumentIndexTypeToken.EntitySquad, DocumentIndexTypeToken.EntityType);

            if (!contextPlan.HasValue)
            {
                return(Maybe.Nothing);
            }
            QueryPlan plan = CreateEntityQueryPlan(parsedQuery);

            plan = And(plan, CreateEntityTypePlan(queryData.EntityTypeId));
            plan = And(plan, CreateEntityStatePlan(queryData.EntityStateIds));
            plan = And(plan, contextPlan);
            return(plan);
        }
 private QueryPlan And(QueryPlan left, Maybe<QueryPlan> right)
 {
     return right.HasValue ? QueryPlan.And(left, right.Value) : left;
 }
 private QueryPlan And(QueryPlan left, Maybe <QueryPlan> right)
 {
     return(right.HasValue ? QueryPlan.And(left, right.Value) : left);
 }