public void testSkipToNextRow() { Configuration config = SupportConfigFactory.getConfiguration(); config.addEventType("MyEvent", SupportRecogBean.class); EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(config); epService.initialize(); String[] fields = "a_string,b_string".split(","); String text = "select * from MyEvent.win:keepall() " + "match_recognize (" + " measures A.theString as a_string, B.theString as b_string " + " all matches " + " after match skip to next row " + " pattern (A B) " + " define B as B.value > A.value" + ") " + "order by a_string, b_string"; EPStatement stmt = epService.getEPAdministrator().createEPL(text); SupportUpdateListener listener = new SupportUpdateListener(); stmt.addListener(listener); epService.getEPRuntime().sendEvent(new SupportRecogBean("E1", 5)); epService.getEPRuntime().sendEvent(new SupportRecogBean("E2", 3)); assertFalse(listener.isInvoked()); assertFalse(stmt.iterator().hasNext()); epService.getEPRuntime().sendEvent(new SupportRecogBean("E3", 6)); EPAssertionUtil.assertPropsPerRow( listener.getAndResetLastNewData(), fields, new Object[][] {{"E2", "E3"}}); EPAssertionUtil.assertPropsPerRow(stmt.iterator(), fields, new Object[][] {{"E2", "E3"}}); epService.getEPRuntime().sendEvent(new SupportRecogBean("E4", 4)); assertFalse(listener.isInvoked()); EPAssertionUtil.assertPropsPerRow(stmt.iterator(), fields, new Object[][] {{"E2", "E3"}}); epService.getEPRuntime().sendEvent(new SupportRecogBean("E5", 6)); EPAssertionUtil.assertPropsPerRow( listener.getAndResetLastNewData(), fields, new Object[][] {{"E4", "E5"}}); EPAssertionUtil.assertPropsPerRow( stmt.iterator(), fields, new Object[][] {{"E2", "E3"}, {"E4", "E5"}}); epService.getEPRuntime().sendEvent(new SupportRecogBean("E6", 10)); EPAssertionUtil.assertPropsPerRow( listener.getAndResetLastNewData(), fields, new Object[][] {{"E5", "E6"}}); EPAssertionUtil.assertPropsPerRow( stmt.iterator(), fields, new Object[][] {{"E2", "E3"}, {"E4", "E5"}, {"E5", "E6"}}); epService.getEPRuntime().sendEvent(new SupportRecogBean("E7", 9)); epService.getEPRuntime().sendEvent(new SupportRecogBean("E8", 4)); assertFalse(listener.isInvoked()); EPAssertionUtil.assertPropsPerRow( stmt.iterator(), fields, new Object[][] {{"E2", "E3"}, {"E4", "E5"}, {"E5", "E6"}}); stmt.stop(); }
private void runAssertion( EPServiceProvider epService, SupportUpdateListener listener, EPStatement stmt) { String[] fields = "a,b0,b1".split(","); epService.getEPRuntime().sendEvent(new SupportRecogBean("A1", 1)); EPAssertionUtil.assertPropsPerRow( listener.getAndResetLastNewData(), fields, new Object[][] {{"A1", null, null}}); EPAssertionUtil.assertPropsPerRow(stmt.iterator(), fields, new Object[][] {{"A1", null, null}}); // since the first match skipped past A, we do not match again epService.getEPRuntime().sendEvent(new SupportRecogBean("B1", 2)); EPAssertionUtil.assertPropsPerRow( listener.getAndResetLastNewData(), fields, new Object[][] {{"A1", "B1", null}}); EPAssertionUtil.assertPropsPerRow(stmt.iterator(), fields, new Object[][] {{"A1", "B1", null}}); }
public void testAfterNextRow() { Configuration config = SupportConfigFactory.getConfiguration(); config.addEventType("MyEvent", SupportRecogBean.class); EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(config); epService.initialize(); String[] fields = "a,b0,b1".split(","); String text = "select * from MyEvent.win:keepall() " + "match_recognize (" + " measures A.theString as a, B[0].theString as b0, B[1].theString as b1" + " AFTER MATCH SKIP TO NEXT ROW " + " pattern (A B*) " + " define " + " A as A.theString like 'A%'," + " B as B.theString like 'B%'" + ")"; EPStatement stmt = epService.getEPAdministrator().createEPL(text); SupportUpdateListener listener = new SupportUpdateListener(); stmt.addListener(listener); epService.getEPRuntime().sendEvent(new SupportRecogBean("A1", 1)); EPAssertionUtil.assertPropsPerRow( listener.getAndResetLastNewData(), fields, new Object[][] {{"A1", null, null}}); EPAssertionUtil.assertPropsPerRow(stmt.iterator(), fields, new Object[][] {{"A1", null, null}}); // since the first match skipped past A, we do not match again epService.getEPRuntime().sendEvent(new SupportRecogBean("B1", 2)); assertFalse(listener.isInvoked()); // incremental skips to next EPAssertionUtil.assertPropsPerRow(stmt.iterator(), fields, new Object[][] {{"A1", "B1", null}}); }
public void testVariableMoreThenOnce() { Configuration config = SupportConfigFactory.getConfiguration(); config.addEventType("MyEvent", SupportRecogBean.class); EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(config); epService.initialize(); String[] fields = "a0,b,a1".split(","); String text = "select * from MyEvent.win:keepall() " + "match_recognize (" + " measures A[0].theString as a0, B.theString as b, A[1].theString as a1 " + " all matches " + " after match skip to next row " + " pattern ( A B A ) " + " define " + " A as (A.value = 1)," + " B as (B.value = 2)" + ")"; EPStatement stmt = epService.getEPAdministrator().createEPL(text); SupportUpdateListener listener = new SupportUpdateListener(); stmt.addListener(listener); epService.getEPRuntime().sendEvent(new SupportRecogBean("E1", 3)); epService.getEPRuntime().sendEvent(new SupportRecogBean("E2", 1)); epService.getEPRuntime().sendEvent(new SupportRecogBean("E3", 2)); epService.getEPRuntime().sendEvent(new SupportRecogBean("E4", 5)); epService.getEPRuntime().sendEvent(new SupportRecogBean("E5", 1)); epService.getEPRuntime().sendEvent(new SupportRecogBean("E6", 2)); assertFalse(listener.isInvoked()); assertFalse(stmt.iterator().hasNext()); epService.getEPRuntime().sendEvent(new SupportRecogBean("E7", 1)); EPAssertionUtil.assertPropsPerRow( listener.getAndResetLastNewData(), fields, new Object[][] {{"E5", "E6", "E7"}}); EPAssertionUtil.assertPropsPerRow(stmt.iterator(), fields, new Object[][] {{"E5", "E6", "E7"}}); epService.getEPRuntime().sendEvent(new SupportRecogBean("E8", 2)); epService.getEPRuntime().sendEvent(new SupportRecogBean("E9", 1)); EPAssertionUtil.assertPropsPerRow( listener.getAndResetLastNewData(), fields, new Object[][] {{"E7", "E8", "E9"}}); EPAssertionUtil.assertPropsPerRow( stmt.iterator(), fields, new Object[][] {{"E5", "E6", "E7"}, {"E7", "E8", "E9"}}); }