# description: Tests for printout of variants of TableModify operator.
#     Plan around these operators may change in whatever way,
#     the only thing that must be held is an invariant described
#     in comments to every test case.
# group: [explain]

statement ok
CREATE TABLE test_table (c1 INT PRIMARY KEY, c2 INT, c3 INT);

# insert multiple tuples with literals
explain plan
INSERT INTO test_table VALUES (1, 2, 3), (2, 2, 3)
----
Project
    fieldNames: [ROWCOUNT]
    projection: [CAST($f0):BIGINT NOT NULL]
    est: (rows=1)
  ColocatedHashAggregate
      fieldNames: [$f0]
      group: []
      aggregation: [$SUM0(ROWCOUNT)]
      est: (rows=1)
    Exchange
        distribution: single
        est: (rows=2)
      TableModify
          table: PUBLIC.TEST_TABLE
          fieldNames: [ROWCOUNT]
          type: INSERT
          est: (rows=2)
        TrimExchange
            distribution: table PUBLIC.TEST_TABLE in zone "Default" by [C1]
            est: (rows=2)
          Values
              fieldNames: [C1, C2, C3]
              tuples: [[1, 2, 3], [2, 2, 3]]
              est: (rows=2)

# insert multiple tuples mixed
explain plan
INSERT INTO test_table VALUES (1, LENGTH(rand_uuid()::VARCHAR), 3), (2, LENGTH(rand_uuid()::VARCHAR), 3)
----
Project
    fieldNames: [ROWCOUNT]
    projection: [CAST($f0):BIGINT NOT NULL]
    est: (rows=2)
  ColocatedHashAggregate
      fieldNames: [$f0]
      group: []
      aggregation: [$SUM0(ROWCOUNT)]
      est: (rows=2)
    Exchange
        distribution: single
        est: (rows=2)
      TableModify
          table: PUBLIC.TEST_TABLE
          fieldNames: [ROWCOUNT]
          type: INSERT
          est: (rows=2)
        UnionAll
            est: (rows=2)
          Exchange
              distribution: table PUBLIC.TEST_TABLE in zone "Default" by [EXPR$0]
              est: (rows=1)
            Project
                fieldNames: [EXPR$0, EXPR$1, EXPR$2]
                projection: [1, LENGTH(CAST(RAND_UUID()):VARCHAR CHARACTER SET "UTF-8" NOT NULL), 3]
                est: (rows=1)
              Values
                  fieldNames: [ZERO]
                  tuples: [[0]]
                  est: (rows=1)
          Exchange
              distribution: table PUBLIC.TEST_TABLE in zone "Default" by [EXPR$0]
              est: (rows=1)
            Project
                fieldNames: [EXPR$0, EXPR$1, EXPR$2]
                projection: [2, LENGTH(CAST(RAND_UUID()):VARCHAR CHARACTER SET "UTF-8" NOT NULL), 3]
                est: (rows=1)
              Values
                  fieldNames: [ZERO]
                  tuples: [[0]]
                  est: (rows=1)

# delete by key complex
explain plan
DELETE FROM test_table WHERE c1 in (1, 2, 3)
----
Project
    fieldNames: [ROWCOUNT]
    projection: [CAST($f0):BIGINT NOT NULL]
    est: (rows=1)
  ColocatedHashAggregate
      fieldNames: [$f0]
      group: []
      aggregation: [$SUM0(ROWCOUNT)]
      est: (rows=1)
    Exchange
        distribution: single
        est: (rows=1)
      TableModify
          table: PUBLIC.TEST_TABLE
          fieldNames: [ROWCOUNT]
          type: DELETE
          est: (rows=1)
        TableScan
            table: PUBLIC.TEST_TABLE
            predicate: SEARCH(C1, Sarg[1, 2, 3])
            fieldNames: [C1]
            est: (rows=1)


# delete with predicate by arbitrary column
explain plan
DELETE FROM test_table WHERE c3 in (1, 2, 3)
----
Project
    fieldNames: [ROWCOUNT]
    projection: [CAST($f0):BIGINT NOT NULL]
    est: (rows=1)
  ColocatedHashAggregate
      fieldNames: [$f0]
      group: []
      aggregation: [$SUM0(ROWCOUNT)]
      est: (rows=1)
    Exchange
        distribution: single
        est: (rows=1)
      TableModify
          table: PUBLIC.TEST_TABLE
          fieldNames: [ROWCOUNT]
          type: DELETE
          est: (rows=1)
        TableScan
            table: PUBLIC.TEST_TABLE
            predicate: SEARCH(C3, Sarg[1, 2, 3])
            fieldNames: [C1]
            est: (rows=1)

# update with predicate by key simple
explain plan
UPDATE test_table SET c2 = 2 WHERE c1 = 1
----
Project
    fieldNames: [ROWCOUNT]
    projection: [CAST($f0):BIGINT NOT NULL]
    est: (rows=1)
  ColocatedHashAggregate
      fieldNames: [$f0]
      group: []
      aggregation: [$SUM0(ROWCOUNT)]
      est: (rows=1)
    Exchange
        distribution: single
        est: (rows=1)
      TableModify
          table: PUBLIC.TEST_TABLE
          fieldNames: [ROWCOUNT]
          type: UPDATE
          est: (rows=1)
        TableScan
            table: PUBLIC.TEST_TABLE
            predicate: =(C1, 1)
            fieldNames: [C1, C2, C3, EXPR$0]
            projection: [C1, C2, C3, 2]
            est: (rows=1)

# update with predicate by key complex
explain plan
UPDATE test_table SET c2 = 2 WHERE c1 in (1, 2, 3)
----
Project
    fieldNames: [ROWCOUNT]
    projection: [CAST($f0):BIGINT NOT NULL]
    est: (rows=1)
  ColocatedHashAggregate
      fieldNames: [$f0]
      group: []
      aggregation: [$SUM0(ROWCOUNT)]
      est: (rows=1)
    Exchange
        distribution: single
        est: (rows=1)
      TableModify
          table: PUBLIC.TEST_TABLE
          fieldNames: [ROWCOUNT]
          type: UPDATE
          est: (rows=1)
        TableScan
            table: PUBLIC.TEST_TABLE
            predicate: SEARCH(C1, Sarg[1, 2, 3])
            fieldNames: [C1, C2, C3, EXPR$0]
            projection: [C1, C2, C3, 2]
            est: (rows=1)

# update with predicate by arbitrary column
explain plan
UPDATE test_table SET c2 = 2 WHERE c3 in (1, 2, 3)
----
Project
    fieldNames: [ROWCOUNT]
    projection: [CAST($f0):BIGINT NOT NULL]
    est: (rows=1)
  ColocatedHashAggregate
      fieldNames: [$f0]
      group: []
      aggregation: [$SUM0(ROWCOUNT)]
      est: (rows=1)
    Exchange
        distribution: single
        est: (rows=1)
      TableModify
          table: PUBLIC.TEST_TABLE
          fieldNames: [ROWCOUNT]
          type: UPDATE
          est: (rows=1)
        TableScan
            table: PUBLIC.TEST_TABLE
            predicate: SEARCH(C3, Sarg[1, 2, 3])
            fieldNames: [C1, C2, C3, EXPR$0]
            projection: [C1, C2, C3, 2]
            est: (rows=1)

# merge operator
explain plan
MERGE INTO test_table dst
USING (SELECT c1, c2, c3 FROM test_table) src
   ON dst.c1 = src.c1 * 2
 WHEN MATCHED THEN UPDATE SET c2 = src.c2 * 2
 WHEN NOT MATCHED THEN INSERT VALUES (1, 2, 3)
----
Project
    fieldNames: [ROWCOUNT]
    projection: [CAST($f0):BIGINT NOT NULL]
    est: (rows=1)
  ColocatedHashAggregate
      fieldNames: [$f0]
      group: []
      aggregation: [$SUM0(ROWCOUNT)]
      est: (rows=1)
    Exchange
        distribution: single
        est: (rows=1)
      TableModify
          table: PUBLIC.TEST_TABLE
          fieldNames: [ROWCOUNT]
          type: MERGE
          est: (rows=1)
        Exchange
            distribution: table PUBLIC.TEST_TABLE in zone "Default" by [$f0]
            est: (rows=1)
          Project
              fieldNames: [$f0, $f1, $f2, C10, C20, C30, $f6]
              projection: [1, 2, 3, C1, C2, C3, *(C2$0, 2)]
              est: (rows=1)
            HashJoin
                predicate: =(C1, $f3)
                fieldNames: [C1, C2, C3, C2$0, $f3]
                type: right
                est: (rows=1)
              TableScan
                  table: PUBLIC.TEST_TABLE
                  fieldNames: [C1, C2, C3]
                  est: (rows=1)
              Exchange
                  distribution: table PUBLIC.TEST_TABLE in zone "Default" by [$f3]
                  est: (rows=1)
                TableScan
                    table: PUBLIC.TEST_TABLE
                    fieldNames: [C2, $f3]
                    projection: [C2, *(C1, 2)]
                    est: (rows=1)
