Ruben Q L created CALCITE-3482:
----------------------------------

             Summary: Equality of nested ROWs returns false for identical 
literal value
                 Key: CALCITE-3482
                 URL: https://issues.apache.org/jira/browse/CALCITE-3482
             Project: Calcite
          Issue Type: Bug
    Affects Versions: 1.21.0
            Reporter: Ruben Q L
            Assignee: Ruben Q L
             Fix For: 1.22.0


Similar to CALCITE-3021.
Problem can be reproduced via:
{code}
select * from
(values
    (1, ROW(1,1)),
    (2, ROW(2,2)),
    (3, ROW(1,1)),
    (4, ROW(2,2))) as t(id,struct)
where t.struct = ROW(2,2);
{code}
which returns no results, instead of the expected (I have run the same query in 
PostgreSQL, and it returns this result):
{code}
+----+--------+
| ID | STRUCT |
+----+--------+
|  2 | {2, 2} |
|  4 | {2, 2} |
+----+--------+
{code}

The issue is that the comparison is done via SqlFuynctions#eq(Object b0, Object 
b1)
{code}
  public static boolean eq(Object b0, Object b1) {
    return b0.equals(b1);
  }
{code}
And in this case we have two different Object[], with the same content, so the 
should be identified as equals. Probably the simples solution would be 
overloading the eq method:
{code}
  public static boolean eq(Object[] b0, Object[] b1) {
    return Arrays.deepEquals(b0, b1);
  }
{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to