public override EPStatementStartResult StartInternal(EPServicesContext services, StatementContext statementContext, bool isNewStatement, bool isRecoveringStatement, bool isRecoveringResilient) { if (StatementSpec.OptionalContextName != null) { throw new ExprValidationException("A create-context statement cannot itself be associated to a context, please declare a nested context instead"); } var context = StatementSpec.ContextDesc; var agentInstanceContext = GetDefaultAgentInstanceContext(statementContext); // compile filter specs, if any ISet <String> eventTypesReferenced = new HashSet <String>(); ValidateContextDetail(services, statementContext, eventTypesReferenced, context.ContextDetail); services.StatementEventTypeRefService.AddReferences(statementContext.StatementName, CollectionUtil.ToArray(eventTypesReferenced)); // define output event type var typeName = "EventType_Context_" + context.ContextName; var statementResultEventType = services.EventAdapterService.CreateAnonymousMapType(typeName, Collections.GetEmptyMap <String, Object>()); // add context - does not activate that context services.ContextManagementService.AddContextSpec(services, agentInstanceContext, context, isRecoveringResilient, statementResultEventType); var stopMethod = new EPStatementStopMethod(() => { }); var destroyMethod = new EPStatementDestroyMethod( () => services.ContextManagementService.DestroyedContext(context.ContextName)); return(new EPStatementStartResult(new ZeroDepthStreamNoIterate(statementResultEventType), stopMethod, destroyMethod)); }
public override EPStatementStartResult StartInternal( EPServicesContext services, StatementContext statementContext, bool isNewStatement, bool isRecoveringStatement, bool isRecoveringResilient) { var expressionName = services.ExprDeclaredService.AddExpressionOrScript(StatementSpec.CreateExpressionDesc); // define output event type var typeName = "EventType_Expression_" + expressionName; var resultType = services.EventAdapterService.CreateAnonymousMapType( typeName, Collections.GetEmptyMap <String, Object>()); var stopMethod = new EPStatementStopMethod( () => { // no action }); var destroyMethod = new EPStatementDestroyMethod( () => services.ExprDeclaredService.DestroyedExpression(StatementSpec.CreateExpressionDesc)); return(new EPStatementStartResult(new ZeroDepthStreamNoIterate(resultType), stopMethod, destroyMethod)); }
/// <summary>Ctor. </summary> /// <param name="viewable">last view to attach listeners to</param> /// <param name="stopMethod">method to stop</param> /// <param name="destroyMethod">method to call when destroying</param> public EPStatementStartResult(Viewable viewable, EPStatementStopMethod stopMethod, EPStatementDestroyMethod destroyMethod) { Viewable = viewable; StopMethod = stopMethod; DestroyMethod = destroyMethod; }
public override EPStatementStartResult StartInternal(EPServicesContext services, StatementContext statementContext, bool isNewStatement, bool isRecoveringStatement, bool isRecoveringResilient) { var createGraphDesc = StatementSpec.CreateGraphDesc; var agentInstanceContext = GetDefaultAgentInstanceContext(statementContext); // define output event type var typeName = "EventType_Graph_" + createGraphDesc.GraphName; var resultType = services.EventAdapterService.CreateAnonymousMapType(typeName, Collections.GetEmptyMap <String, Object>()); services.DataFlowService.AddStartGraph(createGraphDesc, statementContext, services, agentInstanceContext, isNewStatement); var stopMethod = new EPStatementStopMethod(() => services.DataFlowService.StopGraph(createGraphDesc.GraphName)); var destroyMethod = new EPStatementDestroyMethod(() => services.DataFlowService.RemoveGraph(createGraphDesc.GraphName)); return(new EPStatementStartResult(new ZeroDepthStreamNoIterate(resultType), stopMethod, destroyMethod)); }
public override EPStatementStartResult StartInternal(EPServicesContext services, StatementContext statementContext, bool isNewStatement, bool isRecoveringStatement, bool isRecoveringResilient) { CreateTableDesc createDesc = StatementSpec.CreateTableDesc; // determine whether already declared VariableServiceUtil.CheckAlreadyDeclaredVariable(createDesc.TableName, services.VariableService); if (isNewStatement) { VariableServiceUtil.CheckAlreadyDeclaredTable(createDesc.TableName, services.TableService); } if (services.EventAdapterService.GetEventTypeByName(createDesc.TableName) != null) { throw new ExprValidationException("An event type or schema by name '" + createDesc.TableName + "' already exists"); } EPStatementDestroyMethod destroyMethod = new EPStatementDestroyMethod(() => { try { services.StatementVariableRefService.RemoveReferencesStatement(statementContext.StatementName); } catch (Exception ex) { log.Error("Error removing table '" + createDesc.TableName + "': " + ex.Message); } }); EPStatementStopMethod stopMethod = new EPStatementStopMethod(() => {}); // Determine event type names var internalTypeName = "table_" + createDesc.TableName + "__internal"; var publicTypeName = "table_" + createDesc.TableName + "__public"; TableMetadata metadata; try { // determine key types var keyTypes = GetKeyTypes(createDesc.Columns, services.EngineImportService); // check column naming, interpret annotations var columnDescs = ValidateExpressions(createDesc.Columns, services, statementContext); // analyze and plan the state holders var plan = AnalyzePlanAggregations(createDesc.TableName, statementContext, columnDescs, services, internalTypeName, publicTypeName); var tableStateRowFactory = plan.StateRowFactory; // register new table var queryPlanLogging = services.ConfigSnapshot.EngineDefaults.LoggingConfig.IsEnableQueryPlan; metadata = services.TableService.AddTable(createDesc.TableName, statementContext.Expression, statementContext.StatementName, keyTypes, plan.TableColumns, tableStateRowFactory, plan.NumberMethodAggregations, statementContext, plan.InternalEventType, plan.PublicEventType, plan.EventToPublic, queryPlanLogging); } catch (ExprValidationException) { services.EventAdapterService.RemoveType(internalTypeName); services.EventAdapterService.RemoveType(publicTypeName); throw; } // allocate context factory var contextFactory = new StatementAgentInstanceFactoryCreateTable(metadata); Viewable outputView; if (StatementSpec.OptionalContextName != null) { var mergeView = new ContextMergeView(metadata.PublicEventType); outputView = mergeView; var statement = new ContextManagedStatementCreateAggregationVariableDesc(StatementSpec, statementContext, mergeView, contextFactory); services.ContextManagementService.AddStatement(StatementSpec.OptionalContextName, statement, isRecoveringResilient); } else { var defaultAgentInstanceContext = GetDefaultAgentInstanceContext(statementContext); var result = contextFactory.NewContext(defaultAgentInstanceContext, false); if (statementContext.StatementExtensionServicesContext != null && statementContext.StatementExtensionServicesContext.StmtResources != null) { StatementResourceHolder holder = statementContext.StatementExtensionServicesContext.ExtractStatementResourceHolder(result); statementContext.StatementExtensionServicesContext.StmtResources.Unpartitioned = holder; } outputView = result.FinalView; } services.StatementVariableRefService.AddReferences(statementContext.StatementName, createDesc.TableName); return(new EPStatementStartResult(outputView, stopMethod, destroyMethod)); }