public Maybe <QueryPlan> BuildProjectContextPlan(IEnumerable <int> projectIds, bool includeNoProject, DocumentIndexTypeToken projectIndexTypeToken)
        {
            ProjectIndexData projectIdsIndexData  = projectIds != null ? new ProjectIndexData(projectIds.Cast <int?>().ToList()) : ProjectIndexData.Empty;
            ProjectIndexData nullProjectIndexData = includeNoProject ? new ProjectIndexData(new int?[] { null }) : ProjectIndexData.Empty;
            var    result = ProjectIndexData.Sum(projectIdsIndexData, nullProjectIndexData);
            string query  = result.ToString();

            if (string.IsNullOrEmpty(query))
            {
                return(Maybe.Nothing);
            }
            IDocumentIndex projectContextIndex = _documentIndexProvider.GetOrCreateDocumentIndex(_pluginContext, projectIndexTypeToken);

            return(projectContextIndex.BuildExecutionPlan(new ParsedQuery(words: query), _profile.Initialized));
        }
        private Tuple <IEnumerable <hOOt.Document>, int> FindComments(Lazy <WAHBitArray> plan, Page page, IEnumerable <EntityDocument> entityDocuments, int entitiesTotalCount, out int commentsTotalCount)
        {
            var commentIndex = _documentIndexProvider.GetOrCreateDocumentIndex(_pluginContext.AccountName, DocumentIndexTypeToken.Comment);

            if (entityDocuments.Count() == page.Size)
            {
                commentIndex.Find <hOOt.Document>(plan, -1, -1, 0, out commentsTotalCount);
                return(Tuple.Create(Enumerable.Empty <hOOt.Document>(), 0));
            }
            Page newPage = CalculatePage(entitiesTotalCount, page.Number, page.Size);
            IEnumerable <hOOt.Document> found = commentIndex.Find <hOOt.Document>(plan, newPage.Number, newPage.Size, newPage.PositionWithin, out commentsTotalCount);
            var lastDocument = commentIndex.GetLastDocument <hOOt.Document>();

            return(Tuple.Create(found, lastDocument != null ? int.Parse(lastDocument.FileName) : 0));
        }
        private Maybe <QueryPlan> CreateCommentPlan(QueryData data, ParsedQuery parsedQuery)
        {
            if (!data.ShouldSearchComment)
            {
                return(Maybe.Nothing);
            }
            var contextPlan = _contextQueryPlanBuilder.Build(data, DocumentIndexTypeToken.CommentProject, DocumentIndexTypeToken.CommentSquad, DocumentIndexTypeToken.CommentEntityType);

            if (!contextPlan.HasValue)
            {
                return(Maybe.Nothing);
            }
            var commentIndex = _documentIndexProvider.GetOrCreateDocumentIndex(_pluginContext, DocumentIndexTypeToken.Comment);
            var plan         = commentIndex.BuildExecutionPlan(parsedQuery, _profile.Initialized);

            return(And(plan, contextPlan));
        }
        private Maybe <Lazy <WAHBitArray> > CreateCommentPlan(QueryData data, string query)
        {
            if (!data.ShouldSearchComment)
            {
                return(Maybe.Nothing);
            }
            var contextPlan = _contextQueryPlanBuilder.Build(data, DocumentIndexTypeToken.CommentProject, DocumentIndexTypeToken.CommentSquad, DocumentIndexTypeToken.CommentEntityType);

            if (!contextPlan.HasValue)
            {
                return(Maybe.Nothing);
            }
            var commentIndex = _documentIndexProvider.GetOrCreateDocumentIndex(_accountName, DocumentIndexTypeToken.Comment);
            var plan         = commentIndex.BuildExecutionPlan(query, _profile.Initialized);

            return(And(plan, contextPlan));
        }
		private static IEnumerable<IDocumentIndex> GetDocumentIndexes(IDocumentIndexProvider documentIndexProvider, IPluginContext context, bool runningOnly)
		{
			IEnumerable<IDocumentIndex> documentIndexes = documentIndexProvider.DocumentIndexTypes.Select(t => t.TypeToken)
				.Distinct()
				.Select(t => runningOnly ? documentIndexProvider.GetDocumentIndex(context, t) : Maybe.Return(documentIndexProvider.GetOrCreateDocumentIndex(context,t)))
				.Choose();
			return documentIndexes;
		}
Example #6
0
        public Maybe <QueryPlan> Build(QueryData data, DocumentIndexTypeToken projectContextType, DocumentIndexTypeToken _, DocumentIndexTypeToken __)
        {
            var            query = _indexDataFactory.CreateImpedimentData(false, data.LoggedUserId, data.LoggedUserId);
            IDocumentIndex impedimentContextIndex = _documentIndexProvider.GetOrCreateDocumentIndex(_pluginContext, DocumentIndexTypeToken.Impediment);
            var            impedimentPlan         = impedimentContextIndex.BuildExecutionPlan(new ParsedQuery(words: query), _profile.Initialized);
            var            projectContextPlan     = _plansBuilder.BuildProjectContextPlan(data.ProjectIds, data.IncludeNoProject, projectContextType);

            return(projectContextPlan.And(Maybe.Return(impedimentPlan)));
        }
Example #7
0
        private Maybe <Lazy <WAHBitArray> > BuildProjectContextPlan(IEnumerable <int> projectIds, bool includeNoProject, DocumentIndexTypeToken documentIndexTypeToken)
        {
            var queryBuf = new List <string>();

            if (projectIds != null)
            {
                queryBuf.AddRange(projectIds.Select(projectId => _documentIdFactory.EncodeProjectId(projectId)));
            }
            if (includeNoProject)
            {
                queryBuf.Add(_documentIdFactory.EncodeProjectId(null));
            }
            if (!queryBuf.Any())
            {
                return(Maybe.Nothing);
            }
            string         query = String.Join(" ", queryBuf.ToArray());
            IDocumentIndex projectContextIndices = _documentIndexProvider.GetOrCreateDocumentIndex(_accountName, documentIndexTypeToken);

            return(projectContextIndices.BuildExecutionPlan(query, _profile.Initialized));
        }
Example #8
0
        Maybe <QueryPlan> IProjectContextQueryPlanBuilder.BuildProjectContextPlan(IEnumerable <int> projectIds, bool includeNoProject, DocumentIndexTypeToken projectIndexTypeToken)
        {
            var queryBuf = new List <string>();

            if (projectIds != null)
            {
                queryBuf.AddRange(projectIds.Select(projectId => _indexDataFactory.CreateProjectData(projectId)));
            }
            if (includeNoProject)
            {
                queryBuf.Add(_indexDataFactory.CreateProjectData(null));
            }
            if (!queryBuf.Any())
            {
                return(Maybe.Nothing);
            }
            string         query = String.Join(" ", queryBuf.ToArray());
            IDocumentIndex projectContextIndex = _documentIndexProvider.GetOrCreateDocumentIndex(_pluginContext, projectIndexTypeToken);

            return(projectContextIndex.BuildExecutionPlan(new ParsedQuery(words: query), _profile.Initialized));
        }
Example #9
0
        public IndexResult AddGeneralIndex(GeneralDTO general)
        {
            if (general.GeneralID == null)
            {
                return(new IndexResult());
            }
            if (Exists <EntityDocument>(general.GeneralID.Value, DocumentIndexTypeToken.Entity))
            {
                if (_profile.Initialized)
                {
                    _log.WarnFormat("CANNOT PROCESS '{0}CreatedMessage' FOR ENTITY #{1} - '{2}'. ENTITY HAS ALREADY BEEN ADDED ON PROFILE INITIALIZATION OR ENTITY CREATION !!!", general.EntityTypeName, general.GeneralID.GetValueOrDefault(), general.Name);
                }
                else
                {
                    _log.ErrorFormat("CANNOT PROCESS '{0}CreatedMessage' FOR ENTITY #{1} - '{2}'. ENTITY HAS ALREADY BEEN ADDED !!!", general.EntityTypeName, general.GeneralID.GetValueOrDefault(), general.Name);
                }
                return(new IndexResult());
            }
            IDocumentIndex entityIndex = _documentIndexProvider.GetOrCreateDocumentIndex(_pluginContext.AccountName, DocumentIndexTypeToken.Entity);
            EntityDocument document    = _documentFactory.CreateGeneral(general);
            IndexResult    indexResult = document == null ? new IndexResult() : entityIndex.Index(document, false);

            if (indexResult.DocNumber != -1)
            {
                IDocumentIndex projectContextIndex = _documentIndexProvider.GetOrCreateDocumentIndex(_pluginContext.AccountName, DocumentIndexTypeToken.EntityProject);
                projectContextIndex.Index(indexResult.DocNumber, _documentIdFactory.EncodeProjectId(general.ParentProjectID));
                Maybe <string> maybeEntityTypeName = _entityTypeProvider.GetEntityTypeName(general.EntityTypeID);
                string         entityTypeName      = maybeEntityTypeName.FailIfNothing(() => new ApplicationException("Entity type name was not found {0}".Fmt(general.EntityTypeID)));
                IDocumentIndex entityTypeIndex     = _documentIndexProvider.GetOrCreateDocumentIndex(_pluginContext.AccountName, DocumentIndexTypeToken.EntityType);
                entityTypeIndex.Index(indexResult.DocNumber, entityTypeName);
            }
            _log.Debug(string.Format("Added {0} #{1} - '{2}':{3}", general.EntityTypeName, general.GeneralID.GetValueOrDefault(), general.Name, indexResult.WordsAdded.Any() ? string.Format(" added words - {0};", string.Join(",", indexResult.WordsAdded.Keys)) : " NO WORDS ADDED;"));
            return(indexResult);
        }
Example #10
0
        private static IEnumerable <IDocumentIndex> GetDocumentIndexes(IDocumentIndexProvider documentIndexProvider, IPluginContext context, bool runningOnly)
        {
            IEnumerable <IDocumentIndex> documentIndexes = documentIndexProvider.DocumentIndexTypes.Select(t => t.TypeToken)
                                                           .Distinct()
                                                           .Select(t => runningOnly ? documentIndexProvider.GetDocumentIndex(context, t) : Maybe.Return(documentIndexProvider.GetOrCreateDocumentIndex(context, t)))
                                                           .Choose();

            return(documentIndexes);
        }
        public static void ShutdownDocumentIndexes(this IDocumentIndexProvider documentIndexProvider, AccountName accountName, DocumentIndexShutdownSetup setup)
        {
            IEnumerable <IDocumentIndex> documentIndexes = documentIndexProvider.DocumentTypes.Select(t => documentIndexProvider.GetOrCreateDocumentIndex(accountName, t));

            foreach (IDocumentIndex documentIndex in documentIndexes)
            {
                documentIndex.Shutdown(setup);
            }
        }