/* * ************************************************************************************* * 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.*; import com.espertech.esper.client.scopetest.SupportUpdateListener; import com.espertech.esper.support.bean.*; import junit.framework.TestCase; import com.espertech.esper.support.client.SupportConfigFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class TestPerf3StreamOuterJoinCoercion extends TestCase { private EPServiceProvider epService; private SupportUpdateListener listener; public void setUp() { Configuration config = SupportConfigFactory.getConfiguration(); config.getEngineDefaults().getLogging().setEnableQueryPlan(true); epService = EPServiceProviderManager.getDefaultProvider(config); epService.initialize(); listener = new SupportUpdateListener(); } protected void tearDown() throws Exception { listener = null; } public void testPerfCoercion3waySceneOne() { String stmtText = "select s1.intBoxed as v1, s2.longBoxed as v2, s3.doubleBoxed as v3 from " + SupportBean.class.getName() + "(theString='A').win:length(1000000) s1 " + " left outer join " + SupportBean.class.getName() + "(theString='B').win:length(1000000) s2 on s1.intBoxed=s2.longBoxed " + " left outer join " + SupportBean.class.getName() + "(theString='C').win:length(1000000) s3 on s1.intBoxed=s3.doubleBoxed"; EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText); stmt.addListener(listener); // preload for (int i = 0; i < 10000; i++) { sendEvent("B", 0, i, 0); sendEvent("C", 0, 0, i); } long startTime = System.currentTimeMillis(); for (int i = 0; i < 5000; i++) { int index = 5000 + i % 1000; sendEvent("A", index, 0, 0); EventBean theEvent = listener.assertOneGetNewAndReset(); assertEquals(index, theEvent.get("v1")); assertEquals((long)index, theEvent.get("v2")); assertEquals((double) index, theEvent.get("v3")); } long endTime = System.currentTimeMillis(); long delta = endTime - startTime; assertTrue("Failed perf test, delta=" + delta, delta < 1500); } public void testPerfCoercion3waySceneTwo() { String stmtText = "select s1.intBoxed as v1, s2.longBoxed as v2, s3.doubleBoxed as v3 from " + SupportBean.class.getName() + "(theString='A').win:length(1000000) s1 " + " left outer join " + SupportBean.class.getName() + "(theString='B').win:length(1000000) s2 on s1.intBoxed=s2.longBoxed " + " left outer join " + SupportBean.class.getName() + "(theString='C').win:length(1000000) s3 on s1.intBoxed=s3.doubleBoxed"; EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText); stmt.addListener(listener); // preload for (int i = 0; i < 10000; i++) { sendEvent("B", 0, i, 0); sendEvent("A", i, 0, 0); } listener.reset(); long startTime = System.currentTimeMillis(); for (int i = 0; i < 5000; i++) { int index = 5000 + i % 1000; sendEvent("C", 0, 0, index); EventBean theEvent = listener.assertOneGetNewAndReset(); assertEquals(index, theEvent.get("v1")); assertEquals((long)index, theEvent.get("v2")); assertEquals((double) index, theEvent.get("v3")); } long endTime = System.currentTimeMillis(); long delta = endTime - startTime; assertTrue("Failed perf test, delta=" + delta, delta < 1500); } public void testPerfCoercion3waySceneThree() throws Exception { String stmtText = "select s1.intBoxed as v1, s2.longBoxed as v2, s3.doubleBoxed as v3 from " + SupportBean.class.getName() + "(theString='A').win:length(1000000) s1 " + " left outer join " + SupportBean.class.getName() + "(theString='B').win:length(1000000) s2 on s1.intBoxed=s2.longBoxed " + " left outer join " + SupportBean.class.getName() + "(theString='C').win:length(1000000) s3 on s1.intBoxed=s3.doubleBoxed"; EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText); stmt.addListener(listener); // preload for (int i = 0; i < 10000; i++) { sendEvent("A", i, 0, 0); sendEvent("C", 0, 0, i); } listener.reset(); long startTime = System.currentTimeMillis(); for (int i = 0; i < 5000; i++) { int index = 5000 + i % 1000; sendEvent("B", 0, index, 0); EventBean theEvent = listener.assertOneGetNewAndReset(); assertEquals(index, theEvent.get("v1")); assertEquals((long)index, theEvent.get("v2")); assertEquals((double) index, theEvent.get("v3")); } long endTime = System.currentTimeMillis(); long delta = endTime - startTime; assertTrue("Failed perf test, delta=" + delta, delta < 1500); } public void testPerfCoercion3wayRange() { epService.getEPAdministrator().getConfiguration().addEventType("SupportBean_ST0", SupportBean_ST0.class); epService.getEPAdministrator().getConfiguration().addEventType("SupportBean_ST1", SupportBean_ST1.class); epService.getEPAdministrator().getConfiguration().addEventType("SupportBeanRange", SupportBeanRange.class); String stmtText = "select * from " + "SupportBeanRange.win:keepall() sbr " + " left outer join " + "SupportBean_ST0.win:keepall() s0 on s0.key0=sbr.key" + " left outer join " + "SupportBean_ST1.win:keepall() s1 on s1.key1=s0.key0" + " where s0.p00 between sbr.rangeStartLong and sbr.rangeEndLong"; EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText); stmt.addListener(listener); // preload log.info("Preload"); for (int i = 0; i < 10; i++) { epService.getEPRuntime().sendEvent(new SupportBean_ST1("ST1_" + i, "K", i)); } for (int i = 0; i < 10000; i++) { epService.getEPRuntime().sendEvent(new SupportBean_ST0("ST0_" + i, "K", i)); } log.info("Preload done"); long startTime = System.currentTimeMillis(); for (int i = 0; i < 100; i++) { long index = 5000 + i; epService.getEPRuntime().sendEvent(SupportBeanRange.makeLong("R", "K", index, index + 2)); assertEquals(30, listener.getAndResetLastNewData().length); } long endTime = System.currentTimeMillis(); long delta = endTime - startTime; epService.getEPRuntime().sendEvent(new SupportBean_ST0("ST0X", "K", 5000)); assertEquals(10, listener.getAndResetLastNewData().length); epService.getEPRuntime().sendEvent(new SupportBean_ST1("ST1X", "K", 5004)); assertEquals(301, listener.getAndResetLastNewData().length); assertTrue("Failed perf test, delta=" + delta, delta < 500); } private void sendEvent(String theString, int intBoxed, long longBoxed, double doubleBoxed) { SupportBean bean = new SupportBean(); bean.setTheString(theString); bean.setIntBoxed(intBoxed); bean.setLongBoxed(longBoxed); bean.setDoubleBoxed(doubleBoxed); epService.getEPRuntime().sendEvent(bean); } private static final Log log = LogFactory.getLog(TestPerf3StreamOuterJoinCoercion.class); }