|
1 | 1 | import re
|
| 2 | +from functools import lru_cache |
2 | 3 |
|
3 | 4 | import sqlparse
|
4 | 5 | from django.utils.html import escape
|
@@ -32,22 +33,38 @@ def reformat_sql(sql, with_toggle=False):
|
32 | 33 |
|
33 | 34 |
|
34 | 35 | def parse_sql(sql, aligned_indent=False):
|
| 36 | + return _parse_sql( |
| 37 | + sql, |
| 38 | + dt_settings.get_config()["PRETTIFY_SQL"], |
| 39 | + aligned_indent, |
| 40 | + ) |
| 41 | + |
| 42 | + |
| 43 | +@lru_cache(maxsize=128) |
| 44 | +def _parse_sql(sql, pretty, aligned_indent): |
| 45 | + stack = get_filter_stack(pretty, aligned_indent) |
| 46 | + return "".join(stack.run(sql)) |
| 47 | + |
| 48 | + |
| 49 | +@lru_cache(maxsize=None) |
| 50 | +def get_filter_stack(prettify, aligned_indent): |
35 | 51 | stack = sqlparse.engine.FilterStack()
|
36 |
| - if dt_settings.get_config()["PRETTIFY_SQL"]: |
| 52 | + if prettify: |
37 | 53 | stack.enable_grouping()
|
38 | 54 | if aligned_indent:
|
39 | 55 | stack.stmtprocess.append(
|
40 | 56 | sqlparse.filters.AlignedIndentFilter(char=" ", n="<br/>")
|
41 | 57 | )
|
42 | 58 | stack.preprocess.append(BoldKeywordFilter()) # add our custom filter
|
43 | 59 | stack.postprocess.append(sqlparse.filters.SerializerUnicode()) # tokens -> strings
|
44 |
| - return "".join(stack.run(sql)) |
| 60 | + return stack |
| 61 | + |
| 62 | + |
| 63 | +simplify_re = re.compile(r"SELECT</strong> (...........*?) <strong>FROM") |
45 | 64 |
|
46 | 65 |
|
47 | 66 | def simplify(sql):
|
48 |
| - expr = r"SELECT</strong> (...........*?) <strong>FROM" |
49 |
| - sub = r"SELECT</strong> ••• <strong>FROM" |
50 |
| - return re.sub(expr, sub, sql) |
| 67 | + return simplify_re.sub(r"SELECT</strong> ••• <strong>FROM", sql) |
51 | 68 |
|
52 | 69 |
|
53 | 70 | def contrasting_color_generator():
|
|
0 commit comments