/* * ************************************************************************************* * 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.core.service.EPServiceProviderSPI; 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; import java.util.Map; public class TestCompositeSelect extends TestCase { public void testFollowedByFilter() { Configuration config = SupportConfigFactory.getConfiguration(); config.addEventType("A", SupportBean_A.class.getName()); config.addEventType("B", SupportBean_B.class.getName()); EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(config); epService.initialize(); String stmtTxtOne = "insert into StreamOne select * from pattern [a=A -> b=B]"; epService.getEPAdministrator().createEPL(stmtTxtOne); SupportUpdateListener listener = new SupportUpdateListener(); String stmtTxtTwo = "select *, 1 as code from StreamOne"; EPStatement stmtTwo = epService.getEPAdministrator().createEPL(stmtTxtTwo); stmtTwo.addListener(listener); epService.getEPRuntime().sendEvent(new SupportBean_A("A1")); epService.getEPRuntime().sendEvent(new SupportBean_B("B1")); EventBean theEvent = listener.assertOneGetNewAndReset(); Object[] values = new Object[stmtTwo.getEventType().getPropertyNames().length]; int count = 0; for (String name : stmtTwo.getEventType().getPropertyNames()) { values[count++] = theEvent.get(name); } EPAssertionUtil.assertEqualsAnyOrder(new Object[]{ new EventPropertyDescriptor("a", SupportBean_A.class, null, false, false, false, false, true), new EventPropertyDescriptor("b", SupportBean_B.class, null, false, false, false, false, true) }, ((EPServiceProviderSPI) epService).getEventAdapterService().getExistsTypeByName("StreamOne").getPropertyDescriptors()); } public void testFragment() { Configuration config = SupportConfigFactory.getConfiguration(); config.addEventType("A", SupportBean_A.class.getName()); config.addEventType("B", SupportBean_B.class.getName()); EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(config); epService.initialize(); String stmtTxtOne = "select * from pattern [[2] a=A -> b=B]"; EPStatement stmt = epService.getEPAdministrator().createEPL(stmtTxtOne); SupportUpdateListener listener = new SupportUpdateListener(); stmt.addListener(listener); EPAssertionUtil.assertEqualsAnyOrder(new Object[]{ new EventPropertyDescriptor("a", SupportBean_A[].class, SupportBean_A.class, false, false, true, false, true), new EventPropertyDescriptor("b", SupportBean_B.class, null, false, false, false, false, true) }, stmt.getEventType().getPropertyDescriptors()); epService.getEPRuntime().sendEvent(new SupportBean_A("A1")); epService.getEPRuntime().sendEvent(new SupportBean_A("A2")); epService.getEPRuntime().sendEvent(new SupportBean_B("B1")); EventBean theEvent = listener.assertOneGetNewAndReset(); assertTrue(theEvent.getUnderlying() instanceof Map); // test fragment B type and event FragmentEventType typeFragB = theEvent.getEventType().getFragmentType("b"); assertFalse(typeFragB.isIndexed()); assertEquals("B", typeFragB.getFragmentType().getName()); assertEquals(String.class, typeFragB.getFragmentType().getPropertyType("id")); EventBean eventFragB = (EventBean) theEvent.getFragment("b"); assertEquals("B", eventFragB.getEventType().getName()); // test fragment A type and event FragmentEventType typeFragA = theEvent.getEventType().getFragmentType("a"); assertTrue(typeFragA.isIndexed()); assertEquals("A", typeFragA.getFragmentType().getName()); assertEquals(String.class, typeFragA.getFragmentType().getPropertyType("id")); assertTrue(theEvent.getFragment("a") instanceof EventBean[]); EventBean eventFragA1 = (EventBean) theEvent.getFragment("a[0]"); assertEquals("A", eventFragA1.getEventType().getName()); assertEquals("A1", eventFragA1.get("id")); EventBean eventFragA2 = (EventBean) theEvent.getFragment("a[1]"); assertEquals("A", eventFragA2.getEventType().getName()); assertEquals("A2", eventFragA2.get("id")); } }