/* * Copyright 1999-2012 Alibaba Group. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * (created at 2011-3-14) */ package com.alibaba.cobar.parser.recognizer.mysql.lexer; import java.sql.SQLSyntaxErrorException; import junit.framework.Assert; import junit.framework.TestCase; import com.alibaba.cobar.parser.Performance; import com.alibaba.cobar.parser.recognizer.mysql.MySQLToken; /** * @author <a href="mailto:shuo.qius@alibaba-inc.com">QIU Shuo</a> */ public class MySQLLexerTest extends TestCase { public static void main(String[] args) throws SQLSyntaxErrorException { String sql = Performance.SQL_BENCHMARK_SELECT; char[] chars = sql.toCharArray(); MySQLLexer sut = new MySQLLexer(sql); long start = System.currentTimeMillis(); long end = System.currentTimeMillis(); for (int i = 0; i < 1; ++i) { for (; !sut.eof();) { sut.nextToken(); switch (sut.token()) { case LITERAL_NUM_MIX_DIGIT: sut.decimalValue(); break; case LITERAL_NUM_PURE_DIGIT: sut.integerValue(); break; default: sut.stringValue(); break; } } } int loop = 5000000; sut = new MySQLLexer(sql); start = System.currentTimeMillis(); for (int i = 0; i < loop; ++i) { sut = new MySQLLexer(chars); for (; !sut.eof();) { sut.nextToken(); switch (sut.token()) { case LITERAL_NUM_MIX_DIGIT: sut.decimalValue(); break; case LITERAL_NUM_PURE_DIGIT: sut.integerValue(); break; default: sut.stringValue(); break; } } } end = System.currentTimeMillis(); System.out.println((end - start) * 1.0d / (loop / 1000) + " us."); } public void testParameter() throws SQLSyntaxErrorException { MySQLLexer sut = new MySQLLexer("?,?,?"); Assert.assertEquals(MySQLToken.QUESTION_MARK, sut.token()); Assert.assertEquals(1, sut.paramIndex()); sut.nextToken(); sut.nextToken(); Assert.assertEquals(MySQLToken.QUESTION_MARK, sut.token()); Assert.assertEquals(2, sut.paramIndex()); sut.nextToken(); sut.nextToken(); Assert.assertEquals(MySQLToken.QUESTION_MARK, sut.token()); Assert.assertEquals(3, sut.paramIndex()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); } public void testUserDefVar() throws SQLSyntaxErrorException { MySQLLexer sut = new MySQLLexer("@abc "); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@abc", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@abc.d "); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@abc.d", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@abc_$.d"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@abc_$.d", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@abc_$_."); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@abc_$_.", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@''"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@'\\''"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@'\\''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@''''"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@''''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@'\"'"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@'\"'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@'\"\"'"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@'\"\"'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@'\\\"'"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@'\\\"'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@'ac\\'' "); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@'ac\\''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@'''ac\\'' "); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@'''ac\\''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@'abc'''ac\\'' "); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@'abc'''", sut.stringValue()); sut = new MySQLLexer("@''abc''"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("abc", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@\"\" "); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@\"\"", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@\"\"\"abc\" "); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@\"\"\"abc\"", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@\"\\\"\"\"abc\" "); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@\"\\\"\"\"abc\"", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@\"\\\"\" "); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@\"\\\"\"", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@\"\"\"\\\"d\" "); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@\"\"\"\\\"d\"", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@\"'\" "); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@\"'\"", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@`` "); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@``", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@````"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@````", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@` `"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@` `", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@`abv```"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@`abv```", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@`````abc`"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@`````abc`", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@`````abc```"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@`````abc```", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@``abc"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@``", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("abc", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@`abc`````abc```"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@`abc`````", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("abc", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("```", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(" -- \n @ #abc\n\r\t\"\"@\"abc\\\\''-- abc\n'''\\\"\"\"\""); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@\"abc\\\\''-- abc\n'''\\\"\"\"\"", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("/**/@a #@abc\n@.\r\t"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@a", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@.", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(" #@abc\n@\"1a_-@#!''`=\\a\"-- @\r\n@'-_1a/**/\\\"\\''/*@abc*/@`_1@\\''\"`"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@\"1a_-@#!''`=\\a\"", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@'-_1a/**/\\\"\\''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@`_1@\\''\"`", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(" /*! */@._a$ @_a.b$c.\r@1_a.$#\n@A.a_/@-- \n@_--@.[]'\"@#abc'@a,@;@~#@abc"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@._a$", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@_a.b$c.", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@1_a.$", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@A.a_", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_SLASH, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@_", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_MINUS, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_MINUS, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@.", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_LEFT_BRACKET, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_RIGHT_BRACKET, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\"@#abc'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@a", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_COMMA, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_SEMICOLON, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_TILDE, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); } public void testSystemVar() throws SQLSyntaxErrorException { MySQLLexer sut = new MySQLLexer("@@abc "); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("abc", sut.stringValue()); Assert.assertEquals("ABC", sut.stringValueUppercase()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@@`abc` "); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("`abc`", sut.stringValue()); Assert.assertEquals("`ABC`", sut.stringValueUppercase()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@@```abc` "); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("```abc`", sut.stringValue()); Assert.assertEquals("```ABC`", sut.stringValueUppercase()); sut = new MySQLLexer("@@`` "); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("``", sut.stringValue()); Assert.assertEquals("``", sut.stringValueUppercase()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@@`a``` "); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("`a```", sut.stringValue()); Assert.assertEquals("`A```", sut.stringValueUppercase()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@@```` "); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("````", sut.stringValue()); Assert.assertEquals("````", sut.stringValueUppercase()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@@`~!````@#$%^&*()``_+=-1{}[]\";:'<>,./?|\\` "); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("`~!````@#$%^&*()``_+=-1{}[]\";:'<>,./?|\\`", sut.stringValue()); Assert.assertEquals("`~!````@#$%^&*()``_+=-1{}[]\";:'<>,./?|\\`", sut.stringValueUppercase()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@@global.var1 "); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("global", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("var1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@@'abc' "); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'abc'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("@@\"abc\" "); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'abc'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer( "@@. /*@@abc*/@@`abc''\"\\@@!%*&+_abcQ`//@@_1. @@$#\n@@$var.-- @@a\t\n@@system_var:@@a`b`?"); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("`abc''\"\\@@!%*&+_abcQ`", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_SLASH, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_SLASH, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("_1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("$", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("$var", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("system_var", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_COLON, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("a", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("`b`", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.QUESTION_MARK, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); } public void testPlaceHolder() throws SQLSyntaxErrorException { MySQLLexer sut = new MySQLLexer(" ${abc}. "); Assert.assertEquals(MySQLToken.PLACE_HOLDER, sut.token()); Assert.assertEquals("abc", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(" ${abc"); Assert.assertEquals(MySQLToken.PLACE_HOLDER, sut.token()); Assert.assertEquals("abc", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(" ${abc}"); Assert.assertEquals(MySQLToken.PLACE_HOLDER, sut.token()); Assert.assertEquals("abc", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(" ${abc}abn"); Assert.assertEquals(MySQLToken.PLACE_HOLDER, sut.token()); Assert.assertEquals("abc", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("abn", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(" ${abc12@,,.~`*-_$}}}}"); Assert.assertEquals(MySQLToken.PLACE_HOLDER, sut.token()); Assert.assertEquals("abc12@,,.~`*-_$", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_RIGHT_BRACE, sut.token()); sut.nextToken(); sut.nextToken(); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(" #${abc\n,${abc12@,,.~`*-_$}"); Assert.assertEquals(MySQLToken.PUNC_COMMA, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.PLACE_HOLDER, sut.token()); Assert.assertEquals("abc12@,,.~`*-_$", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("${abc(123,345)} ,"); Assert.assertEquals(MySQLToken.PLACE_HOLDER, sut.token()); Assert.assertEquals("abc(123,345)", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_COMMA, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); } public void testId1() throws SQLSyntaxErrorException { MySQLLexer sut = new MySQLLexer("id . 12e3f /***/`12\\3```-- d\n \r#\r ##\n\t123d"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("12e3f", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("`12\\3```", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("123d", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("`ab``c`"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("`ab``c`", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("`,\"'\\//*$#\nab``c -`"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("`,\"'\\//*$#\nab``c -`", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("`ab````c```"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("`ab````c```", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("`ab`````c``````"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("`ab`````", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("c", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("``````", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("n123 \t b123 x123"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("n123", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("b123", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("x123", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("n邱 硕"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("n邱", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("硕", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("n邱硕"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("n邱硕", sut.stringValue()); sut.nextToken(); sut = new MySQLLexer(" $abc"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("$abc", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("$abc "); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("$abc", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(" $abc "); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("$abc", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(" 123d +=_&*_1a^abc-- $123"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("123d", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_PLUS, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_EQUALS, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("_", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_AMPERSAND, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_ASTERISK, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("_1a", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_CARET, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("abc", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(" $abc ,#$abc\n{`_``12`(123a)_abcnd; //x123"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("$abc", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_COMMA, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_LEFT_BRACE, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("`_``12`", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_LEFT_PAREN, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("123a", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_RIGHT_PAREN, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("_abcnd", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_SEMICOLON, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_SLASH, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_SLASH, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("x123", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); } public void testString() throws SQLSyntaxErrorException { MySQLLexer sut = new MySQLLexer("''"); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("'''\\''"); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\\'\\''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("\'\'\'\'\'\\''"); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\\'\\'\\''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("''''''/'abc\\''"); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\\'\\''", sut.stringValue()); sut.nextToken(); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'abc\\''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("\'abc\\\'\'"); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'abc\\''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("'\\\\\\\"\"\"'"); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\\\\\\\"\"\"'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("'\'\''"); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\\''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("''''"); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\\''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("'he\"\"\"llo'"); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'he\"\"\"llo'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("'he'\''\'llo'"); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'he\\'\\'llo'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("'\''hello'"); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\\'hello'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("\"abc'\\d\"\"ef\""); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'abc\\'\\d\"ef'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("\"abc'\\\\\"\"\""); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'abc\\'\\\\\"'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("\"\""); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("\"\\'\""); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\\''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("\"\"\"\""); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\"'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("\"abc\" '\\'s'"); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'abc'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\\'s'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("\"\"\"'\""); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\"\\''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("\"\\\"\""); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\\\"'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("\"\\\\\""); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\\\\'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("\" hello '''/**/#\n-- \n~=+\"\"\"\"\""); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("' hello \\'\\'\\'/**/#\n-- \n~=+\"\"'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("\r--\t\n\"abc\""); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'abc'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("N'ab\\'c'"); Assert.assertEquals(MySQLToken.LITERAL_NCHARS, sut.token()); Assert.assertEquals("'ab\\'c'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(" \'abc\\\\\\'\' 'abc\\a\\'\''\"\"'/\"abc\\\"\".\"\"\"abc\"\"\"\"'\''\"n'ab\\'c'"); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'abc\\\\\\''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'abc\\a\\'\\'\"\"'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_SLASH, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'abc\\\"'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'\"abc\"\"\\'\\'\\''", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_NCHARS, sut.token()); Assert.assertEquals("'ab\\'c'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); } public void testHexBit() throws SQLSyntaxErrorException { MySQLLexer sut = new MySQLLexer("0x123 "); Assert.assertEquals(MySQLToken.LITERAL_HEX, sut.token()); Assert.assertEquals("123", new String(sut.getSQL(), sut.getOffsetCache(), sut.getSizeCache())); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("0x123"); Assert.assertEquals(MySQLToken.LITERAL_HEX, sut.token()); Assert.assertEquals("123", new String(sut.getSQL(), sut.getOffsetCache(), sut.getSizeCache())); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("0x123aDef"); Assert.assertEquals(MySQLToken.LITERAL_HEX, sut.token()); Assert.assertEquals("123aDef", new String(sut.getSQL(), sut.getOffsetCache(), sut.getSizeCache())); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("0x0"); Assert.assertEquals(MySQLToken.LITERAL_HEX, sut.token()); Assert.assertEquals("0", new String(sut.getSQL(), sut.getOffsetCache(), sut.getSizeCache())); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("0xABC"); Assert.assertEquals(MySQLToken.LITERAL_HEX, sut.token()); Assert.assertEquals("ABC", new String(sut.getSQL(), sut.getOffsetCache(), sut.getSizeCache())); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("0xA01aBC"); Assert.assertEquals(MySQLToken.LITERAL_HEX, sut.token()); Assert.assertEquals("A01aBC", new String(sut.getSQL(), sut.getOffsetCache(), sut.getSizeCache())); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("0x123re2 "); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("0x123re2", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("x'123'e "); Assert.assertEquals(MySQLToken.LITERAL_HEX, sut.token()); Assert.assertEquals("123", new String(sut.getSQL(), sut.getOffsetCache(), sut.getSizeCache())); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("e", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("x'123'"); Assert.assertEquals(MySQLToken.LITERAL_HEX, sut.token()); Assert.assertEquals("123", new String(sut.getSQL(), sut.getOffsetCache(), sut.getSizeCache())); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("x'102AaeF3'"); Assert.assertEquals(MySQLToken.LITERAL_HEX, sut.token()); Assert.assertEquals("102AaeF3", new String(sut.getSQL(), sut.getOffsetCache(), sut.getSizeCache())); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("0b10"); Assert.assertEquals(MySQLToken.LITERAL_BIT, sut.token()); Assert.assertEquals("10", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("0b101101"); Assert.assertEquals(MySQLToken.LITERAL_BIT, sut.token()); Assert.assertEquals("101101", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("0b103 "); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("0b103", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("b'10'b "); Assert.assertEquals(MySQLToken.LITERAL_BIT, sut.token()); Assert.assertEquals("10", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("b", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("\r 0xabc.123;x'e'a0x1.3x'a2w'--\t0b11\n0b12*b '123' b'101'"); Assert.assertEquals(MySQLToken.LITERAL_HEX, sut.token()); Assert.assertEquals("abc", new String(sut.getSQL(), sut.getOffsetCache(), sut.getSizeCache())); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("0.123", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_SEMICOLON, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_HEX, sut.token()); Assert.assertEquals("e", new String(sut.getSQL(), sut.getOffsetCache(), sut.getSizeCache())); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("a0x1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("3x", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'a2w'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("0b12", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_ASTERISK, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("b", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'123'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_BIT, sut.token()); Assert.assertEquals("101", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); } public void testNumber() throws SQLSyntaxErrorException { MySQLLexer sut = new MySQLLexer( " . 12e3/***/.12e3#/**\n.123ee123.1-- \r\t\n.12e/*a*//* !*/.12e_a/12e-- \r\t.12e-1"); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("12000", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("120", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("123ee123", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("0.1", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("12e", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("12e_a", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_SLASH, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("12e", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(".12e-1 "); Assert.assertEquals("0.012", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("12e000000000000000 "); Assert.assertEquals("12", sut.decimalValue().toPlainString()); sut = new MySQLLexer(".12e- "); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("12e", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_MINUS, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(".12e-1d "); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("12e", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_MINUS, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("1d", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("12.e+1d "); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("120", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("d", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("12.f "); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("12", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("f", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(".12f "); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("12f", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("1.2f "); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("1.2", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("f", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); try { sut = new MySQLLexer("12.e "); Assert.assertFalse("should not reach here", true); } catch (SQLSyntaxErrorException e) { } sut = new MySQLLexer("0e "); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("0e", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("12. e "); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("12", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("e", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("12. e+1 "); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("12", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("e", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_PLUS, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_NUM_PURE_DIGIT, sut.token()); Assert.assertEquals("1", sut.integerValue().toString()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("12.e+1 "); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("120", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("12."); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("12", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(".12"); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("0.12", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("12e"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("12e", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("12ef"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("12ef", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(".12e"); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("12e", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("1.0e0"); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("1.0", sut.decimalValue().toPlainString()); sut = new MySQLLexer("1.01e0,"); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("1.01", sut.decimalValue().toPlainString()); sut = new MySQLLexer(".12e-"); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("12e", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_MINUS, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(".12e-d"); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("12e", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_MINUS, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("d", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("123E2.*"); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("12300", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_ASTERISK, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("1e-1 "); Assert.assertEquals("0.1", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(".E5"); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("E5", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("0E5d"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("0E5d", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("0E10"); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("0", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer(". "); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("12345678901234567890123 1234567890 1234567890123456789"); Assert.assertEquals(MySQLToken.LITERAL_NUM_PURE_DIGIT, sut.token()); Assert.assertEquals("12345678901234567890123", String.valueOf(sut.integerValue())); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_NUM_PURE_DIGIT, sut.token()); Assert.assertEquals("1234567890", String.valueOf(sut.integerValue())); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_NUM_PURE_DIGIT, sut.token()); Assert.assertEquals("1234567890123456789", String.valueOf(sut.integerValue())); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("."); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); } public void testSkipSeparator() throws SQLSyntaxErrorException { MySQLLexer sut = new MySQLLexer(" /**//***/ \t\n\r\n -- \n#\n/*/*-- \n*/"); Assert.assertEquals(sut.eofIndex, sut.curIndex); Assert.assertEquals(sut.sql[sut.eofIndex], sut.ch); } public void testCStyleComment() throws SQLSyntaxErrorException { MySQLLexer sut = new MySQLLexer("id1 /*!id2 */ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id2", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("id1 /*! id2 */ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id2", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); sut = new MySQLLexer("id1 /*!*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); int version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40001id2*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40000id2*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id2", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!4000id2*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("4000id2", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!400001id2*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("1id2", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!400011id2*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!4000*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_NUM_PURE_DIGIT, sut.token()); Assert.assertEquals("4000", String.valueOf(sut.integerValue())); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40000*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40001*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!400001*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_NUM_PURE_DIGIT, sut.token()); Assert.assertEquals("1", String.valueOf(sut.integerValue())); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40000 -- id2\n*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40000 /* id2*/*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40000/* id2*/*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40000id2*/* id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id2", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_ASTERISK, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40000/*/*/id2*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id2", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40001/*/*/id2*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40000/*/*/id2*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id2", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40000/*/*/id2*/ /*!40000 id4*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id2", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id4", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40001/*/*/id2*/ /*!40000 id4*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id4", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40000/*/*/id2*/ /*!40001 id4*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id2", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40000/*/*/id2*//*!40001 id4*//*!40001 id5*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id2", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); version = MySQLLexer.setCStyleCommentVersion(40000); sut = new MySQLLexer("id1 /*!40000/*/*/id2*//*!40001 id4*//*!40000id5*/ id3"); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id1", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id2", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id5", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("id3", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); MySQLLexer.setCStyleCommentVersion(version); } public void testLexer() throws SQLSyntaxErrorException { MySQLLexer sut = new MySQLLexer(" @a.1_$ .1e+1a%x'a1e'*0b11a \r#\"\"\n@@`123`@@'abc'1.e-1d`/`1.1e1.1e1"); Assert.assertEquals(MySQLToken.USR_VAR, sut.token()); Assert.assertEquals("@a.1_$", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.PUNC_DOT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("1e", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_PLUS, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("1a", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_PERCENT, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_HEX, sut.token()); Assert.assertEquals("a1e", new String(sut.getSQL(), sut.getOffsetCache(), sut.getSizeCache())); sut.nextToken(); Assert.assertEquals(MySQLToken.OP_ASTERISK, sut.token()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("0b11a", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("`123`", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.SYS_VAR, sut.token()); Assert.assertEquals("", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_CHARS, sut.token()); Assert.assertEquals("'abc'", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("0.1", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("d", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.IDENTIFIER, sut.token()); Assert.assertEquals("`/`", sut.stringValue()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("11", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.LITERAL_NUM_MIX_DIGIT, sut.token()); Assert.assertEquals("1", sut.decimalValue().toPlainString()); sut.nextToken(); Assert.assertEquals(MySQLToken.EOF, sut.token()); } }