/*
***************************************************************************************
* Copyright (C) 2006 EsperTech, Inc. All rights reserved. *
* http://www.espertech.com/esper *
* 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.EPServiceProvider;
import com.espertech.esper.client.EPServiceProviderManager;
import com.espertech.esper.client.EPStatement;
import com.espertech.esper.client.scopetest.EPAssertionUtil;
import com.espertech.esper.client.scopetest.SupportUpdateListener;
import com.espertech.esper.client.soda.*;
import com.espertech.esper.metrics.instrumentation.InstrumentationHelper;
import com.espertech.esper.supportregression.bean.SupportBeanConstants;
import com.espertech.esper.supportregression.bean.SupportBean_A;
import com.espertech.esper.supportregression.bean.SupportBean_B;
import com.espertech.esper.supportregression.bean.SupportBean_C;
import com.espertech.esper.supportregression.client.SupportConfigFactory;
import com.espertech.esper.supportregression.patternassert.*;
import com.espertech.esper.util.SerializableObjectCopier;
import junit.framework.TestCase;
public class TestAndOperator extends TestCase implements SupportBeanConstants
{
public void testOp() throws Exception
{
EventCollection events = EventCollectionFactory.getEventSetOne(0, 1000);
CaseList testCaseList = new CaseList();
EventExpressionCase testCase;
testCase = new EventExpressionCase("b=" + EVENT_B_CLASS + " and every d=" + EVENT_D_CLASS);
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"));
testCase.add("D2", "b", events.getEvent("B1"), "d", events.getEvent("D2"));
testCase.add("D3", "b", events.getEvent("B1"), "d", events.getEvent("D3"));
testCaseList.addTest(testCase);
testCase = new EventExpressionCase("every b=" + EVENT_B_CLASS + " and d=" + EVENT_D_CLASS);
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"));
testCase.add("D1", "b", events.getEvent("B2"), "d", events.getEvent("D1"));
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D1"));
testCaseList.addTest(testCase);
testCase = new EventExpressionCase("b=" + EVENT_B_CLASS + " and d=" + EVENT_D_CLASS);
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"));
testCaseList.addTest(testCase);
testCase = new EventExpressionCase("every(b=" + EVENT_B_CLASS + " and d=" + EVENT_D_CLASS + ")");
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"));
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D2"));
testCaseList.addTest(testCase);
EPStatementObjectModel model = new EPStatementObjectModel();
model.setSelectClause(SelectClause.createWildcard());
PatternExpr pattern = Patterns.every(Patterns.and(Patterns.filter(EVENT_B_CLASS, "b"), Patterns.filter(EVENT_D_CLASS, "d")));
model.setFromClause(FromClause.create(PatternStream.create(pattern)));
model = (EPStatementObjectModel) SerializableObjectCopier.copy(model);
assertEquals("select * from pattern [every (b=" + EVENT_B_CLASS + " and d=" + EVENT_D_CLASS + ")]", model.toEPL());
testCase = new EventExpressionCase(model);
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"));
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D2"));
testCaseList.addTest(testCase);
testCase = new EventExpressionCase("every( b=" + EVENT_B_CLASS + " and every d=" + EVENT_D_CLASS + ")");
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"));
testCase.add("D2", "b", events.getEvent("B1"), "d", events.getEvent("D2"));
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D2"));
testCase.add("D3", "b", events.getEvent("B1"), "d", events.getEvent("D3"));
testCase.add("D3", "b", events.getEvent("B3"), "d", events.getEvent("D3"));
testCase.add("D3", "b", events.getEvent("B3"), "d", events.getEvent("D3"));
testCaseList.addTest(testCase);
testCase = new EventExpressionCase("every b=" + EVENT_B_CLASS + " and every d=" + EVENT_D_CLASS);
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"));
testCase.add("D1", "b", events.getEvent("B2"), "d", events.getEvent("D1"));
testCase.add("D2", "b", events.getEvent("B1"), "d", events.getEvent("D2"));
testCase.add("D2", "b", events.getEvent("B2"), "d", events.getEvent("D2"));
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D1"));
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D2"));
testCase.add("D3", "b", events.getEvent("B1"), "d", events.getEvent("D3"));
testCase.add("D3", "b", events.getEvent("B2"), "d", events.getEvent("D3"));
testCase.add("D3", "b", events.getEvent("B3"), "d", events.getEvent("D3"));
testCaseList.addTest(testCase);
testCase = new EventExpressionCase("every( every b=" + EVENT_B_CLASS + " and d=" + EVENT_D_CLASS + ")");
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"));
testCase.add("D1", "b", events.getEvent("B2"), "d", events.getEvent("D1"));
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D1"));
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D2"));
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D2"));
testCaseList.addTest(testCase);
testCase = new EventExpressionCase("every a=" + EVENT_A_CLASS + " and d=" + EVENT_D_CLASS + " and b=" + EVENT_B_CLASS);
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"), "a", events.getEvent("A1"));
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"), "a", events.getEvent("A2"));
testCaseList.addTest(testCase);
testCase = new EventExpressionCase("every( every b=" + EVENT_B_CLASS + " and every d=" + EVENT_D_CLASS + ")");
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"));
testCase.add("D1", "b", events.getEvent("B2"), "d", events.getEvent("D1"));
testCase.add("D2", "b", events.getEvent("B1"), "d", events.getEvent("D2"));
testCase.add("D2", "b", events.getEvent("B2"), "d", events.getEvent("D2"));
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D1"));
for (int i = 0; i < 3; i++)
{
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D2"));
}
testCase.add("D3", "b", events.getEvent("B1"), "d", events.getEvent("D3"));
testCase.add("D3", "b", events.getEvent("B2"), "d", events.getEvent("D3"));
for (int i = 0; i < 5; i++)
{
testCase.add("D3", "b", events.getEvent("B3"), "d", events.getEvent("D3"));
}
testCaseList.addTest(testCase);
testCase = new EventExpressionCase("a=" + EVENT_A_CLASS + " and d=" + EVENT_D_CLASS + " and b=" + EVENT_B_CLASS);
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"), "a", events.getEvent("A1"));
testCaseList.addTest(testCase);
testCase = new EventExpressionCase("every a=" + EVENT_A_CLASS + " and every d=" + EVENT_D_CLASS + " and b=" + EVENT_B_CLASS);
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"), "a", events.getEvent("A1"));
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"), "a", events.getEvent("A2"));
testCase.add("D2", "b", events.getEvent("B1"), "d", events.getEvent("D2"), "a", events.getEvent("A1"));
testCase.add("D2", "b", events.getEvent("B1"), "d", events.getEvent("D2"), "a", events.getEvent("A2"));
testCase.add("D3", "b", events.getEvent("B1"), "d", events.getEvent("D3"), "a", events.getEvent("A1"));
testCase.add("D3", "b", events.getEvent("B1"), "d", events.getEvent("D3"), "a", events.getEvent("A2"));
testCaseList.addTest(testCase);
testCase = new EventExpressionCase("b=" + EVENT_B_CLASS + " and b=" + EVENT_B_CLASS);
testCase.add("B1", "b", events.getEvent("B1"), "b", events.getEvent("B1"));
testCaseList.addTest(testCase);
testCase = new EventExpressionCase("every a=" + EVENT_A_CLASS + " and every d=" + EVENT_D_CLASS + " and every b=" + EVENT_B_CLASS);
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"), "a", events.getEvent("A1"));
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"), "a", events.getEvent("A2"));
testCase.add("D1", "b", events.getEvent("B2"), "d", events.getEvent("D1"), "a", events.getEvent("A1"));
testCase.add("D1", "b", events.getEvent("B2"), "d", events.getEvent("D1"), "a", events.getEvent("A2"));
testCase.add("D2", "b", events.getEvent("B1"), "d", events.getEvent("D2"), "a", events.getEvent("A1"));
testCase.add("D2", "b", events.getEvent("B1"), "d", events.getEvent("D2"), "a", events.getEvent("A2"));
testCase.add("D2", "b", events.getEvent("B2"), "d", events.getEvent("D2"), "a", events.getEvent("A1"));
testCase.add("D2", "b", events.getEvent("B2"), "d", events.getEvent("D2"), "a", events.getEvent("A2"));
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D1"), "a", events.getEvent("A1"));
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D1"), "a", events.getEvent("A2"));
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D2"), "a", events.getEvent("A1"));
testCase.add("B3", "b", events.getEvent("B3"), "d", events.getEvent("D2"), "a", events.getEvent("A2"));
testCase.add("D3", "b", events.getEvent("B1"), "d", events.getEvent("D3"), "a", events.getEvent("A1"));
testCase.add("D3", "b", events.getEvent("B1"), "d", events.getEvent("D3"), "a", events.getEvent("A2"));
testCase.add("D3", "b", events.getEvent("B2"), "d", events.getEvent("D3"), "a", events.getEvent("A1"));
testCase.add("D3", "b", events.getEvent("B2"), "d", events.getEvent("D3"), "a", events.getEvent("A2"));
testCase.add("D3", "b", events.getEvent("B3"), "d", events.getEvent("D3"), "a", events.getEvent("A1"));
testCase.add("D3", "b", events.getEvent("B3"), "d", events.getEvent("D3"), "a", events.getEvent("A2"));
testCaseList.addTest(testCase);
testCase = new EventExpressionCase("every (a=" + EVENT_A_CLASS + " and every d=" + EVENT_D_CLASS + " and b=" + EVENT_B_CLASS + ")");
testCase.add("D1", "b", events.getEvent("B1"), "d", events.getEvent("D1"), "a", events.getEvent("A1"));
testCase.add("D2", "b", events.getEvent("B1"), "d", events.getEvent("D2"), "a", events.getEvent("A1"));
testCase.add("D3", "b", events.getEvent("B1"), "d", events.getEvent("D3"), "a", events.getEvent("A1"));
testCaseList.addTest(testCase);
testCase = new EventExpressionCase("every (b=" + EVENT_B_CLASS + " and b=" + EVENT_B_CLASS + ")");
testCase.add("B1", "b", events.getEvent("B1"), "b", events.getEvent("B1"));
testCase.add("B2", "b", events.getEvent("B2"), "b", events.getEvent("B2"));
testCase.add("B3", "b", events.getEvent("B3"), "b", events.getEvent("B3"));
testCaseList.addTest(testCase);
PatternTestHarness util = new PatternTestHarness(events, testCaseList, this.getClass(), getName());
util.runTest();
}
public void testAndNotDefaultTrue() {
// ESPER-402
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(SupportConfigFactory.getConfiguration());
SupportUpdateListener listener = new SupportUpdateListener();
engine.initialize();
if (InstrumentationHelper.ENABLED) { InstrumentationHelper.startTest(engine, this.getClass(), getName());}
engine.getEPAdministrator().getConfiguration().addEventType("CallWaiting", SupportBean_A.class);
engine.getEPAdministrator().getConfiguration().addEventType("CallFinished", SupportBean_B.class);
engine.getEPAdministrator().getConfiguration().addEventType("CallPickedUp", SupportBean_C.class);
String pattern =
" insert into NumberOfWaitingCalls(calls) " +
" select count(*)" +
" from pattern[every call=CallWaiting ->" +
" (not CallFinished(id=call.id) and" +
" not CallPickedUp(id=call.id))]";
engine.getEPAdministrator().createEPL(pattern).addListener(listener);
engine.getEPRuntime().sendEvent(new SupportBean_A("A1"));
engine.getEPRuntime().sendEvent(new SupportBean_B("B1"));
engine.getEPRuntime().sendEvent(new SupportBean_C("C1"));
assertTrue(listener.isInvoked());
if (InstrumentationHelper.ENABLED) { InstrumentationHelper.endTest();}
}
public void testAndWithEveryAndTerminationOptimization() {
// When all other sub-expressions to an AND are gone,
// then there is no need to retain events of the subexpression still active
EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(SupportConfigFactory.getConfiguration());
engine.getEPAdministrator().getConfiguration().addEventType(SupportBean_A.class);
engine.getEPAdministrator().getConfiguration().addEventType(SupportBean_B.class);
String epl = "select * from pattern [a=SupportBean_A and every b=SupportBean_B]";
EPStatement stmt = engine.getEPAdministrator().createEPL(epl);
engine.getEPRuntime().sendEvent(new SupportBean_A("A1"));
for (int i = 0; i < 10; i++) {
engine.getEPRuntime().sendEvent(new SupportBean_B("B" + i));
}
SupportUpdateListener listener = new SupportUpdateListener();
stmt.addListener(listener);
engine.getEPRuntime().sendEvent(new SupportBean_B("B_last"));
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), "a.id,b.id".split(","), new Object[] {"A1", "B_last"});
}
}