in rat-sql-gap/seq2struct/grammars/spider.py [0:0]
def parse_sql(self, sql, optional=False):
if optional and sql is None:
return None
if self.factorize_sketch == 0:
return filter_nones({
'_type': 'sql',
'select': self.parse_select(sql['select']),
'where': self.parse_cond(sql['where'], optional=True),
'group_by': [self.parse_col_unit(u) for u in sql['groupBy']],
'order_by': self.parse_order_by(sql['orderBy']),
'having': self.parse_cond(sql['having'], optional=True),
'limit': sql['limit'] if self.include_literals else (sql['limit'] is not None),
'intersect': self.parse_sql(sql['intersect'], optional=True),
'except': self.parse_sql(sql['except'], optional=True),
'union': self.parse_sql(sql['union'], optional=True),
**({
'from': self.parse_from(sql['from'], self.infer_from_conditions),
} if self.output_from else {})
})
elif self.factorize_sketch == 1:
return filter_nones({
'_type': 'sql',
'select': self.parse_select(sql['select']),
**({
'from': self.parse_from(sql['from'], self.infer_from_conditions),
} if self.output_from else {}),
'sql_where': filter_nones({
'_type': 'sql_where',
'where': self.parse_cond(sql['where'], optional=True),
'sql_groupby': filter_nones({
'_type': 'sql_groupby',
'group_by': [self.parse_col_unit(u) for u in sql['groupBy']],
'having': filter_nones({
'_type': 'having',
'having': self.parse_cond(sql['having'], optional=True),
}),
'sql_orderby': filter_nones({
'_type': 'sql_orderby',
'order_by': self.parse_order_by(sql['orderBy']),
'limit': filter_nones({
'_type': 'limit',
'limit': sql['limit'] if self.include_literals else (sql['limit'] is not None),
}),
'sql_ieu': filter_nones({
'_type': 'sql_ieu',
'intersect': self.parse_sql(sql['intersect'], optional=True),
'except': self.parse_sql(sql['except'], optional=True),
'union': self.parse_sql(sql['union'], optional=True),
})
})
})
})
})
elif self.factorize_sketch == 2:
return filter_nones({
'_type': 'sql',
'select': self.parse_select(sql['select']),
**({
'from': self.parse_from(sql['from'], self.infer_from_conditions),
} if self.output_from else {}),
"sql_where": filter_nones({
'_type': 'sql_where',
'where': self.parse_cond(sql['where'], optional=True),
}),
"sql_groupby": filter_nones({
'_type': 'sql_groupby',
'group_by': [self.parse_col_unit(u) for u in sql['groupBy']],
'having': self.parse_cond(sql['having'], optional=True),
}),
"sql_orderby": filter_nones({
'_type': 'sql_orderby',
'order_by': self.parse_order_by(sql['orderBy']),
'limit': sql['limit'] if self.include_literals else (sql['limit'] is not None),
}),
'sql_ieu': filter_nones({
'_type': 'sql_ieu',
'intersect': self.parse_sql(sql['intersect'], optional=True),
'except': self.parse_sql(sql['except'], optional=True),
'union': self.parse_sql(sql['union'], optional=True),
})
})