/*
* *************************************************************************************
* Copyright (C) 2008 EsperTech, Inc. All rights reserved. *
* http://esper.codehaus.org *
* http://www.espertech.com *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the GPL license *
* a copy of which has been included with this distribution in the license.txt file. *
* *************************************************************************************
*/
package com.espertech.esper.regression.pattern;
import com.espertech.esper.client.*;
import com.espertech.esper.client.scopetest.EPAssertionUtil;
import com.espertech.esper.client.scopetest.SupportUpdateListener;
import com.espertech.esper.client.soda.EPStatementObjectModel;
import com.espertech.esper.client.time.CurrentTimeEvent;
import com.espertech.esper.support.bean.SupportBean;
import com.espertech.esper.support.bean.SupportBeanConstants;
import com.espertech.esper.support.bean.SupportBean_A;
import com.espertech.esper.support.bean.SupportBean_B;
import com.espertech.esper.support.client.SupportConfigFactory;
import junit.framework.TestCase;
public class TestEveryDistinct extends TestCase implements SupportBeanConstants
{
public void testExpireSeenBeforeKey() {
Configuration config = SupportConfigFactory.getConfiguration();
config.addEventType("SupportBean", SupportBean.class);
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(config);
engine.initialize();
engine.getEPRuntime().sendEvent(new CurrentTimeEvent(0));
String expression = "select * from pattern [every-distinct(a.intPrimitive, 1 sec) a=SupportBean(theString like 'A%')]";
EPStatement statement = engine.getEPAdministrator().createEPL(expression);
SupportUpdateListener listener = new SupportUpdateListener();
statement.addListener(listener);
engine.getEPRuntime().sendEvent(new SupportBean("A1", 1));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString".split(","), new Object[]{"A1"});
engine.getEPRuntime().sendEvent(new SupportBean("A2", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("A3", 2));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString".split(","), new Object[]{"A3"});
engine.getEPRuntime().sendEvent(new SupportBean("A4", 1));
engine.getEPRuntime().sendEvent(new SupportBean("A5", 2));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new CurrentTimeEvent(1000));
engine.getEPRuntime().sendEvent(new SupportBean("A4", 1));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString".split(","), new Object[]{"A4"});
engine.getEPRuntime().sendEvent(new SupportBean("A5", 2));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString".split(","), new Object[]{"A5"});
engine.getEPRuntime().sendEvent(new SupportBean("A6", 1));
engine.getEPRuntime().sendEvent(new CurrentTimeEvent(1999));
engine.getEPRuntime().sendEvent(new SupportBean("A7", 2));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new CurrentTimeEvent(2000));
engine.getEPRuntime().sendEvent(new SupportBean("A7", 2));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString".split(","), new Object[]{"A7"});
}
public void testEveryDistinctOverFilter() throws Exception
{
Configuration config = SupportConfigFactory.getConfiguration();
config.addEventType("SupportBean", SupportBean.class);
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(config);
engine.initialize();
String expression = "select * from pattern [every-distinct(intPrimitive) a=SupportBean]";
runEveryDistinctOverFilter(engine, expression);
expression = "select * from pattern [every-distinct(intPrimitive, 2 minutes) a=SupportBean]";
runEveryDistinctOverFilter(engine, expression);
}
private void runEveryDistinctOverFilter(EPServiceProvider engine, String expression) {
EPStatement statement = engine.getEPAdministrator().createEPL(expression);
SupportUpdateListener listener = new SupportUpdateListener();
statement.addListener(listener);
engine.getEPRuntime().sendEvent(new SupportBean("E1", 1));
assertEquals("E1", listener.assertOneGetNewAndReset().get("a.theString"));
engine.getEPRuntime().sendEvent(new SupportBean("E2", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("E3", 2));
assertEquals("E3", listener.assertOneGetNewAndReset().get("a.theString"));
engine.getEPRuntime().sendEvent(new SupportBean("E4", 3));
assertEquals("E4", listener.assertOneGetNewAndReset().get("a.theString"));
engine.getEPRuntime().sendEvent(new SupportBean("E5", 2));
engine.getEPRuntime().sendEvent(new SupportBean("E6", 3));
engine.getEPRuntime().sendEvent(new SupportBean("E7", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("E8", 0));
assertEquals("E8", listener.assertOneGetNewAndReset().get("a.theString"));
EPStatementObjectModel model = engine.getEPAdministrator().compileEPL(expression);
assertEquals(expression, model.toEPL());
engine.getEPAdministrator().create(model);
statement.destroy();
}
public void testRepeatOverDistinct() throws Exception
{
Configuration config = SupportConfigFactory.getConfiguration();
config.addEventType("SupportBean", SupportBean.class);
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(config);
engine.initialize();
String expression = "select * from pattern [[2] every-distinct(a.intPrimitive) a=SupportBean]";
runRepeatOverDistinct(engine, expression);
expression = "select * from pattern [[2] every-distinct(a.intPrimitive, 1 hour) a=SupportBean]";
runRepeatOverDistinct(engine, expression);
}
private void runRepeatOverDistinct(EPServiceProvider engine, String expression) {
EPStatement statement = engine.getEPAdministrator().createEPL(expression);
SupportUpdateListener listener = new SupportUpdateListener();
statement.addListener(listener);
engine.getEPRuntime().sendEvent(new SupportBean("E1", 1));
engine.getEPRuntime().sendEvent(new SupportBean("E2", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("E3", 2));
EventBean theEvent = listener.assertOneGetNewAndReset();
assertEquals("E1", theEvent.get("a[0].theString"));
assertEquals("E3", theEvent.get("a[1].theString"));
engine.getEPRuntime().sendEvent(new SupportBean("E4", 3));
engine.getEPRuntime().sendEvent(new SupportBean("E5", 2));
assertFalse(listener.isInvoked());
}
public void testEveryDistinctOverRepeat() throws Exception
{
Configuration config = SupportConfigFactory.getConfiguration();
config.addEventType("SupportBean", SupportBean.class);
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(config);
engine.initialize();
String expression = "select * from pattern [every-distinct(a[0].intPrimitive) [2] a=SupportBean]";
runEveryDistinctOverRepeat(engine, expression);
expression = "select * from pattern [every-distinct(a[0].intPrimitive, a[0].intPrimitive, 1 hour) [2] a=SupportBean]";
runEveryDistinctOverRepeat(engine, expression);
}
private void runEveryDistinctOverRepeat(EPServiceProvider engine, String expression) {
EPStatement statement = engine.getEPAdministrator().createEPL(expression);
SupportUpdateListener listener = new SupportUpdateListener();
statement.addListener(listener);
engine.getEPRuntime().sendEvent(new SupportBean("E1", 1));
engine.getEPRuntime().sendEvent(new SupportBean("E2", 1));
EventBean theEvent = listener.assertOneGetNewAndReset();
assertEquals("E1", theEvent.get("a[0].theString"));
assertEquals("E2", theEvent.get("a[1].theString"));
engine.getEPRuntime().sendEvent(new SupportBean("E3", 1));
engine.getEPRuntime().sendEvent(new SupportBean("E4", 2));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("E5", 2));
engine.getEPRuntime().sendEvent(new SupportBean("E6", 1));
theEvent = listener.assertOneGetNewAndReset();
assertEquals("E5", theEvent.get("a[0].theString"));
assertEquals("E6", theEvent.get("a[1].theString"));
}
public void testTimerWithinOverDistinct() throws Exception
{
Configuration config = SupportConfigFactory.getConfiguration();
config.addEventType("SupportBean", SupportBean.class);
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(config);
engine.initialize();
// for 10 seconds, look for every distinct A
String expression = "select * from pattern [(every-distinct(a.intPrimitive) a=SupportBean) where timer:within(10 sec)]";
runTimerWithinOverDistinct(engine, expression);
expression = "select * from pattern [(every-distinct(a.intPrimitive, 2 days 2 minutes) a=SupportBean) where timer:within(10 sec)]";
runTimerWithinOverDistinct(engine, expression);
}
private void runTimerWithinOverDistinct(EPServiceProvider engine, String expression) {
sendTimer(0, engine);
EPStatement statement = engine.getEPAdministrator().createEPL(expression);
SupportUpdateListener listener = new SupportUpdateListener();
statement.addListener(listener);
engine.getEPRuntime().sendEvent(new SupportBean("E1", 1));
assertEquals("E1", listener.assertOneGetNewAndReset().get("a.theString"));
engine.getEPRuntime().sendEvent(new SupportBean("E2", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("E3", 2));
assertEquals("E3", listener.assertOneGetNewAndReset().get("a.theString"));
sendTimer(11000, engine);
engine.getEPRuntime().sendEvent(new SupportBean("E4", 3));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("E5", 1));
assertFalse(listener.isInvoked());
}
public void testEveryDistinctOverTimerWithin() throws Exception
{
Configuration config = SupportConfigFactory.getConfiguration();
config.addEventType("SupportBean", SupportBean.class);
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(config);
engine.initialize();
String expression = "select * from pattern [every-distinct(a.intPrimitive) (a=SupportBean where timer:within(10 sec))]";
runEveryDistinctOverTimerWithin(engine, expression);
expression = "select * from pattern [every-distinct(a.intPrimitive, 1 hour) (a=SupportBean where timer:within(10 sec))]";
runEveryDistinctOverTimerWithin(engine, expression);
}
private void runEveryDistinctOverTimerWithin(EPServiceProvider engine, String expression) {
sendTimer(0, engine);
EPStatement statement = engine.getEPAdministrator().createEPL(expression);
SupportUpdateListener listener = new SupportUpdateListener();
statement.addListener(listener);
engine.getEPRuntime().sendEvent(new SupportBean("E1", 1));
assertEquals("E1", listener.assertOneGetNewAndReset().get("a.theString"));
engine.getEPRuntime().sendEvent(new SupportBean("E2", 1));
assertFalse(listener.isInvoked());
sendTimer(5000, engine);
engine.getEPRuntime().sendEvent(new SupportBean("E3", 2));
assertEquals("E3", listener.assertOneGetNewAndReset().get("a.theString"));
sendTimer(10000, engine);
engine.getEPRuntime().sendEvent(new SupportBean("E4", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("E5", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("E6", 2));
assertFalse(listener.isInvoked());
sendTimer(15000, engine);
engine.getEPRuntime().sendEvent(new SupportBean("E7", 2));
assertFalse(listener.isInvoked());
sendTimer(20000, engine);
engine.getEPRuntime().sendEvent(new SupportBean("E8", 2));
assertFalse(listener.isInvoked());
sendTimer(25000, engine);
engine.getEPRuntime().sendEvent(new SupportBean("E9", 1));
assertFalse(listener.isInvoked());
sendTimer(50000, engine);
engine.getEPRuntime().sendEvent(new SupportBean("E10", 1));
assertEquals("E10", listener.assertOneGetNewAndReset().get("a.theString"));
engine.getEPRuntime().sendEvent(new SupportBean("E11", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("E12", 2));
assertEquals("E12", listener.assertOneGetNewAndReset().get("a.theString"));
engine.getEPRuntime().sendEvent(new SupportBean("E13", 2));
assertFalse(listener.isInvoked());
}
public void testEveryDistinctOverAnd() throws Exception
{
Configuration config = SupportConfigFactory.getConfiguration();
config.addEventType("SupportBean", SupportBean.class);
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(config);
engine.initialize();
String expression = "select * from pattern [every-distinct(a.intPrimitive, b.intPrimitive) (a=SupportBean(theString like 'A%') and b=SupportBean(theString like 'B%'))]";
runEveryDistinctOverAnd(engine, expression);
expression = "select * from pattern [every-distinct(a.intPrimitive, b.intPrimitive, 1 hour) (a=SupportBean(theString like 'A%') and b=SupportBean(theString like 'B%'))]";
runEveryDistinctOverAnd(engine, expression);
}
private void runEveryDistinctOverAnd(EPServiceProvider engine, String expression) {
EPStatement statement = engine.getEPAdministrator().createEPL(expression);
SupportUpdateListener listener = new SupportUpdateListener();
statement.addListener(listener);
engine.getEPRuntime().sendEvent(new SupportBean("A1", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("B1", 10));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A1", "B1"});
engine.getEPRuntime().sendEvent(new SupportBean("A2", 1));
engine.getEPRuntime().sendEvent(new SupportBean("B2", 10));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("A3", 2));
engine.getEPRuntime().sendEvent(new SupportBean("B3", 10));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A3", "B3"});
engine.getEPRuntime().sendEvent(new SupportBean("A4", 1));
engine.getEPRuntime().sendEvent(new SupportBean("B4", 20));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A4", "B4"});
engine.getEPRuntime().sendEvent(new SupportBean("A5", 2));
engine.getEPRuntime().sendEvent(new SupportBean("B5", 10));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("A6", 2));
engine.getEPRuntime().sendEvent(new SupportBean("B6", 20));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A6", "B6"});
engine.getEPRuntime().sendEvent(new SupportBean("A7", 2));
engine.getEPRuntime().sendEvent(new SupportBean("B7", 20));
assertFalse(listener.isInvoked());
}
public void testEveryDistinctOverOr() throws Exception
{
Configuration config = SupportConfigFactory.getConfiguration();
config.addEventType("SupportBean", SupportBean.class);
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(config);
engine.initialize();
String expression = "select * from pattern [every-distinct(coalesce(a.intPrimitive, 0) + coalesce(b.intPrimitive, 0)) (a=SupportBean(theString like 'A%') or b=SupportBean(theString like 'B%'))]";
runEveryDistinctOverOr(engine, expression);
expression = "select * from pattern [every-distinct(coalesce(a.intPrimitive, 0) + coalesce(b.intPrimitive, 0), 1 hour) (a=SupportBean(theString like 'A%') or b=SupportBean(theString like 'B%'))]";
runEveryDistinctOverOr(engine, expression);
}
private void runEveryDistinctOverOr(EPServiceProvider engine, String expression) {
EPStatement statement = engine.getEPAdministrator().createEPL(expression);
SupportUpdateListener listener = new SupportUpdateListener();
statement.addListener(listener);
engine.getEPRuntime().sendEvent(new SupportBean("A1", 1));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A1", null});
engine.getEPRuntime().sendEvent(new SupportBean("B1", 2));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{null, "B1"});
engine.getEPRuntime().sendEvent(new SupportBean("B2", 1));
engine.getEPRuntime().sendEvent(new SupportBean("A2", 2));
engine.getEPRuntime().sendEvent(new SupportBean("A3", 2));
engine.getEPRuntime().sendEvent(new SupportBean("B3", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("B4", 3));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{null, "B4"});
engine.getEPRuntime().sendEvent(new SupportBean("B5", 4));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{null, "B5"});
engine.getEPRuntime().sendEvent(new SupportBean("B6", 3));
engine.getEPRuntime().sendEvent(new SupportBean("A4", 3));
engine.getEPRuntime().sendEvent(new SupportBean("A5", 4));
assertFalse(listener.isInvoked());
}
public void testEveryDistinctOverNot() throws Exception
{
Configuration config = SupportConfigFactory.getConfiguration();
config.addEventType("SupportBean", SupportBean.class);
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(config);
engine.initialize();
String expression = "select * from pattern [every-distinct(a.intPrimitive) (a=SupportBean(theString like 'A%') and not SupportBean(theString like 'B%'))]";
runEveryDistinctOverNot(engine, expression);
expression = "select * from pattern [every-distinct(a.intPrimitive, 1 hour) (a=SupportBean(theString like 'A%') and not SupportBean(theString like 'B%'))]";
runEveryDistinctOverNot(engine, expression);
}
private void runEveryDistinctOverNot(EPServiceProvider engine, String expression) {
EPStatement statement = engine.getEPAdministrator().createEPL(expression);
SupportUpdateListener listener = new SupportUpdateListener();
statement.addListener(listener);
engine.getEPRuntime().sendEvent(new SupportBean("A1", 1));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString".split(","), new Object[]{"A1"});
engine.getEPRuntime().sendEvent(new SupportBean("A2", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("A3", 2));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString".split(","), new Object[]{"A3"});
engine.getEPRuntime().sendEvent(new SupportBean("B1", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("A4", 1));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString".split(","), new Object[]{"A4"});
engine.getEPRuntime().sendEvent(new SupportBean("A5", 1));
assertFalse(listener.isInvoked());
}
public void testEveryDistinctOverFollowedBy() throws Exception
{
Configuration config = SupportConfigFactory.getConfiguration();
config.addEventType("SupportBean", SupportBean.class);
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(config);
engine.initialize();
String expression = "select * from pattern [every-distinct(a.intPrimitive + b.intPrimitive) (a=SupportBean(theString like 'A%') -> b=SupportBean(theString like 'B%'))]";
runEveryDistinctOverFollowedBy(engine, expression);
expression = "select * from pattern [every-distinct(a.intPrimitive + b.intPrimitive, 1 hour) (a=SupportBean(theString like 'A%') -> b=SupportBean(theString like 'B%'))]";
runEveryDistinctOverFollowedBy(engine, expression);
}
private void runEveryDistinctOverFollowedBy(EPServiceProvider engine, String expression) {
EPStatement statement = engine.getEPAdministrator().createEPL(expression);
SupportUpdateListener listener = new SupportUpdateListener();
statement.addListener(listener);
engine.getEPRuntime().sendEvent(new SupportBean("A1", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("B1", 1));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A1", "B1"});
engine.getEPRuntime().sendEvent(new SupportBean("A2", 1));
engine.getEPRuntime().sendEvent(new SupportBean("B2", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("A3", 10));
engine.getEPRuntime().sendEvent(new SupportBean("B3", -8));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("A4", 2));
engine.getEPRuntime().sendEvent(new SupportBean("B4", 1));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A4", "B4"});
engine.getEPRuntime().sendEvent(new SupportBean("A5", 3));
engine.getEPRuntime().sendEvent(new SupportBean("B5", 0));
assertFalse(listener.isInvoked());
}
public void testEveryDistinctWithinFollowedBy() throws Exception
{
Configuration config = SupportConfigFactory.getConfiguration();
config.addEventType("SupportBean", SupportBean.class);
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(config);
engine.initialize();
String expression = "select * from pattern [(every-distinct(a.intPrimitive) a=SupportBean(theString like 'A%')) -> b=SupportBean(intPrimitive=a.intPrimitive)]";
runEveryDistinctWithinFollowedBy(engine, expression);
expression = "select * from pattern [(every-distinct(a.intPrimitive, 2 hours 1 minute) a=SupportBean(theString like 'A%')) -> b=SupportBean(intPrimitive=a.intPrimitive)]";
runEveryDistinctWithinFollowedBy(engine, expression);
}
private void runEveryDistinctWithinFollowedBy(EPServiceProvider engine, String expression) {
EPStatement statement = engine.getEPAdministrator().createEPL(expression);
SupportUpdateListener listener = new SupportUpdateListener();
statement.addListener(listener);
engine.getEPRuntime().sendEvent(new SupportBean("A1", 1));
engine.getEPRuntime().sendEvent(new SupportBean("B1", 0));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("B2", 1));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A1", "B2"});
engine.getEPRuntime().sendEvent(new SupportBean("A2", 2));
engine.getEPRuntime().sendEvent(new SupportBean("A3", 3));
engine.getEPRuntime().sendEvent(new SupportBean("A4", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("B3", 3));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A3", "B3"});
engine.getEPRuntime().sendEvent(new SupportBean("B4", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("B5", 2));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A2", "B5"});
engine.getEPRuntime().sendEvent(new SupportBean("A5", 2));
engine.getEPRuntime().sendEvent(new SupportBean("B6", 2));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("A6", 4));
engine.getEPRuntime().sendEvent(new SupportBean("B7", 4));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A6", "B7"});
}
public void testFollowedByWithDistinct() throws Exception
{
Configuration config = SupportConfigFactory.getConfiguration();
config.addEventType("SupportBean", SupportBean.class);
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(config);
engine.initialize();
String expression = "select * from pattern [every-distinct(a.intPrimitive) a=SupportBean(theString like 'A%') -> every-distinct(b.intPrimitive) b=SupportBean(theString like 'B%')]";
runFollowedByWithDistinct(engine, expression);
expression = "select * from pattern [every-distinct(a.intPrimitive, 1 day) a=SupportBean(theString like 'A%') -> every-distinct(b.intPrimitive) b=SupportBean(theString like 'B%')]";
runFollowedByWithDistinct(engine, expression);
}
private void runFollowedByWithDistinct(EPServiceProvider engine, String expression) {
EPStatement statement = engine.getEPAdministrator().createEPL(expression);
SupportUpdateListener listener = new SupportUpdateListener();
statement.addListener(listener);
engine.getEPRuntime().sendEvent(new SupportBean("A1", 1));
engine.getEPRuntime().sendEvent(new SupportBean("B1", 0));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A1", "B1"});
engine.getEPRuntime().sendEvent(new SupportBean("B2", 1));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A1", "B2"});
engine.getEPRuntime().sendEvent(new SupportBean("B3", 0));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("A2", 1));
engine.getEPRuntime().sendEvent(new SupportBean("B4", 2));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A1", "B4"});
engine.getEPRuntime().sendEvent(new SupportBean("A3", 2));
engine.getEPRuntime().sendEvent(new SupportBean("B5", 1));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.theString,b.theString".split(","), new Object[]{"A3", "B5"});
engine.getEPRuntime().sendEvent(new SupportBean("B6", 1));
assertFalse(listener.isInvoked());
engine.getEPRuntime().sendEvent(new SupportBean("B7", 3));
EventBean[] events = listener.getAndResetLastNewData();
EPAssertionUtil.assertProps(events[0], "a.theString,b.theString".split(","), new Object[]{"A1", "B7"});
EPAssertionUtil.assertProps(events[1], "a.theString,b.theString".split(","), new Object[]{"A3", "B7"});
}
public void testInvalid() throws Exception
{
Configuration config = SupportConfigFactory.getConfiguration();
config.addEventType("A", SupportBean_A.class);
config.addEventType("B", SupportBean_B.class);
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(config);
engine.initialize();
tryInvalid(engine, "a=A->every-distinct(a.intPrimitive) B",
"Failed to resolve property 'a.intPrimitive' to a stream or nested property in a stream, every-distinct requires that all properties resolve from sub-expressions to the every-distinct [a=A->every-distinct(a.intPrimitive) B]");
tryInvalid(engine, "every-distinct(dummy) A",
"Property named 'dummy' is not valid in any stream, every-distinct requires that all properties resolve from sub-expressions to the every-distinct [every-distinct(dummy) A]");
tryInvalid(engine, "every-distinct(2 sec) A",
"Every-distinct node requires one or more distinct-value expressions that each return non-constant result values [every-distinct(2 sec) A]");
}
public void tryInvalid(EPServiceProvider engine, String statement, String message) throws Exception
{
try
{
engine.getEPAdministrator().createPattern(statement);
fail();
}
catch (EPStatementException ex)
{
assertEquals(message, ex.getMessage());
}
}
private void sendTimer(long timeInMSec, EPServiceProvider epService)
{
CurrentTimeEvent theEvent = new CurrentTimeEvent(timeInMSec);
EPRuntime runtime = epService.getEPRuntime();
runtime.sendEvent(theEvent);
}
}