X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=sqlconvert%2Fprocess_tokens.py;h=e55513e19afb2de13591a113c4f3000721c4322d;hb=d33677c7a57a955f59e46f2abe03e9f5a192d883;hp=924ba4abd7ce2f00c8b5ecb477a081c023cc674d;hpb=ad12dfd9c03a4f6bbd03d22238b6399ab09962ed;p=sqlconvert.git diff --git a/sqlconvert/process_tokens.py b/sqlconvert/process_tokens.py index 924ba4a..e55513e 100644 --- a/sqlconvert/process_tokens.py +++ b/sqlconvert/process_tokens.py @@ -1,4 +1,5 @@ +from sqlobject.converters import sqlrepr from sqlparse import parse from sqlparse.compat import PY3 from sqlparse import tokens as T @@ -12,6 +13,11 @@ def find_error(token_list): return False +def is_comment_or_space(token): + return token.ttype in (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: @@ -19,6 +25,15 @@ def is_newline_statement(statement): return True +def escape_strings(token_list, dbname): + """Escape strings""" + for token in token_list.flatten(): + if token.ttype is T.String.Single: + value = token.value[1:-1] # unquote by removing apostrophes + value = sqlrepr(value, dbname) + token.normalized = token.value = value + + if PY3: xrange = range @@ -40,8 +55,7 @@ class StatementGrouper(object): 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 @@ -54,14 +68,16 @@ class StatementGrouper(object): for stmt in self.statements: yield stmt self.statements = [] + return def close(self): if not self.lines: 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