• malff/marcsql@weblab.(none)'s avatar
    Bug#21904 (parser problem when using IN with a double "(())") · f5ad4eed
    malff/marcsql@weblab.(none) authored
    Before this fix, a IN predicate of the form: "IN (( subselect ))", with two
    parenthesis, would be evaluated as a single row subselect: if the subselect
    returns more that 1 row, the statement would fail.
    
    The SQL:2003 standard defines a special exception in the specification,
    and mandates that this particular form of IN predicate shall be equivalent
    to "IN ( subselect )", which involves a table subquery and works with more
    than 1 row.
    
    This fix implements "IN (( subselect ))", "IN ((( subselect )))" etc
    as per the SQL:2003 requirement.
    
    All the details related to the implementation of this change have been
    commented in the code, and the relevant sections of the SQL:2003 spec
    are given for reference, so they are not repeated here.
    
    Having access to the spec is a requirement to review in depth this patch.
    f5ad4eed
sql_yacc.yy 250 KB