MySQL support two categories of variables, user variables which are prefixed with the @character and session/global SERVER variables which are prefixed with @@.
You can also access them via: Select @@session.session_var; Select @@global.global_var; select @@session_or_global_var; for example: mysql> select @@warp_adjust_table_stats_for_joins; +-------------------------------------+ | @@warp_adjust_table_stats_for_joins | +-------------------------------------+ | 1 | +-------------------------------------+ 1 row in set (0.00 sec) mysql> set warp_adjust_table_stats_for_joins= false; Query OK, 0 rows affected (0.00 sec) mysql> select @@warp_adjust_table_stats_for_joins; +-------------------------------------+ | @@warp_adjust_table_stats_for_joins | +-------------------------------------+ | 0 | +-------------------------------------+ 1 row in set (0.00 sec) mysql> select @@session.warp_adjust_table_stats_for_joins; +---------------------------------------------+ | @@session.warp_adjust_table_stats_for_joins | +---------------------------------------------+ | 0 | +---------------------------------------------+ 1 row in set (0.00 sec) mysql> select @@global.warp_adjust_table_stats_for_joins; +--------------------------------------------+ | @@global.warp_adjust_table_stats_for_joins | +--------------------------------------------+ | 1 | +--------------------------------------------+ 1 row in set (0.00 sec) On Tue, Mar 22, 2022 at 5:02 PM Julian Hyde <jhyde.apa...@gmail.com> wrote: > The ‘@@‘ prefix is not standard SQL, and Calcite does not support it. > > Can you do some research to find out how MySQL handles it. Is it > considered to be part of the variable name? Or is it a prefix (like $ in > bash) that means ‘what comes next is a variable’? In other words, does the > parser say there is a reference to a variable called > '@@character_set_server’ or a variable called ‘character_set_server’? And > is ‘@‘ a legal part of a variable name? > > Also, is it handled by the core SQL parser or by a preprocessor? > > Julian > > > > On Mar 22, 2022, at 2:17 AM, Adolfo Ochagavía <ado...@ochagavia.nl> > wrote: > > > > Hi there, > > > > I am writing a MySQL-compatible server that talks the MySQL protocol. > Some clients are sending special queries to autoconfigure themselves, like > "SELECT @@character_set_server". I would like to use calcite to parse such > queries, but parsing fails with an exception, seemingly related to the > usage of "@@" in variable names. Is this unsupported or am I doing > something wrong? > > > > The code: > >> var config = SqlParser.Config.DEFAULT.withLex(Lex.MYSQL); > >> var parser = SqlParser.create("SELECT @@character_set_server", config); > >> var parsed = parser.parseQuery(); > > > > The exception: org.apache.calcite.sql.parser.SqlParseException: Lexical > error at line 1, column 9. Encountered: "@" (64), after : "" > > > > Any help is appreciated! > > Adolfo > >