• Igor Babaev's avatar
    MDEV-19421 Basic 3-way join queries are not parsed. · 8540fa83
    Igor Babaev authored
    The parser returned a syntax error message for the queries with join
    expressions like this t1 JOIN t2 [LEFT | RIGHT] JOIN t3 ON ... ON ... when
    the second operand of the outer JOIN operation with ON clause was another
    join expression with ON clause. In this expression the JOIN operator is
    right-associative, i.e. expression has to be parsed as the expression
    t1 JOIN (t2 [LEFT | RIGHT] JOIN t3 ON ... ) ON ...
    Such join expressions are hard to parse because the outer JOIN is
    left-associative if there is no ON clause for the first outer JOIN operator.
    The patch implements the solution when the JOIN operator is always parsed
    as right-associative and builds first the right-associative tree. If it
    happens that there is no corresponding ON clause for this operator the
    tree is converted to left-associative.
    
    The idea of the solution was taken from the patch by Martin Hansson
    "WL#8083: Fixed the join_table rule" from MySQL-8.0 code line.
    As the grammar rules related to join expressions in MySQL-8.0 and
    MariaDB-5.5+ are quite different MariaDB solution could not borrow
    any code from the MySQL-8.0 solution.
    8540fa83
join_outer_innodb.test 11.6 KB