Skip to content
  • gmantele's avatar
    [ADQL] Fix the tree generated by the parsing of NATURAL JOINs. · 7ca49f81
    gmantele authored
    The "normal" JOIN:
        A JOIN B ON A.id = B.id JOIN C ON B.id = C.id
    is correctly interpreted as:
        ( (A JOIN B ON A.id = B.id) JOIN C ON B.id = C.id )
    But with a NATURAL JOIN, the tree is mirrored:
        A NATURAL JOIN B NATURAL JOIN C
    gives:
    	( A NATURAL JOIN (B NATURAL JOIN C) )
    instead of:
        ( (A NATURAL JOIN B) NATURAL JOIN C )
    This is not a problem when the SQL translation is identical to the ADQL
    expression, but for some DBMS a conversion into a INNER JOIN ON is necessary
    and in this case we got the following SQL:
        A JOIN B JOIN C ON A.id = B.id ON B.id = C.id
    Which seems to work, but is syntactically strange.
    
    This commit should fix the generated tree. A "normal" JOIN and a NATURAL JOIN
    should now have the same form. A JUnit test has been added into TestADQLParser
    to check that: testJoinTree().
    7ca49f81