Would you be open to a patch to add proper support for this kind of MySQL variables, or do you consider it to be outside the scope of Calcite?
On 2022/03/22 21:52:09 Justin Swanhart wrote: > 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 <[email protected]> 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 <[email protected]> > > 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 > > > > >
