Example #1
0
            private (List <Slice>, string) ExtractIdsFromQuery(IndexQueryServerSide query, DocumentsOperationContext context)
            {
                if (string.IsNullOrWhiteSpace(query.Query))
                {
                    return(null, null);
                }

                if (query.Metadata.Query.Where == null)
                {
                    return(null, null);
                }

                if (query.Metadata.IndexFieldNames.Contains(QueryFieldName.DocumentId) == false)
                {
                    return(null, null);
                }

                IDisposable releaseServerContext          = null;
                IDisposable closeServerTransaction        = null;
                TransactionOperationContext serverContext = null;

                try
                {
                    if (query.Metadata.HasCmpXchg)
                    {
                        releaseServerContext   = context.DocumentDatabase.ServerStore.ContextPool.AllocateOperationContext(out serverContext);
                        closeServerTransaction = serverContext.OpenReadTransaction();
                    }

                    using (closeServerTransaction)
                    {
                        var idsRetriever = new RetrieveDocumentIdsVisitor(serverContext, context, query.Metadata, _context.Allocator);

                        idsRetriever.Visit(query.Metadata.Query.Where, query.QueryParameters);

                        return(idsRetriever.Ids?.OrderBy(x => x, SliceComparer.Instance).ToList(), idsRetriever.StartsWith);
                    }
                }
                finally
                {
                    releaseServerContext?.Dispose();
                }
            }
Example #2
0
            private (List <Slice>, string) ExtractIdsFromQuery(IndexQueryServerSide query, MapQueryResultRetriever resultsRetriever)
            {
                if (string.IsNullOrWhiteSpace(query.Query))
                {
                    return(null, null);
                }

                if (query.Metadata.Query.Where == null)
                {
                    return(null, null);
                }

                if (query.Metadata.IndexFieldNames.Contains(QueryFieldName.DocumentId) == false)
                {
                    return(null, null);
                }

                var idsRetriever = new RetrieveDocumentIdsVisitor(resultsRetriever, query.Metadata, _context.Allocator);

                idsRetriever.Visit(query.Metadata.Query.Where, query.QueryParameters);

                return(idsRetriever.Ids.OrderBy(x => x, SliceComparer.Instance).ToList(), idsRetriever.StartsWith);
            }
Example #3
0
            private List <Slice> ExtractIdsFromQuery(IndexQueryServerSide query)
            {
                if (string.IsNullOrWhiteSpace(query.Query))
                {
                    return(null);
                }

                if (query.Metadata.Query.Where == null)
                {
                    return(null);
                }

                if (query.Metadata.IndexFieldNames.Contains(Constants.Documents.Indexing.Fields.DocumentIdFieldName) == false)
                {
                    return(null);
                }

                var idsRetriever = new RetrieveDocumentIdsVisitor(query.Metadata, _context.Allocator);

                idsRetriever.Visit(query.Metadata.Query.Where, query.QueryParameters);

                return(idsRetriever.Ids.OrderBy(x => x, SliceComparer.Instance).ToList());
            }