public LogicConditionalTriggerInstanceInfo(InlineTrigger trigger, InstanceInfo parent, IEngineContext context, IStorage parentStorage) : base(context.Logger) { _context = context; _parent = parent; _trigger = trigger; _condition = trigger.Condition; var dataResolversFactory = context.DataResolversFactory; _searcher = dataResolversFactory.GetLogicalSearchResolver(); _localCodeExecutionContext = new LocalCodeExecutionContext(); var localStorageSettings = RealStorageSettingsHelper.Create(context, parentStorage); _storage = new LocalStorage(localStorageSettings); _localCodeExecutionContext.Storage = _storage; _localCodeExecutionContext.Holder = parent.Name; _storage.LogicalStorage.OnChangedWithKeys += LogicalStorage_OnChangedWithKeys; lock (_lockObj) { DoSearch(); } }
public InstanceInfo(StrongIdentifierValue name, IEngineContext context, IStorage parentStorage) : base(context.Logger) { Name = name; _context = context; _localCodeExecutionContext = new LocalCodeExecutionContext(); var localStorageSettings = RealStorageSettingsHelper.Create(context, parentStorage); _storage = new LocalStorage(localStorageSettings); _localCodeExecutionContext.Storage = _storage; _localCodeExecutionContext.Holder = Name; #if DEBUG //Log($"_localCodeExecutionContext = {_localCodeExecutionContext}"); #endif _triggersResolver = new TriggersResolver(context); }
public void Init() { _instanceState = InstanceState.Initializing; var targetSystemEventsTriggersList = _triggersResolver.ResolveSystemEventsTriggersList(KindOfSystemEventOfInlineTrigger.Init, Name, _localCodeExecutionContext, ResolverOptions.GetDefaultOptions()); #if DEBUG //Log($"targetSystemEventsTriggersList = {targetSystemEventsTriggersList.WriteListToString()}"); #endif if (targetSystemEventsTriggersList.Any()) { targetSystemEventsTriggersList.Reverse(); var processInitialInfoList = new List <ProcessInitialInfo>(); foreach (var targetTrigger in targetSystemEventsTriggersList) { var localCodeExecutionContext = new LocalCodeExecutionContext(); var localStorageSettings = RealStorageSettingsHelper.Create(_context, _storage); localCodeExecutionContext.Storage = new LocalStorage(localStorageSettings); localCodeExecutionContext.Holder = Name; var processInitialInfo = new ProcessInitialInfo(); processInitialInfo.CompiledFunctionBody = targetTrigger.ResultItem.CompiledFunctionBody; processInitialInfo.LocalContext = localCodeExecutionContext; processInitialInfo.Metadata = targetTrigger.ResultItem.CodeEntity; processInitialInfoList.Add(processInitialInfo); } #if DEBUG //Log($"processInitialInfoList = {processInitialInfoList.WriteListToString()}"); #endif var taskValue = _context.CodeExecutor.ExecuteBatchAsync(processInitialInfoList); #if DEBUG //Log($"taskValue = {taskValue}"); #endif } var targetLogicConditionalTriggersList = _triggersResolver.ResolveLogicConditionalTriggersList(Name, _localCodeExecutionContext, ResolverOptions.GetDefaultOptions()); #if DEBUG //Log($"targetLogicConditionalTriggersList = {targetLogicConditionalTriggersList.WriteListToString()}"); #endif if (targetLogicConditionalTriggersList.Any()) { foreach (var targetTrigger in targetLogicConditionalTriggersList) { #if DEBUG //Log($"targetTrigger = {targetTrigger}"); #endif var triggerInstanceInfo = new LogicConditionalTriggerInstanceInfo(targetTrigger.ResultItem, this, _context, _storage); _logicConditionalTriggersList.Add(triggerInstanceInfo); } } _instanceState = InstanceState.Initialized; }
private CodeFrame ConvertExecutableToCodeFrame(IExecutable function, KindOfFunctionParameters kindOfParameters, Dictionary <StrongIdentifierValue, Value> namedParameters, List <Value> positionedParameters) { #if DEBUG //Log($"kindOfParameters = {kindOfParameters}"); //Log($"namedParameters = {namedParameters.WriteDict_1_ToString()}"); //Log($"positionedParameters = {positionedParameters.WriteListToString()}"); #endif var currentLocalContext = _currentCodeFrame.LocalContext; var storagesList = currentLocalContext.Storage.GetStorages(); #if DEBUG //Log($"storagesList.Count = {storagesList.Count}"); //foreach(var tmpStorage in storagesList) //{ // Log($"tmpStorage = {tmpStorage}"); //} #endif var localCodeExecutionContext = new LocalCodeExecutionContext(); var localStorageSettings = RealStorageSettingsHelper.Create(_context, storagesList.ToList()); var newStorage = new LocalStorage(localStorageSettings); localCodeExecutionContext.Storage = newStorage; switch (kindOfParameters) { case KindOfFunctionParameters.NoParameters: if (function.Arguments.Any()) { throw new NotImplementedException(); } break; case KindOfFunctionParameters.PositionedParameters: FillUpPositionedParameters(localCodeExecutionContext, function, positionedParameters); break; case KindOfFunctionParameters.NamedParameters: FillUpNamedParameters(localCodeExecutionContext, function, namedParameters); break; default: throw new ArgumentOutOfRangeException(nameof(kindOfParameters), kindOfParameters, null); } localCodeExecutionContext.Holder = currentLocalContext.Holder; var codeFrame = new CodeFrame(); codeFrame.CompiledFunctionBody = function.CompiledFunctionBody; codeFrame.LocalContext = localCodeExecutionContext; var processInfo = new ProcessInfo(); codeFrame.ProcessInfo = processInfo; processInfo.CodeFrame = codeFrame; codeFrame.Metadata = function.CodeEntity; #if DEBUG //Log($"codeFrame = {codeFrame}"); #endif return(codeFrame); }
private void DoSearch() { var searchOptions = new LogicalSearchOptions(); searchOptions.QueryExpression = _condition; searchOptions.LocalCodeExecutionContext = _localCodeExecutionContext; #if DEBUG //Log($"searchOptions = {searchOptions}"); #endif var searchResult = _searcher.Run(searchOptions); #if DEBUG //Log($"searchResult = {searchResult}"); //Log($"result = {DebugHelperForLogicalSearchResult.ToString(searchResult)}"); //foreach(var usedKey in searchResult.UsedKeysList) //{ // Log($"usedKey = {usedKey}"); // Log($"_context.Dictionary.GetName(usedKey) = {_context.Dictionary.GetName(usedKey)}"); //} #endif _usedKeysList = searchResult.UsedKeysList; #if DEBUG //Log($"_isOn = {_isOn}"); #endif if (_isOn) { if (!searchResult.IsSuccess) { _isOn = false; } } else { if (searchResult.IsSuccess) { _isOn = true; #if DEBUG //Log($"searchResult = {searchResult}"); //Log($"result = {DebugHelperForLogicalSearchResult.ToString(searchResult)}"); #endif var localCodeExecutionContext = new LocalCodeExecutionContext(); var localStorageSettings = RealStorageSettingsHelper.Create(_context, _storage); var storage = new LocalStorage(localStorageSettings); localCodeExecutionContext.Storage = storage; localCodeExecutionContext.Holder = _parent.Name; var varStorage = storage.VarStorage; var bindingVariables = _trigger.BindingVariables; if (bindingVariables.Any()) { var foundResultItem = searchResult.Items.FirstOrDefault(); if (foundResultItem == null) { throw new NotImplementedException(); } var resultVarsList = foundResultItem.ResultOfVarOfQueryToRelationList; #if DEBUG //Log($"resultVarsList.Count = {resultVarsList.Count}"); #endif if (bindingVariables.Count != resultVarsList.Count) { throw new NotImplementedException(); } foreach (var resultVar in resultVarsList) { #if DEBUG //Log($"resultVar = {resultVar}"); #endif Value value = null; var foundExpression = resultVar.FoundExpression; var kindOfFoundExpression = foundExpression.Kind; switch (kindOfFoundExpression) { case KindOfLogicalQueryNode.Entity: value = foundExpression.Name; break; case KindOfLogicalQueryNode.Value: value = foundExpression.Value; break; default: throw new ArgumentOutOfRangeException(nameof(kindOfFoundExpression), kindOfFoundExpression, null); } #if DEBUG //Log($"value = {value}"); #endif var destVar = bindingVariables.GetDest(resultVar.NameOfVar); #if DEBUG //Log($"destVar = {destVar}"); #endif varStorage.SetValue(destVar, value); } } var processInitialInfo = new ProcessInitialInfo(); processInitialInfo.CompiledFunctionBody = _trigger.CompiledFunctionBody; processInitialInfo.LocalContext = localCodeExecutionContext; processInitialInfo.Metadata = _trigger.CodeEntity; var task = _context.CodeExecutor.ExecuteAsync(processInitialInfo); } } #if DEBUG //Log($"_isOn (after) = {_isOn}"); #endif }