public static FilterValueSetParam[][] GetAddendumFilters( FilterSpecCompiled filterSpecCompiled, int hashCode, ContextDetailHash hashSpec, ContextControllerStatementDesc statementDesc) { // determine whether create-named-window var isCreateWindow = statementDesc != null && statementDesc.Statement.StatementSpec.CreateWindowDesc != null; ContextDetailHashItem foundPartition = null; if (!isCreateWindow) { foundPartition = FindHashItemSpec(hashSpec, filterSpecCompiled); } else { string declaredAsName = statementDesc.Statement.StatementSpec.CreateWindowDesc.AsEventTypeName; foreach (var partitionItem in hashSpec.Items) { if (partitionItem.FilterSpecCompiled.FilterForEventType.Name.Equals(declaredAsName)) { foundPartition = partitionItem; break; } } } if (foundPartition == null) { return(null); } var filter = new FilterValueSetParamImpl(foundPartition.Lookupable, FilterOperator.EQUAL, hashCode); var addendum = new FilterValueSetParam[1][]; addendum[0] = new FilterValueSetParam[] { filter }; var partitionFilters = foundPartition.ParametersCompiled; if (partitionFilters != null) { addendum = ContextControllerAddendumUtil.AddAddendum(partitionFilters, filter); } return(addendum); }
public static ContextDetailHashItem FindHashItemSpec(ContextDetailHash hashSpec, FilterSpecCompiled filterSpec) { ContextDetailHashItem foundPartition = null; foreach (var partitionItem in hashSpec.Items) { var typeOrSubtype = EventTypeUtility.IsTypeOrSubTypeOf(filterSpec.FilterForEventType, partitionItem.FilterSpecCompiled.FilterForEventType); if (typeOrSubtype) { foundPartition = partitionItem; } } return(foundPartition); }
public ContextControllerHashedFilterCallback( EPServicesContext servicesContext, AgentInstanceContext agentInstanceContextCreateContext, ContextDetailHashItem hashItem, ContextControllerHashedInstanceCallback callback, ContextInternalFilterAddendum filterAddendum) { _agentInstanceContextCreateContext = agentInstanceContextCreateContext; _callback = callback; _getter = hashItem.Lookupable.Getter; _filterHandle = new EPStatementHandleCallback(agentInstanceContextCreateContext.EpStatementAgentInstanceHandle, this); FilterValueSetParam[][] addendum = filterAddendum != null?filterAddendum.GetFilterAddendum(hashItem.FilterSpecCompiled) : null; FilterValueSet filterValueSet = hashItem.FilterSpecCompiled.GetValueSet(null, null, addendum); _filterServiceEntry = servicesContext.FilterService.Add(filterValueSet, _filterHandle); long filtersVersion = servicesContext.FilterService.FiltersVersion; agentInstanceContextCreateContext.EpStatementAgentInstanceHandle.StatementFilterVersion.StmtFilterVersion = filtersVersion; }
// Compare filters in statement with filters in segmented context, addendum filter compilation /// <summary> /// Gets the addendum filters. /// </summary> /// <param name="addendums">The addendums.</param> /// <param name="agentInstanceId">The agent instance identifier.</param> /// <param name="filtersSpecs">The filters specs.</param> /// <param name="hashSpec">The hash spec.</param> /// <param name="statementDesc">The statement desc.</param> private static void GetAddendumFilters( IDictionary <FilterSpecCompiled, FilterValueSetParam[][]> addendums, int agentInstanceId, IList <FilterSpecCompiled> filtersSpecs, ContextDetailHash hashSpec, ContextControllerStatementDesc statementDesc) { // determine whether create-named-window var isCreateWindow = statementDesc != null && statementDesc.Statement.StatementSpec.CreateWindowDesc != null; if (!isCreateWindow) { foreach (var filtersSpec in filtersSpecs) { var foundPartition = FindHashItemSpec(hashSpec, filtersSpec); if (foundPartition == null) { continue; } FilterValueSetParam filter = new FilterValueSetParamImpl(foundPartition.Lookupable, FilterOperator.EQUAL, agentInstanceId); var addendum = new FilterValueSetParam[1][]; addendum[0] = new FilterValueSetParam[] { filter }; var partitionFilters = foundPartition.ParametersCompiled; if (partitionFilters != null) { addendum = ContextControllerAddendumUtil.AddAddendum(partitionFilters, filter); } FilterValueSetParam[][] existing = addendums.Get(filtersSpec); if (existing != null) { addendum = ContextControllerAddendumUtil.MultiplyAddendum(existing, addendum); } addendums[filtersSpec] = addendum; } } // handle segmented context for create-window else { var declaredAsName = statementDesc.Statement.StatementSpec.CreateWindowDesc.AsEventTypeName; if (declaredAsName != null) { foreach (var filterSpec in filtersSpecs) { ContextDetailHashItem foundPartition = null; foreach (var partitionItem in hashSpec.Items) { if (partitionItem.FilterSpecCompiled.FilterForEventType.Name.Equals(declaredAsName)) { foundPartition = partitionItem; break; } } if (foundPartition == null) { continue; } FilterValueSetParam filter = new FilterValueSetParamImpl(foundPartition.Lookupable, FilterOperator.EQUAL, agentInstanceId); var addendum = new FilterValueSetParam[1][]; addendum[0] = new FilterValueSetParam[] { filter }; var existing = addendums.Get(filterSpec); if (existing != null) { addendum = ContextControllerAddendumUtil.MultiplyAddendum(existing, addendum); } addendums[filterSpec] = addendum; } } } }