X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=sqlconvert%2Fprocess_tokens.py;h=414c5ca5a024bd783205655526897e87aa872ddf;hb=2c347af7a3bdfb0e23ba96b28150d4e83485cf74;hp=8cf1fe5e73ffd005a717115fdbf8c114ffe24783;hpb=406e4920528c81461e2cbaff6f1c36c29b8167f5;p=sqlconvert.git diff --git a/sqlconvert/process_tokens.py b/sqlconvert/process_tokens.py index 8cf1fe5..414c5ca 100644 --- a/sqlconvert/process_tokens.py +++ b/sqlconvert/process_tokens.py @@ -1,4 +1,5 @@ +from sqlparse.sql import Comment from sqlobject.converters import sqlrepr from sqlparse import parse from sqlparse.compat import PY3 @@ -13,6 +14,12 @@ def find_error(token_list): return False +def is_comment_or_space(token): + return isinstance(token, Comment) or \ + token.ttype in (T.Comment, T.Comment.Single, T.Comment.Multiline, + T.Newline, T.Whitespace) + + def is_newline_statement(statement): for token in statement.tokens[:]: if token.ttype is not T.Newline: @@ -47,11 +54,12 @@ class StatementGrouper(object): def process_lines(self): statements = parse(''.join(self.lines), encoding=self.encoding) + if not statements: + return last_stmt = statements[-1] for i in xrange(len(last_stmt.tokens) - 1, 0, -1): token = last_stmt.tokens[i] - if token.ttype in (T.Comment.Single, T.Comment.Multiline, - T.Newline, T.Whitespace): + if is_comment_or_space(token): continue if token.ttype is T.Punctuation and token.value == ';': break # The last statement is complete @@ -71,8 +79,9 @@ class StatementGrouper(object): return tokens = parse(''.join(self.lines), encoding=self.encoding) for token in tokens: - if (token.ttype not in (T.Comment.Single, T.Comment.Multiline, - T.Newline, T.Whitespace)): + if not is_comment_or_space(token): raise ValueError("Incomplete SQL statement: %s" % tokens) + self.lines = [] + self.statements = [] return tokens