def __get_expanded_tuples(inner_table): sql = """ with ids as ({0}) select a.id, a.name, a.affiliation, pa.authorid, pa.paperid, pa.name, pa.affiliation, p.id, p.title, p.year, p.keyword, c.id, c.shortname, c.fullname, j.id, j.shortname, j.fullname from ids inner join paperauthor pa on ids.authorid = pa.authorid and ids.paperid = pa.paperid inner join author a on pa.authorid = a.id inner join paper p on pa.paperid = p.id left join conference c on p.conferenceid = c.id left join journal j on p.journalid = j.id """.format(inner_table) build_from_row = lambda r: Expanded(author=Author._make(r[0:3]) if r[0] else None, paperauthor=PaperAuthor._make(r[3:7]) if r[3] and r[4] else None, paper=Paper._make(r[7:11]) if r[7] else None, conference=Conference._make(r[11:14]) if r[11] else None, journal=Journal._make(r[14:17]) if r[14] else None) return [build_from_row(r) for r in __execute_sql(sql)]