コード例 #1
0
ファイル: QueryRunner.cs プロジェクト: syrjgc11006/ravendb
        public TermsQueryResultServerSide ExecuteGetTermsQuery(string indexName, string field, string fromValue, long?existingResultEtag, int pageSize, DocumentsOperationContext context, OperationCancelToken token, out Index index)
        {
            ObjectDisposedException lastException = null;

            for (var i = 0; i < NumberOfRetries; i++)
            {
                try
                {
                    index = GetIndex(indexName);

                    var etag = index.GetIndexEtag(null);
                    if (etag == existingResultEtag)
                    {
                        return(TermsQueryResultServerSide.NotModifiedResult);
                    }

                    return(index.GetTerms(field, fromValue, pageSize, context, token));
                }
                catch (ObjectDisposedException e)
                {
                    if (Database.DatabaseShutdown.IsCancellationRequested)
                    {
                        throw;
                    }

                    lastException = e;
                }
            }

            throw CreateRetriesFailedException(lastException);
        }
コード例 #2
0
ファイル: QueryRunner.cs プロジェクト: trisadmeslek/ravendb
        public TermsQueryResultServerSide ExecuteGetTermsQuery(string indexName, string field, string fromValue, long?existingResultEtag, int pageSize, QueryOperationContext queryContext, OperationCancelToken token, out Index index)
        {
            Exception lastException = null;

            for (var i = 0; i < NumberOfRetries; i++)
            {
                try
                {
                    index = GetIndex(indexName);

                    queryContext.WithIndex(index);

                    var etag = index.GetIndexEtag(queryContext, null);
                    if (etag == existingResultEtag)
                    {
                        return(TermsQueryResultServerSide.NotModifiedResult);
                    }

                    return(index.GetTerms(field, fromValue, pageSize, queryContext, token));
                }
                catch (ObjectDisposedException e)
                {
                    if (Database.DatabaseShutdown.IsCancellationRequested)
                    {
                        throw;
                    }

                    lastException = e;

                    WaitForIndexBeingLikelyReplacedDuringQuery().GetAwaiter().GetResult();
                }
                catch (OperationCanceledException e)
                {
                    if (Database.DatabaseShutdown.IsCancellationRequested)
                    {
                        throw;
                    }

                    if (token.Token.IsCancellationRequested)
                    {
                        throw;
                    }

                    lastException = e;

                    WaitForIndexBeingLikelyReplacedDuringQuery().GetAwaiter().GetResult();
                }
            }

            throw CreateRetriesFailedException(lastException);
        }
コード例 #3
0
        protected async Task <SuggestionQueryResult> ExecuteSuggestion(
            IndexQueryServerSide query,
            Index index,
            QueryOperationContext queryContext,
            long?existingResultEtag,
            OperationCancelToken token)
        {
            if (query.Metadata.SelectFields.Length == 0)
            {
                throw new InvalidQueryException("Suggestion query must have at least one suggest token in SELECT.", query.Metadata.QueryText, query.QueryParameters);
            }

            var fields = index.Definition.IndexFields;

            foreach (var f in query.Metadata.SelectFields)
            {
                if (f.IsSuggest == false)
                {
                    throw new InvalidQueryException("Suggestion query must have only suggest tokens in SELECT.", query.Metadata.QueryText, query.QueryParameters);
                }

                var selectField = (SuggestionField)f;

                if (fields.TryGetValue(selectField.Name, out var field) == false)
                {
                    throw new InvalidOperationException($"Index '{index.Name}' does not have a field '{selectField.Name}'.");
                }

                if (field.HasSuggestions == false)
                {
                    throw new InvalidOperationException($"Index '{index.Name}' does not have suggestions configured for field '{selectField.Name}'.");
                }
            }

            if (existingResultEtag.HasValue)
            {
                var etag = index.GetIndexEtag(queryContext, query.Metadata);
                if (etag == existingResultEtag.Value)
                {
                    return(SuggestionQueryResult.NotModifiedResult);
                }
            }

            return(await index.SuggestionQuery(query, queryContext, token));
        }