Skip to content

WITH...AS parse errors #373

Closed
Closed

Description

@ibennetch

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.

Activity

  1. iifawzi commented on Feb 25, 2022

    @iifawzi
    Contributor

    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;
  2. ivanavguston-oviva commented on Apr 4, 2022

    @ivanavguston-oviva

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

  3. iifawzi commented on Apr 4, 2022

    @iifawzi
    Contributor

    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)

  4. AnrDaemon commented on Aug 8, 2023

    @AnrDaemon

    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.

  5. williamdes commented on Aug 8, 2023

    @williamdes
    Member

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

  6. AnrDaemon commented on Aug 8, 2023

    @AnrDaemon

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

  7. AnrDaemon commented on Aug 8, 2023

    @AnrDaemon

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

  8. self-assigned this
    on Jan 16, 2025
  9. williamdes commented on Jan 16, 2025

    @williamdes
    Member

    I am closing this one as all comments points to it being resolved

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions