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
> >
> >
>

Reply via email to