diff options
Diffstat (limited to 'test/orm/inheritance/test_single.py')
-rw-r--r-- | test/orm/inheritance/test_single.py | 470 |
1 files changed, 235 insertions, 235 deletions
diff --git a/test/orm/inheritance/test_single.py b/test/orm/inheritance/test_single.py index 5d3e4cf67..0772e66b5 100644 --- a/test/orm/inheritance/test_single.py +++ b/test/orm/inheritance/test_single.py @@ -14,42 +14,46 @@ class SingleInheritanceTest(testing.AssertsCompiledSQL, fixtures.MappedTest): @classmethod def define_tables(cls, metadata): Table('employees', metadata, - Column('employee_id', Integer, primary_key=True, test_needs_autoincrement=True), - Column('name', String(50)), - Column('manager_data', String(50)), - Column('engineer_info', String(50)), - Column('type', String(20))) + Column('employee_id', Integer, primary_key=True, + test_needs_autoincrement=True), + Column('name', String(50)), + Column('manager_data', String(50)), + Column('engineer_info', String(50)), + Column('type', String(20))) Table('reports', metadata, - Column('report_id', Integer, primary_key=True, test_needs_autoincrement=True), + Column('report_id', Integer, primary_key=True, + test_needs_autoincrement=True), Column('employee_id', ForeignKey('employees.employee_id')), - Column('name', String(50)), - ) + Column('name', String(50)),) @classmethod def setup_classes(cls): global Employee, Manager, Engineer, JuniorEngineer + class Employee(cls.Comparable): pass + class Manager(Employee): pass + class Engineer(Employee): pass + class JuniorEngineer(Engineer): pass @classmethod def setup_mappers(cls): - Employee, Manager, JuniorEngineer, employees, Engineer = (cls.classes.Employee, - cls.classes.Manager, - cls.classes.JuniorEngineer, - cls.tables.employees, - cls.classes.Engineer) + Employee, Manager, JuniorEngineer, employees, Engineer = ( + cls.classes.Employee, cls.classes.Manager, cls.classes. + JuniorEngineer, cls.tables.employees, cls.classes.Engineer) mapper(Employee, employees, polymorphic_on=employees.c.type) mapper(Manager, inherits=Employee, polymorphic_identity='manager') mapper(Engineer, inherits=Employee, polymorphic_identity='engineer') - mapper(JuniorEngineer, inherits=Engineer, polymorphic_identity='juniorengineer') + mapper(JuniorEngineer, inherits=Engineer, + polymorphic_identity='juniorengineer') def _fixture_one(self): Employee, JuniorEngineer, Manager, Engineer = ( @@ -85,7 +89,8 @@ class SingleInheritanceTest(testing.AssertsCompiledSQL, fixtures.MappedTest): session.expire(m1, ['manager_data']) eq_(m1.manager_data, "knows how to manage things") - row = session.query(Engineer.name, Engineer.employee_id).filter(Engineer.name=='Kurt').first() + row = session.query(Engineer.name, Engineer.employee_id).filter( + Engineer.name == 'Kurt').first() assert row.name == 'Kurt' assert row.employee_id == e1.employee_id @@ -113,10 +118,9 @@ class SingleInheritanceTest(testing.AssertsCompiledSQL, fixtures.MappedTest): [("Tom", "Kurt"), ("Tom", "Ed")] ) - eq_( - session.query(func.upper(Manager.name), func.upper(ealias.name)).all(), - [("TOM", "KURT"), ("TOM", "ED")] - ) + eq_(session.query(func.upper(Manager.name), + func.upper(ealias.name)).all(), + [("TOM", "KURT"), ("TOM", "ED")]) eq_( session.query(Manager).add_entity(ealias).all(), @@ -130,7 +134,8 @@ class SingleInheritanceTest(testing.AssertsCompiledSQL, fixtures.MappedTest): # TODO: I think raise error on this for now # self.assertEquals( - # session.query(Employee.name, Manager.manager_data, Engineer.engineer_info).all(), + # session.query(Employee.name, Manager.manager_data, + # Engineer.engineer_info).all(), # [] # ) @@ -254,7 +259,7 @@ class SingleInheritanceTest(testing.AssertsCompiledSQL, fixtures.MappedTest): "anon_1_employees_employee_id, " "anon_1.employees_name AS anon_1_employees_name, " "anon_1.employees_manager_data AS anon_1_employees_manager_data, " - "anon_1.employees_engineer_info AS anon_1_employees_engineer_info, " + "anon_1.employees_engineer_info AS anon_1_employees_engineer_info, " # noqa "anon_1.employees_type AS anon_1_employees_type " "FROM (SELECT employees.employee_id AS employees_employee_id, " "employees.name AS employees_name, " @@ -270,8 +275,7 @@ class SingleInheritanceTest(testing.AssertsCompiledSQL, fixtures.MappedTest): "employees.engineer_info AS employees_engineer_info, " "employees.type AS employees_type FROM employees " "WHERE employees.manager_data = :manager_data_1 " - "AND employees.type IN (:type_3)) AS anon_1" - ) + "AND employees.type IN (:type_3)) AS anon_1") for meth, token in [ (q1.union, "UNION"), @@ -307,10 +311,10 @@ class SingleInheritanceTest(testing.AssertsCompiledSQL, fixtures.MappedTest): ) def test_select_from(self): - Manager, JuniorEngineer, employees, Engineer = (self.classes.Manager, - self.classes.JuniorEngineer, - self.tables.employees, - self.classes.Engineer) + Manager = self.classes.Manager + JuniorEngineer = self.classes.JuniorEngineer + employees = self.tables.employees + Engineer = self.classes.Engineer sess = create_session() m1 = Manager(name='Tom', manager_data='data1') @@ -320,16 +324,14 @@ class SingleInheritanceTest(testing.AssertsCompiledSQL, fixtures.MappedTest): sess.add_all([m1, m2, e1, e2]) sess.flush() - eq_( - sess.query(Manager).select_from(employees.select().limit(10)).all(), - [m1, m2] - ) + eq_(sess.query(Manager).select_from( + employees.select().limit(10)).all(), [m1, m2]) def test_count(self): - Employee, JuniorEngineer, Manager, Engineer = (self.classes.Employee, - self.classes.JuniorEngineer, - self.classes.Manager, - self.classes.Engineer) + Employee = self.classes.Employee + JuniorEngineer = self.classes.JuniorEngineer + Manager = self.classes.Manager + Engineer = self.classes.Engineer sess = create_session() m1 = Manager(name='Tom', manager_data='data1') @@ -361,9 +363,9 @@ class SingleInheritanceTest(testing.AssertsCompiledSQL, fixtures.MappedTest): def test_type_filtering(self): Employee, Manager, reports, Engineer = (self.classes.Employee, - self.classes.Manager, - self.tables.reports, - self.classes.Engineer) + self.classes.Manager, + self.tables.reports, + self.classes.Engineer) class Report(fixtures.ComparableEntity): pass @@ -378,14 +380,16 @@ class SingleInheritanceTest(testing.AssertsCompiledSQL, fixtures.MappedTest): sess.flush() rq = sess.query(Report) - assert len(rq.filter(Report.employee.of_type(Manager).has()).all()) == 1 - assert len(rq.filter(Report.employee.of_type(Engineer).has()).all()) == 0 + assert len(rq.filter(Report.employee.of_type(Manager).has()) + .all()) == 1 + assert len(rq.filter(Report.employee.of_type(Engineer).has()) + .all()) == 0 def test_type_joins(self): Employee, Manager, reports, Engineer = (self.classes.Employee, - self.classes.Manager, - self.tables.reports, - self.classes.Engineer) + self.classes.Manager, + self.tables.reports, + self.classes.Engineer) class Report(fixtures.ComparableEntity): pass @@ -404,47 +408,50 @@ class SingleInheritanceTest(testing.AssertsCompiledSQL, fixtures.MappedTest): assert len(rq.join(Report.employee.of_type(Manager)).all()) == 1 assert len(rq.join(Report.employee.of_type(Engineer)).all()) == 0 -class RelationshipFromSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest): + +class RelationshipFromSingleTest( + testing.AssertsCompiledSQL, fixtures.MappedTest): @classmethod def define_tables(cls, metadata): Table('employee', metadata, - Column('id', Integer, primary_key=True, test_needs_autoincrement=True), - Column('name', String(50)), - Column('type', String(20)), - ) + Column('id', Integer, primary_key=True, + test_needs_autoincrement=True), + Column('name', String(50)), + Column('type', String(20))) Table('employee_stuff', metadata, - Column('id', Integer, primary_key=True, test_needs_autoincrement=True), - Column('employee_id', Integer, ForeignKey('employee.id')), - Column('name', String(50)), - ) + Column('id', Integer, primary_key=True, + test_needs_autoincrement=True), + Column('employee_id', Integer, ForeignKey('employee.id')), + Column('name', String(50))) @classmethod def setup_classes(cls): class Employee(cls.Comparable): pass + class Manager(Employee): pass + class Stuff(cls.Comparable): pass def test_subquery_load(self): - employee, employee_stuff, Employee, Stuff, Manager = (self.tables.employee, - self.tables.employee_stuff, - self.classes.Employee, - self.classes.Stuff, - self.classes.Manager) - - mapper(Employee, employee, polymorphic_on=employee.c.type, polymorphic_identity='employee') - mapper(Manager, inherits=Employee, polymorphic_identity='manager', properties={ - 'stuff':relationship(Stuff) - }) + employee, employee_stuff, Employee, Stuff, Manager = ( + self.tables.employee, self.tables.employee_stuff, self.classes. + Employee, self.classes.Stuff, self.classes.Manager) + + mapper(Employee, employee, polymorphic_on=employee.c.type, + polymorphic_identity='employee') + mapper(Manager, inherits=Employee, polymorphic_identity='manager', + properties={'stuff': relationship(Stuff)}) mapper(Stuff, employee_stuff) sess = create_session() - context = sess.query(Manager).options(subqueryload('stuff'))._compile_context() - subq = context.attributes[('subquery', - (class_mapper(Manager), class_mapper(Manager).attrs.stuff))] + context = sess.query(Manager).options( + subqueryload('stuff'))._compile_context() + subq = context.attributes[('subquery', (class_mapper( + Manager), class_mapper(Manager).attrs.stuff))] self.assert_compile(subq, 'SELECT employee_stuff.id AS ' @@ -458,27 +465,29 @@ class RelationshipFromSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest 'JOIN employee_stuff ON anon_1.employee_id ' '= employee_stuff.employee_id ORDER BY ' 'anon_1.employee_id', - use_default_dialect=True - ) + use_default_dialect=True) -class RelationshipToSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest): + +class RelationshipToSingleTest( + testing.AssertsCompiledSQL, fixtures.MappedTest): __dialect__ = 'default' @classmethod def define_tables(cls, metadata): Table('employees', metadata, - Column('employee_id', Integer, primary_key=True, test_needs_autoincrement=True), - Column('name', String(50)), - Column('manager_data', String(50)), - Column('engineer_info', String(50)), - Column('type', String(20)), - Column('company_id', Integer, ForeignKey('companies.company_id')) - ) + Column('employee_id', Integer, primary_key=True, + test_needs_autoincrement=True), + Column('name', String(50)), + Column('manager_data', String(50)), + Column('engineer_info', String(50)), + Column('type', String(20)), + Column('company_id', Integer, + ForeignKey('companies.company_id'))) Table('companies', metadata, - Column('company_id', Integer, primary_key=True, test_needs_autoincrement=True), - Column('name', String(50)), - ) + Column('company_id', Integer, primary_key=True, + test_needs_autoincrement=True), + Column('name', String(50)),) @classmethod def setup_classes(cls): @@ -487,30 +496,34 @@ class RelationshipToSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest): class Employee(cls.Comparable): pass + class Manager(Employee): pass + class Engineer(Employee): pass + class JuniorEngineer(Engineer): pass def test_of_type(self): JuniorEngineer, Company, companies, Manager,\ - Employee, employees, Engineer = (self.classes.JuniorEngineer, - self.classes.Company, - self.tables.companies, - self.classes.Manager, - self.classes.Employee, - self.tables.employees, - self.classes.Engineer) + Employee, employees, Engineer = (self.classes.JuniorEngineer, + self.classes.Company, + self.tables.companies, + self.classes.Manager, + self.classes.Employee, + self.tables.employees, + self.classes.Engineer) mapper(Company, companies, properties={ - 'employees':relationship(Employee, backref='company') + 'employees': relationship(Employee, backref='company') }) mapper(Employee, employees, polymorphic_on=employees.c.type) mapper(Manager, inherits=Employee, polymorphic_identity='manager') mapper(Engineer, inherits=Employee, polymorphic_identity='engineer') - mapper(JuniorEngineer, inherits=Engineer, polymorphic_identity='juniorengineer') + mapper(JuniorEngineer, inherits=Engineer, + polymorphic_identity='juniorengineer') sess = sessionmaker()() c1 = Company(name='c1') @@ -518,33 +531,26 @@ class RelationshipToSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest): m1 = Manager(name='Tom', manager_data='data1', company=c1) m2 = Manager(name='Tom2', manager_data='data2', company=c2) - e1 = Engineer(name='Kurt', engineer_info='knows how to hack', company=c2) + e1 = Engineer(name='Kurt', engineer_info='knows how to hack', + company=c2) e2 = JuniorEngineer(name='Ed', engineer_info='oh that ed', company=c1) sess.add_all([c1, c2, m1, m2, e1, e2]) sess.commit() sess.expunge_all() - eq_( - sess.query(Company).filter(Company.employees.of_type(JuniorEngineer).any()).all(), - [ - Company(name='c1'), - ] - ) + eq_(sess.query(Company).filter(Company.employees.of_type( + JuniorEngineer).any()).all(), [Company(name='c1'), ]) - eq_( - sess.query(Company).join(Company.employees.of_type(JuniorEngineer)).all(), - [ - Company(name='c1'), - ] - ) + eq_(sess.query(Company).join(Company.employees.of_type( + JuniorEngineer)).all(), [Company(name='c1'), ]) def test_of_type_aliased_fromjoinpoint(self): - Company, Employee, Engineer = self.classes.Company,\ - self.classes.Employee,\ - self.classes.Engineer + Company, Employee, Engineer = (self.classes.Company, + self.classes.Employee, + self.classes.Engineer) companies, employees = self.tables.companies, self.tables.employees mapper(Company, companies, properties={ - 'employee':relationship(Employee) + 'employee': relationship(Employee) }) mapper(Employee, employees, polymorphic_on=employees.c.type) mapper(Engineer, inherits=Employee, polymorphic_identity='engineer') @@ -587,13 +593,13 @@ class RelationshipToSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest): ) def test_outer_join_prop(self): - Company, Employee, Engineer = self.classes.Company,\ - self.classes.Employee,\ - self.classes.Engineer + Company, Employee, Engineer = (self.classes.Company, + self.classes.Employee, + self.classes.Engineer) companies, employees = self.tables.companies, self.tables.employees mapper(Company, companies, properties={ - 'engineers':relationship(Engineer) + 'engineers': relationship(Engineer) }) mapper(Employee, employees, polymorphic_on=employees.c.type) mapper(Engineer, inherits=Employee, polymorphic_identity='engineer') @@ -602,19 +608,19 @@ class RelationshipToSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest): self.assert_compile( sess.query(Company, Engineer.name).outerjoin("engineers"), "SELECT companies.company_id AS companies_company_id, " - "companies.name AS companies_name, employees.name AS employees_name " + "companies.name AS companies_name, " + "employees.name AS employees_name " "FROM companies LEFT OUTER JOIN employees ON companies.company_id " - "= employees.company_id AND employees.type IN (:type_1)" - ) + "= employees.company_id AND employees.type IN (:type_1)") def test_outer_join_prop_alias(self): - Company, Employee, Engineer = self.classes.Company,\ - self.classes.Employee,\ - self.classes.Engineer + Company, Employee, Engineer = (self.classes.Company, + self.classes.Employee, + self.classes.Engineer) companies, employees = self.tables.companies, self.tables.employees mapper(Company, companies, properties={ - 'engineers':relationship(Engineer) + 'engineers': relationship(Engineer) }) mapper(Employee, employees, polymorphic_on=employees.c.type) mapper(Engineer, inherits=Employee, polymorphic_identity='engineer') @@ -622,23 +628,22 @@ class RelationshipToSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest): eng_alias = aliased(Engineer) sess = create_session() self.assert_compile( - sess.query(Company, eng_alias.name).outerjoin(eng_alias, Company.engineers), + sess.query(Company, eng_alias.name).outerjoin( + eng_alias, Company.engineers), "SELECT companies.company_id AS companies_company_id, " "companies.name AS companies_name, employees_1.name AS " "employees_1_name FROM companies LEFT OUTER " "JOIN employees AS employees_1 ON companies.company_id " - "= employees_1.company_id AND employees_1.type IN (:type_1)" - ) - + "= employees_1.company_id AND employees_1.type IN (:type_1)") def test_outer_join_literal_onclause(self): - Company, Employee, Engineer = self.classes.Company,\ - self.classes.Employee,\ - self.classes.Engineer + Company, Employee, Engineer = (self.classes.Company, + self.classes.Employee, + self.classes.Engineer) companies, employees = self.tables.companies, self.tables.employees mapper(Company, companies, properties={ - 'engineers':relationship(Engineer) + 'engineers': relationship(Engineer) }) mapper(Employee, employees, polymorphic_on=employees.c.type) mapper(Engineer, inherits=Employee, polymorphic_identity='engineer') @@ -661,13 +666,13 @@ class RelationshipToSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest): ) def test_outer_join_literal_onclause_alias(self): - Company, Employee, Engineer = self.classes.Company,\ - self.classes.Employee,\ - self.classes.Engineer + Company, Employee, Engineer = (self.classes.Company, + self.classes.Employee, + self.classes.Engineer) companies, employees = self.tables.companies, self.tables.employees mapper(Company, companies, properties={ - 'engineers':relationship(Engineer) + 'engineers': relationship(Engineer) }) mapper(Employee, employees, polymorphic_on=employees.c.type) mapper(Engineer, inherits=Employee, polymorphic_identity='engineer') @@ -691,13 +696,13 @@ class RelationshipToSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest): ) def test_outer_join_no_onclause(self): - Company, Employee, Engineer = self.classes.Company,\ - self.classes.Employee,\ - self.classes.Engineer + Company, Employee, Engineer = (self.classes.Company, + self.classes.Employee, + self.classes.Engineer) companies, employees = self.tables.companies, self.tables.employees mapper(Company, companies, properties={ - 'engineers':relationship(Engineer) + 'engineers': relationship(Engineer) }) mapper(Employee, employees, polymorphic_on=employees.c.type) mapper(Engineer, inherits=Employee, polymorphic_identity='engineer') @@ -720,13 +725,13 @@ class RelationshipToSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest): ) def test_outer_join_no_onclause_alias(self): - Company, Employee, Engineer = self.classes.Company,\ - self.classes.Employee,\ - self.classes.Engineer + Company, Employee, Engineer = (self.classes.Company, + self.classes.Employee, + self.classes.Engineer) companies, employees = self.tables.companies, self.tables.employees mapper(Company, companies, properties={ - 'engineers':relationship(Engineer) + 'engineers': relationship(Engineer) }) mapper(Employee, employees, polymorphic_on=employees.c.type) mapper(Engineer, inherits=Employee, polymorphic_identity='engineer') @@ -752,10 +757,10 @@ class RelationshipToSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest): def test_no_aliasing_from_overlap(self): # test [ticket:3233] - Company, Employee, Engineer, Manager = self.classes.Company,\ - self.classes.Employee,\ - self.classes.Engineer,\ - self.classes.Manager + Company, Employee, Engineer, Manager = (self.classes.Company, + self.classes.Employee, + self.classes.Engineer, + self.classes.Manager) companies, employees = self.tables.companies, self.tables.employees @@ -811,23 +816,23 @@ class RelationshipToSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest): def test_relationship_to_subclass(self): JuniorEngineer, Company, companies, Manager, \ - Employee, employees, Engineer = (self.classes.JuniorEngineer, - self.classes.Company, - self.tables.companies, - self.classes.Manager, - self.classes.Employee, - self.tables.employees, - self.classes.Engineer) + Employee, employees, Engineer = (self.classes.JuniorEngineer, + self.classes.Company, + self.tables.companies, + self.classes.Manager, + self.classes.Employee, + self.tables.employees, + self.classes.Engineer) mapper(Company, companies, properties={ - 'engineers':relationship(Engineer) - }) - mapper(Employee, employees, polymorphic_on=employees.c.type, properties={ - 'company':relationship(Company) + 'engineers': relationship(Engineer) }) + mapper(Employee, employees, polymorphic_on=employees.c.type, + properties={'company': relationship(Company)}) mapper(Manager, inherits=Employee, polymorphic_identity='manager') mapper(Engineer, inherits=Employee, polymorphic_identity='engineer') - mapper(JuniorEngineer, inherits=Engineer, polymorphic_identity='juniorengineer') + mapper(JuniorEngineer, inherits=Engineer, + polymorphic_identity='juniorengineer') sess = sessionmaker()() c1 = Company(name='c1') @@ -835,7 +840,8 @@ class RelationshipToSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest): m1 = Manager(name='Tom', manager_data='data1', company=c1) m2 = Manager(name='Tom2', manager_data='data2', company=c2) - e1 = Engineer(name='Kurt', engineer_info='knows how to hack', company=c2) + e1 = Engineer(name='Kurt', engineer_info='knows how to hack', + company=c2) e2 = JuniorEngineer(name='Ed', engineer_info='oh that ed', company=c1) sess.add_all([c1, c2, m1, m2, e1, e2]) sess.commit() @@ -847,61 +853,55 @@ class RelationshipToSingleTest(testing.AssertsCompiledSQL, fixtures.MappedTest): eq_(sess.query(Company).order_by(Company.name).all(), [ Company(name='c1', engineers=[JuniorEngineer(name='Ed')]), - Company(name='c2', engineers=[Engineer(name='Kurt')]) - ] - ) + Company(name='c2', engineers=[Engineer(name='Kurt')])]) # eager load join should limit to only "Engineer" sess.expunge_all() - eq_(sess.query(Company).options(joinedload('engineers')).order_by(Company.name).all(), - [ - Company(name='c1', engineers=[JuniorEngineer(name='Ed')]), - Company(name='c2', engineers=[Engineer(name='Kurt')]) - ] - ) + eq_(sess.query(Company).options(joinedload('engineers')). + order_by(Company.name).all(), + [Company(name='c1', engineers=[JuniorEngineer(name='Ed')]), + Company(name='c2', engineers=[Engineer(name='Kurt')])]) # join() to Company.engineers, Employee as the requested entity sess.expunge_all() - eq_(sess.query(Company, Employee).join(Company.engineers).order_by(Company.name).all(), - [ - (Company(name='c1'), JuniorEngineer(name='Ed')), - (Company(name='c2'), Engineer(name='Kurt')) - ] - ) + eq_(sess.query(Company, Employee) + .join(Company.engineers) + .order_by(Company.name) + .all(), + [(Company(name='c1'), JuniorEngineer(name='Ed')), + (Company(name='c2'), Engineer(name='Kurt'))]) # join() to Company.engineers, Engineer as the requested entity. - # this actually applies the IN criterion twice which is less than ideal. + # this actually applies the IN criterion twice which is less than + # ideal. sess.expunge_all() - eq_(sess.query(Company, Engineer).join(Company.engineers).order_by(Company.name).all(), - [ - (Company(name='c1'), JuniorEngineer(name='Ed')), - (Company(name='c2'), Engineer(name='Kurt')) - ] - ) + eq_(sess.query(Company, Engineer) + .join(Company.engineers) + .order_by(Company.name) + .all(), + [(Company(name='c1'), JuniorEngineer(name='Ed')), + (Company(name='c2'), Engineer(name='Kurt'))]) # join() to Company.engineers without any Employee/Engineer entity sess.expunge_all() - eq_(sess.query(Company).join(Company.engineers).filter(Engineer.name.in_(['Tom', 'Kurt'])).all(), - [ - Company(name='c2') - ] - ) - - # this however fails as it does not limit the subtypes to just "Engineer". - # with joins constructed by filter(), we seem to be following a policy where - # we don't try to make decisions on how to join to the target class, whereas when using join() we - # seem to have a lot more capabilities. - # we might want to document "advantages of join() vs. straight filtering", or add a large - # section to "inheritance" laying out all the various behaviors Query has. + eq_(sess.query(Company).join(Company.engineers).filter( + Engineer.name.in_(['Tom', 'Kurt'])).all(), [Company(name='c2')]) + + # this however fails as it does not limit the subtypes to just + # "Engineer". with joins constructed by filter(), we seem to be + # following a policy where we don't try to make decisions on how to + # join to the target class, whereas when using join() we seem to have + # a lot more capabilities. we might want to document + # "advantages of join() vs. straight filtering", or add a large + # section to "inheritance" laying out all the various behaviors Query + # has. @testing.fails_on_everything_except() def go(): sess.expunge_all() - eq_(sess.query(Company).\ - filter(Company.company_id==Engineer.company_id).filter(Engineer.name.in_(['Tom', 'Kurt'])).all(), - [ - Company(name='c2') - ] - ) + eq_(sess.query(Company).filter( + Company.company_id == Engineer.company_id).filter( + Engineer.name.in_(['Tom', 'Kurt'])).all(), + [Company(name='c2')]) go() @@ -911,21 +911,18 @@ class ManyToManyToSingleTest(fixtures.MappedTest, AssertsCompiledSQL): @classmethod def define_tables(cls, metadata): Table('parent', metadata, - Column('id', Integer, primary_key=True, - test_needs_autoincrement=True) - ) + Column('id', Integer, primary_key=True, + test_needs_autoincrement=True)) Table('m2m', metadata, - Column('parent_id', Integer, - ForeignKey('parent.id'), primary_key=True), - Column('child_id', Integer, - ForeignKey('child.id'), primary_key=True), - ) + Column('parent_id', Integer, + ForeignKey('parent.id'), primary_key=True), + Column('child_id', Integer, + ForeignKey('child.id'), primary_key=True)) Table('child', metadata, - Column('id', Integer, primary_key=True, - test_needs_autoincrement=True), - Column('discriminator', String(20)), - Column('name', String(20)) - ) + Column('id', Integer, primary_key=True, + test_needs_autoincrement=True), + Column('discriminator', String(20)), + Column('name', String(20))) @classmethod def setup_classes(cls): @@ -944,18 +941,18 @@ class ManyToManyToSingleTest(fixtures.MappedTest, AssertsCompiledSQL): @classmethod def setup_mappers(cls): mapper(cls.classes.Parent, cls.tables.parent, properties={ - "s1": relationship(cls.classes.SubChild1, - secondary=cls.tables.m2m, - uselist=False), - "s2": relationship(cls.classes.SubChild2, - secondary=cls.tables.m2m) - }) + "s1": relationship(cls.classes.SubChild1, + secondary=cls.tables.m2m, + uselist=False), + "s2": relationship(cls.classes.SubChild2, + secondary=cls.tables.m2m) + }) mapper(cls.classes.Child, cls.tables.child, - polymorphic_on=cls.tables.child.c.discriminator) + polymorphic_on=cls.tables.child.c.discriminator) mapper(cls.classes.SubChild1, inherits=cls.classes.Child, - polymorphic_identity='sub1') + polymorphic_identity='sub1') mapper(cls.classes.SubChild2, inherits=cls.classes.Child, - polymorphic_identity='sub2') + polymorphic_identity='sub2') @classmethod def insert_data(cls): @@ -964,10 +961,8 @@ class ManyToManyToSingleTest(fixtures.MappedTest, AssertsCompiledSQL): SubChild2 = cls.classes.SubChild2 s = Session() s.add_all([ - Parent(s1=SubChild1(name='sc1_1'), - s2=[SubChild2(name="sc2_1"), SubChild2(name="sc2_2")] - ), - ]) + Parent(s1=SubChild1(name='sc1_1'), + s2=[SubChild2(name="sc2_1"), SubChild2(name="sc2_2")])]) s.commit() def test_eager_join(self): @@ -1023,35 +1018,40 @@ class ManyToManyToSingleTest(fixtures.MappedTest, AssertsCompiledSQL): "IN (:discriminator_1)) ON parent.id = m2m_1.parent_id" ) + class SingleOnJoinedTest(fixtures.MappedTest): @classmethod def define_tables(cls, metadata): global persons_table, employees_table persons_table = Table('persons', metadata, - Column('person_id', Integer, primary_key=True, test_needs_autoincrement=True), - Column('name', String(50)), - Column('type', String(20), nullable=False) - ) + Column('person_id', Integer, primary_key=True, + test_needs_autoincrement=True), + Column('name', String(50)), + Column('type', String(20), nullable=False)) employees_table = Table('employees', metadata, - Column('person_id', Integer, ForeignKey('persons.person_id'),primary_key=True), - Column('employee_data', String(50)), - Column('manager_data', String(50)), - ) + Column('person_id', Integer, + ForeignKey('persons.person_id'), + primary_key=True), + Column('employee_data', String(50)), + Column('manager_data', String(50)),) def test_single_on_joined(self): class Person(fixtures.ComparableEntity): pass + class Employee(Person): pass + class Manager(Employee): pass mapper(Person, persons_table, polymorphic_on=persons_table.c.type, - polymorphic_identity='person') - mapper(Employee, employees_table, inherits=Person,polymorphic_identity='engineer') - mapper(Manager, inherits=Employee,polymorphic_identity='manager') + polymorphic_identity='person') + mapper(Employee, employees_table, inherits=Person, + polymorphic_identity='engineer') + mapper(Manager, inherits=Employee, polymorphic_identity='manager') sess = create_session() sess.add(Person(name='p1')) @@ -1079,10 +1079,10 @@ class SingleOnJoinedTest(fixtures.MappedTest): sess.expunge_all() def go(): - eq_(sess.query(Person).with_polymorphic('*').order_by(Person.person_id).all(), [ - Person(name='p1'), - Employee(name='e1', employee_data='ed1'), - Manager(name='m1', employee_data='ed2', manager_data='md1') - ]) + eq_(sess.query(Person).with_polymorphic('*').order_by( + Person.person_id).all(), + [Person(name='p1'), + Employee(name='e1', employee_data='ed1'), + Manager( + name='m1', employee_data='ed2', manager_data='md1')]) self.assert_sql_count(testing.db, go, 1) - |