public EPRuntimeStatementSelectionSPI getStatementSelectionSvc() { if (statementSelection == null) { statementSelection = new EPRuntimeStatementSelectionSPI(this); } return statementSelection; }
public void traverseStatementsFilterExpr(BiConsumer<EPDeployment, EPStatement> consumer, ExprNode filterExpr) throws EPException { runtimeSPI.traverseStatements((deployment, stmt) -> { if (evaluateStatement(filterExpr, stmt)) { consumer.accept(deployment, stmt); } }); }
public void run(RegressionEnvironment env) { env.compileDeploy( "@name('a') select * from SupportBean;\n" + "@name('b') select * from SupportBean(theString='xxx');\n"); EPRuntimeSPI spi = (EPRuntimeSPI) env.runtime(); MyStatementTraverse myTraverse = new MyStatementTraverse(); spi.traverseStatements(myTraverse); myTraverse.assertAndReset(env.statement("a"), env.statement("b")); ExprNode filter = spi.getStatementSelectionSvc().compileFilterExpression("name='b'"); spi.getStatementSelectionSvc().traverseStatementsFilterExpr(myTraverse, filter); myTraverse.assertAndReset(env.statement("b")); spi.getStatementSelectionSvc().compileFilterExpression("deploymentId like 'x'"); spi.getStatementSelectionSvc().traverseStatementsContains(myTraverse, "xxx"); myTraverse.assertAndReset(env.statement("b")); env.undeployAll(); } }
public boolean evaluateStatement(ExprNode expression, EPStatement stmt) { if (expression == null) { return true; } Class returnType = expression.getForge().getEvaluationType(); if (JavaClassHelper.getBoxedType(returnType) != Boolean.class) { throw new EPException("Invalid expression, expected a boolean return type for expression and received '" + JavaClassHelper.getClassNameFullyQualPretty(returnType) + "' for expression '" + ExprNodeUtilityPrint.toExpressionStringMinPrecedenceSafe(expression) + "'"); } ExprEvaluator evaluator = expression.getForge().getExprEvaluator(); try { StatementRow row = getRow(stmt); EventBean rowBean = new BeanEventBean(row, statementRowType); Boolean pass = (Boolean) evaluator.evaluate(new EventBean[]{rowBean}, true, null); return !((pass == null) || (!pass)); } catch (Exception ex) { log.error("Unexpected exception filtering statements by expression, skipping statement: " + ex.getMessage(), ex); } return false; }