Example #1
0
 public TableOnUpdateViewFactory(StatementResultService statementResultService, TableMetadata tableMetadata, EventBeanUpdateHelper updateHelper, TableUpdateStrategy tableUpdateStrategy)
 {
     StatementResultService = statementResultService;
     TableMetadata          = tableMetadata;
     UpdateHelper           = updateHelper;
     TableUpdateStrategy    = tableUpdateStrategy;
 }
Example #2
0
 public static TableOnViewFactory Make(
     TableMetadata tableMetadata,
     OnTriggerDesc onTriggerDesc,
     EventType filterEventType,
     string filterStreamName,
     StatementContext statementContext,
     StatementMetricHandle metricsHandle,
     bool isDistinct,
     InternalEventRouter internalEventRouter)
 {
     if (onTriggerDesc.OnTriggerType == OnTriggerType.ON_DELETE)
     {
         return(new TableOnDeleteViewFactory(statementContext.StatementResultService, tableMetadata));
     }
     else if (onTriggerDesc.OnTriggerType == OnTriggerType.ON_SELECT)
     {
         EventBeanReader eventBeanReader = null;
         if (isDistinct)
         {
             eventBeanReader = tableMetadata.InternalEventType.GetReader();
         }
         var windowDesc = (OnTriggerWindowDesc)onTriggerDesc;
         return(new TableOnSelectViewFactory(
                    tableMetadata, internalEventRouter, statementContext.EpStatementHandle,
                    eventBeanReader, isDistinct, statementContext.StatementResultService,
                    statementContext.InternalEventEngineRouteDest, windowDesc.IsDeleteAndSelect));
     }
     else if (onTriggerDesc.OnTriggerType == OnTriggerType.ON_UPDATE)
     {
         var updateDesc   = (OnTriggerWindowUpdateDesc)onTriggerDesc;
         var updateHelper = EventBeanUpdateHelperFactory.Make(
             tableMetadata.TableName, (EventTypeSPI)tableMetadata.InternalEventType, updateDesc.Assignments,
             updateDesc.OptionalAsName, filterEventType, false);
         TableUpdateStrategy updateStrategy = statementContext.TableService.GetTableUpdateStrategy(
             tableMetadata, updateHelper, false);
         var onUpdateViewFactory =
             new TableOnUpdateViewFactory(
                 statementContext.StatementResultService, tableMetadata, updateHelper, updateStrategy);
         statementContext.TableService.AddTableUpdateStrategyReceiver(
             tableMetadata, statementContext.StatementName, onUpdateViewFactory, updateHelper, false);
         return(onUpdateViewFactory);
     }
     else if (onTriggerDesc.OnTriggerType == OnTriggerType.ON_MERGE)
     {
         var onMergeTriggerDesc = (OnTriggerMergeDesc)onTriggerDesc;
         var onMergeHelper      = new TableOnMergeHelper(
             statementContext, onMergeTriggerDesc, filterEventType, filterStreamName, internalEventRouter,
             tableMetadata);
         return(new TableOnMergeViewFactory(
                    tableMetadata, onMergeHelper, statementContext.StatementResultService, metricsHandle,
                    statementContext.MetricReportingService));
     }
     else
     {
         throw new IllegalStateException("Unknown trigger type " + onTriggerDesc.OnTriggerType);
     }
 }
        public override EPPreparedExecuteIUDSingleStreamExec GetExecutor(FilterSpecCompiled filter, string aliasName)
        {
            var services         = base.Services;
            var processor        = base.Processor;
            var statementContext = base.StatementContext;
            var statementSpec    = base.StatementSpec;
            var updateSpec       = (FireAndForgetSpecUpdate)statementSpec.FireAndForgetSpec;

            var assignmentTypeService = new StreamTypeServiceImpl(
                new EventType[] { processor.EventTypeResultSetProcessor, null, processor.EventTypeResultSetProcessor },
                new string[] { aliasName, "", EPStatementStartMethodOnTrigger.INITIAL_VALUE_STREAM_NAME },
                new bool[] { true, true, true }, services.EngineURI, true);

            assignmentTypeService.IsStreamZeroUnambigous = true;
            var evaluatorContextStmt = new ExprEvaluatorContextStatement(statementContext, true);
            var validationContext    = new ExprValidationContext(
                assignmentTypeService, statementContext.EngineImportService,
                statementContext.StatementExtensionServicesContext, null, statementContext.SchedulingService,
                statementContext.VariableService, statementContext.TableService, evaluatorContextStmt,
                statementContext.EventAdapterService, statementContext.StatementName, statementContext.StatementId,
                statementContext.Annotations, statementContext.ContextDescriptor, statementContext.ScriptingService,
                false, false, true, false, null, false);

            // validate update expressions
            try {
                foreach (OnTriggerSetAssignment assignment in updateSpec.Assignments)
                {
                    ExprNode validated = ExprNodeUtility.GetValidatedSubtree(ExprNodeOrigin.UPDATEASSIGN, assignment.Expression, validationContext);
                    assignment.Expression = validated;
                    EPStatementStartMethodHelperValidate.ValidateNoAggregations(validated, "Aggregation functions may not be used within an update-clause");
                }
            } catch (ExprValidationException e) {
                throw new EPException(e.Message, e);
            }

            // make updater
            EventBeanUpdateHelper updateHelper;
            TableUpdateStrategy   tableUpdateStrategy = null;

            try {
                bool copyOnWrite = !(processor is FireAndForgetProcessorTable);
                updateHelper = EventBeanUpdateHelperFactory.Make(processor.NamedWindowOrTableName,
                                                                 (EventTypeSPI)processor.EventTypeResultSetProcessor, updateSpec.Assignments, aliasName, null, copyOnWrite, statementContext.StatementName, services.EngineURI, services.EventAdapterService);

                if (processor is FireAndForgetProcessorTable)
                {
                    FireAndForgetProcessorTable tableProcessor = (FireAndForgetProcessorTable)processor;
                    tableUpdateStrategy = services.TableService.GetTableUpdateStrategy(tableProcessor.TableMetadata, updateHelper, false);
                    copyOnWrite         = false;
                }
            } catch (ExprValidationException e) {
                throw new EPException(e.Message, e);
            }

            return(new EPPreparedExecuteIUDSingleStreamExecUpdate(filter, statementSpec.FilterRootNode, statementSpec.Annotations, updateHelper, tableUpdateStrategy, statementSpec.TableNodes, services));
        }
Example #4
0
 public EPPreparedExecuteIUDSingleStreamExecUpdate(QueryGraph queryGraph, ExprNode optionalWhereClause, Attribute[] annotations, EventBeanUpdateHelper updateHelper, TableUpdateStrategy tableUpdateStrategy, ExprTableAccessNode[] optionalTableNodes, EPServicesContext services)
 {
     QueryGraph          = queryGraph;
     OptionalWhereClause = optionalWhereClause;
     Annotations         = annotations;
     UpdateHelper        = updateHelper;
     TableUpdateStrategy = tableUpdateStrategy;
     OptionalTableNodes  = optionalTableNodes;
     Services            = services;
 }
Example #5
0
 public void InitTableUpdateStrategy(Table table)
 {
     try {
         TableUpdateStrategy =
             TableUpdateStrategyFactory.ValidateGetTableUpdateStrategy(table.MetaData, UpdateHelperTable, false);
     }
     catch (ExprValidationException ex) {
         throw new EPException(ex.Message, ex);
     }
 }
Example #6
0
 public void InitTableUpdateStrategy(Table table)
 {
     try {
         tableUpdateStrategy = TableUpdateStrategyFactory.ValidateGetTableUpdateStrategy(
             table.MetaData,
             tableUpdate,
             true);
     }
     catch (ExprValidationException e) {
         throw new EPException(e.Message, e);
     }
 }
Example #7
0
        public override void HandleMatching(EventBean[] triggerEvents, EventBean[] matchingEvents)
        {
            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().QInfraOnAction(OnTriggerType.ON_UPDATE, triggerEvents, matchingEvents);
            }

            EventBean[] eventsPerStream = new EventBean[3];

            bool postUpdates = parent.StatementResultService.IsMakeNatural || parent.StatementResultService.IsMakeSynthetic;

            EventBean[] postedOld = null;
            if (postUpdates)
            {
                postedOld = TableOnViewUtil.ToPublic(matchingEvents, parent.TableMetadata, triggerEvents, false, base.ExprEvaluatorContext);
            }

            TableUpdateStrategy tableUpdateStrategy = parent.TableUpdateStrategy;

            foreach (EventBean triggerEvent in triggerEvents)
            {
                eventsPerStream[1] = triggerEvent;
                tableUpdateStrategy.UpdateTable(matchingEvents, TableStateInstance, eventsPerStream, exprEvaluatorContext);
            }

            // The on-delete listeners receive the events deleted, but only if there is interest
            if (postUpdates)
            {
                EventBean[] postedNew = TableOnViewUtil.ToPublic(matchingEvents, parent.TableMetadata, triggerEvents, true, base.ExprEvaluatorContext);
                UpdateChildren(postedNew, postedOld);
            }

            if (InstrumentationHelper.ENABLED)
            {
                InstrumentationHelper.Get().AInfraOnAction();
            }
        }
Example #8
0
 public void Update(TableUpdateStrategy updateStrategy)
 {
     TableUpdateStrategy = updateStrategy;
 }
Example #9
0
 public TableOnMergeActionUpd(ExprEvaluator optionalFilter, TableUpdateStrategy tableUpdateStrategy)
     : base(optionalFilter)
 {
     _tableUpdateStrategy = tableUpdateStrategy;
 }