/* *************************************************************************************** * 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.nwtable; import com.espertech.esper.client.*; import com.espertech.esper.client.scopetest.EPAssertionUtil; import com.espertech.esper.client.scopetest.SupportUpdateListener; import com.espertech.esper.core.service.EPStatementSPI; import com.espertech.esper.core.service.StatementType; import com.espertech.esper.metrics.instrumentation.InstrumentationHelper; import com.espertech.esper.supportregression.bean.SupportBean; import com.espertech.esper.supportregression.bean.SupportBean_A; import com.espertech.esper.supportregression.bean.SupportBean_B; import com.espertech.esper.supportregression.client.SupportConfigFactory; import com.espertech.esper.supportregression.epl.SupportQueryPlanIndexHook; import com.espertech.esper.supportregression.util.IndexBackingTableInfo; import junit.framework.TestCase; public class TestNamedWindowOnSelect extends TestCase implements IndexBackingTableInfo { private EPServiceProvider epService; private SupportUpdateListener listenerSelect; private SupportUpdateListener listenerConsumer; public void setUp() { Configuration config = SupportConfigFactory.getConfiguration(); config.getEngineDefaults().getLogging().setEnableQueryPlan(true); epService = EPServiceProviderManager.getDefaultProvider(config); epService.initialize(); if (InstrumentationHelper.ENABLED) { InstrumentationHelper.startTest(epService, this.getClass(), getName());} listenerSelect = new SupportUpdateListener(); listenerConsumer = new SupportUpdateListener(); SupportQueryPlanIndexHook.reset(); } protected void tearDown() throws Exception { if (InstrumentationHelper.ENABLED) { InstrumentationHelper.endTest();} listenerSelect = null; listenerConsumer = null; } public void testInsertIntoWildcardUndType() { String[] fields = new String[] {"theString", "intPrimitive"}; // create window String stmtTextCreate = "create window MyWindow#keepall as select * from " + SupportBean.class.getName(); EPStatement stmtCreate = epService.getEPAdministrator().createEPL(stmtTextCreate); // create insert into String stmtTextInsertOne = "insert into MyWindow select * from " + SupportBean.class.getName() + "(theString like 'E%')"; epService.getEPAdministrator().createEPL(stmtTextInsertOne); // create on-select stmt String stmtTextSelect = "on " + SupportBean_A.class.getName() + " insert into MyStream select mywin.* from MyWindow as mywin order by theString asc"; EPStatement stmtSelect = epService.getEPAdministrator().createEPL(stmtTextSelect); stmtSelect.addListener(listenerSelect); assertEquals(StatementType.ON_INSERT, ((EPStatementSPI) stmtSelect).getStatementMetadata().getStatementType()); // create consuming statement String stmtTextConsumer = "select * from default.MyStream"; EPStatement stmtConsumer = epService.getEPAdministrator().createEPL(stmtTextConsumer); stmtConsumer.addListener(listenerConsumer); // create second inserting statement String stmtTextInsertTwo = "insert into MyStream select * from " + SupportBean.class.getName() + "(theString like 'I%')"; epService.getEPAdministrator().createEPL(stmtTextInsertTwo); // send event sendSupportBean("E1", 1); assertFalse(listenerSelect.isInvoked()); assertFalse(listenerConsumer.isInvoked()); EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E1", 1}}); // fire trigger sendSupportBean_A("A1"); EPAssertionUtil.assertProps(listenerSelect.assertOneGetNewAndReset(), fields, new Object[]{"E1", 1}); EPAssertionUtil.assertProps(listenerConsumer.assertOneGetNewAndReset(), fields, new Object[]{"E1", 1}); // insert via 2nd insert into sendSupportBean("I2", 2); assertFalse(listenerSelect.isInvoked()); EPAssertionUtil.assertProps(listenerConsumer.assertOneGetNewAndReset(), fields, new Object[]{"I2", 2}); EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E1", 1}}); // send event sendSupportBean("E3", 3); assertFalse(listenerSelect.isInvoked()); assertFalse(listenerConsumer.isInvoked()); EPAssertionUtil.assertPropsPerRow(stmtCreate.iterator(), fields, new Object[][]{{"E1", 1}, {"E3", 3}}); // fire trigger sendSupportBean_A("A2"); assertEquals(1, listenerSelect.getNewDataList().size()); EPAssertionUtil.assertPropsPerRow(listenerSelect.getLastNewData(), fields, new Object[][]{{"E1", 1}, {"E3", 3}}); listenerSelect.reset(); assertEquals(2, listenerConsumer.getNewDataList().size()); EPAssertionUtil.assertPropsPerRow(listenerConsumer.getNewDataListFlattened(), fields, new Object[][]{{"E1", 1}, {"E3", 3}}); listenerConsumer.reset(); // check type EventType consumerType = stmtConsumer.getEventType(); assertEquals(String.class, consumerType.getPropertyType("theString")); assertTrue(consumerType.getPropertyNames().length > 10); assertEquals(SupportBean.class, consumerType.getUnderlyingType()); // check type EventType onSelectType = stmtSelect.getEventType(); assertEquals(String.class, onSelectType.getPropertyType("theString")); assertTrue(onSelectType.getPropertyNames().length > 10); assertEquals(SupportBean.class, onSelectType.getUnderlyingType()); // delete all from named window String stmtTextDelete = "on " + SupportBean_B.class.getName() + " delete from MyWindow"; epService.getEPAdministrator().createEPL(stmtTextDelete); sendSupportBean_B("B1"); // fire trigger - nothing to insert sendSupportBean_A("A3"); stmtConsumer.destroy(); stmtSelect.destroy(); stmtCreate.destroy(); } 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) { SupportBean bean = new SupportBean(); bean.setTheString(theString); bean.setIntPrimitive(intPrimitive); epService.getEPRuntime().sendEvent(bean); return bean; } private void assertCountS0Window(long expected) { assertEquals(expected, epService.getEPRuntime().executeQuery("select count(*) as c0 from S0Window").getArray()[0].get("c0")); } }