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, }); }
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 }); }
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); } }
private JsValue GetAttachments(JsValue self, JsValue[] args) { if (args.Length != 0) { ThrowInvalidScriptMethodCall("getAttachments() must be called without any argument"); } if (Current.Document.TryGetMetadata(out var metadata) == false || metadata.TryGet(Constants.Documents.Metadata.Attachments, out BlittableJsonReaderArray attachmentsBlittableArray) == false) { return(DocumentScript.ScriptEngine.Array.Construct(Array.Empty <JsValue>())); } var attachments = new JsValue[attachmentsBlittableArray.Length]; for (int i = 0; i < attachmentsBlittableArray.Length; i++) { attachments[i] = (JsValue)DocumentScript.Translate(Context, attachmentsBlittableArray[i]); } return(DocumentScript.ScriptEngine.Array.Construct(attachments)); }
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); }