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