private static void CopyLocks(QueryPlan into, params QueryPlan[] src) { foreach (var @lock in src.SelectMany(s => s._locks)) { @into.AddLock(@lock); } }
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); }