コード例 #1
0
 public PlugInAggregationMultiFunctionHandler ValidateGetHandler(
     PlugInAggregationMultiFunctionValidationContext validationContext)
 {
     Assert.IsNotNull(validationContext.NamedParameters.Get("filter").First());
     var valueEval = validationContext.ParameterExpressions[0].ExprEvaluator;
     ExprEvaluator filterEval = validationContext.NamedParameters.Get("filter")[0].ExprEvaluator;
     return new MyAccessAggHandler(valueEval, filterEval);
 }
コード例 #2
0
        private void TryAssertion(EPServiceProvider epService, EPStatement stmt)
        {
            var listener = new SupportUpdateListener();

            stmt.Events += listener.Update;
            string[] fields = "c0,c1".Split(',');
            foreach (string prop in fields)
            {
                Assert.AreEqual(typeof(SupportBean), stmt.EventType.GetPropertyDescriptor(prop).PropertyType);
                Assert.AreEqual(true, stmt.EventType.GetPropertyDescriptor(prop).IsFragment);
                Assert.AreEqual("SupportBean", stmt.EventType.GetFragmentType(prop).FragmentType.Name);
            }

            // there should be just 1 factory instance for all of the registered functions for this statement
            Assert.AreEqual(1, SupportAggMFFactory.Factories.Count);
            Assert.AreEqual(2, SupportAggMFFactory.FunctionDeclContexts.Count);
            for (int i = 0; i < 2; i++)
            {
                PlugInAggregationMultiFunctionDeclarationContext contextDecl = SupportAggMFFactory.FunctionDeclContexts[i];
                Assert.AreEqual(i == 0 ? "se1" : "se2", contextDecl.FunctionName);
                Assert.AreEqual(EPServiceProviderConstants.DEFAULT_ENGINE_URI, contextDecl.EngineURI);
                Assert.IsFalse(contextDecl.IsDistinct);
                Assert.IsNotNull(contextDecl.Configuration);

                PlugInAggregationMultiFunctionValidationContext contextValid = SupportAggMFFactory.FunctionHandlerValidationContexts[i];
                Assert.AreEqual(i == 0 ? "se1" : "se2", contextValid.FunctionName);
                Assert.AreEqual(EPServiceProviderConstants.DEFAULT_ENGINE_URI, contextValid.EngineURI);
                Assert.IsNotNull(contextValid.ParameterExpressions);
                Assert.IsNotNull(contextValid.AllParameterExpressions);
                Assert.IsNotNull(contextValid.Config);
                Assert.IsNotNull(contextValid.EventTypes);
                Assert.IsNotNull(contextValid.ValidationContext);
                Assert.IsNotNull(contextValid.StatementName);
            }
            Assert.AreEqual(2, SupportAggMFHandler.ProviderKeys.Count);
            Assert.AreEqual(2, SupportAggMFHandler.Accessors.Count);
            Assert.AreEqual(1, SupportAggMFHandler.ProviderFactories.Count);
            Assert.AreEqual(0, SupportAggMFFactorySingleEvent.StateContexts.Count);

            // group 1
            var eventOne = new SupportBean("E1", 1);

            epService.EPRuntime.SendEvent(eventOne);
            EPAssertionUtil.AssertProps(listener.AssertOneGetNewAndReset(), fields, new object[] { eventOne, eventOne });
            Assert.AreEqual(1, SupportAggMFFactorySingleEvent.StateContexts.Count);
            PlugInAggregationMultiFunctionStateContext context = SupportAggMFFactorySingleEvent.StateContexts[0];

            Assert.AreEqual("E1", context.GroupKey);

            // group 2
            var eventTwo = new SupportBean("E2", 2);

            epService.EPRuntime.SendEvent(eventTwo);
            EPAssertionUtil.AssertProps(listener.AssertOneGetNewAndReset(), fields, new object[] { eventTwo, eventTwo });
            Assert.AreEqual(2, SupportAggMFFactorySingleEvent.StateContexts.Count);

            stmt.Dispose();
        }
コード例 #3
0
 public PlugInAggregationMultiFunctionHandler ValidateGetHandler(PlugInAggregationMultiFunctionValidationContext validationContext)
 {
     if (validationContext.FunctionName.Equals("referenceCountedMap"))
     {
         return(new ReferenceCountedMapFunctionHandler(SharedStateKey));
     }
     if (validationContext.FunctionName.Equals("referenceCountLookup"))
     {
         var eval = validationContext.ParameterExpressions[0].ExprEvaluator;
         return(new ReferenceCountLookupFunctionHandler(SharedStateKey, eval));
     }
     throw new ArgumentException("Unexpected function name '" + validationContext.FunctionName);
 }
コード例 #4
0
            public PlugInAggregationMultiFunctionHandler ValidateGetHandler(PlugInAggregationMultiFunctionValidationContext validationContext)
            {
                switch (validationContext.FunctionName)
                {
                case "referenceCountedMap":
                    return(new ReferenceCountedMapFunctionHandler(SHARED_STATE_KEY));

                case "referenceCountLookup":
                    ExprEvaluator eval = validationContext.ParameterExpressions[0].ExprEvaluator;
                    return(new ReferenceCountLookupFunctionHandler(SHARED_STATE_KEY, eval));
                }

                throw new ArgumentException("Unexpected function name '" + validationContext.FunctionName);
            }
コード例 #5
0
        private AggregationMethodFactory ValidateAggregationInternal(ExprValidationContext validationContext, TableMetadataColumnAggregation optionalTableColumn)
        {
            var ctx = new PlugInAggregationMultiFunctionValidationContext(
                _functionName,
                validationContext.StreamTypeService.EventTypes, PositionalParams,
                validationContext.StreamTypeService.EngineURIQualifier,
                validationContext.StatementName,
                validationContext, _config, optionalTableColumn, ChildNodes);

            var handlerPlugin = _pluginAggregationMultiFunctionFactory.ValidateGetHandler(ctx);

            _factory = new ExprPlugInAggMultiFunctionNodeFactory(this, handlerPlugin, validationContext.EngineImportService.AggregationFactoryFactory, validationContext.StatementExtensionSvcContext);
            return(_factory);
        }
コード例 #6
0
ファイル: SupportAggMFHandler.cs プロジェクト: valmac/nesper
 public SupportAggMFHandler(PlugInAggregationMultiFunctionValidationContext validationContext)
 {
     _validationContext = validationContext;
 }
コード例 #7
0
 public PlugInAggregationMultiFunctionHandler ValidateGetHandler(PlugInAggregationMultiFunctionValidationContext validationContext)
 {
     functionHandlerValidationContexts.Add(validationContext);
     return(new SupportAggMFHandler(validationContext));
 }
コード例 #8
0
ファイル: SupportAggMFFunc.cs プロジェクト: qinfengzhu/nesper
 public static PlugInAggregationMultiFunctionStateFactory GetStateFactory(this SupportAggMFFunc value, PlugInAggregationMultiFunctionValidationContext validationContext)
 {
     if (value == SupportAggMFFunc.SCALAR)
     {
         if (validationContext.ParameterExpressions.Length != 1)
         {
             throw new ArgumentException("Function '" + validationContext.FunctionName + "' requires 1 parameter");
         }
         var evaluator = validationContext.ParameterExpressions[0].ExprEvaluator;
         return(new SupportAggMFStatePlainScalarFactory(evaluator));
     }
     if (value == SupportAggMFFunc.ARR_SCALAR || value == SupportAggMFFunc.COLL_SCALAR)
     {
         if (validationContext.ParameterExpressions.Length != 1)
         {
             throw new ArgumentException("Function '" + validationContext.FunctionName + "' requires 1 parameter");
         }
         var evaluator = validationContext.ParameterExpressions[0].ExprEvaluator;
         return(new SupportAggMFStateArrayCollScalarFactory(evaluator));
     }
     if (value == SupportAggMFFunc.ENUM_EVENT)
     {
         return(new ProxyPlugInAggregationMultiFunctionStateFactory
         {
             ProcMakeAggregationState = stateContext => new SupportAggMFStateEnumerableEvents()
         });
     }
     throw new ArgumentException("Return type not supported for " + value);
 }