The logic in InLogicOperatorNode.mutateRowValueConstructorSyntaxInInListSyntax is only correct for IN statements but is applied to NOT IN statements as well.
For an example query of:
where (col1, col2) not in ( ('val1', 'val2'), ('val3', 'val4') )
The current code translates this into:
where (col1 = 'val1' and col2 = 'val2') or (col1 = 'val3' and val2 = 'val4')
The correct translation is:
where (col1 <> 'val1' and col2 <> 'val2') and (col1 <> 'val3' and val2 <> 'val4')
|