def parse_sql()

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),
                })
            })