예제 #1
0
        private static SelectJoinHolder SetupStmt(RegressionEnvironment env)
        {
            var holder = new SelectJoinHolder();

            var epl =
                "@Name('s0') select irstream * from SupportBean_A#length(3) as streamA, SupportBean_B#length(3) as streamB where streamA.Id = streamB.Id";
            holder.stmt = env.CompileDeploy(epl).Statement("s0");
            holder.listener = env.ListenerNew();
            holder.stmt.AddListener(holder.listener);

            Assert.AreEqual(typeof(SupportBean_A), holder.stmt.EventType.GetPropertyType("streamA"));
            Assert.AreEqual(typeof(SupportBean_B), holder.stmt.EventType.GetPropertyType("streamB"));
            Assert.AreEqual(2, holder.stmt.EventType.PropertyNames.Length);

            holder.eventsA = new SupportBean_A[10];
            holder.eventsASetTwo = new SupportBean_A[10];
            holder.eventsB = new SupportBean_B[10];
            holder.eventsBSetTwo = new SupportBean_B[10];
            for (var i = 0; i < holder.eventsA.Length; i++) {
                holder.eventsA[i] = new SupportBean_A(Convert.ToString(i));
                holder.eventsASetTwo[i] = new SupportBean_A(Convert.ToString(i));
                holder.eventsB[i] = new SupportBean_B(Convert.ToString(i));
                holder.eventsBSetTwo[i] = new SupportBean_B(Convert.ToString(i));
            }

            return holder;
        }
예제 #2
0
        private SelectJoinHolder SetupStmt(EPServiceProvider epService)
        {
            var holder = new SelectJoinHolder();

            string epl = "select irstream * from A#length(3) as streamA, B#length(3) as streamB where streamA.id = streamB.id";

            holder.stmt         = epService.EPAdministrator.CreateEPL(epl);
            holder.listener     = new SupportUpdateListener();
            holder.stmt.Events += holder.listener.Update;

            Assert.AreEqual(typeof(SupportBean_A), holder.stmt.EventType.GetPropertyType("streamA"));
            Assert.AreEqual(typeof(SupportBean_B), holder.stmt.EventType.GetPropertyType("streamB"));
            Assert.AreEqual(2, holder.stmt.EventType.PropertyNames.Length);

            holder.eventsA       = new SupportBean_A[10];
            holder.eventsASetTwo = new SupportBean_A[10];
            holder.eventsB       = new SupportBean_B[10];
            holder.eventsBSetTwo = new SupportBean_B[10];
            for (int i = 0; i < holder.eventsA.Length; i++)
            {
                holder.eventsA[i]       = new SupportBean_A(Convert.ToString(i));
                holder.eventsASetTwo[i] = new SupportBean_A(Convert.ToString(i));
                holder.eventsB[i]       = new SupportBean_B(Convert.ToString(i));
                holder.eventsBSetTwo[i] = new SupportBean_B(Convert.ToString(i));
            }
            return(holder);
        }
예제 #3
0
        private void RunAssertionJoinUniquePerId(EPServiceProvider epService)
        {
            SelectJoinHolder holder = SetupStmt(epService);

            SendEvent(epService, holder.eventsA[0]);
            SendEvent(epService, holder.eventsB[1]);
            Assert.IsNull(holder.listener.LastNewData);

            // Test join new B with id 0
            SendEvent(epService, holder.eventsB[0]);
            Assert.AreSame(holder.eventsA[0], holder.listener.LastNewData[0].Get("streamA"));
            Assert.AreSame(holder.eventsB[0], holder.listener.LastNewData[0].Get("streamB"));
            Assert.IsNull(holder.listener.LastOldData);
            holder.listener.Reset();

            // Test join new A with id 1
            SendEvent(epService, holder.eventsA[1]);
            Assert.AreSame(holder.eventsA[1], holder.listener.LastNewData[0].Get("streamA"));
            Assert.AreSame(holder.eventsB[1], holder.listener.LastNewData[0].Get("streamB"));
            Assert.IsNull(holder.listener.LastOldData);
            holder.listener.Reset();

            SendEvent(epService, holder.eventsA[2]);
            Assert.IsNull(holder.listener.LastOldData);

            // Test join old A id 0 leaves length window of 3 events
            SendEvent(epService, holder.eventsA[3]);
            Assert.AreSame(holder.eventsA[0], holder.listener.LastOldData[0].Get("streamA"));
            Assert.AreSame(holder.eventsB[0], holder.listener.LastOldData[0].Get("streamB"));
            Assert.IsNull(holder.listener.LastNewData);
            holder.listener.Reset();

            // Test join old B id 1 leaves window
            SendEvent(epService, holder.eventsB[4]);
            Assert.IsNull(holder.listener.LastOldData);
            SendEvent(epService, holder.eventsB[5]);
            Assert.AreSame(holder.eventsA[1], holder.listener.LastOldData[0].Get("streamA"));
            Assert.AreSame(holder.eventsB[1], holder.listener.LastOldData[0].Get("streamB"));
            Assert.IsNull(holder.listener.LastNewData);

            holder.stmt.Dispose();
        }
예제 #4
0
        private void RunAssertionJoinNonUniquePerId(EPServiceProvider epService)
        {
            SelectJoinHolder holder = SetupStmt(epService);

            SendEvent(epService, holder.eventsA[0]);
            SendEvent(epService, holder.eventsA[1]);
            SendEvent(epService, holder.eventsASetTwo[0]);
            Assert.IsTrue(holder.listener.LastOldData == null && holder.listener.LastNewData == null);

            SendEvent(epService, holder.eventsB[0]);                                                                               // Event B id 0 joins to A id 0 twice
            EventBean[] data = holder.listener.LastNewData;
            Assert.IsTrue(holder.eventsASetTwo[0] == data[0].Get("streamA") || holder.eventsASetTwo[0] == data[1].Get("streamA")); // Order arbitrary
            Assert.AreSame(holder.eventsB[0], data[0].Get("streamB"));
            Assert.IsTrue(holder.eventsA[0] == data[0].Get("streamA") || holder.eventsA[0] == data[1].Get("streamA"));
            Assert.AreSame(holder.eventsB[0], data[1].Get("streamB"));
            Assert.IsNull(holder.listener.LastOldData);
            holder.listener.Reset();

            SendEvent(epService, holder.eventsB[2]);
            SendEvent(epService, holder.eventsBSetTwo[0]);  // Ignore events generated
            holder.listener.Reset();

            SendEvent(epService, holder.eventsA[3]);  // Pushes A id 0 out of window, which joins to B id 0 twice
            data = holder.listener.LastOldData;
            Assert.AreSame(holder.eventsA[0], holder.listener.LastOldData[0].Get("streamA"));
            Assert.IsTrue(holder.eventsB[0] == data[0].Get("streamB") || holder.eventsB[0] == data[1].Get("streamB"));    // B order arbitrary
            Assert.AreSame(holder.eventsA[0], holder.listener.LastOldData[1].Get("streamA"));
            Assert.IsTrue(holder.eventsBSetTwo[0] == data[0].Get("streamB") || holder.eventsBSetTwo[0] == data[1].Get("streamB"));
            Assert.IsNull(holder.listener.LastNewData);
            holder.listener.Reset();

            SendEvent(epService, holder.eventsBSetTwo[2]);  // Pushes B id 0 out of window, which joins to A set two id 0
            Assert.AreSame(holder.eventsASetTwo[0], holder.listener.LastOldData[0].Get("streamA"));
            Assert.AreSame(holder.eventsB[0], holder.listener.LastOldData[0].Get("streamB"));
            Assert.AreEqual(1, holder.listener.LastOldData.Length);

            holder.stmt.Dispose();
        }