From 2fc5e14ee846e59df36e76f7724c0c8012e77ef0 Mon Sep 17 00:00:00 2001 From: paragjain Date: Sun, 14 Jul 2024 10:01:27 +0000 Subject: [PATCH] Incorrect attNum BugFix --- .../planner/query_colocation_checker.c | 3 +- src/test/regress/expected/merge_vcore.out | 35 +++++++++++++++++++ src/test/regress/sql/merge_vcore.sql | 31 ++++++++++++++++ 3 files changed, 67 insertions(+), 2 deletions(-) diff --git a/src/backend/distributed/planner/query_colocation_checker.c b/src/backend/distributed/planner/query_colocation_checker.c index bef91618e..532be5672 100644 --- a/src/backend/distributed/planner/query_colocation_checker.c +++ b/src/backend/distributed/planner/query_colocation_checker.c @@ -331,7 +331,6 @@ CreateAllTargetListForRelation(Oid relationId, List *requiredAttributes) int numberOfAttributes = RelationGetNumberOfAttributes(relation); List *targetList = NIL; - int varAttrNo = 1; for (int attrNum = 1; attrNum <= numberOfAttributes; attrNum++) { @@ -362,7 +361,7 @@ CreateAllTargetListForRelation(Oid relationId, List *requiredAttributes) else { TargetEntry *targetEntry = - CreateTargetEntryForColumn(attributeTuple, SINGLE_RTE_INDEX, varAttrNo++, + CreateTargetEntryForColumn(attributeTuple, SINGLE_RTE_INDEX, attrNum, resNo); targetList = lappend(targetList, targetEntry); } diff --git a/src/test/regress/expected/merge_vcore.out b/src/test/regress/expected/merge_vcore.out index 03f6f8820..d2f15ee46 100644 --- a/src/test/regress/expected/merge_vcore.out +++ b/src/test/regress/expected/merge_vcore.out @@ -476,6 +476,41 @@ WHEN MATCHED THEN DO NOTHING; Filter: ('2'::bigint = id) (11 rows) +DROP TABLE IF EXISTS source; +DROP TABLE IF EXISTS target; +-- Bug Fix Test as part of this PR +CREATE TABLE source ( + id int, + age int, + salary int +); +CREATE TABLE target ( + id int, + age int, + salary int +); +SELECT create_distributed_table('source', 'id', colocate_with=>'none'); + create_distributed_table +--------------------------------------------------------------------- + +(1 row) + +SELECT create_distributed_table('target', 'id', colocate_with=>'none'); + create_distributed_table +--------------------------------------------------------------------- + +(1 row) + +INSERT INTO source (id, age, salary) VALUES (1,30, 100000); +MERGE INTO ONLY target USING source ON (source.id = target.id) +WHEN NOT MATCHED THEN +INSERT (id, salary) VALUES (source.id, source.salary); +SELECT * FROM TARGET; + id | age | salary +--------------------------------------------------------------------- + 1 | | 100000 +(1 row) + DROP TABLE IF EXISTS source; DROP TABLE IF EXISTS target; DROP SCHEMA IF EXISTS merge_vcore_schema CASCADE; diff --git a/src/test/regress/sql/merge_vcore.sql b/src/test/regress/sql/merge_vcore.sql index 1f0982f03..5f1e112b6 100644 --- a/src/test/regress/sql/merge_vcore.sql +++ b/src/test/regress/sql/merge_vcore.sql @@ -311,4 +311,35 @@ WHEN MATCHED THEN DO NOTHING; DROP TABLE IF EXISTS source; DROP TABLE IF EXISTS target; + +-- Bug Fix Test as part of this PR +CREATE TABLE source ( + id int, + age int, + salary int +); + +CREATE TABLE target ( + id int, + age int, + salary int +); + +SELECT create_distributed_table('source', 'id', colocate_with=>'none'); +SELECT create_distributed_table('target', 'id', colocate_with=>'none'); + +INSERT INTO source (id, age, salary) VALUES (1,30, 100000); + +MERGE INTO ONLY target USING source ON (source.id = target.id) +WHEN NOT MATCHED THEN +INSERT (id, salary) VALUES (source.id, source.salary); + +SELECT * FROM TARGET; +DROP TABLE IF EXISTS source; +DROP TABLE IF EXISTS target; + DROP SCHEMA IF EXISTS merge_vcore_schema CASCADE; + + + +