X-Git-Url: https://git.jsancho.org/?p=datasette-pytables.git;a=blobdiff_plain;f=datasette_pytables%2Futils.py;fp=datasette_pytables%2Futils.py;h=b4bd2a0d35973f164d29ee449683fccc619c5609;hp=0000000000000000000000000000000000000000;hb=d46bbde71b66e3c6c76e41cd303a5d5ea23db0c4;hpb=bebf2dd8e68c9d857ba22e2eaf6977b6ca1a8a57 diff --git a/datasette_pytables/utils.py b/datasette_pytables/utils.py new file mode 100644 index 0000000..b4bd2a0 --- /dev/null +++ b/datasette_pytables/utils.py @@ -0,0 +1,28 @@ +from moz_sql_parser import parse +import re + + +def parse_sql(sql, params): + # Table name + sql = re.sub(r'(?i)from \[(.*)]', r'from "\g<1>"', sql) + # Params + for param in params: + sql = sql.replace(":" + param, param) + + try: + parsed = parse(sql) + except: + # Propably it's a PyTables expression + for token in ['group by', 'order by', 'limit', '']: + res = re.search('(?i)where (.*)' + token, sql) + if res: + modified_sql = re.sub('(?i)where (.*)(' + token + ')', r'\g<2>', sql) + parsed = parse(modified_sql) + parsed['where'] = res.group(1).strip() + break + + # Always a list of fields + if type(parsed['select']) is not list: + parsed['select'] = [parsed['select']] + + return parsed