]> git.phdru.name Git - sqlconvert.git/blob - mysql2sql/process_tokens.py
Process input stream line by line
[sqlconvert.git] / mysql2sql / process_tokens.py
1
2 from sqlparse import parse
3 from sqlparse.sql import Statement
4 from sqlparse.tokens import Name, Error, Punctuation, Comment, Newline, \
5     Whitespace
6
7
8 def requote_names(token_list):
9     """Remove backticks, quote non-lowercase identifiers"""
10     for token in token_list.flatten():
11         if token.ttype is Name:
12             value = token.value
13             if (value[0] == "`") and (value[-1] == "`"):
14                 value = value[1:-1]
15             if value.islower():
16                 token.normalized = token.value = value
17             else:
18                 token.normalized = token.value = '"%s"' % value
19
20
21 def find_error(token_list):
22     """Find an error"""
23     for token in token_list.flatten():
24         if token.ttype is Error:
25             return True
26     return False
27
28
29 class StatementGrouper(object):
30     def __init__(self):
31         self.statements = []
32         self.tokens = []
33         self.lines = []
34
35     def process_line(self, line):
36         lines = self.lines
37         lines.append(line)
38         tokens = parse('\n'.join(lines))[0]
39         self.process_tokens(tokens)
40         self.lines = []
41
42     def process_tokens(self, tokens):
43         for token in tokens:
44             self.tokens.append(token)
45             if (token.ttype == Punctuation) and (token.value == ';'):
46                 self.statements.append(Statement(self.tokens))
47                 self.tokens = []
48
49     def get_statements(self):
50         for statement in self.statements:
51             yield statement
52         self.statements = []
53
54     def close(self):
55         for token in self.tokens:
56             if (token.ttype not in (Comment.Single, Comment.Multiline,
57                                     Newline, Whitespace)):
58                 raise ValueError("Incomplete SQL statement: %s" % self.tokens)
59         return self.tokens