From 49874953c2c1b091e1a993ad2431e0ce7e27792d Mon Sep 17 00:00:00 2001 From: TotaJ Date: Sat, 25 Jul 2020 15:01:45 +0800 Subject: [PATCH] Fix fastcheck PART12 error. --- src/common/backend/catalog/pg_proc.cpp | 4 ++-- src/test/regress/expected/opr_sanity.out | 26 +++++++++++----------- src/test/regress/expected/opr_sanity_1.out | 25 --------------------- src/test/regress/sql/opr_sanity.sql | 26 +++++++++++----------- src/test/regress/sql/opr_sanity_1.sql | 6 ----- 5 files changed, 28 insertions(+), 59 deletions(-) diff --git a/src/common/backend/catalog/pg_proc.cpp b/src/common/backend/catalog/pg_proc.cpp index c21387e86e..ae67a269bf 100644 --- a/src/common/backend/catalog/pg_proc.cpp +++ b/src/common/backend/catalog/pg_proc.cpp @@ -777,7 +777,7 @@ static void checkFunctionConflicts(HeapTuple oldtup, const char* procedureName, } /* Can't change aggregate or window-function status, either */ - if (PROC_IS_AGG(oldproc->prokind) != PROC_IS_AGG(prokind)) { + if ((PROC_IS_AGG(oldproc->prokind) || PROC_IS_AGG(prokind)) && oldproc->prokind != prokind) { if (PROC_IS_AGG(oldproc->prokind)) { ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), @@ -789,7 +789,7 @@ static void checkFunctionConflicts(HeapTuple oldtup, const char* procedureName, } } - if (PROC_IS_WIN(oldproc->prokind) != PROC_IS_WIN(prokind)) { + if ((PROC_IS_WIN(oldproc->prokind) || PROC_IS_WIN(prokind)) && oldproc->prokind != prokind) { if (PROC_IS_WIN(oldproc->prokind)) { ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("function \"%s\" is a window function", procedureName))); diff --git a/src/test/regress/expected/opr_sanity.out b/src/test/regress/expected/opr_sanity.out index 69d8470b33..b498b1a637 100644 --- a/src/test/regress/expected/opr_sanity.out +++ b/src/test/regress/expected/opr_sanity.out @@ -63,10 +63,10 @@ WHERE prosrc IS NULL OR prosrc = '' OR prosrc = '-'; -----+--------- (0 rows) --- proiswindow shouldn't be set together with proisagg or proretset +-- prokind = 'w' shouldn't be set together with proretset SELECT p1.oid, p1.proname FROM pg_proc AS p1 -WHERE proiswindow AND (proisagg OR proretset); +WHERE prokind = 'w' AND proretset; oid | proname -----+--------- (0 rows) @@ -130,9 +130,9 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid < p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - (p1.proisagg = false OR p2.proisagg = false) AND + (p1.prokind != 'a' OR p2.prokind != 'a') AND (p1.prolang != p2.prolang OR - p1.proisagg != p2.proisagg OR + (p1.prokind = 'a') != (p2.prokind = 'a') OR p1.prosecdef != p2.prosecdef OR p1.proisstrict != p2.proisstrict OR p1.proretset != p2.proretset OR @@ -158,7 +158,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND p1.prosrc NOT LIKE E'range\\_constructor_' AND p2.prosrc NOT LIKE E'range\\_constructor_' AND (p1.prorettype < p2.prorettype) @@ -175,7 +175,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND p1.prosrc NOT LIKE E'range\\_constructor_' AND p2.prosrc NOT LIKE E'range\\_constructor_' AND (p1.proargtypes[0] < p2.proargtypes[0]) @@ -195,7 +195,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND p1.prosrc NOT LIKE E'range\\_constructor_' AND p2.prosrc NOT LIKE E'range\\_constructor_' AND (p1.proargtypes[1] < p2.proargtypes[1]) @@ -214,7 +214,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND (p1.proargtypes[2] < p2.proargtypes[2]) ORDER BY 1, 2; proargtypes | proargtypes @@ -227,7 +227,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND (p1.proargtypes[3] < p2.proargtypes[3]) ORDER BY 1, 2; proargtypes | proargtypes @@ -240,7 +240,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND (p1.proargtypes[4] < p2.proargtypes[4]) ORDER BY 1, 2; proargtypes | proargtypes @@ -252,7 +252,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND (p1.proargtypes[5] < p2.proargtypes[5]) ORDER BY 1, 2; proargtypes | proargtypes @@ -264,7 +264,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND (p1.proargtypes[6] < p2.proargtypes[6]) ORDER BY 1, 2; proargtypes | proargtypes @@ -276,7 +276,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND (p1.proargtypes[7] < p2.proargtypes[7]) ORDER BY 1, 2; proargtypes | proargtypes diff --git a/src/test/regress/expected/opr_sanity_1.out b/src/test/regress/expected/opr_sanity_1.out index 8fad0cefa3..18aa154032 100644 --- a/src/test/regress/expected/opr_sanity_1.out +++ b/src/test/regress/expected/opr_sanity_1.out @@ -262,31 +262,6 @@ WHERE d.classoid IS NULL AND p1.oid <= 9999; -----+--------- (0 rows) --- Check prokind -select count(*) from pg_proc where prokind = 'a'; - count -------- - 153 -(1 row) - -select count(*) from pg_proc where prokind = 'w'; - count -------- - 16 -(1 row) - -select count(*) from pg_proc where prokind = 'f'; - count -------- - 3266 -(1 row) - -select count(*) from pg_proc where prokind = 'p'; - count -------- - 11 -(1 row) - -- Check that operators' underlying functions have suitable comments, -- namely 'implementation of XXX operator'. In some cases involving legacy -- names for operators, there are multiple operators referencing the same diff --git a/src/test/regress/sql/opr_sanity.sql b/src/test/regress/sql/opr_sanity.sql index 5b3e7186e4..b83615ba5d 100644 --- a/src/test/regress/sql/opr_sanity.sql +++ b/src/test/regress/sql/opr_sanity.sql @@ -64,10 +64,10 @@ SELECT p1.oid, p1.proname FROM pg_proc as p1 WHERE prosrc IS NULL OR prosrc = '' OR prosrc = '-'; --- proiswindow shouldn't be set together with proisagg or proretset +-- prokind = 'w' shouldn't be set together with proretset SELECT p1.oid, p1.proname FROM pg_proc AS p1 -WHERE proiswindow AND (proisagg OR proretset); +WHERE prokind = 'w' AND proretset; -- pronargdefaults should be 0 iff proargdefaults is null SELECT p1.oid, p1.proname @@ -108,9 +108,9 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid < p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - (p1.proisagg = false OR p2.proisagg = false) AND + (p1.prokind != 'a' OR p2.prokind != 'a') AND (p1.prolang != p2.prolang OR - p1.proisagg != p2.proisagg OR + (p1.prokind = 'a') != (p2.prokind = 'a') OR p1.prosecdef != p2.prosecdef OR p1.proisstrict != p2.proisstrict OR p1.proretset != p2.proretset OR @@ -133,7 +133,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND p1.prosrc NOT LIKE E'range\\_constructor_' AND p2.prosrc NOT LIKE E'range\\_constructor_' AND (p1.prorettype < p2.prorettype) @@ -144,7 +144,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND p1.prosrc NOT LIKE E'range\\_constructor_' AND p2.prosrc NOT LIKE E'range\\_constructor_' AND (p1.proargtypes[0] < p2.proargtypes[0]) @@ -155,7 +155,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND p1.prosrc NOT LIKE E'range\\_constructor_' AND p2.prosrc NOT LIKE E'range\\_constructor_' AND (p1.proargtypes[1] < p2.proargtypes[1]) @@ -166,7 +166,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND (p1.proargtypes[2] < p2.proargtypes[2]) ORDER BY 1, 2; @@ -175,7 +175,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND (p1.proargtypes[3] < p2.proargtypes[3]) ORDER BY 1, 2; @@ -184,7 +184,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND (p1.proargtypes[4] < p2.proargtypes[4]) ORDER BY 1, 2; @@ -193,7 +193,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND (p1.proargtypes[5] < p2.proargtypes[5]) ORDER BY 1, 2; @@ -202,7 +202,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND (p1.proargtypes[6] < p2.proargtypes[6]) ORDER BY 1, 2; @@ -211,7 +211,7 @@ FROM pg_proc AS p1, pg_proc AS p2 WHERE p1.oid != p2.oid AND p1.prosrc = p2.prosrc AND p1.prolang = 12 AND p2.prolang = 12 AND - NOT p1.proisagg AND NOT p2.proisagg AND + p1.prokind != 'a' AND p2.prokind != 'a' AND (p1.proargtypes[7] < p2.proargtypes[7]) ORDER BY 1, 2; diff --git a/src/test/regress/sql/opr_sanity_1.sql b/src/test/regress/sql/opr_sanity_1.sql index d20cc40340..9aa81e7456 100644 --- a/src/test/regress/sql/opr_sanity_1.sql +++ b/src/test/regress/sql/opr_sanity_1.sql @@ -227,12 +227,6 @@ FROM pg_operator as p1 LEFT JOIN pg_description as d ON p1.tableoid = d.classoid and p1.oid = d.objoid and d.objsubid = 0 WHERE d.classoid IS NULL AND p1.oid <= 9999; --- Check prokind -select count(*) from pg_proc where prokind = 'a'; -select count(*) from pg_proc where prokind = 'w'; -select count(*) from pg_proc where prokind = 'f'; -select count(*) from pg_proc where prokind = 'p'; - -- Check that operators' underlying functions have suitable comments, -- namely 'implementation of XXX operator'. In some cases involving legacy -- names for operators, there are multiple operators referencing the same -- Gitee