/*
***************************************************************************************
* 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.expr;
import com.espertech.esper.client.EPServiceProvider;
import com.espertech.esper.client.EPServiceProviderManager;
import com.espertech.esper.client.EPStatement;
import com.espertech.esper.client.EPStatementException;
import com.espertech.esper.client.scopetest.EPAssertionUtil;
import com.espertech.esper.client.scopetest.SupportUpdateListener;
import com.espertech.esper.client.soda.EPStatementObjectModel;
import com.espertech.esper.metrics.instrumentation.InstrumentationHelper;
import com.espertech.esper.supportregression.bean.SupportBean;
import com.espertech.esper.supportregression.bean.SupportBeanArrayCollMap;
import com.espertech.esper.supportregression.client.SupportConfigFactory;
import junit.framework.TestCase;
import java.util.Arrays;
public class TestAnyAllSomeExpr extends TestCase
{
private EPServiceProvider epService;
private SupportUpdateListener listener;
public void setUp()
{
listener = new SupportUpdateListener();
epService = EPServiceProviderManager.getDefaultProvider(SupportConfigFactory.getConfiguration());
epService.initialize();
if (InstrumentationHelper.ENABLED) { InstrumentationHelper.startTest(epService, this.getClass(), getName());}
epService.getEPAdministrator().getConfiguration().addEventType("SupportBean", SupportBean.class);
epService.getEPAdministrator().getConfiguration().addEventType("ArrayBean", SupportBeanArrayCollMap.class);
}
protected void tearDown() throws Exception {
if (InstrumentationHelper.ENABLED) { InstrumentationHelper.endTest();}
listener = null;
}
public void testEqualsAll()
{
String[] fields = "eq,neq,sqlneq,nneq".split(",");
String stmtText = "select " +
"intPrimitive=all(1,intBoxed) as eq, " +
"intPrimitive!=all(1,intBoxed) as neq, " +
"intPrimitive<>all(1,intBoxed) as sqlneq, " +
"not intPrimitive=all(1,intBoxed) as nneq " +
"from SupportBean(theString like \"E%\")";
EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText);
stmt.addListener(listener);
// in the format intPrimitive, intBoxed
int[][] testdata = {
{1, 1},
{1, 2},
{2, 2},
{2, 1},
};
Object[][] result = {
{true, false, false, false}, // 1, 1
{false, false, false, true}, // 1, 2
{false, false, false, true}, // 2, 2
{false, true, true, true} // 2, 1
};
for (int i = 0; i < testdata.length; i++)
{
SupportBean bean = new SupportBean("E", testdata[i][0]);
bean.setIntBoxed(testdata[i][1]);
epService.getEPRuntime().sendEvent(bean);
//System.out.println("line " + i);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, result[i]);
}
// test OM
stmt.destroy();
EPStatementObjectModel model = epService.getEPAdministrator().compileEPL(stmtText);
assertEquals(stmtText.replace("<>", "!="), model.toEPL());
stmt = epService.getEPAdministrator().create(model);
stmt.addListener(listener);
for (int i = 0; i < testdata.length; i++)
{
SupportBean bean = new SupportBean("E", testdata[i][0]);
bean.setIntBoxed(testdata[i][1]);
epService.getEPRuntime().sendEvent(bean);
//System.out.println("line " + i);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, result[i]);
}
}
public void testEqualsAllArray()
{
String[] fields = "e,ne".split(",");
String stmtText = "select " +
"longBoxed = all ({1, 1}, intArr, longCol) as e, " +
"longBoxed != all ({1, 1}, intArr, longCol) as ne " +
"from ArrayBean";
EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText);
stmt.addListener(listener);
SupportBeanArrayCollMap arrayBean = new SupportBeanArrayCollMap(new int[] {1, 1});
arrayBean.setLongCol(Arrays.asList(1L, 1L));
arrayBean.setLongBoxed(1L);
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{true, false});
arrayBean.setIntArr(new int[] {1, 1, 0});
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{false, false});
arrayBean.setLongBoxed(2L);
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{false, true});
}
public void testEqualsAnyArray()
{
String[] fields = "e,ne".split(",");
String stmtText = "select " +
"longBoxed = any ({1, 1}, intArr, longCol) as e, " +
"longBoxed != any ({1, 1}, intArr, longCol) as ne " +
"from ArrayBean";
EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText);
stmt.addListener(listener);
SupportBeanArrayCollMap arrayBean = new SupportBeanArrayCollMap(new int[] {1, 1});
arrayBean.setLongCol(Arrays.asList(1L, 1L));
arrayBean.setLongBoxed(1L);
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{true, false});
arrayBean.setIntArr(new int[] {1, 1, 0});
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{true, true});
arrayBean.setLongBoxed(2L);
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{false, true});
}
public void testRelationalOpAllArray()
{
String[] fields = "g,ge".split(",");
String stmtText = "select " +
"longBoxed>all({1,2},intArr,intCol) as g, " +
"longBoxed>=all({1,2},intArr,intCol) as ge " +
"from ArrayBean";
EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText);
stmt.addListener(listener);
SupportBeanArrayCollMap arrayBean = new SupportBeanArrayCollMap(new int[] {1, 2});
arrayBean.setIntCol(Arrays.asList(1, 2));
arrayBean.setLongBoxed(3L);
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{true, true});
arrayBean.setLongBoxed(2L);
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{false, true});
arrayBean = new SupportBeanArrayCollMap(new int[] {1, 3});
arrayBean.setIntCol(Arrays.asList(1, 2));
arrayBean.setLongBoxed(3L);
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{false, true});
arrayBean = new SupportBeanArrayCollMap(new int[] {1, 2});
arrayBean.setIntCol(Arrays.asList(1, 3));
arrayBean.setLongBoxed(3L);
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{false, true});
// test OM
stmt.destroy();
EPStatementObjectModel model = epService.getEPAdministrator().compileEPL(stmtText);
assertEquals(stmtText.replace("<>", "!="), model.toEPL());
stmt = epService.getEPAdministrator().create(model);
stmt.addListener(listener);
arrayBean = new SupportBeanArrayCollMap(new int[] {1, 2});
arrayBean.setIntCol(Arrays.asList(1, 2));
arrayBean.setLongBoxed(3L);
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{true, true});
}
public void testRelationalOpNullOrNoRows()
{
// test array
String[] fields = "vall,vany".split(",");
String stmtText = "select " +
"intBoxed >= all ({doubleBoxed, longBoxed}) as vall, " +
"intBoxed >= any ({doubleBoxed, longBoxed}) as vany " +
" from SupportBean(theString like 'E%')";
EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText);
stmt.addListener(listener);
sendEvent("E3", null, null, null);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, null});
sendEvent("E4", 1, null, null);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, null});
sendEvent("E5", null, 1d, null);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, null});
sendEvent("E6", 1, 1d, null);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, true});
sendEvent("E7", 0, 1d, null);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{false, false});
// test fields
stmt.destroy();
fields = "vall,vany".split(",");
stmtText = "select " +
"intBoxed >= all (doubleBoxed, longBoxed) as vall, " +
"intBoxed >= any (doubleBoxed, longBoxed) as vany " +
" from SupportBean(theString like 'E%')";
stmt = epService.getEPAdministrator().createEPL(stmtText);
stmt.addListener(listener);
sendEvent("E3", null, null, null);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, null});
sendEvent("E4", 1, null, null);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, null});
sendEvent("E5", null, 1d, null);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, null});
sendEvent("E6", 1, 1d, null);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, true});
sendEvent("E7", 0, 1d, null);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{false, false});
}
public void testRelationalOpAnyArray()
{
String[] fields = "g,ge".split(",");
String stmtText = "select " +
"longBoxed > any ({1, 2}, intArr, intCol) as g, " +
"longBoxed >= any ({1, 2}, intArr, intCol) as ge " +
"from ArrayBean";
EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText);
stmt.addListener(listener);
SupportBeanArrayCollMap arrayBean = new SupportBeanArrayCollMap(new int[] {1, 2});
arrayBean.setIntCol(Arrays.asList(1, 2));
arrayBean.setLongBoxed(1L);
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{false, true});
arrayBean.setLongBoxed(2L);
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{true, true});
arrayBean = new SupportBeanArrayCollMap(new int[] {2, 2});
arrayBean.setIntCol(Arrays.asList(2, 1));
arrayBean.setLongBoxed(1L);
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{false, true});
arrayBean = new SupportBeanArrayCollMap(new int[] {1, 1});
arrayBean.setIntCol(Arrays.asList(1, 1));
arrayBean.setLongBoxed(0L);
epService.getEPRuntime().sendEvent(arrayBean);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{false, false});
}
public void testEqualsAny()
{
String[] fields = "eq,neq,sqlneq,nneq".split(",");
String stmtText = "select " +
"intPrimitive = any (1, intBoxed) as eq, " +
"intPrimitive != any (1, intBoxed) as neq, " +
"intPrimitive <> any (1, intBoxed) as sqlneq, " +
"not intPrimitive = any (1, intBoxed) as nneq " +
" from SupportBean(theString like 'E%')";
EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText);
stmt.addListener(listener);
// in the format intPrimitive, intBoxed
int[][] testdata = {
{1, 1},
{1, 2},
{2, 2},
{2, 1},
};
Object[][] result = {
{true, false, false, false}, // 1, 1
{true, true, true, false}, // 1, 2
{true, true, true, false}, // 2, 2
{false, true, true, true} // 2, 1
};
for (int i = 0; i < testdata.length; i++)
{
SupportBean bean = new SupportBean("E", testdata[i][0]);
bean.setIntBoxed(testdata[i][1]);
epService.getEPRuntime().sendEvent(bean);
//System.out.println("line " + i);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, result[i]);
}
}
public void testRelationalOpAll()
{
String[] fields = "g,ge,l,le".split(",");
String stmtText = "select " +
"intPrimitive > all (1, 3, 4) as g, " +
"intPrimitive >= all (1, 3, 4) as ge, " +
"intPrimitive < all (1, 3, 4) as l, " +
"intPrimitive <= all (1, 3, 4) as le " +
" from SupportBean(theString like 'E%')";
EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText);
stmt.addListener(listener);
Object[][] result = {
{false, false, true, true},
{false, false, false, true},
{false, false, false, false},
{false, false, false, false},
{false, true, false, false},
{true, true, false, false}
};
for (int i = 0; i < 6; i++)
{
epService.getEPRuntime().sendEvent(new SupportBean("E1", i));
//System.out.println("line " + i);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, result[i]);
}
}
public void testRelationalOpAny()
{
String[] fields = "g,ge,l,le".split(",");
String stmtText = "select " +
"intPrimitive > any (1, 3, 4) as g, " +
"intPrimitive >= some (1, 3, 4) as ge, " +
"intPrimitive < any (1, 3, 4) as l, " +
"intPrimitive <= some (1, 3, 4) as le " +
" from SupportBean(theString like 'E%')";
EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText);
stmt.addListener(listener);
Object[][] result = {
{false, false, true, true},
{false, true, true, true},
{true, true, true, true},
{true, true, true, true},
{true, true, false, true},
{true, true, false, false}
};
for (int i = 0; i < 6; i++)
{
epService.getEPRuntime().sendEvent(new SupportBean("E1", i));
//System.out.println("line " + i);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, result[i]);
}
}
public void testEqualsInNullOrNoRows()
{
// test fixed array case
String[] fields = "eall,eany,neall,neany,isin".split(",");
String stmtText = "select " +
"intBoxed = all ({doubleBoxed, longBoxed}) as eall, " +
"intBoxed = any ({doubleBoxed, longBoxed}) as eany, " +
"intBoxed != all ({doubleBoxed, longBoxed}) as neall, " +
"intBoxed != any ({doubleBoxed, longBoxed}) as neany, " +
"intBoxed in ({doubleBoxed, longBoxed}) as isin " +
" from SupportBean";
EPStatement stmt = epService.getEPAdministrator().createEPL(stmtText);
stmt.addListener(listener);
sendEvent("E3", null, null, null);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, null, null, null, null});
sendEvent("E4", 1, null, null);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, null, null, null, null});
sendEvent("E5", null, null, 1L);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, null, null, null, null});
sendEvent("E6", 1, null, 1L);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, true, false, null, true});
sendEvent("E7", 0, null, 1L);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{false, null, null, true, null});
// test non-array case
stmt.destroy();
fields = "eall,eany,neall,neany,isin".split(",");
stmtText = "select " +
"intBoxed = all (doubleBoxed, longBoxed) as eall, " +
"intBoxed = any (doubleBoxed, longBoxed) as eany, " +
"intBoxed != all (doubleBoxed, longBoxed) as neall, " +
"intBoxed != any (doubleBoxed, longBoxed) as neany, " +
"intBoxed in (doubleBoxed, longBoxed) as isin " +
" from SupportBean";
stmt = epService.getEPAdministrator().createEPL(stmtText);
stmt.addListener(listener);
sendEvent("E3", null, null, null);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, null, null, null, null});
sendEvent("E4", 1, null, null);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, null, null, null, null});
sendEvent("E5", null, null, 1L);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, null, null, null, null});
sendEvent("E6", 1, null, 1L);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{null, true, false, null, true});
sendEvent("E7", 0, null, 1L);
EPAssertionUtil.assertProps(listener.assertOneGetNewAndReset(), fields, new Object[]{false, null, null, true, null});
}
public void testInvalid()
{
try
{
String stmtText = "select intArr = all (1, 2, 3) as r1 from ArrayBean";
epService.getEPAdministrator().createEPL(stmtText);
fail();
}
catch (EPStatementException ex)
{
assertEquals("Error starting statement: Failed to validate select-clause expression 'intArr=all(1,2,3)': Collection or array comparison is not allowed for the IN, ANY, SOME or ALL keywords [select intArr = all (1, 2, 3) as r1 from ArrayBean]", ex.getMessage());
}
try
{
String stmtText = "select intArr > all (1, 2, 3) as r1 from ArrayBean";
epService.getEPAdministrator().createEPL(stmtText);
fail();
}
catch (EPStatementException ex)
{
assertEquals("Error starting statement: Failed to validate select-clause expression 'intArr>all(1,2,3)': Collection or array comparison is not allowed for the IN, ANY, SOME or ALL keywords [select intArr > all (1, 2, 3) as r1 from ArrayBean]", ex.getMessage());
}
}
public void sendEvent(String theString, Integer intBoxed, Double doubleBoxed, Long longBoxed)
{
SupportBean bean = new SupportBean(theString, -1);
bean.setIntBoxed(intBoxed);
bean.setDoubleBoxed(doubleBoxed);
bean.setLongBoxed(longBoxed);
epService.getEPRuntime().sendEvent(bean);
}
}