public void TestMinMaxView_OM() { var model = new EPStatementObjectModel(); model.SelectClause = SelectClause.Create().SetStreamSelector(StreamSelector.RSTREAM_ISTREAM_BOTH) .Add("Symbol") .Add(Expressions.Min("Volume"), "minVol") .Add(Expressions.Max("Volume"), "maxVol") .Add(Expressions.MinDistinct("Volume"), "minDistVol") .Add(Expressions.MaxDistinct("Volume"), "maxDistVol"); model.FromClause = FromClause.Create(FilterStream.Create(typeof(SupportMarketDataBean).FullName).AddView("win", "length", Expressions.Constant(3))); model.WhereClause = Expressions.Or() .Add(Expressions.Eq("Symbol", "DELL")) .Add(Expressions.Eq("Symbol", "IBM")) .Add(Expressions.Eq("Symbol", "GE")); model.GroupByClause = GroupByClause.Create("Symbol"); model = (EPStatementObjectModel)SerializableObjectCopier.Copy(model); String viewExpr = "select irstream Symbol, " + "min(Volume) as minVol, " + "max(Volume) as maxVol, " + "min(distinct Volume) as minDistVol, " + "max(distinct Volume) as maxDistVol " + "from " + typeof(SupportMarketDataBean).FullName + ".win:length(3) " + "where Symbol=\"DELL\" or Symbol=\"IBM\" or Symbol=\"GE\" " + "group by Symbol"; Assert.AreEqual(viewExpr, model.ToEPL()); EPStatement selectTestView = _epService.EPAdministrator.Create(model); selectTestView.Events += _testListener.Update; RunAssertion(selectTestView); }
public void TestAliasesAggregationOM() { var model = new EPStatementObjectModel(); model.SelectClause = SelectClause.Create("Symbol", "Volume").Add(Expressions.Sum("Price"), "mySum"); model.FromClause = FromClause.Create(FilterStream.Create(typeof(SupportMarketDataBean).FullName).AddView(View.Create("length", Expressions.Constant(20)))); model.GroupByClause = GroupByClause.Create("Symbol"); model.OutputLimitClause = OutputLimitClause.Create(6); model.OrderByClause = OrderByClause.Create(Expressions.Sum("Price")).Add("Symbol", false); model = (EPStatementObjectModel)SerializableObjectCopier.Copy(model); var statementString = "select Symbol, Volume, sum(Price) as mySum from " + typeof(SupportMarketDataBean).FullName + "#length(20) " + "group by Symbol " + "output every 6 events " + "order by sum(Price), Symbol"; Assert.AreEqual(statementString, model.ToEPL()); _testListener = new SupportUpdateListener(); var statement = _epService.EPAdministrator.Create(model); statement.AddListener(_testListener); RunAssertionDefault(); }
public void TestCountOneViewOM() { var model = new EPStatementObjectModel(); model.SelectClause = SelectClause.Create().SetStreamSelector(StreamSelector.RSTREAM_ISTREAM_BOTH) .Add("Symbol") .Add(Expressions.CountStar(), "countAll") .Add(Expressions.CountDistinct("volume"), "countDistVol") .Add(Expressions.Count("volume"), "countVol"); model.FromClause = FromClause.Create(FilterStream.Create(typeof(SupportMarketDataBean).FullName).AddView("win", "length", Expressions.Constant(3))); model.WhereClause = Expressions.Or() .Add(Expressions.Eq("Symbol", "DELL")) .Add(Expressions.Eq("Symbol", "IBM")) .Add(Expressions.Eq("Symbol", "GE")); model.GroupByClause = GroupByClause.Create("Symbol"); model = (EPStatementObjectModel)SerializableObjectCopier.Copy(model); var viewExpr = "select irstream Symbol, " + "count(*) as countAll, " + "count(distinct volume) as countDistVol, " + "count(volume) as countVol" + " from " + typeof(SupportMarketDataBean).FullName + ".win:length(3) " + "where Symbol=\"DELL\" or Symbol=\"IBM\" or Symbol=\"GE\" " + "group by Symbol"; Assert.AreEqual(viewExpr, model.ToEPL()); _selectTestView = _epService.EPAdministrator.Create(model); _selectTestView.AddListener(_testListener); RunAssertion(); }
public void Run(RegressionEnvironment env) { var model = new EPStatementObjectModel(); model.SelectClause = SelectClause.Create("Symbol", "Volume").Add(Expressions.Sum("Price"), "mySum"); model.FromClause = FromClause.Create( FilterStream.Create(typeof(SupportMarketDataBean).Name) .AddView(View.Create("length", Expressions.Constant(20)))); model.GroupByClause = GroupByClause.Create("Symbol"); model.OutputLimitClause = OutputLimitClause.Create(6); model.OrderByClause = OrderByClause.Create(Expressions.Sum("Price")).Add("Symbol", false); model = env.CopyMayFail(model); var epl = "select Symbol, Volume, sum(Price) as mySum from " + "SupportMarketDataBean#length(20) " + "group by Symbol " + "output every 6 events " + "order by sum(Price), Symbol"; Assert.AreEqual(epl, model.ToEPL()); model.Annotations = Collections.SingletonList(AnnotationPart.NameAnnotation("s0")); env.CompileDeploy(model).AddListener("s0"); TryAssertionDefault(env); env.UndeployAll(); }
public void TestGrouped() { var textOne = "select irstream CONCATSTRING(TheString) as val from " + typeof(SupportBean).FullName + "#length(10) group by IntPrimitive"; TryGrouped(textOne, null); var textTwo = "select irstream concatstring(TheString) as val from " + typeof(SupportBean).FullName + "#win:length(10) group by IntPrimitive"; TryGrouped(textTwo, null); var textThree = "select irstream concatstring(TheString) as val from " + typeof(SupportBean).FullName + "#length(10) group by IntPrimitive"; var model = _epService.EPAdministrator.CompileEPL(textThree); SerializableObjectCopier.Copy(model); Assert.AreEqual(textThree, model.ToEPL()); TryGrouped(null, model); var textFour = "select irstream concatstring(TheString) as val from " + typeof(SupportBean).FullName + "#length(10) group by IntPrimitive"; var modelTwo = new EPStatementObjectModel(); modelTwo.SelectClause = SelectClause.Create().SetStreamSelector(StreamSelector.RSTREAM_ISTREAM_BOTH) .Add(Expressions.PlugInAggregation("concatstring", Expressions.Property("TheString")), "val"); modelTwo.FromClause = FromClause.Create(FilterStream.Create(typeof(SupportBean).FullName).AddView(null, "length", Expressions.Constant(10))); modelTwo.GroupByClause = GroupByClause.Create("IntPrimitive"); Assert.AreEqual(textFour, modelTwo.ToEPL()); SerializableObjectCopier.Copy(modelTwo); TryGrouped(null, modelTwo); var textFive = "select irstream concatstringTwo(TheString) as val from " + typeof(SupportBean).FullName + "#length(10) group by IntPrimitive"; TryGrouped(textFive, null); }
private void RunAssertionAliasesAggregationOM(EPServiceProvider epService) { var model = new EPStatementObjectModel(); model.SelectClause = SelectClause.Create("symbol", "volume").Add(Expressions.Sum("price"), "mySum"); model.FromClause = FromClause.Create(FilterStream.Create(typeof(SupportMarketDataBean).FullName).AddView(View.Create("length", Expressions.Constant(20)))); model.GroupByClause = GroupByClause.Create("symbol"); model.OutputLimitClause = OutputLimitClause.Create(6); model.OrderByClause = OrderByClause.Create(Expressions.Sum("price")).Add("symbol", false); model = (EPStatementObjectModel)SerializableObjectCopier.Copy(epService.Container, model); string statementString = "select symbol, volume, sum(price) as mySum from " + typeof(SupportMarketDataBean).FullName + "#length(20) " + "group by symbol " + "output every 6 events " + "order by sum(price), symbol"; Assert.AreEqual(statementString, model.ToEPL()); var testListener = new SupportUpdateListener(); EPStatement statement = epService.EPAdministrator.Create(model); statement.Events += testListener.Update; TryAssertionDefault(epService, testListener); statement.Dispose(); }
public void Run(RegressionEnvironment env) { string textOne = "@Name('s0') select irstream CONCATSTRING(TheString) as val from SupportBean#length(10) group by IntPrimitive"; TryGrouped(env, textOne, null); string textTwo = "@Name('s0') select irstream concatstring(TheString) as val from SupportBean#win:length(10) group by IntPrimitive"; TryGrouped(env, textTwo, null); string textThree = "@Name('s0') select irstream concatstring(TheString) as val from SupportBean#length(10) group by IntPrimitive"; EPStatementObjectModel model = env.EplToModel(textThree); SerializableObjectCopier.CopyMayFail(env.Container, model); Assert.AreEqual(textThree, model.ToEPL()); TryGrouped(env, null, model); string textFour = "select irstream concatstring(TheString) as val from SupportBean#length(10) group by IntPrimitive"; EPStatementObjectModel modelTwo = new EPStatementObjectModel(); modelTwo.SelectClause = SelectClause .Create(StreamSelector.RSTREAM_ISTREAM_BOTH) .Add(Expressions.PlugInAggregation("concatstring", Expressions.Property("TheString")), "val"); modelTwo.FromClause = FromClause.Create(FilterStream.Create("SupportBean").AddView(null, "length", Expressions.Constant(10))); modelTwo.GroupByClause = GroupByClause.Create("IntPrimitive"); Assert.AreEqual(textFour, modelTwo.ToEPL()); SerializableObjectCopier.CopyMayFail(env.Container, modelTwo); modelTwo.Annotations = Collections.SingletonList(AnnotationPart.NameAnnotation("s0")); TryGrouped(env, null, modelTwo); env.UndeployAll(); }
private void RunAssertionStmtJoin_OM(EPServiceProvider epService) { var model = new EPStatementObjectModel(); model.SelectClause = SelectClause.Create("symbol") .Add(Expressions.Median("price"), "myMedian") .Add(Expressions.MedianDistinct("price"), "myDistMedian") .Add(Expressions.Stddev("price"), "myStdev") .Add(Expressions.Avedev("price"), "myAvedev") .SetStreamSelector(StreamSelector.RSTREAM_ISTREAM_BOTH); FromClause fromClause = FromClause.Create( FilterStream.Create(typeof(SupportBeanString).FullName, "one").AddView(View.Create("length", Expressions.Constant(100))), FilterStream.Create(typeof(SupportMarketDataBean).FullName, "two").AddView(View.Create("length", Expressions.Constant(5)))); model.FromClause = fromClause; model.WhereClause = Expressions.And().Add( Expressions.Or() .Add(Expressions.Eq("symbol", "DELL")) .Add(Expressions.Eq("symbol", "IBM")) .Add(Expressions.Eq("symbol", "GE")) ) .Add(Expressions.EqProperty("one.TheString", "two.symbol")); model.GroupByClause = GroupByClause.Create("symbol"); model = (EPStatementObjectModel)SerializableObjectCopier.Copy(epService.Container, model); string epl = "select irstream symbol, " + "median(price) as myMedian, " + "median(distinct price) as myDistMedian, " + "stddev(price) as myStdev, " + "avedev(price) as myAvedev " + "from " + typeof(SupportBeanString).FullName + "#length(100) as one, " + typeof(SupportMarketDataBean).FullName + "#length(5) as two " + "where (symbol=\"DELL\" or symbol=\"IBM\" or symbol=\"GE\") " + "and one.TheString=two.symbol " + "group by symbol"; Assert.AreEqual(epl, model.ToEPL()); EPStatement stmt = epService.EPAdministrator.Create(model); var listener = new SupportUpdateListener(); stmt.Events += listener.Update; epService.EPRuntime.SendEvent(new SupportBeanString(SYMBOL_DELL)); epService.EPRuntime.SendEvent(new SupportBeanString(SYMBOL_IBM)); epService.EPRuntime.SendEvent(new SupportBeanString("AAA")); TryAssertionStmt(epService, listener, stmt); stmt.Dispose(); }
public void Run(RegressionEnvironment env) { var model = new EPStatementObjectModel(); model.SelectClause = SelectClause.Create("Symbol") .Add(Expressions.Median("Price"), "myMedian") .Add(Expressions.MedianDistinct("Price"), "myDistMedian") .Add(Expressions.Stddev("Price"), "myStdev") .Add(Expressions.Avedev("Price"), "myAvedev") .SetStreamSelector(StreamSelector.RSTREAM_ISTREAM_BOTH); var fromClause = FromClause.Create( FilterStream .Create(typeof(SupportBeanString).Name, "one") .AddView(View.Create("length", Expressions.Constant(100))), FilterStream .Create(typeof(SupportMarketDataBean).Name, "two") .AddView(View.Create("length", Expressions.Constant(5)))); model.FromClause = fromClause; model.WhereClause = Expressions.And() .Add( Expressions.Or() .Add(Expressions.Eq("Symbol", "DELL")) .Add(Expressions.Eq("Symbol", "IBM")) .Add(Expressions.Eq("Symbol", "GE")) ) .Add(Expressions.EqProperty("one.TheString", "two.Symbol")); model.GroupByClause = GroupByClause.Create("Symbol"); model = env.CopyMayFail(model); var epl = "select irstream Symbol, " + "median(Price) as myMedian, " + "median(distinct Price) as myDistMedian, " + "stddev(Price) as myStdev, " + "avedev(Price) as myAvedev " + "from SupportBeanString#length(100) as one, " + "SupportMarketDataBean#length(5) as two " + "where (Symbol=\"DELL\" or Symbol=\"IBM\" or Symbol=\"GE\") " + "and one.TheString=two.Symbol " + "group by Symbol"; Assert.AreEqual(epl, model.ToEPL()); model.Annotations = Collections.SingletonList(AnnotationPart.NameAnnotation("s0")); env.CompileDeploy(model).AddListener("s0"); env.SendEventBean(new SupportBeanString(SYMBOL_DELL)); env.SendEventBean(new SupportBeanString(SYMBOL_IBM)); env.SendEventBean(new SupportBeanString("AAA")); TryAssertionStmt(env, new AtomicLong()); env.UndeployAll(); }
/// <summary> /// Groups the results of the expression. /// </summary> /// <typeparam name="TSource">The type of the source.</typeparam> /// <typeparam name="TKey">The type of the key.</typeparam> /// <param name="esperQuery">The esper query.</param> /// <param name="keySelectionExpression">The key selection expression.</param> /// <returns></returns> public static EsperQuery <TSource> GroupBy <TSource, TKey>(this EsperQuery <TSource> esperQuery, Expression <Func <TSource, TKey> > keySelectionExpression) { var parentObjectModel = esperQuery.ObjectModel; var deriveObjectModel = parentObjectModel.ShallowCopy(); // Adapt or set the where clause according to the expression contents using (ScopedInstance <EPStatementObjectModel> .Set(deriveObjectModel)) { var sodaExpression = LinqToSoda.LinqToSodaExpression(keySelectionExpression); deriveObjectModel.GroupByClause = GroupByClause.Create(sodaExpression); return(new EsperQuery <TSource>(esperQuery.ServiceProvider, deriveObjectModel)); } }
public void TestSumJoin_OM() { var model = new EPStatementObjectModel(); model.SelectClause = SelectClause.Create("Symbol") .Add(Expressions.Median("Price"), "myMedian") .Add(Expressions.MedianDistinct("Price"), "myDistMedian") .Add(Expressions.Stddev("Price"), "myStdev") .Add(Expressions.Avedev("Price"), "myAvedev") .SetStreamSelector(StreamSelector.RSTREAM_ISTREAM_BOTH); var fromClause = FromClause.Create( FilterStream.Create(typeof(SupportBeanString).FullName, "one").AddView(View.Create("length", Expressions.Constant(100))), FilterStream.Create(typeof(SupportMarketDataBean).FullName, "two").AddView(View.Create("length", Expressions.Constant(5)))); model.FromClause = fromClause; model.WhereClause = Expressions.And().Add( Expressions.Or() .Add(Expressions.Eq("Symbol", "DELL")) .Add(Expressions.Eq("Symbol", "IBM")) .Add(Expressions.Eq("Symbol", "GE")) ) .Add(Expressions.EqProperty("one.TheString", "two.Symbol")); model.GroupByClause = GroupByClause.Create("Symbol"); model = (EPStatementObjectModel)SerializableObjectCopier.Copy(model); var viewExpr = "select irstream Symbol, " + "median(Price) as myMedian, " + "median(distinct Price) as myDistMedian, " + "stddev(Price) as myStdev, " + "avedev(Price) as myAvedev " + "from " + typeof(SupportBeanString).FullName + "#length(100) as one, " + typeof(SupportMarketDataBean).FullName + "#length(5) as two " + "where (Symbol=\"DELL\" or Symbol=\"IBM\" or Symbol=\"GE\") " + "and one.TheString=two.Symbol " + "group by Symbol"; Assert.AreEqual(viewExpr, model.ToEPL()); var selectTestView = _epService.EPAdministrator.Create(model); selectTestView.AddListener(_testListener); _epService.EPRuntime.SendEvent(new SupportBeanString(SYMBOL_DELL)); _epService.EPRuntime.SendEvent(new SupportBeanString(SYMBOL_IBM)); _epService.EPRuntime.SendEvent(new SupportBeanString("AAA")); RunAssertion(selectTestView); }
public void TestCreateFromOMComplete() { var model = new EPStatementObjectModel(); model.InsertInto = InsertIntoClause.Create("ReadyStreamAvg", "line", "avgAge"); model.SelectClause = SelectClause.Create() .Add("line") .Add(Expressions.Avg("age"), "avgAge"); var filter = Filter.Create(typeof(SupportBean).FullName, Expressions.In("line", 1, 8, 10)); model.FromClause = FromClause.Create(FilterStream.Create(filter, "RS").AddView("win", "time", Expressions.Constant(10))); model.WhereClause = Expressions.IsNotNull("waverId"); model.GroupByClause = GroupByClause.Create("line"); model.HavingClause = Expressions.Lt(Expressions.Avg("age"), Expressions.Constant(0)); model.OutputLimitClause = OutputLimitClause.Create(Expressions.TimePeriod(null, null, null, 10, null)); model.OrderByClause = OrderByClause.Create("line"); Assert.AreEqual("insert into ReadyStreamAvg(line, avgAge) select line, avg(age) as avgAge from com.espertech.esper.support.bean.SupportBean(line in (1,8,10)).win:time(10) as RS where waverId is not null group by line having avg(age)<0 output every 10 seconds order by line", model.ToEPL()); SerializableObjectCopier.Copy(model); }
public void Run(RegressionEnvironment env) { EPStatementObjectModel model = new EPStatementObjectModel(); model.SetInsertInto(InsertIntoClause.Create("ReadyStreamAvg", "line", "avgAge")); model.SetSelect(SelectClause.Create().Add("line").Add(Expressions.Avg("age"), "avgAge")); Filter filter = Filter.Create(typeof(SupportBean).FullName, Expressions.In("line", 1, 8, 10)); model.SetFrom(FromClause.Create(FilterStream.Create(filter, "RS").AddView("time", Expressions.Constant(10)))); model.SetWhere(Expressions.IsNotNull("waverId")); model.SetGroupBy(GroupByClause.Create("line")); model.SetHaving(Expressions.Lt(Expressions.Avg("age"), Expressions.Constant(0))); model.SetOutputLimit(OutputLimitClause.Create(Expressions.TimePeriod(null, null, null, 10, null))); model.SetOrderBy(OrderByClause.Create("line")); Assert.AreEqual( "insert into ReadyStreamAvg(line, avgAge) select line, avg(age) as avgAge from " + typeof(SupportBean).CleanName() + "(line in (1,8,10))#time(10) as RS where waverId is not null group by line having avg(age)<0 output every 10.0d seconds order by line", model.ToEPL()); SerializableObjectCopier.CopyMayFail(env.Container, model); }
private void RunAssertionMinMax_OM(EPServiceProvider epService) { var model = new EPStatementObjectModel(); model.SelectClause = SelectClause.Create() .SetStreamSelector(StreamSelector.RSTREAM_ISTREAM_BOTH) .Add("symbol") .Add(Expressions.Min("volume"), "minVol") .Add(Expressions.Max("volume"), "maxVol") .Add(Expressions.MinDistinct("volume"), "minDistVol") .Add(Expressions.MaxDistinct("volume"), "maxDistVol"); model.FromClause = FromClause.Create(FilterStream.Create(typeof(SupportMarketDataBean).FullName).AddView("length", Expressions.Constant(3))); model.WhereClause = Expressions.Or() .Add(Expressions.Eq("symbol", "DELL")) .Add(Expressions.Eq("symbol", "IBM")) .Add(Expressions.Eq("symbol", "GE")); model.GroupByClause = GroupByClause.Create("symbol"); model = (EPStatementObjectModel)SerializableObjectCopier.Copy(epService.Container, model); string epl = "select irstream symbol, " + "min(volume) as minVol, " + "max(volume) as maxVol, " + "min(distinct volume) as minDistVol, " + "max(distinct volume) as maxDistVol " + "from " + typeof(SupportMarketDataBean).FullName + "#length(3) " + "where symbol=\"DELL\" or symbol=\"IBM\" or symbol=\"GE\" " + "group by symbol"; Assert.AreEqual(epl, model.ToEPL()); EPStatement stmt = epService.EPAdministrator.Create(model); var listener = new SupportUpdateListener(); stmt.Events += listener.Update; TryAssertionMinMax(epService, listener, stmt); stmt.Dispose(); }
public void Run(RegressionEnvironment env) { var model = new EPStatementObjectModel(); model.SelectClause = SelectClause.Create() .SetStreamSelector(StreamSelector.RSTREAM_ISTREAM_BOTH) .Add("Symbol") .Add(Expressions.CountStar(), "countAll") .Add(Expressions.CountDistinct("Volume"), "countDistVol") .Add(Expressions.Count("Volume"), "countVol"); model.FromClause = FromClause .Create( FilterStream.Create(typeof(SupportMarketDataBean).Name) .AddView("length", Expressions.Constant(3))); model.WhereClause = Expressions.Or() .Add(Expressions.Eq("Symbol", "DELL")) .Add(Expressions.Eq("Symbol", "IBM")) .Add(Expressions.Eq("Symbol", "GE")); model.GroupByClause = GroupByClause.Create("Symbol"); model = env.CopyMayFail(model); var epl = "select irstream Symbol, " + "count(*) as countAll, " + "count(distinct Volume) as countDistVol, " + "count(Volume) as countVol" + " from " + typeof(SupportMarketDataBean).Name + "#length(3) " + "where Symbol=\"DELL\" or Symbol=\"IBM\" or Symbol=\"GE\" " + "group by Symbol"; Assert.That(model.ToEPL(), Is.EqualTo(epl)); model.Annotations = Collections.SingletonList(AnnotationPart.NameAnnotation("s0")); env.CompileDeploy(model).AddListener("s0"); TryAssertionCount(env); env.UndeployAll(); }