X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=sqlconvert%2Fprocess_mysql.py;fp=sqlconvert%2Fprocess_mysql.py;h=3f2f6aa3c7dee8ad84f60c3a630050c8f3d413b6;hb=ad12dfd9c03a4f6bbd03d22238b6399ab09962ed;hp=5c63d0d1bc1de9c39c67455cd422ffc838a4220f;hpb=6b991d668a6f384e272fb19f09187a2d9407f1b3;p=sqlconvert.git diff --git a/sqlconvert/process_mysql.py b/sqlconvert/process_mysql.py index 5c63d0d..3f2f6aa 100644 --- a/sqlconvert/process_mysql.py +++ b/sqlconvert/process_mysql.py @@ -3,6 +3,39 @@ from sqlparse.sql import Comment from sqlparse import tokens as T +def _is_directive_token(token): + if isinstance(token, Comment): + subtokens = token.tokens + if subtokens: + comment = subtokens[0] + if comment.ttype is T.Comment.Multiline and \ + comment.value.startswith('/*!'): + return True + return False + + +def is_directive_statement(statement): + tokens = statement.tokens + if not _is_directive_token(tokens[0]): + return False + if tokens[-1].ttype is not T.Punctuation or tokens[-1].value != ';': + return False + for token in tokens[1:-1]: + if token.ttype not in (T.Newline, T.Whitespace): + return False + return True + + +def remove_directives(statement): + """Remove /*! directives */ from the first-level""" + new_tokens = [] + for token in statement.tokens: + if _is_directive_token(token): + continue + new_tokens.append(token) + statement.tokens = new_tokens + + def requote_names(token_list): """Remove backticks, quote non-lowercase identifiers""" for token in token_list.flatten(): @@ -16,21 +49,6 @@ def requote_names(token_list): token.normalized = token.value = '"%s"' % value -def remove_directives(statement): - """Remove /*! directives */ from the first-level""" - new_tokens = [] - for token in statement.tokens: - if isinstance(token, Comment): - subtokens = token.tokens - if subtokens: - comment = subtokens[0] - if comment.ttype is T.Comment.Multiline and \ - comment.value.startswith('/*!'): - continue - new_tokens.append(token) - statement.tokens = new_tokens - - def process_statement(statement): - requote_names(statement) remove_directives(statement) + requote_names(statement)