Ejemplo n.º 1
0
            public void Run(RegressionEnvironment env)
            {
                var model = new EPStatementObjectModel();
                model.SelectClause = SelectClause.CreateWildcard();
                var fromClause = FromClause.Create(
                    FilterStream.Create("SupportBean_A", "streamA")
                        .AddView(View.Create("length", Expressions.Constant(3))),
                    FilterStream.Create("SupportBean_B", "streamB")
                        .AddView(View.Create("length", Expressions.Constant(3))),
                    FilterStream.Create("SupportBean_C", "streamC")
                        .AddView(View.Create("length", Expressions.Constant(3))));
                model.FromClause = fromClause;
                model.WhereClause = Expressions.And(
                    Expressions.EqProperty("streamA.Id", "streamB.Id"),
                    Expressions.EqProperty("streamB.Id", "streamC.Id"),
                    Expressions.EqProperty("streamA.Id", "streamC.Id"));
                model = env.CopyMayFail(model);

                var epl = "select * from " +
                          "SupportBean_A#length(3) as streamA, " +
                          "SupportBean_B#length(3) as streamB, " +
                          "SupportBean_C#length(3) as streamC " +
                          "where streamA.Id=streamB.Id " +
                          "and streamB.Id=streamC.Id " +
                          "and streamA.Id=streamC.Id";
                Assert.AreEqual(epl, model.ToEPL());

                model.Annotations = Collections.SingletonList(AnnotationPart.NameAnnotation("s0"));
                env.CompileDeploy(model).AddListener("s0").Milestone(0);

                RunJoinUniquePerId(env);

                env.UndeployAll();
            }
Ejemplo n.º 2
0
        public void TestJoinUniquePerIdOM()
        {
            var model = new EPStatementObjectModel();

            model.SelectClause = SelectClause.CreateWildcard();
            model.FromClause   = FromClause.Create(
                FilterStream.Create(_eventA, "streamA").AddView(View.Create("win", "length", Expressions.Constant(3))),
                FilterStream.Create(_eventB, "streamB").AddView(View.Create("win", "length", Expressions.Constant(3))),
                FilterStream.Create(_eventC, "streamC").AddView(View.Create("win", "length", Expressions.Constant(3))));
            model.WhereClause = Expressions.And(
                Expressions.EqProperty("streamA.id", "streamB.id"),
                Expressions.EqProperty("streamB.id", "streamC.id"),
                Expressions.EqProperty("streamA.id", "streamC.id"));
            model = (EPStatementObjectModel)SerializableObjectCopier.Copy(model);

            String joinStatement = "select * from " +
                                   _eventA + ".win:length(3) as streamA, " +
                                   _eventB + ".win:length(3) as streamB, " +
                                   _eventC + ".win:length(3) as streamC " +
                                   "where streamA.id=streamB.id " +
                                   "and streamB.id=streamC.id " +
                                   "and streamA.id=streamC.id";

            EPStatement joinView = _epService.EPAdministrator.Create(model);

            joinView.Events += _updateListener.Update;
            Assert.AreEqual(joinStatement, model.ToEPL());

            RunJoinUniquePerId();
        }
Ejemplo n.º 3
0
        private void RunAssertionJoinUniquePerIdOM(EPServiceProvider epService)
        {
            var model = new EPStatementObjectModel();

            model.SelectClause = SelectClause.CreateWildcard();
            FromClause fromClause = FromClause.Create(
                FilterStream.Create(EVENT_A, "streamA").AddView(View.Create("length", Expressions.Constant(3))),
                FilterStream.Create(EVENT_B, "streamB").AddView(View.Create("length", Expressions.Constant(3))),
                FilterStream.Create(EVENT_C, "streamC").AddView(View.Create("length", Expressions.Constant(3))));

            model.FromClause  = fromClause;
            model.WhereClause = Expressions.And(
                Expressions.EqProperty("streamA.id", "streamB.id"),
                Expressions.EqProperty("streamB.id", "streamC.id"),
                Expressions.EqProperty("streamA.id", "streamC.id"));
            model = (EPStatementObjectModel)SerializableObjectCopier.Copy(epService.Container, model);

            string epl = "select * from " +
                         EVENT_A + "#length(3) as streamA, " +
                         EVENT_B + "#length(3) as streamB, " +
                         EVENT_C + "#length(3) as streamC " +
                         "where streamA.id=streamB.id " +
                         "and streamB.id=streamC.id " +
                         "and streamA.id=streamC.id";

            EPStatement stmt           = epService.EPAdministrator.Create(model);
            var         updateListener = new SupportUpdateListener();

            stmt.Events += updateListener.Update;
            Assert.AreEqual(epl, model.ToEPL());

            RunJoinUniquePerId(epService, updateListener);

            stmt.Dispose();
        }
        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();
        }
Ejemplo n.º 5
0
            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();
            }
Ejemplo n.º 6
0
        private void RunAssertionWhere_OM(EPServiceProvider epService)
        {
            var model = new EPStatementObjectModel();

            model.SelectClause = SelectClause.Create()
                                 .AddWithAsProvidedName("s0.id", "idS0").AddWithAsProvidedName("s1.id", "idS1");
            PatternExpr pattern = Patterns.Or()
                                  .Add(Patterns.EveryFilter(typeof(SupportBean_S0).FullName, "s0"))
                                  .Add(Patterns.EveryFilter(typeof(SupportBean_S1).FullName, "s1")
                                       );

            model.FromClause  = FromClause.Create(PatternStream.Create(pattern));
            model.WhereClause = Expressions.Or()
                                .Add(Expressions.And()
                                     .Add(Expressions.IsNotNull("s0.id"))
                                     .Add(Expressions.Lt("s0.id", 100))
                                     )
                                .Add(Expressions.And()
                                     .Add(Expressions.IsNotNull("s1.id"))
                                     .Add(Expressions.Ge("s1.id", 100))
                                     );
            model = (EPStatementObjectModel)SerializableObjectCopier.Copy(epService.Container, model);

            string reverse  = model.ToEPL();
            string stmtText = "select s0.id as idS0, s1.id as idS1 " +
                              "from pattern [every s0=" + typeof(SupportBean_S0).FullName +
                              " or every s1=" + typeof(SupportBean_S1).FullName + "] " +
                              "where s0.id is not null and s0.id<100 or s1.id is not null and s1.id>=100";

            Assert.AreEqual(stmtText, reverse);

            EPStatement statement      = epService.EPAdministrator.Create(model);
            var         updateListener = new SupportUpdateListener();

            statement.Events += updateListener.Update;

            SendEventS0(epService, 1);
            AssertEventIds(updateListener, 1, null);

            SendEventS0(epService, 101);
            Assert.IsFalse(updateListener.IsInvoked);

            SendEventS1(epService, 1);
            Assert.IsFalse(updateListener.IsInvoked);

            SendEventS1(epService, 100);
            AssertEventIds(updateListener, null, 100);

            statement.Dispose();
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
            public void Run(RegressionEnvironment env)
            {
                var model = new EPStatementObjectModel();
                model.SelectClause = SelectClause.Create()
                    .AddWithAsProvidedName("S0.Id", "idS0")
                    .AddWithAsProvidedName("S1.Id", "idS1");
                PatternExpr pattern = Patterns.Or()
                    .Add(Patterns.EveryFilter("SupportBean_S0", "S0"))
                    .Add(
                        Patterns.EveryFilter("SupportBean_S1", "S1")
                    );
                model.FromClause = FromClause.Create(PatternStream.Create(pattern));
                model.WhereClause = Expressions.Or()
                    .Add(
                        Expressions.And()
                            .Add(Expressions.IsNotNull("S0.Id"))
                            .Add(Expressions.Lt("S0.Id", 100))
                    )
                    .Add(
                        Expressions.And()
                            .Add(Expressions.IsNotNull("S1.Id"))
                            .Add(Expressions.Ge("S1.Id", 100))
                    );
                model = env.CopyMayFail(model);

                var reverse = model.ToEPL();
                var stmtText = "select S0.Id as idS0, S1.Id as idS1 " +
                               "from pattern [every S0=SupportBean_S0" +
                               " or every S1=SupportBean_S1] " +
                               "where S0.Id is not null and S0.Id<100 or S1.Id is not null and S1.Id>=100";
                Assert.AreEqual(stmtText, reverse);

                model.Annotations = Collections.SingletonList(AnnotationPart.NameAnnotation("s0"));
                env.CompileDeploy(model).AddListener("s0");

                SendEventS0(env, 1);
                AssertEventIds(env, 1, null);

                SendEventS0(env, 101);
                Assert.IsFalse(env.Listener("s0").IsInvoked);

                SendEventS1(env, 1);
                Assert.IsFalse(env.Listener("s0").IsInvoked);

                SendEventS1(env, 100);
                AssertEventIds(env, null, 100);

                env.UndeployAll();
            }
Ejemplo n.º 9
0
        /// <summary>
        /// Constrains the specified esper query.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="esperQuery">The esper query.</param>
        /// <param name="expression">The expression.</param>
        /// <returns></returns>
        public static EsperQuery <T> Having <T>(this EsperQuery <T> esperQuery, System.Linq.Expressions.Expression <Func <T, bool> > expression)
        {
            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(expression);
                deriveObjectModel.HavingClause = deriveObjectModel.HavingClause == null
                    ? sodaExpression
                    : Expressions.And(deriveObjectModel.WhereClause, sodaExpression);
                deriveObjectModel.FromClause.Streams[0].StreamName =
                    expression.Parameters[0].Name;

                return(new EsperQuery <T>(esperQuery.ServiceProvider, deriveObjectModel));
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Converts a LINQ expression to a SODA expression.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <returns></returns>
        public static Expression LinqToSodaExpression(System.Linq.Expressions.Expression expression)
        {
            if (expression == null)
            {
                return(null);
            }

            switch (expression.NodeType)
            {
            case ExpressionType.And:
                return(Expressions.And(
                           LinqToSodaExpression(((BinaryExpression)expression).Left),
                           LinqToSodaExpression(((BinaryExpression)expression).Right)));

            case ExpressionType.AndAlso:
                return(Expressions.And(
                           LinqToSodaExpression(((BinaryExpression)expression).Left),
                           LinqToSodaExpression(((BinaryExpression)expression).Right)));

            case ExpressionType.Or:
                return(Expressions.Or(
                           LinqToSodaExpression(((BinaryExpression)expression).Left),
                           LinqToSodaExpression(((BinaryExpression)expression).Right)));

            case ExpressionType.OrElse:
                return(Expressions.Or(
                           LinqToSodaExpression(((BinaryExpression)expression).Left),
                           LinqToSodaExpression(((BinaryExpression)expression).Right)));

            case ExpressionType.Not:
                return(Expressions.Not(
                           LinqToSodaExpression(((UnaryExpression)expression).Operand)));

            case ExpressionType.NotEqual:
                return(Expressions.Not(
                           Expressions.Eq(
                               LinqToSodaExpression(((BinaryExpression)expression).Left),
                               LinqToSodaExpression(((BinaryExpression)expression).Right))));

            case ExpressionType.Equal:
                return(Expressions.Eq(
                           LinqToSodaExpression(((BinaryExpression)expression).Left),
                           LinqToSodaExpression(((BinaryExpression)expression).Right)));

            case ExpressionType.LessThan:
                return(Expressions.Lt(
                           LinqToSodaExpression(((BinaryExpression)expression).Left),
                           LinqToSodaExpression(((BinaryExpression)expression).Right)));

            case ExpressionType.LessThanOrEqual:
                return(Expressions.Le(
                           LinqToSodaExpression(((BinaryExpression)expression).Left),
                           LinqToSodaExpression(((BinaryExpression)expression).Right)));

            case ExpressionType.GreaterThan:
                return(Expressions.Gt(
                           LinqToSodaExpression(((BinaryExpression)expression).Left),
                           LinqToSodaExpression(((BinaryExpression)expression).Right)));

            case ExpressionType.GreaterThanOrEqual:
                return(Expressions.Ge(
                           LinqToSodaExpression(((BinaryExpression)expression).Left),
                           LinqToSodaExpression(((BinaryExpression)expression).Right)));

            case ExpressionType.MemberAccess:
                return(MemberToSoda(expression));

            case ExpressionType.Lambda:
                return(LambdaToSoda(expression));

            case ExpressionType.Convert:
            {
                var unary = (UnaryExpression)expression;
                return(Expressions.Cast(
                           LinqToSodaExpression(unary.Operand),
                           unary.Type.GetSimpleTypeName()));
            }

            case ExpressionType.Constant:
                return(Expressions.Constant(
                           ((System.Linq.Expressions.ConstantExpression)expression).Value));

            case ExpressionType.Call:
                return(CallToSoda(expression));
            }

            throw new ArgumentException(
                      String.Format("Expression of type {0} is not supported", expression.NodeType), "expression");
        }