private void PrepareEngine(ScriptedPatchRequest patch, string docId, int size, ScriptedJsonPatcherOperationScope scope, Engine jintEngine) { jintEngine.Global.Delete("PutDocument", false); jintEngine.Global.Delete("LoadDocument", false); jintEngine.Global.Delete("DeleteDocument", false); CustomizeEngine(jintEngine, scope); jintEngine.SetValue("PutDocument", (Action <string, object, object>)((key, document, metadata) => scope.PutDocument(key, document, metadata, jintEngine))); jintEngine.SetValue("LoadDocument", (Func <string, JsValue>)(key => scope.LoadDocument(key, jintEngine))); jintEngine.SetValue("DeleteDocument", (Action <string>)(scope.DeleteDocument)); jintEngine.SetValue("__document_id", docId); foreach (var kvp in patch.Values) { var token = kvp.Value as RavenJToken; if (token != null) { jintEngine.SetValue(kvp.Key, scope.ToJsInstance(jintEngine, token)); } else { var rjt = RavenJToken.FromObject(kvp.Value); var jsInstance = scope.ToJsInstance(jintEngine, rjt); jintEngine.SetValue(kvp.Key, jsInstance); } } jintEngine.ResetStatementsCount(); if (size != 0) { jintEngine.Options.MaxStatements(maxSteps + (size * additionalStepsPerSize)); } }
private void PrepareEngine(ScriptedPatchRequest patch, string docId, int size, ScriptedJsonPatcherOperationScope scope, Engine jintEngine) { scope.AdditionalStepsPerSize = additionalStepsPerSize; scope.MaxSteps = maxSteps; if (size != 0) { totalScriptSteps = maxSteps + (size * additionalStepsPerSize); jintEngine.Options.MaxStatements(TotalScriptSteps); } jintEngine.Global.Delete("PutDocument", false); jintEngine.Global.Delete("LoadDocument", false); jintEngine.Global.Delete("DeleteDocument", false); jintEngine.Global.Delete("IncreaseNumberOfAllowedStepsBy", false); CustomizeEngine(jintEngine, scope); jintEngine.SetValue("PutDocument", (Func <string, object, object, string>)((key, document, metadata) => scope.PutDocument(key, document, metadata, jintEngine))); jintEngine.SetValue("LoadDocument", (Func <string, JsValue>)(key => scope.LoadDocument(key, jintEngine, ref totalScriptSteps))); jintEngine.SetValue("DeleteDocument", (Action <string>)(scope.DeleteDocument)); jintEngine.SetValue("__document_id", docId); jintEngine.SetValue("IncreaseNumberOfAllowedStepsBy", (Action <int>)(number => { if (database != null && database.Configuration.AllowScriptsToAdjustNumberOfSteps) { scope.MaxSteps += number; jintEngine.Options.MaxStatements(totalScriptSteps + number); return; } throw new InvalidOperationException("Cannot use 'IncreaseNumberOfAllowedStepsBy' method, because `Raven/AllowScriptsToAdjustNumberOfSteps` is set to false."); })); foreach (var kvp in patch.Values) { var token = kvp.Value as RavenJToken; if (token != null) { jintEngine.SetValue(kvp.Key, scope.ToJsInstance(jintEngine, token)); } else { var rjt = RavenJToken.FromObject(kvp.Value); var jsInstance = scope.ToJsInstance(jintEngine, rjt); jintEngine.SetValue(kvp.Key, jsInstance); } } jintEngine.ResetStatementsCount(); }
private void PrepareEngine(ScriptedPatchRequest patch, string docId, int size, ScriptedJsonPatcherOperationScope scope, Engine jintEngine) { jintEngine.Global.Delete("PutDocument", false); jintEngine.Global.Delete("LoadDocument", false); jintEngine.Global.Delete("DeleteDocument", false); CustomizeEngine(jintEngine, scope); jintEngine.SetValue("PutDocument", (Action<string, object, object>)((key, document, metadata) => scope.PutDocument(key, document, metadata, jintEngine))); jintEngine.SetValue("LoadDocument", (Func<string, JsValue>)(key => scope.LoadDocument(key, jintEngine))); jintEngine.SetValue("DeleteDocument", (Action<string>)(scope.DeleteDocument)); jintEngine.SetValue("__document_id", docId); foreach (var kvp in patch.Values) { var token = kvp.Value as RavenJToken; if (token != null) { jintEngine.SetValue(kvp.Key, scope.ToJsInstance(jintEngine, token)); } else { var rjt = RavenJToken.FromObject(kvp.Value); var jsInstance = scope.ToJsInstance(jintEngine, rjt); jintEngine.SetValue(kvp.Key, jsInstance); } } jintEngine.ResetStatementsCount(); if (size != 0) jintEngine.Options.MaxStatements(maxSteps + (size * additionalStepsPerSize)); }
private void PrepareEngine(ScriptedPatchRequest patch, string docId, int size, ScriptedJsonPatcherOperationScope scope, Engine jintEngine) { scope.AdditionalStepsPerSize = additionalStepsPerSize; scope.MaxSteps = maxSteps; if (size != 0) { totalScriptSteps = maxSteps + (size * additionalStepsPerSize); jintEngine.Options.MaxStatements(TotalScriptSteps); } jintEngine.Global.Delete("PutDocument", false); jintEngine.Global.Delete("LoadDocument", false); jintEngine.Global.Delete("DeleteDocument", false); jintEngine.Global.Delete("IncreaseNumberOfAllowedStepsBy", false); CustomizeEngine(jintEngine, scope); jintEngine.SetValue("PutDocument", (Func<string, object, object, string>)((key, document, metadata) => scope.PutDocument(key, document, metadata, jintEngine))); jintEngine.SetValue("LoadDocument", (Func<string, JsValue>)(key => scope.LoadDocument(key, jintEngine, ref totalScriptSteps))); jintEngine.SetValue("DeleteDocument", (Action<string>)(scope.DeleteDocument)); jintEngine.SetValue("__document_id", docId); jintEngine.SetValue("IncreaseNumberOfAllowedStepsBy", (Action<int>)(number => { if (database != null && database.Configuration.AllowScriptsToAdjustNumberOfSteps) { scope.MaxSteps += number; jintEngine.Options.MaxStatements(totalScriptSteps + number); return; } throw new InvalidOperationException("Cannot use 'IncreaseNumberOfAllowedStepsBy' method, because `Raven/AllowScriptsToAdjustNumberOfSteps` is set to false."); })); foreach (var kvp in patch.Values) { var token = kvp.Value as RavenJToken; if (token != null) { jintEngine.SetValue(kvp.Key, scope.ToJsInstance(jintEngine, token)); } else { var rjt = RavenJToken.FromObject(kvp.Value); var jsInstance = scope.ToJsInstance(jintEngine, rjt); jintEngine.SetValue(kvp.Key, jsInstance); } } jintEngine.ResetStatementsCount(); }