def test_mixed_entities_one(self): sess = create_session() expected = [ (Engineer( status=u'regular engineer', engineer_name=u'dilbert', name=u'dilbert', company_id=1, primary_language=u'java', person_id=1, type=u'engineer'), u'MegaCorp, Inc.'), (Engineer( status=u'regular engineer', engineer_name=u'wally', name=u'wally', company_id=1, primary_language=u'c++', person_id=2, type=u'engineer'), u'MegaCorp, Inc.'), (Engineer( status=u'elbonian engineer', engineer_name=u'vlad', name=u'vlad', company_id=2, primary_language=u'cobol', person_id=5, type=u'engineer'), u'Elbonia, Inc.')] eq_(sess.query(Engineer, Company.name) .join(Company.employees) .filter(Person.type == 'engineer').all(), expected)
def test_multi_join(self): sess = create_session() e = aliased(Person) c = aliased(Company) q = sess.query(Company, Person, c, e)\ .join(Person, Company.employees)\ .join(e, c.employees)\ .filter(Person.name == 'dilbert')\ .filter(e.name == 'wally') eq_(q.count(), 1) eq_(q.all(), [ ( Company(company_id=1, name=u'MegaCorp, Inc.'), Engineer( status=u'regular engineer', engineer_name=u'dilbert', name=u'dilbert', company_id=1, primary_language=u'java', person_id=1, type=u'engineer'), Company(company_id=1, name=u'MegaCorp, Inc.'), Engineer( status=u'regular engineer', engineer_name=u'wally', name=u'wally', company_id=1, primary_language=u'c++', person_id=2, type=u'engineer') ) ])
def test_joinedload_on_subclass(self): sess = create_session() expected = [ Engineer( name="dilbert", engineer_name="dilbert", primary_language="java", status="regular engineer", machines=[ Machine(name="IBM ThinkPad"), Machine(name="IPhone")])] def go(): # test load People with joinedload to engineers + machines eq_(sess.query(Person) .with_polymorphic('*') .options(joinedload(Engineer.machines)) .filter(Person.name == 'dilbert').all(), expected) self.assert_sql_count(testing.db, go, 1) sess = create_session() def go(): # test load People with subqueryload to engineers + machines eq_(sess.query(Person) .with_polymorphic('*') .options(subqueryload(Engineer.machines)) .filter(Person.name == 'dilbert').all(), expected) self.assert_sql_count(testing.db, go, 2)
def test_get_one(self): """ For all mappers, ensure the primary key has been calculated as just the "person_id" column. """ sess = create_session() eq_(sess.query(Person).get(e1.person_id), Engineer(name="dilbert", primary_language="java"))
def test_mixed_entities_sixteen(self): sess = create_session() expected = [(Engineer(status=u'elbonian engineer', engineer_name=u'vlad', name=u'vlad', primary_language=u'cobol'), u'Elbonia, Inc.')] eq_( sess.query(Person, Company.name).join(Company.employees).filter( Company.name == 'Elbonia, Inc.').all(), expected)
def test_mixed_entities_three(self): sess = create_session() palias = aliased(Person) expected = [(Engineer(status=u'elbonian engineer', engineer_name=u'vlad', name=u'vlad', primary_language=u'cobol'), u'Elbonia, Inc.', Engineer(status=u'regular engineer', engineer_name=u'dilbert', name=u'dilbert', company_id=1, primary_language=u'java', person_id=1, type=u'engineer'))] eq_( sess.query(Person, Company.name, palias).join(Company.employees).filter( Company.name == 'Elbonia, Inc.').filter( palias.name == 'dilbert').all(), expected)
def test_get_two(self): sess = create_session() eq_(sess.query(Engineer).get(e1.person_id), Engineer(name="dilbert", primary_language="java"))
def test_filter_on_subclass_three(self): sess = create_session() eq_(sess.query(Engineer) .filter(Engineer.person_id == e1.person_id).first(), Engineer(name="dilbert"))
def test_filter_on_subclass_two(self): sess = create_session() eq_(sess.query(Engineer).first(), Engineer(name="dilbert"))
def test_filter_on_subclass_one(self): sess = create_session() eq_(sess.query(Engineer).all()[0], Engineer(name="dilbert"))
def test_relationship_to_polymorphic(self): expected = [ Company(name="MegaCorp, Inc.", employees=[ Engineer(name="dilbert", engineer_name="dilbert", primary_language="java", status="regular engineer", machines=[ Machine(name="IBM ThinkPad"), Machine(name="IPhone") ]), Engineer(name="wally", engineer_name="wally", primary_language="c++", status="regular engineer"), Boss(name="pointy haired boss", golf_swing="fore", manager_name="pointy", status="da boss"), Manager(name="dogbert", manager_name="dogbert", status="regular manager"), ]), Company(name="Elbonia, Inc.", employees=[ Engineer(name="vlad", engineer_name="vlad", primary_language="cobol", status="elbonian engineer") ]) ] sess = create_session() def go(): # test load Companies with lazy load to 'employees' eq_(sess.query(Company).all(), expected) count = {'': 9, 'Polymorphic': 4}.get(self.select_type, 5) self.assert_sql_count(testing.db, go, count) sess = create_session() def go(): # currently, it doesn't matter if we say Company.employees, # or Company.employees.of_type(Engineer). joinedloader # doesn't pick up on the "of_type()" as of yet. eq_( sess.query(Company).options( joinedload_all(Company.employees.of_type(Engineer), Engineer.machines)).all(), expected) # in the case of select_type='', the joinedload # doesn't take in this case; it joinedloads company->people, # then a load for each of 5 rows, then lazyload of "machines" count = {'': 7, 'Polymorphic': 1}.get(self.select_type, 2) self.assert_sql_count(testing.db, go, count) sess = create_session() def go(): eq_( sess.query(Company).options( subqueryload_all(Company.employees.of_type(Engineer), Engineer.machines)).all(), expected) count = { '': 8, 'Joins': 4, 'Unions': 4, 'Polymorphic': 3, 'AliasedJoins': 4 }[self.select_type] self.assert_sql_count(testing.db, go, count)