---------- Input ----------

---------- Output ---------
[(EOI, "", 0..0)]


---------- Input ----------
$$ab$cd$$  $$ab$$
---------- Output ---------
[(LiteralCodeString, "$$ab$cd$$", 0..9), (LiteralCodeString, "$$ab$$", 11..17), (EOI, "", 17..17)]


---------- Input ----------
x'deadbeef' -- a hex string\n 'a string literal\n escape quote by '' or \\\'. '
---------- Output ---------
[(PGLiteralHex, "x'deadbeef'", 0..11), (EOI, "", 79..79)]


---------- Input ----------
'中文' '日本語'
---------- Output ---------
[(LiteralString, "'中文'", 0..8), (LiteralString, "'日本語'", 9..20), (EOI, "", 20..20)]


---------- Input ----------
@abc 123
---------- Output ---------
[(LiteralAtString, "@abc", 0..4), (LiteralInteger, "123", 5..8), (EOI, "", 8..8)]


---------- Input ----------
42 3.5 4. .001 5e2 1.925e-3 .38e+7 1.e-01 0xfff x'deedbeef'
---------- Output ---------
[(LiteralInteger, "42", 0..2), (LiteralFloat, "3.5", 3..6), (LiteralFloat, "4.", 7..9), (LiteralFloat, ".001", 10..14), (LiteralFloat, "5e2", 15..18), (LiteralFloat, "1.925e-3", 19..27), (LiteralFloat, ".38e+7", 28..34), (LiteralFloat, "1.e-01", 35..41), (MySQLLiteralHex, "0xfff", 42..47), (PGLiteralHex, "x'deedbeef'", 48..59), (EOI, "", 59..59)]


---------- Input ----------
select /*+ x /* yy */ */ 1
---------- Output ---------
[(SELECT, "select", 0..6), (HintPrefix, "/*+", 7..10), (Ident, "x", 11..12), (HintSuffix, "*/", 22..24), (LiteralInteger, "1", 25..26), (EOI, "", 26..26)]


---------- Input ----------
select /* x /*+ yy */ */ 1
---------- Output ---------
[(SELECT, "select", 0..6), (HintSuffix, "*/", 22..24), (LiteralInteger, "1", 25..26), (EOI, "", 26..26)]


---------- Input ----------
select 1 + /*+ foo
---------- Output ---------
[(SELECT, "select", 0..6), (LiteralInteger, "1", 7..8), (Plus, "+", 9..10), (EOI, "", 18..18)]


---------- Input ----------
select 1 /*+ foo
---------- Output ---------
[(SELECT, "select", 0..6), (LiteralInteger, "1", 7..8), (EOI, "", 16..16)]


---------- Input ----------
select /*++  */ /*++ abc x*/ /*+ SET_VAR(timezone='Asia/Shanghai') */ 1;
---------- Output ---------
[(SELECT, "select", 0..6), (HintPrefix, "/*+", 7..10), (Plus, "+", 10..11), (HintSuffix, "*/", 13..15), (LiteralInteger, "1", 70..71), (SemiColon, ";", 71..72), (EOI, "", 72..72)]


---------- Input ----------
select /* the user name */ /*+SET_VAR(timezone='Asia/Shanghai') */ 1;
---------- Output ---------
[(SELECT, "select", 0..6), (HintPrefix, "/*+", 27..30), (SET_VAR, "SET_VAR", 30..37), (LParen, "(", 37..38), (TIMEZONE, "timezone", 38..46), (Eq, "=", 46..47), (LiteralString, "'Asia/Shanghai'", 47..62), (RParen, ")", 62..63), (HintSuffix, "*/", 64..66), (LiteralInteger, "1", 67..68), (SemiColon, ";", 68..69), (EOI, "", 69..69)]


---------- Input ----------
create view v_t as select /*+ SET_VAR(timezone='Asia/Shanghai') */ 1;
---------- Output ---------
[(CREATE, "create", 0..6), (VIEW, "view", 7..11), (Ident, "v_t", 12..15), (AS, "as", 16..18), (SELECT, "select", 19..25), (HintPrefix, "/*+", 26..29), (SET_VAR, "SET_VAR", 30..37), (LParen, "(", 37..38), (TIMEZONE, "timezone", 38..46), (Eq, "=", 46..47), (LiteralString, "'Asia/Shanghai'", 47..62), (RParen, ")", 62..63), (HintSuffix, "*/", 64..66), (LiteralInteger, "1", 67..68), (SemiColon, ";", 68..69), (EOI, "", 69..69)]


---------- Input ----------
create table "user" (id int, name varchar /* the user name */);
---------- Output ---------
[(CREATE, "create", 0..6), (TABLE, "table", 7..12), (LiteralString, "\"user\"", 13..19), (LParen, "(", 20..21), (Ident, "id", 21..23), (INT, "int", 24..27), (Comma, ",", 27..28), (Ident, "name", 29..33), (VARCHAR, "varchar", 34..41), (RParen, ")", 61..62), (SemiColon, ";", 62..63), (EOI, "", 63..63)]


