File size: 1,187 Bytes
e67043b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import re
import sqlparse


def remove_create_table(sql):
    return re.sub(
        r"(create|CREATE)\s+(table|TABLE).+?\(.+?\)\s*;", "", sql, flags=re.DOTALL
    )


def remove_create_index(sql):
    return re.sub(
        r"(create|CREATE)\s+(index|INDEX).+?\(.+?\)\s*;", "", sql, flags=re.DOTALL
    )


def remove_table(sql):
    return re.sub(r"(table|TABLE).+?\(.+?\)\s*;", "", sql, flags=re.DOTALL)


def clean_sql(sql):
    tmp = []
    for token in sql.flatten():
        if (
            not token.is_whitespace
            and not token.ttype is sqlparse.tokens.Comment.Single
        ):
            tmp.append(token)
    return strip_par(" ".join(str(t) for t in tmp))


def strip_par(s):
    for op in ["(", ")", ",", ">", "=", "<", ">=", "<=", "!=", "<>", ".", ";"]:
        s = s.replace(" {}".format(op), op).replace("{} ".format(op), op)
    return s


def preprocess_execute_sql(sql):
    sql = remove_create_table(sql)
    sql = remove_create_index(sql)
    parsed = sqlparse.parse(sql)
    if len(parsed) == 0:
        return [0, ""]
    sql = clean_sql(parsed[0])
    if not sql:
        return [0, ""]
    if sql[-1] != ";":
        sql += ";"
    return [1, sql]