Post 2.0.1 release actions done
[datasette-pytables.git] / datasette_pytables / utils.py
1 from moz_sql_parser import parse
2 import re
3
4
5 def parse_sql(sql, params):
6     # Table name
7     sql = re.sub(r'(?i)from \[(.*)]', r'from "\g<1>"', sql)
8     # Params
9     for param in params:
10         sql = sql.replace(":" + param, param)
11
12     try:
13         parsed = parse(sql)
14     except:
15         # Propably it's a PyTables expression
16         for token in ['group by', 'order by', 'limit', '']:
17             res = re.search('(?i)where (.*)' + token, sql)
18             if res:
19                 modified_sql = re.sub('(?i)where (.*)(' + token + ')', r'\g<2>', sql)
20                 parsed = parse(modified_sql)
21                 parsed['where'] = res.group(1).strip()
22                 break
23
24     # Always a list of fields
25     if type(parsed['select']) is not list:
26         parsed['select'] = [parsed['select']]
27
28     return parsed