Beispiel #1
0
        public Document Transform(Document document, JsonOperationContext context)
        {
            object translatedResult;

            try
            {
                using (document.Data)
                    using (var result = _run.Run(context, null, "execute", new object[] { document }))
                        translatedResult = _run.Translate(result, context, usageMode: BlittableJsonDocumentBuilder.UsageMode.ToDisk);
            }
            catch (Raven.Client.Exceptions.Documents.Patching.JavaScriptException e)
            {
                if (e.InnerException is Jint.Runtime.JavaScriptException innerException && string.Equals(innerException.Message, "skip", StringComparison.OrdinalIgnoreCase))
                {
                    return(null);
                }

                throw;
            }

            if (translatedResult is BlittableJsonReaderObject == false)
            {
                return(null);
            }

            return(new Document
            {
                Data = (BlittableJsonReaderObject)translatedResult,
                Id = document.Id,
                Flags = document.Flags,
                NonPersistentFlags = document.NonPersistentFlags,
                LastModified = document.LastModified,
            });
        }
Beispiel #2
0
        public Document Transform(Document document, JsonOperationContext context)
        {
            object translatedResult;

            using (var result = _run.Run(null, "execute", new object[] { document }))
            {
                try
                {
                    translatedResult = _run.Translate(result, context, usageMode: BlittableJsonDocumentBuilder.UsageMode.ToDisk);
                }
                finally
                {
                    document.Data.Dispose();
                }
            }

            if (translatedResult is BlittableJsonReaderObject == false)
            {
                return(null);
            }

            return(new Document
            {
                Data = (BlittableJsonReaderObject)translatedResult,
                Id = document.Id,
                Flags = document.Flags,
                NonPersistentFlags = document.NonPersistentFlags
            });
        }
Beispiel #3
0
    public FilterResult Apply(global::Lucene.Net.Documents.Document document, string key, IState state)
    {
        var doc = _retriever.DirectGet(document, key, DocumentFields.All, state);

        if (doc == null)
        {
            _skippedResults.Value++;
            return(FilterResult.Skipped);
        }

        if (_scannedDocuments.Value >= _query.FilterLimit)
        {
            return(FilterResult.LimitReached);
        }

        _scannedDocuments.Value++;
        object self = _filterScriptRun.Translate(_documentsContext, doc);

        using (_queryTimings?.For(nameof(QueryTimingsScope.Names.Filter)))
            using (var result = _filterScriptRun.Run(_documentsContext, _documentsContext, "execute", new[] { self, _query.QueryParameters }, _queryTimings))
            {
                if (result.BooleanValue == true)
                {
                    return(FilterResult.Accepted);
                }

                _skippedResults.Value++;
                return(FilterResult.Skipped);
            }
    }
Beispiel #4
0
        public BlittableJsonReaderObject Patch(BlittableJsonReaderObject document)
        {
            if (_runner == null)
            {
                return(document);
            }

            return(_runner.Run(_context, _context, "execute", new object[] { document }).TranslateToObject(_context));
        }
        public bool MatchCriteria(ScriptRunner.SingleRun run, DocumentsOperationContext context, object document, ref BlittableJsonReaderObject transformResult)
        {
            using (var result = run.Run(context, "execute", new[] { document }))
            {
                var resultAsBool = result.BooleanValue;
                if (resultAsBool != null)
                {
                    return(resultAsBool.Value);
                }

                transformResult = result.TranslateToObject(context);
                return(transformResult != null);
            }
        }
Beispiel #6
0
        public BlittableJsonReaderObject PatchDocument(BlittableJsonReaderObject document)
        {
            if (_hasScript == false)
            {
                return(document);
            }

            try
            {
                return(_runner.Run(_context, FunctionName, new object[] { document }).TranslateToObject(_context));
            }
            catch (Exception e)
            {
                throw new InvalidOperationException("Error patching document", e);
            }
        }
        public Document Transform(Document document)
        {
            var    ctx = document.Data._context;
            object translatedResult;

            using (document)
            {
                using (_run.ScriptEngine.ChangeMaxStatements(_options.MaxStepsForTransformScript))
                {
                    try
                    {
                        using (ScriptRunnerResult result = _run.Run(ctx, null, "execute", new object[] { document }))
                        {
                            translatedResult = _run.Translate(result, ctx, usageMode: BlittableJsonDocumentBuilder.UsageMode.ToDisk);
                        }
                    }
                    catch (Client.Exceptions.Documents.Patching.JavaScriptException e)
                    {
                        if (e.InnerException is Jint.Runtime.JavaScriptException innerException && string.Equals(innerException.Message, "skip", StringComparison.OrdinalIgnoreCase))
                        {
                            return(null);
                        }

                        throw;
                    }
                }

                if (!(translatedResult is BlittableJsonReaderObject bjro))
                {
                    return(null);
                }

                var cloned = document.Clone(ctx);
                using (cloned.Data)
                {
                    cloned.Data = bjro;
                }

                return(cloned);
            }
        }
            private (bool HasNext, Document Doc) GetNextDocument()
            {
                if (_hasProjections)
                {
                    if (_projections.MoveNext())
                    {
                        return(true, _projections.Current);
                    }

                    _hasProjections = false;
                    _projections    = default;
                }

                if (_inner == null)
                {
                    _inner      = GetDocuments().GetEnumerator();
                    _innerCount = 0;
                }

                if (_inner.MoveNext() == false)
                {
                    Current = null;

                    if (_returnedResults >= _query.PageSize)
                    {
                        return(false, null);
                    }

                    if (_innerCount < _query.PageSize)
                    {
                        return(false, null);
                    }

                    _start += _query.PageSize;
                    _inner  = null;
                    return(true, null);
                }

                _innerCount++;

                if (_filterScriptRun != null)
                {
                    if (_scannedResults.Value == _query.FilterLimit)
                    {
                        return(false, null);
                    }
                    _scannedResults.Value++;
                    object self = _filterScriptRun.Translate(_context, _inner.Current);
                    using (_queryTimings?.For(nameof(QueryTimingsScope.Names.Filter)))
                        using (var result = _filterScriptRun.Run(_context, _context, "execute", _inner.Current !.Id, new[] { self, _query.QueryParameters }, _queryTimings))
                        {
                            if (result.BooleanValue != true)
                            {
                                return(true, null);
                            }
                        }
                }

                if (_fieldsToFetch.IsProjection)
                {
                    var result = _resultsRetriever.GetProjectionFromDocument(_inner.Current, null, QueryResultRetrieverBase.ZeroScore, _fieldsToFetch, _context, null, _token);
                    if (result.List != null)
                    {
                        var it = result.List.GetEnumerator();
                        if (it.MoveNext() == false)
                        {
                            return(true, null);
                        }
                        _totalResults.Value += result.List.Count - 1;
                        _projections         = it;
                        _hasProjections      = true;
                        return(true, it.Current);
                    }

                    if (result.Document != null)
                    {
                        return(true, result.Document);
                    }

                    return(true, null);
                }

                return(true, _inner.Current);
            }