示例#1
0
        public void TestLengthBatch()
        {
            String[]    fields = new String[] { "TheString" };
            EPStatement stmt   = _epService.EPAdministrator.CreateEPL("select irstream * from SupportBean.win:expr_batch(current_count >= 3, true)");

            stmt.Events += _listener.Update;

            _epService.EPRuntime.SendEvent(new SupportBean("E1", 1));
            _epService.EPRuntime.SendEvent(new SupportBean("E2", 2));
            Assert.IsFalse(_listener.IsInvoked);

            _epService.EPRuntime.SendEvent(new SupportBean("E3", 3));
            EPAssertionUtil.AssertPropsPerRow(_listener.GetAndResetLastNewData(), fields, new Object[][] { new Object[] { "E1" }, new Object[] { "E2" }, new Object[] { "E3" } });

            _epService.EPRuntime.SendEvent(new SupportBean("E4", 4));
            _epService.EPRuntime.SendEvent(new SupportBean("E5", 5));
            Assert.IsFalse(_listener.IsInvoked);

            _epService.EPRuntime.SendEvent(new SupportBean("E6", 6));
            EPAssertionUtil.AssertPropsPerRow(_listener.LastNewData, fields, new Object[][] { new Object[] { "E4" }, new Object[] { "E5" }, new Object[] { "E6" } });
            EPAssertionUtil.AssertPropsPerRow(_listener.GetAndResetLastOldData(), fields, new Object[][] { new Object[] { "E1" }, new Object[] { "E2" }, new Object[] { "E3" } });

            _epService.EPRuntime.SendEvent(new SupportBean("E7", 7));
            _epService.EPRuntime.SendEvent(new SupportBean("E8", 8));
            Assert.IsFalse(_listener.IsInvoked);

            _epService.EPRuntime.SendEvent(new SupportBean("E9", 9));
            EPAssertionUtil.AssertPropsPerRow(_listener.LastNewData, fields, new Object[][] { new Object[] { "E7" }, new Object[] { "E8" }, new Object[] { "E9" } });
            EPAssertionUtil.AssertPropsPerRow(_listener.GetAndResetLastOldData(), fields, new Object[][] { new Object[] { "E4" }, new Object[] { "E5" }, new Object[] { "E6" } });

            stmt.Dispose();
        }
        private void RunAssertionLengthBatch(EPServiceProvider epService)
        {
            var         fields   = new string[] { "TheString" };
            EPStatement stmt     = epService.EPAdministrator.CreateEPL("select irstream * from SupportBean#expr_batch(current_count >= 3, true)");
            var         listener = new SupportUpdateListener();

            stmt.Events += listener.Update;

            epService.EPRuntime.SendEvent(new SupportBean("E1", 1));
            epService.EPRuntime.SendEvent(new SupportBean("E2", 2));
            Assert.IsFalse(listener.IsInvoked);

            epService.EPRuntime.SendEvent(new SupportBean("E3", 3));
            EPAssertionUtil.AssertPropsPerRow(listener.GetAndResetLastNewData(), fields, new object[][] { new object[] { "E1" }, new object[] { "E2" }, new object[] { "E3" } });

            epService.EPRuntime.SendEvent(new SupportBean("E4", 4));
            epService.EPRuntime.SendEvent(new SupportBean("E5", 5));
            Assert.IsFalse(listener.IsInvoked);

            epService.EPRuntime.SendEvent(new SupportBean("E6", 6));
            EPAssertionUtil.AssertPropsPerRow(listener.LastNewData, fields, new object[][] { new object[] { "E4" }, new object[] { "E5" }, new object[] { "E6" } });
            EPAssertionUtil.AssertPropsPerRow(listener.GetAndResetLastOldData(), fields, new object[][] { new object[] { "E1" }, new object[] { "E2" }, new object[] { "E3" } });

            epService.EPRuntime.SendEvent(new SupportBean("E7", 7));
            epService.EPRuntime.SendEvent(new SupportBean("E8", 8));
            Assert.IsFalse(listener.IsInvoked);

            epService.EPRuntime.SendEvent(new SupportBean("E9", 9));
            EPAssertionUtil.AssertPropsPerRow(listener.LastNewData, fields, new object[][] { new object[] { "E7" }, new object[] { "E8" }, new object[] { "E9" } });
            EPAssertionUtil.AssertPropsPerRow(listener.GetAndResetLastOldData(), fields, new object[][] { new object[] { "E4" }, new object[] { "E5" }, new object[] { "E6" } });

            stmt.Dispose();
        }
        private void TryAssertionTimeBatchAndUnique(EPServiceProvider epService, SupportUpdateListener listener, long startTime)
        {
            string[] fields = "TheString,IntPrimitive".Split(',');
            listener.Reset();

            SendEvent(epService, "E1", 1);
            SendEvent(epService, "E2", 2);
            SendEvent(epService, "E1", 3);
            Assert.IsFalse(listener.IsInvoked);

            epService.EPRuntime.SendEvent(new CurrentTimeEvent(startTime + 1000));
            EPAssertionUtil.AssertPropsPerRow(listener.LastNewData, fields, new object[][] { new object[] { "E2", 2 }, new object[] { "E1", 3 } });
            Assert.IsNull(listener.GetAndResetLastOldData());

            SendEvent(epService, "E3", 3);
            SendEvent(epService, "E3", 4);
            SendEvent(epService, "E3", 5);
            SendEvent(epService, "E4", 6);
            SendEvent(epService, "E3", 7);
            Assert.IsFalse(listener.IsInvoked);

            epService.EPRuntime.SendEvent(new CurrentTimeEvent(startTime + 2000));
            EPAssertionUtil.AssertPropsPerRow(listener.LastNewData, fields, new object[][] { new object[] { "E4", 6 }, new object[] { "E3", 7 } });
            Assert.IsNull(listener.GetAndResetLastOldData());
        }
        private void RunAssertionUniqueAndBatch(EPStatement stmt)
        {
            var fields = new String[] { "TheString" };

            SendEvent("E1", 1);
            EPAssertionUtil.AssertPropsPerRowAnyOrder(stmt.GetEnumerator(), fields, ToArr("E1"));
            Assert.IsFalse(_listener.IsInvoked);

            SendEvent("E2", 2);
            EPAssertionUtil.AssertPropsPerRowAnyOrder(stmt.GetEnumerator(), fields, ToArr("E1", "E2"));
            Assert.IsFalse(_listener.IsInvoked);

            SendEvent("E3", 3);
            EPAssertionUtil.AssertPropsPerRowAnyOrder(stmt.GetEnumerator(), fields, null);
            EPAssertionUtil.AssertPropsPerRow(_listener.LastNewData, fields, new Object[][] { new Object[] { "E1" }, new Object[] { "E2" }, new Object[] { "E3" } });
            Assert.IsNull(_listener.GetAndResetLastOldData());

            SendEvent("E4", 4);
            EPAssertionUtil.AssertPropsPerRowAnyOrder(stmt.GetEnumerator(), fields, ToArr("E4"));
            Assert.IsFalse(_listener.IsInvoked);

            SendEvent("E5", 4); // throws out E5
            EPAssertionUtil.AssertPropsPerRowAnyOrder(stmt.GetEnumerator(), fields, ToArr("E5"));
            Assert.IsFalse(_listener.IsInvoked);

            SendEvent("E6", 4); // throws out E6
            EPAssertionUtil.AssertPropsPerRowAnyOrder(stmt.GetEnumerator(), fields, ToArr("E6"));
            Assert.IsFalse(_listener.IsInvoked);

            SendEvent("E7", 5);
            EPAssertionUtil.AssertPropsPerRowAnyOrder(stmt.GetEnumerator(), fields, ToArr("E6", "E7"));
            Assert.IsFalse(_listener.IsInvoked);

            SendEvent("E8", 6);
            EPAssertionUtil.AssertPropsPerRowAnyOrder(stmt.GetEnumerator(), fields, null);
            EPAssertionUtil.AssertPropsPerRow(_listener.LastNewData, fields, new Object[][] { new Object[] { "E6" }, new Object[] { "E7" }, new Object[] { "E8" } });
            EPAssertionUtil.AssertPropsPerRow(_listener.LastOldData, fields, new Object[][] { new Object[] { "E1" }, new Object[] { "E2" }, new Object[] { "E3" } });
            _listener.Reset();

            SendEvent("E8", 7);
            SendEvent("E9", 9);
            SendEvent("E9", 9);
            EPAssertionUtil.AssertPropsPerRowAnyOrder(stmt.GetEnumerator(), fields, ToArr("E8", "E9"));
            Assert.IsFalse(_listener.IsInvoked);

            SendEvent("E10", 11);
            EPAssertionUtil.AssertPropsPerRowAnyOrder(stmt.GetEnumerator(), fields, null);
            EPAssertionUtil.AssertPropsPerRow(_listener.LastNewData, fields, new Object[][] { new Object[] { "E10" }, new Object[] { "E8" }, new Object[] { "E9" } });
            EPAssertionUtil.AssertPropsPerRow(_listener.LastOldData, fields, new Object[][] { new Object[] { "E6" }, new Object[] { "E7" }, new Object[] { "E8" } });
            _listener.Reset();
        }
示例#5
0
        public void TestTimeBatchRowPerGroupJoin()
        {
            SendTimer(0);
            String stmtText = "select irstream Symbol, sum(Price) as sumPrice " +
                              " from MarketData.win:time_batch(1 sec) as S0, SupportBean.win:keepall() as S1" +
                              " where S0.Symbol = S1.TheString " +
                              " group by Symbol";
            EPStatement stmt = _epService.EPAdministrator.CreateEPL(stmtText);

            stmt.Events += _listener.Update;

            SendSupportEvent("DELL");
            SendSupportEvent("IBM");

            // send first batch
            SendMDEvent("DELL", 10, 0L);
            SendMDEvent("IBM", 15, 0L);
            SendMDEvent("DELL", 20, 0L);
            SendTimer(1000);

            String[] fields = "Symbol,sumPrice".Split(',');
            EPAssertionUtil.AssertPropsPerRowAnyOrder(_listener.GetAndResetLastNewData(), fields, new object[][] { new object[] { "DELL", 30d }, new object[] { "IBM", 15d } });

            // send second batch
            SendMDEvent("IBM", 20, 600L);
            SendTimer(2000);

            EPAssertionUtil.AssertPropsPerRowAnyOrder(_listener.LastNewData, fields, new object[][] { new object[] { "DELL", null }, new object[] { "IBM", 20d } });
            EPAssertionUtil.AssertPropsPerRowAnyOrder(_listener.GetAndResetLastOldData(), fields, new object[][] { new object[] { "DELL", 30d }, new object[] { "IBM", 15d } });
        }
示例#6
0
        public void TestOnUpdateWTypeWiden()
        {
            SupportUpdateListener listenerUpdate = new SupportUpdateListener();

            string[] fields = "keyOne,keyTwo,p0".Split(',');
            _epService.EPAdministrator.CreateEPL("create table varagg as (" +
                                                 "keyOne string primary key, keyTwo int primary key, p0 long)");
            _epService.EPAdministrator.CreateEPL("on SupportBean merge varagg where TheString = keyOne and " +
                                                 "IntPrimitive = keyTwo when not matched then insert select TheString as keyOne, IntPrimitive as keyTwo, 1 as p0");
            _epService.EPAdministrator.CreateEPL("select varagg[p00, id].p0 as value from SupportBean_S0").AddListener(_listener);
            EPStatement stmtUpdate = _epService.EPAdministrator.CreateEPL("on MyUpdateEvent update varagg set p0 = newValue " +
                                                                          "where k1 = keyOne and k2 = keyTwo");

            stmtUpdate.AddListener(listenerUpdate);

            object[][] expectedType = new object[][] { new object[] { "keyOne", typeof(string) }, new object[] { "keyTwo", typeof(int) }, new object[] { "p0", typeof(long) } };
            EventTypeAssertionUtil.AssertEventTypeProperties(expectedType, stmtUpdate.EventType, EventTypeAssertionEnum.NAME, EventTypeAssertionEnum.TYPE);

            _epService.EPRuntime.SendEvent(new SupportBean("G1", 10));
            AssertValues(new object[][] { new object[] { "G1", 10 } }, new long?[] { 1L });

            _epService.EPRuntime.SendEvent(new MyUpdateEvent("G1", 10, 2));
            AssertValues(new object[][] { new object[] { "G1", 10 } }, new long?[] { 2L });
            EPAssertionUtil.AssertProps(listenerUpdate.LastNewData[0], fields, new object[] { "G1", 10, 2L });
            EPAssertionUtil.AssertProps(listenerUpdate.GetAndResetLastOldData()[0], fields, new object[] { "G1", 10, 1L });

            // try property method invocation
            _epService.EPAdministrator.CreateEPL("create table MyTableSuppBean as (sb SupportBean)");
            _epService.EPAdministrator.CreateEPL("on SupportBean_S0 update MyTableSuppBean sb set sb.set_LongPrimitive(10)");
        }
        private void RunAssertionTimeBatchRowPerGroupJoin(EPServiceProvider epService)
        {
            SendTimer(epService, 0);
            string stmtText = "select irstream symbol, sum(price) as sumPrice " +
                              " from MarketData#time_batch(1 sec) as S0, SupportBean#keepall as S1" +
                              " where S0.symbol = S1.TheString " +
                              " group by symbol";
            EPStatement stmt     = epService.EPAdministrator.CreateEPL(stmtText);
            var         listener = new SupportUpdateListener();

            stmt.Events += listener.Update;

            SendSupportEvent(epService, "DELL");
            SendSupportEvent(epService, "IBM");

            // send first batch
            SendMDEvent(epService, "DELL", 10, 0L);
            SendMDEvent(epService, "IBM", 15, 0L);
            SendMDEvent(epService, "DELL", 20, 0L);
            SendTimer(epService, 1000);

            string[] fields = "symbol,sumPrice".Split(',');
            EPAssertionUtil.AssertPropsPerRowAnyOrder(listener.GetAndResetLastNewData(), fields, new object[][] { new object[] { "DELL", 30d }, new object[] { "IBM", 15d } });

            // send second batch
            SendMDEvent(epService, "IBM", 20, 600L);
            SendTimer(epService, 2000);

            EPAssertionUtil.AssertPropsPerRowAnyOrder(listener.LastNewData, fields, new object[][] { new object[] { "DELL", null }, new object[] { "IBM", 20d } });
            EPAssertionUtil.AssertPropsPerRowAnyOrder(listener.GetAndResetLastOldData(), fields, new object[][] { new object[] { "DELL", 30d }, new object[] { "IBM", 15d } });

            stmt.Dispose();
        }
        private void TryAssertionLengthBatchAndFirstUnique(EPServiceProvider epService, SupportUpdateListener listener)
        {
            string[] fields = "TheString,IntPrimitive".Split(',');

            SendEvent(epService, "E1", 1);
            SendEvent(epService, "E2", 2);
            SendEvent(epService, "E1", 3);
            Assert.IsFalse(listener.IsInvoked);

            SendEvent(epService, "E3", 4);
            EPAssertionUtil.AssertPropsPerRow(listener.LastNewData, fields, new object[][] { new object[] { "E1", 1 }, new object[] { "E2", 2 }, new object[] { "E3", 4 } });
            Assert.IsNull(listener.GetAndResetLastOldData());

            SendEvent(epService, "E1", 5);
            SendEvent(epService, "E4", 7);
            SendEvent(epService, "E1", 6);
            Assert.IsFalse(listener.IsInvoked);

            SendEvent(epService, "E5", 9);
            EPAssertionUtil.AssertPropsPerRow(listener.LastNewData, fields, new object[][] { new object[] { "E1", 5 }, new object[] { "E4", 7 }, new object[] { "E5", 9 } });
            EPAssertionUtil.AssertPropsPerRow(listener.GetAndResetLastOldData(), fields, new object[][] { new object[] { "E1", 1 }, new object[] { "E2", 2 }, new object[] { "E3", 4 } });
            listener.Reset();
        }
示例#9
0
        public override void Run(EPServiceProvider epService)
        {
            foreach (var clazz in new[] {typeof(SupportBean), typeof(SupportBean_S0), typeof(MyUpdateEvent)})
            {
                epService.EPAdministrator.Configuration.AddEventType(clazz);
            }

            var listenerUpdate = new SupportUpdateListener();

            var fields = "keyOne,keyTwo,p0".Split(',');
            epService.EPAdministrator.CreateEPL(
                "create table varagg as (" +
                "keyOne string primary key, keyTwo int primary key, p0 long)");
            epService.EPAdministrator.CreateEPL(
                "on SupportBean merge varagg where TheString = keyOne and " +
                "IntPrimitive = keyTwo when not matched then insert select TheString as keyOne, IntPrimitive as keyTwo, 1 as p0");
            var listener = new SupportUpdateListener();
            epService.EPAdministrator.CreateEPL("select varagg[p00, id].p0 as value from SupportBean_S0")
                .Events += listener.Update;
            var stmtUpdate = epService.EPAdministrator.CreateEPL(
                "on MyUpdateEvent update varagg set p0 = newValue " +
                "where k1 = keyOne and k2 = keyTwo");
            stmtUpdate.Events += listenerUpdate.Update;

            var expectedType = new[]
            {
                new object[] {"keyOne", typeof(string)},
                new object[] {"keyTwo", typeof(int)},
                new object[] {"p0", typeof(long)}
            };
            SupportEventTypeAssertionUtil.AssertEventTypeProperties(
                expectedType, stmtUpdate.EventType, SupportEventTypeAssertionEnum.NAME,
                SupportEventTypeAssertionEnum.TYPE);

            epService.EPRuntime.SendEvent(new SupportBean("G1", 10));
            AssertValues(epService, listener, new[] {new object[] {"G1", 10}}, new[] {1L});

            epService.EPRuntime.SendEvent(new MyUpdateEvent("G1", 10, 2));
            AssertValues(epService, listener, new[] {new object[] {"G1", 10}}, new[] {2L});
            EPAssertionUtil.AssertProps(listenerUpdate.LastNewData[0], fields, new object[] {"G1", 10, 2L});
            EPAssertionUtil.AssertProps(
                listenerUpdate.GetAndResetLastOldData()[0], fields, new object[] {"G1", 10, 1L});

            // try property method invocation
            epService.EPAdministrator.CreateEPL("create table MyTableSuppBean as (sb SupportBean)");
            epService.EPAdministrator.CreateEPL(
                "on SupportBean_S0 update MyTableSuppBean sb set sb.set_LongPrimitive(10)");
        }
示例#10
0
        public void RunOnMergeInsertUpdDeleteSingleKey(EPServiceProvider epService, bool soda)
        {
            string[] fieldsTable = "key,p0,p1,p2,sumint".Split(',');
            string   eplDeclare  = "create table varaggMIU (key int primary key, p0 string, p1 int, p2 int[], sumint sum(int))";

            SupportModelHelper.CreateByCompileOrParse(epService, soda, eplDeclare);

            string[]    fields   = "c0,c1,c2,c3".Split(',');
            string      eplRead  = "select varaggMIU[id].p0 as c0, varaggMIU[id].p1 as c1, varaggMIU[id].p2 as c2, varaggMIU[id].sumint as c3 from SupportBean_S0";
            EPStatement stmtRead = SupportModelHelper.CreateByCompileOrParse(epService, soda, eplRead);
            var         listener = new SupportUpdateListener();

            stmtRead.Events += listener.Update;

            // assert selected column types
            var expectedAggType = new object[][] {
                new object[] { "c0", typeof(string) },
                new object[] { "c1", typeof(int) },
                new object[] { "c2", typeof(int[]) },
                new object[] { "c3", typeof(int) }
            };

            SupportEventTypeAssertionUtil.AssertEventTypeProperties(expectedAggType, stmtRead.EventType, SupportEventTypeAssertionEnum.NAME, SupportEventTypeAssertionEnum.TYPE);

            // assert no row
            epService.EPRuntime.SendEvent(new SupportBean_S0(10));
            EPAssertionUtil.AssertProps(listener.AssertOneGetNewAndReset(), fields, new object[] { null, null, null, null });

            // create merge
            string eplMerge = "on SupportBean merge varaggMIU" +
                              " where IntPrimitive=key" +
                              " when not matched then" +
                              " insert select IntPrimitive as key, \"v1\" as p0, 1000 as p1, {1,2} as p2" +
                              " when matched and TheString like \"U%\" then" +
                              " update set p0=\"v2\", p1=2000, p2={3,4}" +
                              " when matched and TheString like \"D%\" then" +
                              " delete";
            EPStatement stmtMerge     = SupportModelHelper.CreateByCompileOrParse(epService, soda, eplMerge);
            var         listenerMerge = new SupportUpdateListener();

            stmtMerge.Events += listenerMerge.Update;

            // merge for varagg[10]
            epService.EPRuntime.SendEvent(new SupportBean("E1", 10));
            EPAssertionUtil.AssertProps(listenerMerge.AssertOneGetNewAndReset(), fieldsTable, new object[] { 10, "v1", 1000, new int[] { 1, 2 }, null });

            // assert key "10"
            epService.EPRuntime.SendEvent(new SupportBean_S0(10));
            EPAssertionUtil.AssertProps(listener.AssertOneGetNewAndReset(), fields, new object[] { "v1", 1000, new int?[] { 1, 2 }, null });

            // also aggregate-into the same key
            SupportModelHelper.CreateByCompileOrParse(epService, soda, "into table varaggMIU select sum(50) as sumint from SupportBean_S1 group by id");
            epService.EPRuntime.SendEvent(new SupportBean_S1(10));
            epService.EPRuntime.SendEvent(new SupportBean_S0(10));
            EPAssertionUtil.AssertProps(listener.AssertOneGetNewAndReset(), fields, new object[] { "v1", 1000, new int?[] { 1, 2 }, 50 });

            // update for varagg[10]
            epService.EPRuntime.SendEvent(new SupportBean("U2", 10));
            EPAssertionUtil.AssertProps(listenerMerge.LastNewData[0], fieldsTable, new object[] { 10, "v2", 2000, new int[] { 3, 4 }, 50 });
            EPAssertionUtil.AssertProps(listenerMerge.GetAndResetLastOldData()[0], fieldsTable, new object[] { 10, "v1", 1000, new int[] { 1, 2 }, 50 });

            epService.EPRuntime.SendEvent(new SupportBean_S0(10));
            EPAssertionUtil.AssertProps(listener.AssertOneGetNewAndReset(), fields, new object[] { "v2", 2000, new int?[] { 3, 4 }, 50 });

            // delete for varagg[10]
            epService.EPRuntime.SendEvent(new SupportBean("D3", 10));
            EPAssertionUtil.AssertProps(listenerMerge.AssertOneGetOldAndReset(), fieldsTable, new object[] { 10, "v2", 2000, new int[] { 3, 4 }, 50 });

            epService.EPRuntime.SendEvent(new SupportBean_S0(10));
            EPAssertionUtil.AssertProps(listener.AssertOneGetNewAndReset(), fields, new object[] { null, null, null, null });

            epService.EPAdministrator.DestroyAllStatements();
            epService.EPAdministrator.Configuration.RemoveEventType("table_varaggMIU__internal", false);
            epService.EPAdministrator.Configuration.RemoveEventType("table_varaggMIU__public", false);
        }