def test_option_creation(self):
        from sqlalchemy.orm.strategies import EagerLazyOption

        Customer = self.classes.Customer
        opt = orm.nestedload(Customer.orders)
        assert isinstance(opt, EagerLazyOption)
        is_(opt.key[0], Customer.orders)
示例#2
0
 def test_subquery_no_eagers(self):
     Customer = self.classes.Customer
     s = Session()
     stmt = s.query(Customer).options(orm.nestedload(
         Customer.orders)).subquery()
     self.assert_compile(stmt,
                         'SELECT customer.id, customer.name FROM customer')
    def test_load_collection(self):
        Customer = self.classes.Customer

        s = Session()
        q = s.query(Customer).options(orm.nestedload(Customer.orders)).filter(Customer.id == 1)

        with self.assert_statement_count(1):
            eq_(q.all(), [self._orm_fixture(orders=True)])
示例#4
0
    def test_load_collection(self):
        Customer = self.classes.Customer

        s = Session()
        q = s.query(Customer).options(orm.nestedload(Customer.orders)).\
                            filter(Customer.id == 1)

        with self.assert_statement_count(1):
            eq_(q.all(), [self._orm_fixture(orders=True)])
示例#5
0
 def test_render_basic_nested(self):
     Customer = self.classes.Customer
     s = Session()
     q = s.query(Customer).options(orm.nestedload(Customer.orders))
     self.assert_compile(
         q, 'SELECT customer.id AS customer_id, '
         'customer.name AS customer_name, (SELECT "order".id, '
         '"order".customer_id, "order".order_info FROM "order" '
         'WHERE customer.id = "order".customer_id) AS anon_1 '
         'FROM customer')
示例#6
0
 def test_statement(self):
     Customer = self.classes.Customer
     s = Session()
     # there's an annotate in here which needs to succeed
     stmt = s.query(Customer).options(orm.nestedload(
         Customer.orders)).statement
     self.assert_compile(
         stmt, 'SELECT customer.id, customer.name, (SELECT "order".id, '
         '"order".customer_id, "order".order_info FROM "order" '
         'WHERE customer.id = "order".customer_id) AS anon_1 FROM customer')
 def test_statement(self):
     Customer = self.classes.Customer
     s = Session()
     # there's an annotate in here which needs to succeed
     stmt = s.query(Customer).options(orm.nestedload(Customer.orders)).statement
     self.assert_compile(
         stmt,
         'SELECT customer.id, customer.name, (SELECT "order".id, '
         '"order".customer_id, "order".order_info FROM "order" '
         'WHERE customer.id = "order".customer_id) AS anon_1 FROM customer',
     )
    def test_refresh_scalar(self):
        Order = self.classes.Order

        s = Session()
        q = s.query(Order).options(orm.nestedload(Order.customer)).filter(Order.id == 102)
        order = q.all()
        customer = order[0].customer

        # expire...
        s.expire(customer)

        # + load again, should refresh Customer on Order
        s.query(Order).options(orm.nestedload(Order.customer)).filter(Order.id == 102).all()

        fixture_order = self._orm_fixture(orders=True).orders[1]

        # avoid comparison/lazy load of 'orders' on the customer
        del fixture_order.customer.__dict__["orders"]
        with self.assert_statement_count(0):
            eq_(fixture_order, order[0])
 def test_render_basic_nested(self):
     Customer = self.classes.Customer
     s = Session()
     q = s.query(Customer).options(orm.nestedload(Customer.orders))
     self.assert_compile(
         q,
         "SELECT customer.id AS customer_id, "
         'customer.name AS customer_name, (SELECT "order".id, '
         '"order".customer_id, "order".order_info FROM "order" '
         'WHERE customer.id = "order".customer_id) AS anon_1 '
         "FROM customer",
     )
    def test_load_scalar(self):
        Order = self.classes.Order

        s = Session()
        q = s.query(Order).options(orm.nestedload(Order.customer)).filter(Order.id == 102)

        order = self._orm_fixture(orders=True).orders[1]

        # avoid comparison/lazy load of 'orders' on the customer
        del order.customer.__dict__["orders"]
        with self.assert_statement_count(1):
            eq_(q.all(), [order])
示例#11
0
    def test_refresh_scalar(self):
        Order = self.classes.Order

        s = Session()
        q = s.query(Order).options(orm.nestedload(Order.customer)).\
                        filter(Order.id == 102)
        order = q.all()
        customer = order[0].customer

        # expire...
        s.expire(customer)

        # + load again, should refresh Customer on Order
        s.query(Order).options(orm.nestedload(Order.customer)).\
                        filter(Order.id == 102).all()

        fixture_order = self._orm_fixture(orders=True).orders[1]

        # avoid comparison/lazy load of 'orders' on the customer
        del fixture_order.customer.__dict__['orders']
        with self.assert_statement_count(0):
            eq_(fixture_order, order[0])
示例#12
0
    def test_load_scalar(self):
        Order = self.classes.Order

        s = Session()
        q = s.query(Order).options(orm.nestedload(Order.customer)).\
                        filter(Order.id == 102)

        order = self._orm_fixture(orders=True).orders[1]

        # avoid comparison/lazy load of 'orders' on the customer
        del order.customer.__dict__['orders']
        with self.assert_statement_count(1):
            eq_(q.all(), [order])
    def test_refresh_collection(self):
        Customer = self.classes.Customer

        s = Session()
        customers = s.query(Customer).options(immediateload(Customer.orders)).filter(Customer.id == 1).all()
        orders = customers[0].orders

        # expire...
        for ord_ in orders:
            s.expire(ord_)

        # + load again, should refresh Orders on Customer
        s.query(Customer).options(orm.nestedload(Customer.orders)).filter(Customer.id == 1).all()

        # covers the "exec" loader
        with self.assert_statement_count(0):
            eq_(customers, [self._orm_fixture(orders=True)])
示例#14
0
    def test_refresh_collection(self):
        Customer = self.classes.Customer

        s = Session()
        customers = s.query(Customer).options(immediateload(Customer.orders)).\
                            filter(Customer.id == 1).all()
        orders = customers[0].orders

        # expire...
        for ord_ in orders:
            s.expire(ord_)

        # + load again, should refresh Orders on Customer
        s.query(Customer).options(orm.nestedload(Customer.orders)).\
                            filter(Customer.id == 1).all()

        # covers the "exec" loader
        with self.assert_statement_count(0):
            eq_(customers, [self._orm_fixture(orders=True)])
示例#15
0
 def test_option_creation(self):
     from sqlalchemy.orm.strategies import EagerLazyOption
     Customer = self.classes.Customer
     opt = orm.nestedload(Customer.orders)
     assert isinstance(opt, EagerLazyOption)
     is_(opt.key[0], Customer.orders)
 def test_subquery_no_eagers(self):
     Customer = self.classes.Customer
     s = Session()
     stmt = s.query(Customer).options(orm.nestedload(Customer.orders)).subquery()
     self.assert_compile(stmt, "SELECT customer.id, customer.name FROM customer")