Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WITH...AS parse errors #373

Open
ibennetch opened this issue Feb 22, 2022 · 7 comments
Open

WITH...AS parse errors #373

ibennetch opened this issue Feb 22, 2022 · 7 comments
Labels

Comments

@ibennetch
Copy link
Member

ibennetch commented Feb 22, 2022

With the sql-parser version 5.5.0 that's included with my phpMyAdmin, I'm looking at the example WITH...AS statement:

with foo as ( select * from products where bar in ('foo', 'bar'));

This passes through the linter without errors.

Which when run through the highlighter provides this:

WITH
    xm_gl AS(
    SELECT
        *
    FROM
        products
    WHERE
        pname IN('foo', 'bar')
);

And that now gives an error through the linter:

#1: Unexpected token. (near ")" at position 107)

It seems this is probably incorrect or improperly handled.

@iifawzi
Copy link
Contributor

iifawzi commented Feb 25, 2022

Hi, I'm not able to reproduce the same results in both 5.5.0 and 6.0.x-dev which's weird! I might be doing something wrong though.

Linting and highlighting using 5.5.0
5 5 0

Linting and highlighting using 6.0.x-dev
I've refactored and introduced a lot of fixes at #363, linting will now output these errors:
6 x

which are correct, because the statement is not a valid with clause, a subsequent query that reference the expression defined, is missing, that's why an expression was expected, and unexpected end of with cte are shown.

a valid statement based on the changes introduced and discussed at #363, should be similar to:

with foo as ( select * from products where bar in ('foo', 'bar')) SELECT * from foo;

@ivanavguston-oviva
Copy link

Hi folks, are you going to make any progress there?

@iifawzi
Copy link
Contributor

iifawzi commented Apr 4, 2022

Hi @ivanavguston-oviva, I'd say that it's already fixed by #363 (not released yet), could you test with 6.0.x-dev, with taking care of that the query should be a valid and complete WITH statement (#334 (comment))

Aside from that the query mentioned here got tested on an old version that didn't include the patch #363, it is also not a valid WITH clause, as described in my previous comment, and #334 (comment)

@williamdes williamdes added the bug label Apr 21, 2023
@AnrDaemon
Copy link

AnrDaemon commented Aug 8, 2023

While parsing a rather simple query WITH tm (`data`) AS (SELECT 1 FROM DUAL) SELECT * FROM tm; I get 272 errors in the stack.
How can I know which of these are real? Setting strict parsing mode just throws entire code away while request is perfectly executed in console.

@williamdes
Copy link
Member

What phpMyAdmin version are you using?
Can you provide the full query?

@AnrDaemon
Copy link

AnrDaemon commented Aug 8, 2023

This is THE FULL query.
The parser is 5.8 (last release).
Remote is MariaDB 10.4.

@AnrDaemon
Copy link

AnrDaemon commented Aug 8, 2023

Ok, sorry for the noise, I've found an error in the unexpected place not related to your library.

For those interested:

eval set -- $( getopt --shell=sh … "$@" )

was producing an unquoted result, which, for the case of shell wildcard characters, grabbed a lot from the project directory listing. Given less than explanatory exception messages, and the sheer number of them, I was unable to concentrate on the input data passed to the parser. Which, in the hindsight, I should've checked sooner.

The correct solution is to

eval "set -- $( getopt --shell=sh … "$@" )"

(Note the quotes.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants