public void OrderBy_Duplicate_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new OrderByClause
            {
                Orderings =
                {
                    new Ordering(GetExpression((Contact c) => c.FirstName), OrderingDirection.Asc)
                }
            });
            builder.AddClause(new OrderByClause
            {
                Orderings =
                {
                    new Ordering(GetExpression((Contact c) => c.LastName), OrderingDirection.Desc)
                }
            });
            builder.AddClause(new SelectClause(Expression.Constant(null)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.OrderBy, Is.EqualTo("LastName desc,FirstName asc"));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Generate a function with no arguments that returns an int given that name. The
        /// actual statement is a very simple constant.
        /// </summary>
        /// <param name="fname"></param>
        /// <returns></returns>
        public static QMFuncSource GenerateFunction()
        {
            int[] ints = new int[10];
            var   qmb  = new QueryModelBuilder();

            qmb.AddClause(new MainFromClause("i", typeof(int), Expression.Constant(ints)));
            qmb.AddClause(new SelectClause(Expression.Constant(1)));
            qmb.AddResultOperator(new Remotion.Linq.Clauses.ResultOperators.CountResultOperator());

            var h = new QMFuncHeader()
            {
                Arguments = new object[] { }, QM = qmb.Build()
            };

            h.QMText = h.QM.ToString();
            var f = new QMFuncSource(h);

            var p           = DeclarableParameter.CreateDeclarableParameterExpression(typeof(int));
            var st          = new StatementAssign(p, new ValSimple("5", typeof(int)));
            var inlineblock = new StatementInlineBlock();

            inlineblock.Add(st);
            inlineblock.Add(new StatementReturn(p));
            f.SetCodeBody(inlineblock);

            return(f);
        }
Ejemplo n.º 3
0
        public void Build()
        {
            _builder.AddResultOperator(_resultOperator1);
            _builder.AddClause(_whereClause1);
            _builder.AddClause(_mainFromClause);
            _builder.AddClause(_whereClause2);
            _builder.AddClause(_selectClause);
            _builder.AddResultOperator(_resultOperator2);

            var queryModel = _builder.Build();

            Assert.That(queryModel.MainFromClause, Is.SameAs(_mainFromClause));
            Assert.That(queryModel.SelectClause, Is.SameAs(_selectClause));
            Assert.That(queryModel.BodyClauses, Is.EqualTo(new[] { _whereClause1, _whereClause2 }));
            Assert.That(queryModel.ResultOperators, Is.EqualTo(new[] { _resultOperator1, _resultOperator2 }));
        }
        public void Select_Nested_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(GetExpression((Contact c) => c.Address.PostalCode)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Select, Is.EqualTo("Address/PostalCode"));
        }
        public void Select_Array_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(GetExpression((Contact c) => new[] { c.FirstName, c.LastName })));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Select, Is.EqualTo("FirstName,LastName"));
        }
        public void Select_Complex_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(GetExpression((Contact c) => c.Civility.ToString().Length)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Select, Is.EqualTo("Civility"));
        }
        public void MainType_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(Expression.Constant(null)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.MainType, Is.EqualTo(typeof(Contact)));
        }
        public void ResultOperator_WithPrecedence_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(new QuerySourceReferenceExpression(builder.MainFromClause)));
            builder.AddResultOperator(new WithPrecedenceResultOperator(3));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Precedence, Is.EqualTo(3));
        }
        public void ResultOperator_Fetch_Permissions_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(Expression.Constant(null)));
            builder.AddResultOperator(new FetchResultOperator(GetExpression((Contact c) => c.Permissions)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Include, Is.EqualTo("$permissions"));
        }
        public void Where_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new WhereClause(GetExpression((Contact c) => c.Active)));
            builder.AddClause(new SelectClause(Expression.Constant(null)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Where, Is.EqualTo("Active"));
        }
        public void ResultOperator_Skip_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(Expression.Constant(null)));
            builder.AddResultOperator(new SkipResultOperator(Expression.Constant(10)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.StartIndex, Is.EqualTo(11));
        }
        public void Select_ProtocolProperty_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(GetExpression((Contact c) => c.Key)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Select, Is.Null);
            Assert.That(visitor.Precedence, Is.EqualTo(0));
        }
        public void ResultOperator_Take_Multiple_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(Expression.Constant(null)));
            builder.AddResultOperator(new TakeResultOperator(Expression.Constant(10)));
            builder.AddResultOperator(new TakeResultOperator(Expression.Constant(5)));
            builder.AddResultOperator(new TakeResultOperator(Expression.Constant(8)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.Count, Is.EqualTo(5));
        }
        public void ResultOperator_WithExtensionArg_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new SelectClause(Expression.Constant(null)));
            builder.AddResultOperator(new WithExtensionArgResultOperator("foo", "bar"));
            builder.AddResultOperator(new WithExtensionArgResultOperator("hello", "world"));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.ExtensionArgs, Is.EqualTo(new Dictionary <string, string> {
                { "foo", "bar" }, { "hello", "world" }
            }));
        }
Ejemplo n.º 15
0
        public void TypeOfSequence()
        {
            var qmb = new QueryModelBuilder();

            qmb.AddClause(new SelectClause(Expression.Constant(1.0)));
            int[] list = new int[10];
            qmb.AddClause(new MainFromClause("r1", typeof(int), Expression.Constant(list)));

            var h = new QMFuncHeader()
            {
                Arguments = new object[] { }, IsSequence = true, QM = qmb.Build(), QMText = "hi"
            };
            var src = new QMFuncSource(h);

            Assert.AreEqual(typeof(double[]), src.ResultType, "result type");

            Assert.AreEqual(typeof(double[]), src.CacheVariable.Type, "Type of cache");
            Assert.AreEqual(typeof(bool), src.CacheVariableGood.Type, "Type of the cache good flag");
        }
        public void OrderBy_ProtocolProperty_Test()
        {
            var builder = new QueryModelBuilder();

            builder.AddClause(new MainFromClause("x", typeof(Contact), Expression.Constant(null)));
            builder.AddClause(new OrderByClause
            {
                Orderings =
                {
                    new Ordering(GetExpression((Contact c) => c.Key), OrderingDirection.Asc)
                }
            });
            builder.AddClause(new SelectClause(Expression.Constant(null)));

            var visitor = new SDataQueryModelVisitor();

            visitor.VisitQueryModel(builder.Build());

            Assert.That(visitor.OrderBy, Is.EqualTo("$key asc"));
        }