diff --git a/src/sqlParser.jison b/src/sqlParser.jison index e3cb798..ee5b329 100644 --- a/src/sqlParser.jison +++ b/src/sqlParser.jison @@ -127,6 +127,7 @@ UNION return 'UNION' [a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]* return 'IDENTIFIER' \. return 'DOT' ['"][a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]*["'] return 'QUOTED_IDENTIFIER' +[`].+[`] return 'QUOTED_IDENTIFIER' <> return 'EOF' . return 'INVALID' @@ -279,6 +280,8 @@ selectExprAliasOpt : { $$ = {alias: null, hasAs: null} } | AS IDENTIFIER { $$ = {alias: $2, hasAs: true} } | IDENTIFIER { $$ = {alias: $1, hasAs: false} } + | AS QUOTED_IDENTIFIER { $$ = {alias: $2, hasAs: true} } + | QUOTED_IDENTIFIER { $$ = {alias: $1, hasAs: false} } ; string diff --git a/test/main.test.js b/test/main.test.js index 988c1cc..558d133 100644 --- a/test/main.test.js +++ b/test/main.test.js @@ -387,4 +387,14 @@ describe('select grammar support', function() { 'select a from dual order by a desc limit 1, 1 union distinct select a from foo order by a limit 1' ); }); + + it('support quoted alias', function() { + testParser('select a as `A-A` from b limit 2;'); + testParser('select a as `A#A` from b limit 2;'); + testParser('select a as `A?A` from b limit 2;'); + testParser('select a as `A/B` from b limit 2;'); + testParser('select a as `A.A` from b limit 2;'); + testParser('select a as `A|A` from b limit 2;'); + testParser('select a as `A A` from b limit 2;'); + }); });