예제 #1
0
        private IQuery <TModel> CreateQuery <TModel>(SelectQueryData data)
        {
            var resolver = new DefaultNameResolver();
            var factory  = new DefaultQueryDataFactory(resolver);

            return(new SelectQuery <TModel>(data, factory));
        }
예제 #2
0
        public void GetSqlCommandTranslatesSubtractDaysToDateDiffDays()
        {
            var builder = new SqlCommandBuilder(new DefaultNameResolver());
            var source  = new ModelQuerySource(typeof(User), new DefaultNameResolver());
            Expression <Func <User, bool> > whereClause = user => DateTime.Today.Subtract(user.BirthDate).Days > 100;
            var data = new SelectQueryData(builder, source);

            data.WhereClauses.Add(whereClause);
            var command = builder.GetSelectCommand(data);

            Assert.That(command.Command, Is.EqualTo("SELECT * FROM [User] [user] WHERE (DATEDIFF(day, [user].[BirthDate], GETDATE())) > (@p0)"));
        }
예제 #3
0
        public void GetSqlCommandGeneratesSelectWithWhereClauseIfWhereClauseSpecified()
        {
            var builder = new SqlCommandBuilder(new DefaultNameResolver());
            var source  = new ModelQuerySource(typeof(User), new DefaultNameResolver());
            Expression <Predicate <User> > whereClause = user => user.Login == user.FirstName;
            var data = new SelectQueryData(builder, source);

            data.WhereClauses.Add(whereClause);
            var command = builder.GetSelectCommand(data);

            Assert.That(command.Command, Is.EqualTo("SELECT * FROM [User] [user] WHERE ([user].[Login]) = ([user].[FirstName])"));
        }
예제 #4
0
        public void GetSqlCommandTranslatesNegateOperatorCorrectly()
        {
            var builder = new SqlCommandBuilder(new DefaultNameResolver());
            var source  = new ModelQuerySource(typeof(User), new DefaultNameResolver());
            Expression <Predicate <User> > whereClause = user => - user.Id < 10;
            var data = new SelectQueryData(builder, source);

            data.WhereClauses.Add(whereClause);
            var command = builder.GetSelectCommand(data);

            Assert.That(command.Command, Is.EqualTo("SELECT * FROM [User] [user] WHERE (- ([user].[Id])) < (@p0)"));
        }
예제 #5
0
        public void GetSqlCommandDateTimeConstructorIsTranslatedIntoDateTimeFromParts()
        {
            var builder = new SqlCommandBuilder(new DefaultNameResolver());
            var source  = new ModelQuerySource(typeof(User), new DefaultNameResolver());
            Expression <Func <User, bool> > whereClause = user => user.BirthDate == new DateTime(1968, 06, 02);
            var data = new SelectQueryData(builder, source);

            data.WhereClauses.Add(whereClause);
            var command = builder.GetSelectCommand(data);

            Assert.That(command.Command, Is.EqualTo("SELECT * FROM [User] [user] WHERE ([user].[BirthDate]) = (DATETIMEFROMPARTS(@p0, @p1, @p2, 0, 0, 0, 0))"));
        }
예제 #6
0
        public void GetSqlCommandWhenWhereClauseIsPresentTableAliasIsTakenFromIt()
        {
            var builder = new SqlCommandBuilder(new DefaultNameResolver());
            var source  = new ModelQuerySource(typeof(User), new DefaultNameResolver());
            Expression <Func <User, bool> > whereClause = user => user.Login == "jacenty";
            var data = new SelectQueryData(builder, source);

            data.WhereClauses.Add(whereClause);
            var command = builder.GetSelectCommand(data);

            Assert.That(command.Command, Is.EqualTo("SELECT * FROM [User] [user] WHERE ([user].[Login]) = (@p0)"));
        }
예제 #7
0
        public void GetSqlCommandGeneratesOrderByDescendingIfOrderByPropertyWithDescendingAdded()
        {
            var builder = new SqlCommandBuilder(new DefaultNameResolver());
            var source  = new ModelQuerySource(typeof(User), new DefaultNameResolver());
            var data    = new SelectQueryData(builder, source);
            Expression <Func <User, object> > orderSpec = user => user.Login;

            data.OrderByProperties.Add(Tuple.Create <LambdaExpression, bool>(orderSpec, false));
            var command = builder.GetSelectCommand(data);

            Assert.That(command.Command, Is.EqualTo("SELECT * FROM [User] [user] ORDER BY [user].[Login] DESC"));
        }
예제 #8
0
        public void GetSqlCommandStringLengthIsTranslatedToLen()
        {
            var builder = new SqlCommandBuilder(new DefaultNameResolver());
            var source  = new ModelQuerySource(typeof(User), new DefaultNameResolver());
            Expression <Predicate <User> > whereClause = user => user.Login.Length > 3;
            var data = new SelectQueryData(builder, source);

            data.WhereClauses.Add(whereClause);
            var command = builder.GetSelectCommand(data);

            Assert.That(command.Command, Is.EqualTo("SELECT * FROM [User] [user] WHERE (LEN([user].[Login])) > (@p0)"));
        }
예제 #9
0
        public void GetSqlCommandSubstringMethodIsTranslatedToSubstring()
        {
            var builder = new SqlCommandBuilder(new DefaultNameResolver());
            var source  = new ModelQuerySource(typeof(User), new DefaultNameResolver());
            Expression <Predicate <User> > whereClause = user => user.Login.Substring(1, 3) == "ace";
            var data = new SelectQueryData(builder, source);

            data.WhereClauses.Add(whereClause);
            var command = builder.GetSelectCommand(data);

            Assert.That(command.Command, Is.EqualTo("SELECT * FROM [User] [user] WHERE (SUBSTRING([user].[Login], @p0 + 1, @p1)) = (@p2)"));
        }
예제 #10
0
        public void GetSqlCommandContainsMethodIsTranslatedToLikeOperator()
        {
            var builder = new SqlCommandBuilder(new DefaultNameResolver());
            var source  = new ModelQuerySource(typeof(User), new DefaultNameResolver());
            Expression <Predicate <User> > whereClause = user => user.Login.Contains("cent");
            var data = new SelectQueryData(builder, source);

            data.WhereClauses.Add(whereClause);
            var command = builder.GetSelectCommand(data);

            Assert.That(command.Command, Is.EqualTo("SELECT * FROM [User] [user] WHERE ([user].[Login]) LIKE ('%' + (@p0) + '%')"));
        }
예제 #11
0
        public void GetSqlCommandCreatesParameterWhenConstantIsUsedInExpression()
        {
            var builder = new SqlCommandBuilder(new DefaultNameResolver());
            var source  = new ModelQuerySource(typeof(User), new DefaultNameResolver());
            Expression <Predicate <User> > whereClause = user => user.Login == "jacenty";
            var data = new SelectQueryData(builder, source);

            data.WhereClauses.Add(whereClause);
            var command = builder.GetSelectCommand(data);

            Assert.That(command.Command, Is.EqualTo("SELECT * FROM [User] [user] WHERE ([user].[Login]) = (@p0)"));
            Assert.That(command.Parameters["@p0"], Is.EqualTo("jacenty"));
        }
예제 #12
0
        public void GetSqlCommandGeneratesOrderByIfOrderByWhenManyOrderByPropertiesAdded()
        {
            var builder = new SqlCommandBuilder(new DefaultNameResolver());
            var source  = new ModelQuerySource(typeof(User), new DefaultNameResolver());
            var data    = new SelectQueryData(builder, source);
            Expression <Func <User, object> > orderSpec1 = user => user.LastName;
            Expression <Func <User, object> > orderSpec2 = user => user.FirstName;

            data.OrderByProperties.Add(Tuple.Create <LambdaExpression, bool>(orderSpec1, true));
            data.OrderByProperties.Add(Tuple.Create <LambdaExpression, bool>(orderSpec2, true));
            var command = builder.GetSelectCommand(data);

            Assert.That(command.Command, Is.EqualTo("SELECT * FROM [User] [user] ORDER BY [user].[LastName], [user].[FirstName]"));
        }
예제 #13
0
        public void GetSqlCommandTranslatesConditionalOperatorCorrectly()
        {
            var builder = new SqlCommandBuilder(new DefaultNameResolver());
            var source  = new ModelQuerySource(typeof(User), new DefaultNameResolver());
            Expression <Predicate <User> > whereClause = user => (user.Login != null ? user.Login : user.FirstName).StartsWith("jac");
            var data = new SelectQueryData(builder, source);

            data.WhereClauses.Add(whereClause);
            var command = builder.GetSelectCommand(data);

            Assert.That(
                command.Command,
                Is.EqualTo("SELECT * FROM [User] [user] WHERE (IIF(([user].[Login]) IS NOT (NULL), [user].[Login], [user].[FirstName])) LIKE ((@p0) + '%')"));
        }
예제 #14
0
        public void GetSqlCommandAndOperatorIsTranslatedCorrectly()
        {
            var builder = new SqlCommandBuilder(new DefaultNameResolver());
            var source  = new ModelQuerySource(typeof(User), new DefaultNameResolver());
            Expression <Predicate <User> > whereClause = user => user.FirstName == "Jacek" && user.LastName == "Hełka";
            var data = new SelectQueryData(builder, source);

            data.WhereClauses.Add(whereClause);
            var command = builder.GetSelectCommand(data);

            Assert.That(
                command.Command,
                Is.EqualTo("SELECT * FROM [User] [user] WHERE (([user].[FirstName]) = (@p0)) AND (([user].[LastName]) = (@p1))"));
        }
예제 #15
0
        public void GetSqlCommandUsesNameResolverForTableAndColumnNames2()
        {
            var builder = new SqlCommandBuilder(new PrefixBasedNameResolver());
            var source  = new ModelQuerySource(typeof(User), new PrefixBasedNameResolver());
            var data    = new SelectQueryData(builder, source);
            Expression <Func <User, object> > orderSpec  = user => user.Login;
            Expression <Func <User, object> > selectSpec = user => new { user.FirstName, user.LastName };

            data.OrderByProperties.Add(Tuple.Create <LambdaExpression, bool>(orderSpec, true));
            data.SelectClause = selectSpec;
            var command = builder.GetSelectCommand(data);

            Assert.That(
                command.Command,
                Is.EqualTo(
                    "SELECT [user].[col_FirstName] AS [FirstName], [user].[col_LastName] AS [LastName] " +
                    "FROM [TBL_User] [user] " +
                    "ORDER BY [user].[col_Login]"));
        }
예제 #16
0
        public void GetSqlCommandGeneratesOffsetAndFetchWhenSkipAndTakeUsed()
        {
            var builder = new SqlCommandBuilder(new DefaultNameResolver());
            var source  = new ModelQuerySource(typeof(User), new DefaultNameResolver());
            var data    = new SelectQueryData(builder, source)
            {
                SkipRows = 10,
                TakeRows = 20
            };
            Expression <Func <User, object> > orderSpec1 = user => user.LastName;
            Expression <Func <User, object> > orderSpec2 = user => user.FirstName;

            data.OrderByProperties.Add(Tuple.Create <LambdaExpression, bool>(orderSpec1, true));
            data.OrderByProperties.Add(Tuple.Create <LambdaExpression, bool>(orderSpec2, true));
            var command = builder.GetSelectCommand(data);

            Assert.That(
                command.Command,
                Is.EqualTo("SELECT * FROM [User] [user] ORDER BY [user].[LastName], [user].[FirstName] OFFSET 10 ROWS FETCH NEXT 20 ROWS ONLY"));
        }