private NamedWindowOnMergeActionIns SetupInsert(string namedWindowName, InternalEventRouter internalEventRouter, EventTypeSPI eventTypeNamedWindow, int selectClauseNumber, OnTriggerMergeActionInsert desc, EventType triggeringEventType, string triggeringStreamName, StatementContext statementContext) { // Compile insert-into INFO string streamName = desc.OptionalStreamName ?? eventTypeNamedWindow.Name; var insertIntoDesc = InsertIntoDesc.FromColumns(streamName, desc.Columns); // rewrite any wildcards to use "stream.wildcard" if (triggeringStreamName == null) { triggeringStreamName = UuidGenerator.Generate(); } var selectNoWildcard = CompileSelectNoWildcard(triggeringStreamName, desc.SelectClauseCompiled); // Set up event types for select-clause evaluation: The first type does not contain anything as its the named window row which is not present for insert var dummyTypeNoProperties = new MapEventType(EventTypeMetadata.CreateAnonymous("merge_named_window_insert", ApplicationType.MAP), "merge_named_window_insert", 0, null, Collections.EmptyDataMap, null, null, null); var eventTypes = new EventType[] { dummyTypeNoProperties, triggeringEventType }; var streamNames = new string[] { UuidGenerator.Generate(), triggeringStreamName }; var streamTypeService = new StreamTypeServiceImpl(eventTypes, streamNames, new bool[1], statementContext.EngineURI, false); // Get select expr processor var selectExprEventTypeRegistry = new SelectExprEventTypeRegistry(statementContext.StatementName, statementContext.StatementEventTypeRef); var exprEvaluatorContext = new ExprEvaluatorContextStatement(statementContext, false); var insertHelper = SelectExprProcessorFactory.GetProcessor( statementContext.Container, Collections.SingletonList(selectClauseNumber), selectNoWildcard.ToArray(), false, insertIntoDesc, null, null, streamTypeService, statementContext.EventAdapterService, statementContext.StatementResultService, statementContext.ValueAddEventService, selectExprEventTypeRegistry, statementContext.EngineImportService, exprEvaluatorContext, statementContext.VariableService, statementContext.ScriptingService, statementContext.TableService, statementContext.TimeProvider, statementContext.EngineURI, statementContext.StatementId, statementContext.StatementName, statementContext.Annotations, statementContext.ContextDescriptor, statementContext.ConfigSnapshot, null, statementContext.NamedWindowMgmtService, null, null, statementContext.StatementExtensionServicesContext); var filterEval = desc.OptionalWhereClause == null ? null : desc.OptionalWhereClause.ExprEvaluator; var routerToUser = streamName.Equals(namedWindowName) ? null : internalEventRouter; var audit = AuditEnum.INSERT.GetAudit(statementContext.Annotations) != null; string insertIntoTableName = null; if (statementContext.TableService.GetTableMetadata(insertIntoDesc.EventTypeName) != null) { insertIntoTableName = insertIntoDesc.EventTypeName; } return(new NamedWindowOnMergeActionIns(filterEval, insertHelper, routerToUser, insertIntoTableName, statementContext.TableService, statementContext.EpStatementHandle, statementContext.InternalEventEngineRouteDest, audit)); }
private InfraOnMergeActionInsForge SetupInsert( string infraName, EventType infraType, OnTriggerMergeActionInsert desc, EventType triggeringEventType, string triggeringStreamName, StatementRawInfo statementRawInfo, StatementCompileTimeServices services, bool isTable) { // Compile insert-into info var streamName = desc.OptionalStreamName != null ? desc.OptionalStreamName : infraName; InsertIntoDesc insertIntoDesc = InsertIntoDesc.FromColumns(streamName, desc.Columns); // rewrite any wildcards to use "stream.wildcard" if (triggeringStreamName == null) { triggeringStreamName = UuidGenerator.Generate(); } var selectNoWildcard = CompileSelectNoWildcard(triggeringStreamName, desc.SelectClauseCompiled); // Set up event types for select-clause evaluation: The first type does not contain anything as its the named-window or table row which is not present for insert var eventTypeMetadata = new EventTypeMetadata( "merge_infra_insert", statementRawInfo.ModuleName, EventTypeTypeClass.STREAM, EventTypeApplicationType.MAP, NameAccessModifier.TRANSIENT, EventTypeBusModifier.NONBUS, false, EventTypeIdPair.Unassigned()); EventType dummyTypeNoProperties = BaseNestableEventUtil.MakeMapTypeCompileTime( eventTypeMetadata, Collections.GetEmptyMap<string, object>(), null, null, null, null, services.BeanEventTypeFactoryPrivate, services.EventTypeCompileTimeResolver); var eventTypes = new EventType[] {dummyTypeNoProperties, triggeringEventType}; var streamNames = new string[] {UuidGenerator.Generate(), triggeringStreamName}; StreamTypeService streamTypeService = new StreamTypeServiceImpl( eventTypes, streamNames, new bool[eventTypes.Length], false, false); // Get select expr processor var selectClause = selectNoWildcard.ToArray(); var args = new SelectProcessorArgs( selectClause, null, false, null, null, streamTypeService, null, false, statementRawInfo.Annotations, statementRawInfo, services); if (isTable && streamName.Equals(infraName)) { args.OptionalInsertIntoEventType = infraType; } SelectExprProcessorForge insertHelperForge = SelectExprProcessorFactory.GetProcessor(args, insertIntoDesc, false).Forge; ExprNode filterEval = desc.OptionalWhereClause; var route = !streamName.Equals(infraName); bool audit = AuditEnum.INSERT.GetAudit(statementRawInfo.Annotations) != null; TableMetaData insertIntoTable = services.TableCompileTimeResolver.Resolve(insertIntoDesc.EventTypeName); return new InfraOnMergeActionInsForge(filterEval, insertHelperForge, insertIntoTable, audit, route); }