From 199a1c6ce417defe64e5ccea7fa25d43239f6a5f Mon Sep 17 00:00:00 2001 From: Luiz Zappa Date: Sun, 22 Oct 2023 15:02:06 -0300 Subject: [PATCH] feat(): unicode extended char support for column name or alias --- src/sqlParser.jison | 10 +++++----- test/main.test.js | 12 ++++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/sqlParser.jison b/src/sqlParser.jison index 4a8efbc..1db84b0 100644 --- a/src/sqlParser.jison +++ b/src/sqlParser.jison @@ -11,10 +11,10 @@ [#]\s.*\n /* skip sql comments */ \s+ /* skip whitespace */ -[$][{](.*?)[}] return 'PLACE_HOLDER' -[`][a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]*[`] return 'IDENTIFIER' -[\w]+[\u4e00-\u9fa5]+[0-9a-zA-Z_\u4e00-\u9fa5]* return 'IDENTIFIER' -[\u4e00-\u9fa5][0-9a-zA-Z_\u4e00-\u9fa5]* return 'IDENTIFIER' +[$][{](.+?)[}] return 'PLACE_HOLDER' +[`][a-zA-Z0-9_\u0080-\uFFFF]*[`] return 'IDENTIFIER' +[\w]+[\u0080-\uFFFF]+[0-9a-zA-Z_\u0080-\uFFFF]* return 'IDENTIFIER' +[\u0080-\uFFFF][0-9a-zA-Z_\u0080-\uFFFF]* return 'IDENTIFIER' SELECT return 'SELECT' ALL return 'ALL' ANY return 'ANY' @@ -125,7 +125,7 @@ UNION return 'UNION' [-]?[0-9]+(\.[0-9]+)? return 'NUMERIC' [-]?[0-9]+(\.[0-9]+)?[eE][-][0-9]+(\.[0-9]+)? return 'EXPONENT_NUMERIC' -[a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]* return 'IDENTIFIER' +[a-zA-Z_\u0080-\uFFFF][a-zA-Z0-9_\u0080-\uFFFF]* return 'IDENTIFIER' \. return 'DOT' ["][a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]*["] return 'STRING' ['][a-zA-Z_\u4e00-\u9fa5][a-zA-Z0-9_\u4e00-\u9fa5]*['] return 'STRING' diff --git a/test/main.test.js b/test/main.test.js index 2ee9c1b..d7a1496 100644 --- a/test/main.test.js +++ b/test/main.test.js @@ -436,4 +436,16 @@ describe('select grammar support', function () { it('test IDENTIFIER', function () { testParser('select `aa#sfs`(a) as \'A A\' from z'); }); + + it('Support unicode extended char (U+0080..U+FFFF) as column name or alias', function() { + testParser(`select + país, + MAX(produção) as maior_produção, + Ĉapelo, + Δάσος, + Молоко, + سلام, + かわいい + from table`) + }) });