/*
* *************************************************************************************
* 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.epl;
import com.espertech.esper.client.Configuration;
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.core.service.EPServiceProviderSPI;
import com.espertech.esper.core.service.EPStatementSPI;
import com.espertech.esper.core.service.StatementType;
import com.espertech.esper.epl.named.NamedWindowProcessor;
import com.espertech.esper.support.bean.*;
import com.espertech.esper.support.client.SupportConfigFactory;
import com.espertech.esper.util.EventRepresentationEnum;
import junit.framework.TestCase;
import java.util.LinkedList;
import java.util.List;
public class TestNamedWindowDelete extends TestCase
{
private EPServiceProviderSPI epService;
private SupportUpdateListener listenerWindow;
private SupportUpdateListener listenerWindowTwo;
private SupportUpdateListener listenerSelect;
private SupportUpdateListener listenerDelete;
public void setUp()
{
Configuration config = SupportConfigFactory.getConfiguration();
config.getEngineDefaults().getLogging().setEnableQueryPlan(true);
epService = (EPServiceProviderSPI) EPServiceProviderManager.getDefaultProvider(config);
epService.initialize();
listenerWindow = new SupportUpdateListener();
listenerWindowTwo = new SupportUpdateListener();
listenerSelect = new SupportUpdateListener();
listenerDelete = new SupportUpdateListener();
}
protected void tearDown() throws Exception {
listenerDelete = null;
listenerSelect = null;
listenerWindow = null;
listenerDelete = null;
}
public void testFirstUnique() {
epService.getEPAdministrator().getConfiguration().addEventType("SupportBean", SupportBean.class);
epService.getEPAdministrator().getConfiguration().addEventType("SupportBean_A", SupportBean_A.class);
String[] fields = new String[] {"theString","intPrimitive"};
String stmtTextCreateOne = "create window MyWindowOne.std:firstunique(theString) as select * from SupportBean";
EPStatement stmtCreate = epService.getEPAdministrator().createEPL(stmtTextCreateOne);
epService.getEPAdministrator().createEPL("insert into MyWindowOne select * from SupportBean");
EPStatement stmtDelete = epService.getEPAdministrator().createEPL("on SupportBean_A a delete from MyWindowOne where theString=a.id");
stmtDelete.addListener(listenerDelete);
epService.getEPRuntime().sendEvent(new SupportBean("A", 1));
epService.getEPRuntime().sendEvent(new SupportBean("A", 2));
epService.getEPRuntime().sendEvent(new SupportBean_A("A"));
EPAssertionUtil.assertProps(listenerDelete.assertOneGetNewAndReset(), fields, new Object[]{"A", 1});
epService.getEPRuntime().sendEvent(new SupportBean("A", 3));
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"A", 3}});
epService.getEPRuntime().sendEvent(new SupportBean_A("A"));
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, null);
}
public void testStaggeredNamedWindow() throws Exception
{
runAssertionStaggered(EventRepresentationEnum.OBJECTARRAY);
runAssertionStaggered(EventRepresentationEnum.DEFAULT);
runAssertionStaggered(EventRepresentationEnum.MAP);
}
private void runAssertionStaggered(EventRepresentationEnum outputType) throws Exception {
String[] fieldsOne = new String[] {"a1", "b1"};
String[] fieldsTwo = new String[] {"a2", "b2"};
// create window one
String stmtTextCreateOne = outputType.getAnnotationText() + " create window MyWindowOne.win:keepall() as select theString as a1, intPrimitive as b1 from " + SupportBean.class.getName();
EPStatement stmtCreateOne = epService.getEPAdministrator().createEPL(stmtTextCreateOne);
stmtCreateOne.addListener(listenerWindow);
assertEquals(0, getCount("MyWindowOne"));
assertEquals(outputType.getOutputClass(), stmtCreateOne.getEventType().getUnderlyingType());
// create window two
String stmtTextCreateTwo = outputType.getAnnotationText() + " create window MyWindowTwo.win:keepall() as select theString as a2, intPrimitive as b2 from " + SupportBean.class.getName();
EPStatement stmtCreateTwo = epService.getEPAdministrator().createEPL(stmtTextCreateTwo);
stmtCreateTwo.addListener(listenerWindowTwo);
assertEquals(0, getCount("MyWindowTwo"));
assertEquals(outputType.getOutputClass(), stmtCreateTwo.getEventType().getUnderlyingType());
// create delete stmt
String stmtTextDelete = "on MyWindowOne delete from MyWindowTwo where a1 = a2";
EPStatement stmtDelete = epService.getEPAdministrator().createEPL(stmtTextDelete);
stmtDelete.addListener(listenerDelete);
assertEquals(StatementType.ON_DELETE, ((EPStatementSPI) stmtDelete).getStatementMetadata().getStatementType());
// create insert into
String stmtTextInsert = "insert into MyWindowOne select theString as a1, intPrimitive as b1 from " + SupportBean.class.getName() + "(intPrimitive > 0)";
epService.getEPAdministrator().createEPL(stmtTextInsert);
stmtTextInsert = "insert into MyWindowTwo select theString as a2, intPrimitive as b2 from " + SupportBean.class.getName() + "(intPrimitive < 0)";
epService.getEPAdministrator().createEPL(stmtTextInsert);
sendSupportBean("E1", -10);
EPAssertionUtil.assertProps(listenerWindowTwo.assertOneGetNewAndReset(), fieldsTwo, new Object[]{"E1", -10});
EPAssertionUtil.assertPropsPerRow(stmtCreateTwo.iterator(), fieldsTwo, new Object[][]{{"E1", -10}});
assertFalse(listenerWindow.isInvoked());
assertEquals(1, getCount("MyWindowTwo"));
sendSupportBean("E2", 5);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetNewAndReset(), fieldsOne, new Object[]{"E2", 5});
EPAssertionUtil.assertPropsPerRow(stmtCreateOne.iterator(), fieldsOne, new Object[][]{{"E2", 5}});
assertFalse(listenerWindowTwo.isInvoked());
assertEquals(1, getCount("MyWindowOne"));
sendSupportBean("E3", -1);
EPAssertionUtil.assertProps(listenerWindowTwo.assertOneGetNewAndReset(), fieldsTwo, new Object[]{"E3", -1});
EPAssertionUtil.assertPropsPerRow(stmtCreateTwo.iterator(), fieldsTwo, new Object[][]{{"E1", -10}, {"E3", -1}});
assertFalse(listenerWindow.isInvoked());
assertEquals(2, getCount("MyWindowTwo"));
sendSupportBean("E3", 1);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetNewAndReset(), fieldsOne, new Object[]{"E3", 1});
EPAssertionUtil.assertPropsPerRow(stmtCreateOne.iterator(), fieldsOne, new Object[][]{{"E2", 5}, {"E3", 1}});
EPAssertionUtil.assertProps(listenerWindowTwo.assertOneGetOldAndReset(), fieldsTwo, new Object[]{"E3", -1});
EPAssertionUtil.assertPropsPerRow(stmtCreateTwo.iterator(), fieldsTwo, new Object[][]{{"E1", -10}});
assertEquals(2, getCount("MyWindowOne"));
assertEquals(1, getCount("MyWindowTwo"));
stmtDelete.destroy();
stmtCreateOne.destroy();
stmtCreateTwo.destroy();
listenerDelete.reset();
listenerSelect.reset();
listenerWindow.reset();
listenerWindowTwo.reset();
epService.getEPAdministrator().getConfiguration().removeEventType("MyWindowOne", true);
epService.getEPAdministrator().getConfiguration().removeEventType("MyWindowTwo", true);
}
public void testDeletePattern() throws Exception
{
// create window
String stmtTextCreate = "create window MyWindow.win:keepall() as select theString as a, intPrimitive as b from " + SupportBean.class.getName();
EPStatement stmtCreate = epService.getEPAdministrator().createEPL(stmtTextCreate);
stmtCreate.addListener(listenerWindow);
// create delete stmt
String stmtTextDelete = "on pattern [every ea=" + SupportBean_A.class.getName() + " or every eb=" + SupportBean_B.class.getName() + "] " + " delete from MyWindow";
EPStatement stmtDelete = epService.getEPAdministrator().createEPL(stmtTextDelete);
stmtDelete.addListener(listenerDelete);
// create insert into
String stmtTextInsertOne = "insert into MyWindow select theString as a, intPrimitive as b from " + SupportBean.class.getName();
epService.getEPAdministrator().createEPL(stmtTextInsertOne);
// send 1 event
String[] fields = new String[] {"a", "b"};
sendSupportBean("E1", 1);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetNewAndReset(), fields, new Object[]{"E1", 1});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E1", 1}});
EPAssertionUtil.assertPropsPerRow(stmtDelete.iterator(), fields, null);
assertEquals(1, getCount("MyWindow"));
// Delete all events using A, 1 row expected
sendSupportBean_A("A1");
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E1", 1});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, null);
EPAssertionUtil.assertProps(listenerDelete.assertOneGetNewAndReset(), fields, new Object[]{"E1", 1});
EPAssertionUtil.assertPropsPerRow(stmtDelete.iterator(), fields, new Object[][]{{"E1", 1}});
assertEquals(0, getCount("MyWindow"));
// send 1 event
sendSupportBean("E2", 2);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetNewAndReset(), fields, new Object[]{"E2", 2});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E2", 2}});
assertEquals(1, getCount("MyWindow"));
// Delete all events using B, 1 row expected
sendSupportBean_B("B1");
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E2", 2});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, null);
EPAssertionUtil.assertProps(listenerDelete.assertOneGetNewAndReset(), fields, new Object[]{"E2", 2});
EPAssertionUtil.assertPropsPerRow(stmtDelete.iterator(), fields, new Object[][]{{"E2", 2}});
assertEquals(0, getCount("MyWindow"));
stmtDelete.destroy();
stmtCreate.destroy();
}
public void testDeleteAll() throws Exception
{
// create window
String stmtTextCreate = "create window MyWindow.win:keepall() as select theString as a, intPrimitive as b from " + SupportBean.class.getName();
EPStatement stmtCreate = epService.getEPAdministrator().createEPL(stmtTextCreate);
stmtCreate.addListener(listenerWindow);
// create delete stmt
String stmtTextDelete = "on " + SupportBean_A.class.getName() + " delete from MyWindow";
EPStatement stmtDelete = epService.getEPAdministrator().createEPL(stmtTextDelete);
stmtDelete.addListener(listenerDelete);
EPAssertionUtil.assertEqualsAnyOrder(stmtDelete.getEventType().getPropertyNames(), new String[]{"a", "b"});
// create insert into
String stmtTextInsertOne = "insert into MyWindow select theString as a, intPrimitive as b from " + SupportBean.class.getName();
epService.getEPAdministrator().createEPL(stmtTextInsertOne);
// create consumer
String[] fields = new String[] {"a", "b"};
String stmtTextSelect = "select irstream MyWindow.a as a, b from MyWindow as s1";
EPStatement stmtSelect = epService.getEPAdministrator().createEPL(stmtTextSelect);
stmtSelect.addListener(listenerSelect);
// Delete all events, no result expected
sendSupportBean_A("A1");
assertFalse(listenerWindow.isInvoked());
assertFalse(listenerSelect.isInvoked());
assertFalse(listenerDelete.isInvoked());
assertEquals(0, getCount("MyWindow"));
// send 1 event
sendSupportBean("E1", 1);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetNewAndReset(), fields, new Object[]{"E1", 1});
EPAssertionUtil.assertProps(listenerSelect.assertOneGetNewAndReset(), fields, new Object[]{"E1", 1});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E1", 1}});
EPAssertionUtil.assertPropsPerRow(stmtDelete.iterator(), fields, null);
assertEquals(1, getCount("MyWindow"));
// Delete all events, 1 row expected
sendSupportBean_A("A2");
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E1", 1});
EPAssertionUtil.assertProps(listenerSelect.assertOneGetOldAndReset(), fields, new Object[]{"E1", 1});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, null);
EPAssertionUtil.assertProps(listenerDelete.assertOneGetNewAndReset(), fields, new Object[]{"E1", 1});
EPAssertionUtil.assertPropsPerRow(stmtDelete.iterator(), fields, new Object[][]{{"E1", 1}});
assertEquals(0, getCount("MyWindow"));
// send 2 events
sendSupportBean("E2", 2);
sendSupportBean("E3", 3);
listenerWindow.reset();
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E2", 2}, {"E3", 3}});
assertFalse(listenerDelete.isInvoked());
assertEquals(2, getCount("MyWindow"));
// Delete all events, 2 rows expected
sendSupportBean_A("A2");
EPAssertionUtil.assertProps(listenerWindow.getLastOldData()[0], fields, new Object[]{"E2", 2});
EPAssertionUtil.assertProps(listenerWindow.getLastOldData()[1], fields, new Object[]{"E3", 3});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, null);
assertEquals(2, listenerDelete.getLastNewData().length);
EPAssertionUtil.assertProps(listenerDelete.getLastNewData()[0], fields, new Object[]{"E2", 2});
EPAssertionUtil.assertProps(listenerDelete.getLastNewData()[1], fields, new Object[]{"E3", 3});
EPAssertionUtil.assertPropsPerRow(stmtDelete.iterator(), fields, new Object[][]{{"E2", 2}, {"E3", 3}});
assertEquals(0, getCount("MyWindow"));
}
public void testDeleteCondition() throws Exception
{
// create window
String stmtTextCreate = "create window MyWindow.win:keepall() as select theString as a, intPrimitive as b from " + SupportBean.class.getName();
EPStatement stmtCreate = epService.getEPAdministrator().createEPL(stmtTextCreate);
stmtCreate.addListener(listenerWindow);
// create delete stmt
String stmtTextDelete = "on " + SupportBean_A.class.getName() + " delete from MyWindow where 'X' || a || 'X' = id";
epService.getEPAdministrator().createEPL(stmtTextDelete);
// create delete stmt
stmtTextDelete = "on " + SupportBean_B.class.getName() + " delete from MyWindow where b < 5";
epService.getEPAdministrator().createEPL(stmtTextDelete);
// create insert into
String stmtTextInsertOne = "insert into MyWindow select theString as a, intPrimitive as b from " + SupportBean.class.getName();
epService.getEPAdministrator().createEPL(stmtTextInsertOne);
// send 3 event
sendSupportBean("E1", 1);
sendSupportBean("E2", 2);
sendSupportBean("E3", 3);
assertEquals(3, getCount("MyWindow"));
listenerWindow.reset();
String[] fields = new String[] {"a", "b"};
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E1", 1}, {"E2", 2}, {"E3", 3}});
// delete E2
sendSupportBean_A("XE2X");
assertEquals(1, listenerWindow.getLastOldData().length);
EPAssertionUtil.assertProps(listenerWindow.getLastOldData()[0], fields, new Object[]{"E2", 2});
listenerWindow.reset();
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E1", 1}, {"E3", 3}});
assertEquals(2, getCount("MyWindow"));
sendSupportBean("E7", 7);
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E1", 1}, {"E3", 3}, {"E7", 7}});
assertEquals(3, getCount("MyWindow"));
// delete all under 5
sendSupportBean_B("B1");
assertEquals(2, listenerWindow.getLastOldData().length);
EPAssertionUtil.assertProps(listenerWindow.getLastOldData()[0], fields, new Object[]{"E1", 1});
EPAssertionUtil.assertProps(listenerWindow.getLastOldData()[1], fields, new Object[]{"E3", 3});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E7", 7}});
assertEquals(1, getCount("MyWindow"));
}
public void testCoercionKeyMultiPropIndexes()
{
// create window
String stmtTextCreate = "create window MyWindow.win:keepall() as select " +
"theString, intPrimitive, intBoxed, doublePrimitive, doubleBoxed from " + SupportBean.class.getName();
EPStatement stmtCreate = epService.getEPAdministrator().createEPL(stmtTextCreate);
stmtCreate.addListener(listenerWindow);
List<EPStatement> deleteStatements = new LinkedList<EPStatement>();
String stmtTextDelete = "on " + SupportBean.class.getName() + "(theString='DB') as s0 delete from MyWindow as win where win.intPrimitive = s0.doubleBoxed";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(1, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
stmtTextDelete = "on " + SupportBean.class.getName() + "(theString='DP') as s0 delete from MyWindow as win where win.intPrimitive = s0.doublePrimitive";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(1, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
stmtTextDelete = "on " + SupportBean.class.getName() + "(theString='IB') as s0 delete from MyWindow where MyWindow.intPrimitive = s0.intBoxed";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(2, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
stmtTextDelete = "on " + SupportBean.class.getName() + "(theString='IPDP') as s0 delete from MyWindow as win where win.intPrimitive = s0.intPrimitive and win.doublePrimitive = s0.doublePrimitive";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(3, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
stmtTextDelete = "on " + SupportBean.class.getName() + "(theString='IPDP2') as s0 delete from MyWindow as win where win.doublePrimitive = s0.doublePrimitive and win.intPrimitive = s0.intPrimitive";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(3, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
stmtTextDelete = "on " + SupportBean.class.getName() + "(theString='IPDPIB') as s0 delete from MyWindow as win where win.doublePrimitive = s0.doublePrimitive and win.intPrimitive = s0.intPrimitive and win.intBoxed = s0.intBoxed";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(4, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
stmtTextDelete = "on " + SupportBean.class.getName() + "(theString='CAST') as s0 delete from MyWindow as win where win.intBoxed = s0.intPrimitive and win.doublePrimitive = s0.doubleBoxed and win.intPrimitive = s0.intBoxed";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(4, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
// create insert into
String stmtTextInsertOne = "insert into MyWindow select theString, intPrimitive, intBoxed, doublePrimitive, doubleBoxed "
+ "from " + SupportBean.class.getName() + "(theString like 'E%')";
epService.getEPAdministrator().createEPL(stmtTextInsertOne);
sendSupportBean("E1", 1, 10, 100d, 1000d);
sendSupportBean("E2", 2, 20, 200d, 2000d);
sendSupportBean("E3", 3, 30, 300d, 3000d);
sendSupportBean("E4", 4, 40, 400d, 4000d);
listenerWindow.reset();
String[] fields = new String[] {"theString"};
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E1"}, {"E2"}, {"E3"}, {"E4"}});
sendSupportBean("DB", 0, 0, 0d, null);
assertFalse(listenerWindow.isInvoked());
sendSupportBean("DB", 0, 0, 0d, 3d);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E3"});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E1"}, {"E2"}, {"E4"}});
sendSupportBean("DP", 0, 0, 5d, null);
assertFalse(listenerWindow.isInvoked());
sendSupportBean("DP", 0, 0, 4d, null);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E4"});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E1"}, {"E2"}});
sendSupportBean("IB", 0, -1, 0d, null);
assertFalse(listenerWindow.isInvoked());
sendSupportBean("IB", 0, 1, 0d, null);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E1"});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E2"}});
sendSupportBean("E5", 5, 50, 500d, 5000d);
sendSupportBean("E6", 6, 60, 600d, 6000d);
sendSupportBean("E7", 7, 70, 700d, 7000d);
listenerWindow.reset();
sendSupportBean("IPDP", 5, 0, 500d, null);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E5"});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E2"}, {"E6"}, {"E7"}});
sendSupportBean("IPDP2", 6, 0, 600d, null);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E6"});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E2"}, {"E7"}});
sendSupportBean("IPDPIB", 7, 70, 0d, null);
assertFalse(listenerWindow.isInvoked());
sendSupportBean("IPDPIB", 7, 70, 700d, null);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E7"});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E2"}});
sendSupportBean("E8", 8, 80, 800d, 8000d);
listenerWindow.reset();
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E2"}, {"E8"}});
sendSupportBean("CAST", 80, 8, 0, 800d);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E8"});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E2"}});
for (EPStatement stmt : deleteStatements)
{
stmt.destroy();
}
deleteStatements.clear();
// late delete on a filled window
stmtTextDelete = "on " + SupportBean.class.getName() + "(theString='LAST') as s0 delete from MyWindow as win where win.intPrimitive = s0.intPrimitive and win.doublePrimitive = s0.doublePrimitive";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
sendSupportBean("LAST", 2, 20, 200, 2000d);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E2"});
EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, null);
for (EPStatement stmt : deleteStatements)
{
stmt.destroy();
}
// test single-two-field index reuse
epService.getEPAdministrator().getConfiguration().addEventType("SupportBean_ST0", SupportBean_ST0.class);
epService.getEPAdministrator().getConfiguration().addEventType("SupportBean", SupportBean.class);
epService.getEPAdministrator().createEPL("create window WinOne.win:keepall() as SupportBean");
epService.getEPAdministrator().createEPL("on SupportBean_ST0 select * from WinOne where theString = key0");
assertEquals(1, epService.getNamedWindowService().getNamedWindowIndexes("WinOne").length);
epService.getEPAdministrator().createEPL("on SupportBean_ST0 select * from WinOne where theString = key0 and intPrimitive = p00");
assertEquals(2, epService.getNamedWindowService().getNamedWindowIndexes("WinOne").length);
}
public void testCoercionRangeMultiPropIndexes()
{
epService.getEPAdministrator().getConfiguration().addEventType("SupportBean", SupportBean.class);
epService.getEPAdministrator().getConfiguration().addEventType("SupportBeanTwo", SupportBeanTwo.class);
// create window
String stmtTextCreate = "create window MyWindow.win:keepall() as select " +
"theString, intPrimitive, intBoxed, doublePrimitive, doubleBoxed from SupportBean";
EPStatement stmtCreate = epService.getEPAdministrator().createEPL(stmtTextCreate);
stmtCreate.addListener(listenerWindow);
String stmtText = "insert into MyWindow select theString, intPrimitive, intBoxed, doublePrimitive, doubleBoxed from SupportBean";
epService.getEPAdministrator().createEPL(stmtText);
String[] fields = new String[] {"theString"};
sendSupportBean("E1", 1, 10, 100d, 1000d);
sendSupportBean("E2", 2, 20, 200d, 2000d);
sendSupportBean("E3", 3, 30, 3d, 30d);
sendSupportBean("E4", 4, 40, 4d, 40d);
sendSupportBean("E5", 5, 50, 500d, 5000d);
sendSupportBean("E6", 6, 60, 600d, 6000d);
listenerWindow.reset();
List<EPStatement> deleteStatements = new LinkedList<EPStatement>();
String stmtTextDelete = "on SupportBeanTwo as s2 delete from MyWindow as win where win.intPrimitive between s2.doublePrimitiveTwo and s2.doubleBoxedTwo";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(1, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
sendSupportBeanTwo("T", 0, 0, 0d, null);
assertFalse(listenerWindow.isInvoked());
sendSupportBeanTwo("T", 0, 0, -1d, 1d);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E1"});
stmtTextDelete = "on SupportBeanTwo as s2 delete from MyWindow as win where win.intPrimitive between s2.intPrimitiveTwo and s2.intBoxedTwo";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(2, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
sendSupportBeanTwo("T", -2, 2, 0d, 0d);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E2"});
stmtTextDelete = "on SupportBeanTwo as s2 delete from MyWindow as win " +
"where win.intPrimitive between s2.intPrimitiveTwo and s2.intBoxedTwo and win.doublePrimitive between s2.intPrimitiveTwo and s2.intBoxedTwo";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(3, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
sendSupportBeanTwo("T", -3, 3, -3d, 3d);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E3"});
stmtTextDelete = "on SupportBeanTwo as s2 delete from MyWindow as win " +
"where win.doublePrimitive between s2.intPrimitiveTwo and s2.intPrimitiveTwo and win.intPrimitive between s2.intPrimitiveTwo and s2.intPrimitiveTwo";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(3, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
sendSupportBeanTwo("T", -4, 4, -4, 4d);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E4"});
stmtTextDelete = "on SupportBeanTwo as s2 delete from MyWindow as win where win.intPrimitive <= doublePrimitiveTwo";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(3, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
sendSupportBeanTwo("T", 0, 0, 5, 1d);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E5"});
stmtTextDelete = "on SupportBeanTwo as s2 delete from MyWindow as win where win.intPrimitive not between s2.intPrimitiveTwo and s2.intBoxedTwo";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(3, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
sendSupportBeanTwo("T", 100, 200, 0, 0d);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E6"});
// delete
for (EPStatement stmt : deleteStatements) {
stmt.destroy();
}
deleteStatements.clear();
assertEquals(0, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
}
public void testCoercionKeyAndRangeMultiPropIndexes()
{
epService.getEPAdministrator().getConfiguration().addEventType("SupportBean", SupportBean.class);
epService.getEPAdministrator().getConfiguration().addEventType("SupportBeanTwo", SupportBeanTwo.class);
// create window
String stmtTextCreate = "create window MyWindow.win:keepall() as select " +
"theString, intPrimitive, intBoxed, doublePrimitive, doubleBoxed from SupportBean";
EPStatement stmtCreate = epService.getEPAdministrator().createEPL(stmtTextCreate);
stmtCreate.addListener(listenerWindow);
String stmtText = "insert into MyWindow select theString, intPrimitive, intBoxed, doublePrimitive, doubleBoxed from SupportBean";
epService.getEPAdministrator().createEPL(stmtText);
String[] fields = new String[] {"theString"};
sendSupportBean("E1", 1, 10, 100d, 1000d);
sendSupportBean("E2", 2, 20, 200d, 2000d);
sendSupportBean("E3", 3, 30, 300d, 3000d);
sendSupportBean("E4", 4, 40, 400d, 4000d);
listenerWindow.reset();
List<EPStatement> deleteStatements = new LinkedList<EPStatement>();
String stmtTextDelete = "on SupportBeanTwo delete from MyWindow where theString = stringTwo and intPrimitive between doublePrimitiveTwo and doubleBoxedTwo";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(1, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
sendSupportBeanTwo("T", 0, 0, 1d, 200d);
assertFalse(listenerWindow.isInvoked());
sendSupportBeanTwo("E1", 0, 0, 1d, 200d);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E1"});
stmtTextDelete = "on SupportBeanTwo delete from MyWindow where theString = stringTwo and intPrimitive = intPrimitiveTwo and intBoxed between doublePrimitiveTwo and doubleBoxedTwo";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(2, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
sendSupportBeanTwo("E2", 2, 0, 19d, 21d);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E2"});
stmtTextDelete = "on SupportBeanTwo delete from MyWindow where intBoxed between doubleBoxedTwo and doublePrimitiveTwo and intPrimitive = intPrimitiveTwo and theString = stringTwo ";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(2, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
sendSupportBeanTwo("E3", 3, 0, 29d, 34d);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E3"});
stmtTextDelete = "on SupportBeanTwo delete from MyWindow where intBoxed between intBoxedTwo and intBoxedTwo and intPrimitive = intPrimitiveTwo and theString = stringTwo ";
deleteStatements.add(epService.getEPAdministrator().createEPL(stmtTextDelete));
assertEquals(3, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
sendSupportBeanTwo("E4", 4, 40, 0d, null);
EPAssertionUtil.assertProps(listenerWindow.assertOneGetOldAndReset(), fields, new Object[]{"E4"});
// delete
for (EPStatement stmt : deleteStatements) {
stmt.destroy();
}
deleteStatements.clear();
assertEquals(0, epService.getNamedWindowService().getNamedWindowIndexes("MyWindow").length);
}
private SupportBean_A sendSupportBean_A(String id)
{
SupportBean_A bean = new SupportBean_A(id);
epService.getEPRuntime().sendEvent(bean);
return bean;
}
private SupportBean_B sendSupportBean_B(String id)
{
SupportBean_B bean = new SupportBean_B(id);
epService.getEPRuntime().sendEvent(bean);
return bean;
}
private SupportBean sendSupportBean(String theString, int intPrimitive, Integer intBoxed,
double doublePrimitive, Double doubleBoxed)
{
SupportBean bean = new SupportBean();
bean.setTheString(theString);
bean.setIntPrimitive(intPrimitive);
bean.setIntBoxed(intBoxed);
bean.setDoublePrimitive(doublePrimitive);
bean.setDoubleBoxed(doubleBoxed);
epService.getEPRuntime().sendEvent(bean);
return bean;
}
private SupportBeanTwo sendSupportBeanTwo(String theString, int intPrimitive, Integer intBoxed,
double doublePrimitive, Double doubleBoxed)
{
SupportBeanTwo bean = new SupportBeanTwo();
bean.setStringTwo(theString);
bean.setIntPrimitiveTwo(intPrimitive);
bean.setIntBoxedTwo(intBoxed);
bean.setDoublePrimitiveTwo(doublePrimitive);
bean.setDoubleBoxedTwo(doubleBoxed);
epService.getEPRuntime().sendEvent(bean);
return bean;
}
private SupportBean sendSupportBean(String theString, int intPrimitive)
{
SupportBean bean = new SupportBean();
bean.setTheString(theString);
bean.setIntPrimitive(intPrimitive);
epService.getEPRuntime().sendEvent(bean);
return bean;
}
private long getCount(String windowName) throws Exception
{
NamedWindowProcessor processor = ((EPServiceProviderSPI)epService).getNamedWindowService().getProcessor(windowName);
return processor.getProcessorInstance(null).getCountDataWindow();
}
}