Evgeny Stanilovsky created IGNITE-16580:
-------------------------------------------

             Summary: Calcite. Merge returns unexpected results.
                 Key: IGNITE-16580
                 URL: https://issues.apache.org/jira/browse/IGNITE-16580
             Project: Ignite
          Issue Type: Improvement
          Components: sql
            Reporter: Evgeny Stanilovsky



{noformat}
    @Test
    public void testMerge0() {
        sql("CREATE TABLE test1 (k1 int, k2 int, a int, b varchar, c varchar, 
CONSTRAINT PK PRIMARY KEY (k1, k2))");
        sql("INSERT INTO test1 VALUES (111, 111, 0, 'a', '0')");
        sql("INSERT INTO test1 VALUES (222, 222, 1, 'b', '1')");

        sql("CREATE TABLE test2 (k1 int, k2 int, a int, b varchar, c varchar, 
CONSTRAINT PK PRIMARY KEY (k1, k2))");
        sql("INSERT INTO test2 VALUES (333, 333, 0, '100', '')");
        sql("INSERT INTO test2 VALUES (444, 444, 2, '200', '')");

        String sql = "MERGE INTO test2 dst USING test1 src ON dst.a = src.a " +
            "WHEN MATCHED THEN UPDATE SET b = src.b " +
            "WHEN NOT MATCHED THEN INSERT (a, b) VALUES (src.a, src.b)";

        
assertQuery(sql).matches(QueryChecker.containsSubPlan("IgniteTableSpool")).check();

        assertQuery("SELECT * FROM test2 ORDER BY k1")
            .returns(222, 222, 1, "b", "1")
            .returns(333, 333, 0, "a", "")
            .returns(444, 444, 2, "200", "")
            .check();
    }
{noformat}

Caused by: java.lang.ClassNotFoundException: 
SQL_PUBLIC_TEST1_3be0511e_d245_4726_b535_0514ab769875_KEY

{noformat}
    public void testMerge1() {
        sql("CREATE TABLE test1 (a int, b varchar, c varchar)");
        sql("INSERT INTO test1 VALUES (0, 'a', '0')");
        sql("INSERT INTO test1 VALUES (1, 'b', '1')");

        sql("CREATE TABLE test2 (a int, b varchar, c varchar)");
        sql("INSERT INTO test2 VALUES (0, '100', '')");
        sql("INSERT INTO test2 VALUES (2, '200', '')");

        String sql = "MERGE INTO test2 dst USING test1 src ON dst.a = src.a " +
            "WHEN MATCHED THEN UPDATE SET b = src.b " +
            "WHEN NOT MATCHED THEN INSERT (a, b) VALUES (src.a, src.b)";

        
assertQuery(sql).matches(QueryChecker.containsSubPlan("IgniteTableSpool")).check();

        assertQuery("SELECT * FROM test2")
            .returns(1, "b", "1")
            .returns(0, "a", "")
            .returns(2, "200", "")
            .check();
    }
{noformat}

Expected: [[0, a, ], [1, b, 1], [2, 200, ]]
Actual:   [[0, a, ], [1, b, null], [2, 200, ]]




--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to