forked from timogasda/python-sqlparser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvisualize_tree.py
More file actions
41 lines (31 loc) · 1.22 KB
/
visualize_tree.py
File metadata and controls
41 lines (31 loc) · 1.22 KB
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
import sqlparser
from sqlparser import ENodeType
# Translates a node_type ID into a string
def translate_node_type(node_type):
for k,v in ENodeType.__dict__.iteritems():
if v == node_type:
return k
return None
# Print node and traverse recursively
def process_node(node, depth=0, name='root'):
# print attributes like ints and strings
if not isinstance(node, sqlparser.Node):
print "%s%s: '%s'" % (" " * depth, name, str(node))
return
# print node attribute
if node is not None and isinstance(node, sqlparser.Node):
print "%s%s: %s (%d), text: '%s'" % (" " * depth, name, translate_node_type(node.node_type), node.node_type, node.get_text())
# Go through the list (if the current node is a list)
if node.node_type == ENodeType.list:
for i, subnode in enumerate(node.list):
process_node(subnode, depth + 1, 'list_item#%s' % i)
return
# Iterate through all attributes
for k,v in node.__dict__.items():
process_node(v, depth + 1, k)
parser = sqlparser.Parser(vendor=0)
query = "SELECT a, b, c FROM tbl1 WHERE d IN (1,2,3)"
parser.check_syntax(query)
stmt = parser.get_statement(0)
root = stmt.get_root()
process_node(root)