public async Task Can_select_limit_on_Table_with_References_Async()
        {
            if (Dialect == Dialect.MySql)
            {
                return; //= This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
            }
#if NETCORE
            if (Dialect == Dialect.SqlServer || Dialect == Dialect.SqlServer2012)
            {
                return; // generates "... WHERE CustomerId IN (SELECT * FROM ...)"
            }
            // when should generate "... WHERE CustomerId IN (SELECT Id FROM ...)"
            // both on .NET and .NET Core
#endif

            using (var db = OpenDbConnection())
            {
                CustomerOrdersUseCase.DropTables(db); //Has conflicting 'Order' table
                db.DropAndCreateTable <Order>();
                db.DropAndCreateTable <Customer>();
                db.DropAndCreateTable <CustomerAddress>();

                var customer1 = LoadReferencesTests.GetCustomerWithOrders("1");
                db.Save(customer1, references: true);

                var customer2 = LoadReferencesTests.GetCustomerWithOrders("2");
                db.Save(customer2, references: true);

                var results = await db.LoadSelectAsync(db.From <Customer>()
                                                       .OrderBy(x => x.Id)
                                                       .Limit(1, 1));

                //db.GetLastSql().Print();

                Assert.That(results.Count, Is.EqualTo(1));
                Assert.That(results[0].Name, Is.EqualTo("Customer 2"));
                Assert.That(results[0].PrimaryAddress.AddressLine1, Is.EqualTo("2 Humpty Street"));
                Assert.That(results[0].Orders.Count, Is.EqualTo(2));

                results = await db.LoadSelectAsync(db.From <Customer>()
                                                   .Join <CustomerAddress>()
                                                   .OrderBy(x => x.Id)
                                                   .Limit(1, 1));

                db.GetLastSql().Print();

                Assert.That(results.Count, Is.EqualTo(1));
                Assert.That(results[0].Name, Is.EqualTo("Customer 2"));
                Assert.That(results[0].PrimaryAddress.AddressLine1, Is.EqualTo("2 Humpty Street"));
                Assert.That(results[0].Orders.Count, Is.EqualTo(2));
            }
        }
Example #2
0
        public void Can_select_limit_on_Table_with_References()
        {
            //This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
            if (Dialect == Dialect.AnyMySql)
            {
                return;
            }

            //Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
            if ((Dialect & Dialect.AnySqlServer) == Dialect)
            {
                return;
            }

            using (var db = OpenDbConnection())
            {
                CustomerOrdersUseCase.DropTables(db); //Has conflicting 'Order' table
                db.DropAndCreateTable <Order>();
                db.DropAndCreateTable <Customer>();
                db.DropAndCreateTable <CustomerAddress>();

                var customer1 = LoadReferencesTests.GetCustomerWithOrders("1");
                db.Save(customer1, references: true);

                var customer2 = LoadReferencesTests.GetCustomerWithOrders("2");
                db.Save(customer2, references: true);

                var results = db.LoadSelect(db.From <Customer>()
                                            .OrderBy(x => x.Id)
                                            .Limit(1, 1));

                //db.GetLastSql().Print();

                Assert.That(results.Count, Is.EqualTo(1));
                Assert.That(results[0].Name, Is.EqualTo("Customer 2"));
                Assert.That(results[0].PrimaryAddress.AddressLine1, Is.EqualTo("2 Humpty Street"));
                Assert.That(results[0].Orders.Count, Is.EqualTo(2));

                results = db.LoadSelect(db.From <Customer>()
                                        .Join <CustomerAddress>()
                                        .OrderBy(x => x.Id)
                                        .Limit(1, 1));

                db.GetLastSql().Print();

                Assert.That(results.Count, Is.EqualTo(1));
                Assert.That(results[0].Name, Is.EqualTo("Customer 2"));
                Assert.That(results[0].PrimaryAddress.AddressLine1, Is.EqualTo("2 Humpty Street"));
                Assert.That(results[0].Orders.Count, Is.EqualTo(2));
            }
        }
        public void Can_select_limit_on_Table_with_References()
        {
            using (var db = OpenDbConnection())
            {
                CustomerOrdersUseCase.DropTables(db); //Has conflicting 'Order' table
                db.DropAndCreateTable <Order>();
                db.DropAndCreateTable <Customer>();
                db.DropAndCreateTable <CustomerAddress>();

                var customer1 = LoadReferencesTests.GetCustomerWithOrders("1");
                db.Save(customer1, references: true);

                var customer2 = LoadReferencesTests.GetCustomerWithOrders("2");
                db.Save(customer2, references: true);

                var results = db.LoadSelect <Customer>(q => q
                                                       .OrderBy(x => x.Id)
                                                       .Limit(1, 1));

                //db.GetLastSql().Print();

                Assert.That(results.Count, Is.EqualTo(1));
                Assert.That(results[0].Name, Is.EqualTo("Customer 2"));
                Assert.That(results[0].PrimaryAddress.AddressLine1, Is.EqualTo("2 Humpty Street"));
                Assert.That(results[0].Orders.Count, Is.EqualTo(2));

                results = db.LoadSelect <Customer>(q => q
                                                   .Join <CustomerAddress>()
                                                   .OrderBy(x => x.Id)
                                                   .Limit(1, 1));

                db.GetLastSql().Print();

                Assert.That(results.Count, Is.EqualTo(1));
                Assert.That(results[0].Name, Is.EqualTo("Customer 2"));
                Assert.That(results[0].PrimaryAddress.AddressLine1, Is.EqualTo("2 Humpty Street"));
                Assert.That(results[0].Orders.Count, Is.EqualTo(2));
            }
        }