/** * Ctor. * * @param revisionEventTypeName name * @param spec specification * @param statementStopService for stop handling * @param eventAdapterService for nested property handling */ public VAERevisionProcessorDeclared( String revisionEventTypeName, RevisionSpec spec, StatementStopService statementStopService, EventAdapterService eventAdapterService, EventTypeIdGenerator eventTypeIdGenerator) { super(spec, revisionEventTypeName, eventAdapterService); // on statement stop, remove versions statementStopService.addSubscriber( new StatementStopCallback() { public void statementStopped() { statePerKey.clear(); } }); this.statePerKey = new HashMap<MultiKeyUntyped, RevisionStateDeclared>(); this.baseEventType = spec.getBaseEventType(); this.fullKeyGetters = PropertyUtility.getGetters(baseEventType, spec.getKeyPropertyNames()); // sort non-key properties, removing keys groups = PropertyUtility.analyzeGroups( spec.getChangesetPropertyNames(), spec.getDeltaTypes(), spec.getDeltaNames()); Map<String, RevisionPropertyTypeDesc> propertyDesc = createPropertyDescriptors(spec, groups); typeDescriptors = PropertyUtility.getPerType( groups, spec.getChangesetPropertyNames(), spec.getKeyPropertyNames()); EventTypeMetadata metadata = EventTypeMetadata.createValueAdd( revisionEventTypeName, EventTypeMetadata.TypeClass.REVISION); revisionEventType = new RevisionEventType( metadata, eventTypeIdGenerator.getTypeId(revisionEventTypeName), propertyDesc, eventAdapterService); }
private TableOnMergeActionIns setupInsert( TableMetadata tableMetadata, InternalEventRouter internalEventRouter, int selectClauseNumber, OnTriggerMergeActionInsert desc, EventType triggeringEventType, String triggeringStreamName, StatementContext statementContext) throws ExprValidationException { // Compile insert-into info String streamName = desc.getOptionalStreamName() != null ? desc.getOptionalStreamName() : tableMetadata.getTableName(); InsertIntoDesc insertIntoDesc = InsertIntoDesc.fromColumns(streamName, desc.getColumns()); EventType insertIntoTargetType = streamName.equals(tableMetadata.getTableName()) ? tableMetadata.getInternalEventType() : null; // rewrite any wildcards to use "stream.wildcard" if (triggeringStreamName == null) { triggeringStreamName = UuidGenerator.generate(); } List<SelectClauseElementCompiled> selectNoWildcard = NamedWindowOnMergeHelper.compileSelectNoWildcard( triggeringStreamName, desc.getSelectClauseCompiled()); // 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 EventType dummyTypeNoProperties = new MapEventType( EventTypeMetadata.createAnonymous("merge_named_window_insert"), "merge_named_window_insert", 0, null, Collections.<String, Object>emptyMap(), null, null, null); EventType[] eventTypes = new EventType[] {dummyTypeNoProperties, triggeringEventType}; String[] streamNames = new String[] {UuidGenerator.generate(), triggeringStreamName}; StreamTypeService streamTypeService = new StreamTypeServiceImpl( eventTypes, streamNames, new boolean[1], statementContext.getEngineURI(), false); // Get select expr processor SelectExprEventTypeRegistry selectExprEventTypeRegistry = new SelectExprEventTypeRegistry( statementContext.getStatementName(), statementContext.getStatementEventTypeRef()); ExprEvaluatorContextStatement exprEvaluatorContext = new ExprEvaluatorContextStatement(statementContext, false); SelectExprProcessor insertHelper = SelectExprProcessorFactory.getProcessor( Collections.singleton(selectClauseNumber), selectNoWildcard.toArray(new SelectClauseElementCompiled[selectNoWildcard.size()]), false, insertIntoDesc, insertIntoTargetType, null, streamTypeService, statementContext.getEventAdapterService(), statementContext.getStatementResultService(), statementContext.getValueAddEventService(), selectExprEventTypeRegistry, statementContext.getMethodResolutionService(), exprEvaluatorContext, statementContext.getVariableService(), statementContext.getTableService(), statementContext.getTimeProvider(), statementContext.getEngineURI(), statementContext.getStatementId(), statementContext.getStatementName(), statementContext.getAnnotations(), statementContext.getContextDescriptor(), statementContext.getConfigSnapshot(), null, statementContext.getNamedWindowService(), null); ExprEvaluator filterEval = desc.getOptionalWhereClause() == null ? null : desc.getOptionalWhereClause().getExprEvaluator(); InternalEventRouter routerToUser = streamName.equals(tableMetadata.getTableName()) ? null : internalEventRouter; boolean audit = AuditEnum.INSERT.getAudit(statementContext.getAnnotations()) != null; return new TableOnMergeActionIns( filterEval, insertHelper, routerToUser, statementContext.getEpStatementHandle(), statementContext.getInternalEventEngineRouteDest(), audit, tableMetadata.getRowFactory()); }