public void Run(RegressionEnvironment env)
            {
                var fields = new [] { "c0", "c1" };
                var epl = "create context PartitionedByString partition by TheString from SupportBean;\n" +
                          "@Name('s0') context PartitionedByString select context.key1 as c0, sum(IntPrimitive) as c1 from SupportBean#length(5);\n";
                env.CompileDeploy(epl).AddListener("s0");

                env.SendEventBean(new SupportBean("E1", 10));
                env.SendEventBean(new SupportBean("E2", 20));
                env.SendEventBean(new SupportBean("E2", 21));

                env.Milestone(0);

                object[][] expectedAll = {new object[] {"E1", 10}, new object[] {"E2", 41}};
                EPAssertionUtil.AssertPropsPerRow(
                    env.Statement("s0").GetEnumerator(),
                    env.Statement("s0").GetSafeEnumerator(),
                    fields,
                    expectedAll);

                // test iterator ALL
                ContextPartitionSelector selector = ContextPartitionSelectorAll.INSTANCE;
                EPAssertionUtil.AssertPropsPerRow(
                    env.Statement("s0").GetEnumerator(selector),
                    env.Statement("s0").GetSafeEnumerator(selector),
                    fields,
                    expectedAll);

                // test iterator by context partition id
                selector = new SupportSelectorById(new HashSet<int>(Arrays.AsList(0, 1, 2)));
                EPAssertionUtil.AssertPropsPerRow(
                    env.Statement("s0").GetEnumerator(selector),
                    env.Statement("s0").GetSafeEnumerator(selector),
                    fields,
                    expectedAll);

                selector = new SupportSelectorById(new HashSet<int>(Arrays.AsList(1)));
                EPAssertionUtil.AssertPropsPerRow(
                    env.Statement("s0").GetEnumerator(selector),
                    env.Statement("s0").GetSafeEnumerator(selector),
                    fields,
                    new[] {new object[] {"E2", 41}});

                Assert.IsFalse(
                    env.Statement("s0")
                        .GetEnumerator(new SupportSelectorById(Collections.GetEmptySet<int>()))
                        .MoveNext());
                Assert.IsFalse(env.Statement("s0").GetEnumerator(new SupportSelectorById(null)).MoveNext());

                try {
                    env.Statement("s0").GetEnumerator(null);
                    Assert.Fail();
                }
                catch (ArgumentException ex) {
                    Assert.AreEqual(ex.Message, "No selector provided");
                }

                try {
                    env.Statement("s0").GetSafeEnumerator(null);
                    Assert.Fail();
                }
                catch (ArgumentException ex) {
                    Assert.AreEqual(ex.Message, "No selector provided");
                }

                env.CompileDeploy("@Name('s2') select * from SupportBean");
                try {
                    env.Statement("s2").GetEnumerator(null);
                    Assert.Fail();
                }
                catch (UnsupportedOperationException ex) {
                    Assert.AreEqual(
                        ex.Message,
                        "Enumerator with context selector is only supported for statements under context");
                }

                try {
                    env.Statement("s2").GetSafeEnumerator(null);
                    Assert.Fail();
                }
                catch (UnsupportedOperationException ex) {
                    Assert.AreEqual(
                        ex.Message,
                        "Enumerator with context selector is only supported for statements under context");
                }

                env.UndeployAll();
            }
Example #2
0
            public void Run(RegressionEnvironment env)
            {
                var fields = new [] { "c0", "c1", "c2", "c3" };
                var milestone = new AtomicLong();
                var path = new RegressionPath();

                env.CompileDeploy(
                    "@Name('ctx') create context MyCtx as group by IntPrimitive < -5 as grp1, group by IntPrimitive between -5 and +5 as grp2, group by IntPrimitive > 5 as grp3 from SupportBean",
                    path);
                env.CompileDeploy(
                    "@Name('s0') context MyCtx select context.id as c0, context.label as c1, TheString as c2, sum(IntPrimitive) as c3 from SupportBean#keepall group by TheString",
                    path);

                env.SendEventBean(new SupportBean("E1", 1));
                env.SendEventBean(new SupportBean("E2", -5));
                env.SendEventBean(new SupportBean("E1", 2));

                env.MilestoneInc(milestone);

                env.SendEventBean(new SupportBean("E3", -100));
                env.SendEventBean(new SupportBean("E3", -8));
                env.SendEventBean(new SupportBean("E1", 60));
                EPAssertionUtil.AssertPropsPerRowAnyOrder(
                    env.Statement("s0").GetEnumerator(),
                    env.Statement("s0").GetSafeEnumerator(),
                    fields,
                    new[] {
                        new object[] {0, "grp1", "E3", -108},
                        new object[] {1, "grp2", "E1", 3},
                        new object[] {1, "grp2", "E2", -5},
                        new object[] {2, "grp3", "E1", 60}
                    });
                SupportContextPropUtil.AssertContextProps(
                    env,
                    "ctx",
                    "MyCtx",
                    new[] {0, 1, 2},
                    "label",
                    new[] {
                        new object[] {"grp1"},
                        new object[] {"grp2"},
                        new object[] {"grp3"}
                    });

                env.MilestoneInc(milestone);

                // test iterator targeted by context partition id
                var selectorById = new SupportSelectorById(Collections.SingletonList(1));
                EPAssertionUtil.AssertPropsPerRowAnyOrder(
                    env.Statement("s0").GetEnumerator(selectorById),
                    env.Statement("s0").GetSafeEnumerator(selectorById),
                    fields,
                    new[] {
                        new object[] {1, "grp2", "E1", 3},
                        new object[] {1, "grp2", "E2", -5}
                    });

                // test iterator targeted for a given category
                var selector = new SupportSelectorCategory(
                    new HashSet<string>(Arrays.AsList("grp1", "grp3")));
                EPAssertionUtil.AssertPropsPerRowAnyOrder(
                    env.Statement("s0").GetEnumerator(selector),
                    env.Statement("s0").GetSafeEnumerator(selector),
                    fields,
                    new[] {
                        new object[] {0, "grp1", "E3", -108},
                        new object[] {2, "grp3", "E1", 60}
                    });

                // test iterator targeted for a given filtered category
                var filtered = new MySelectorFilteredCategory("grp1");
                EPAssertionUtil.AssertPropsPerRowAnyOrder(
                    env.Statement("s0").GetEnumerator(filtered),
                    env.Statement("s0").GetSafeEnumerator(filtered),
                    fields,
                    new[] {
                        new object[] {0, "grp1", "E3", -108}
                    });
                Assert.IsFalse(
                    env.Statement("s0")
                        .GetEnumerator(
                            new SupportSelectorCategory(
                                (ISet<string>) null))
                        .MoveNext());
                Assert.IsFalse(
                    env.Statement("s0")
                        .GetEnumerator(
                            new SupportSelectorCategory(
                                new EmptySet<string>()))
                        .MoveNext());

                env.MilestoneInc(milestone);

                // test always-false filter - compare context partition info
                filtered = new MySelectorFilteredCategory(null);
                Assert.IsFalse(env.Statement("s0").GetEnumerator(filtered).MoveNext());
                EPAssertionUtil.AssertEqualsAnyOrder(new object[] {"grp1", "grp2", "grp3"}, filtered.Categories);

                try {
                    env.Statement("s0")
                        .GetEnumerator(
                            new ProxyContextPartitionSelectorSegmented {
                                ProcPartitionKeys = () => null
                            });
                    Assert.Fail();
                }
                catch (InvalidContextPartitionSelector ex) {
                    Assert.IsTrue(
                        ex.Message.StartsWith(
                            "Invalid context partition selector, expected an implementation class of any of [ContextPartitionSelectorAll, ContextPartitionSelectorFiltered, ContextPartitionSelectorById, ContextPartitionSelectorCategory] interfaces but received com."),
                        "message: " + ex.Message);
                }

                env.UndeployAll();
            }