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(); }
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(); }