From 91d678db0387a757430653a89bf44de700af7b9c Mon Sep 17 00:00:00 2001 From: Mehmet YILMAZ Date: Wed, 6 Nov 2024 11:59:43 +0000 Subject: [PATCH] create_drop_database_propagation --- .../distributed/deparser/citus_ruleutils.c | 2 ++ .../expected/create_drop_database_propagation.out | 15 +++++---------- .../sql/create_drop_database_propagation.sql | 12 ++++++------ 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/backend/distributed/deparser/citus_ruleutils.c b/src/backend/distributed/deparser/citus_ruleutils.c index 6e61564b8..4e5acb286 100644 --- a/src/backend/distributed/deparser/citus_ruleutils.c +++ b/src/backend/distributed/deparser/citus_ruleutils.c @@ -1353,6 +1353,8 @@ convert_aclright_to_string(int aclright) return "TEMPORARY"; case ACL_CONNECT: return "CONNECT"; + case ACL_MAINTAIN: /* New case for PostgreSQL 17 https://github.com/postgres/postgres/commit/ecb0fd33720fab91df1207e85704f382f55e1eb7 */ + return "MAINTAIN"; default: elog(ERROR, "unrecognized aclright: %d", aclright); return NULL; diff --git a/src/test/regress/expected/create_drop_database_propagation.out b/src/test/regress/expected/create_drop_database_propagation.out index 4ddbaae3f..8edfc5a33 100644 --- a/src/test/regress/expected/create_drop_database_propagation.out +++ b/src/test/regress/expected/create_drop_database_propagation.out @@ -1103,28 +1103,23 @@ DROP ROLE propagated_role, non_propagated_role; -- test citus_internal.acquire_citus_advisory_object_class_lock with null input SELECT citus_internal.acquire_citus_advisory_object_class_lock(null, 'regression'); ERROR: object_class cannot be NULL -SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), null); - acquire_citus_advisory_object_class_lock ---------------------------------------------------------------------- - -(1 row) - -- OCLASS_DATABASE -SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), NULL); +-- Set oclass_database value based on PostgreSQL version: 25 for < 16, 26 for version 16, and 1262 for version >= 17 +SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 WHEN substring(version(), '\d+')::integer = 16 THEN 26 ELSE 1262 END AS oclass_database), NULL); acquire_citus_advisory_object_class_lock --------------------------------------------------------------------- (1 row) -SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), 'regression'); +SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 WHEN substring(version(), '\d+')::integer = 16 THEN 26 ELSE 1262 END AS oclass_database), 'regression'); acquire_citus_advisory_object_class_lock --------------------------------------------------------------------- (1 row) -SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), ''); +SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 WHEN substring(version(), '\d+')::integer = 16 THEN 26 ELSE 1262 END AS oclass_database), ''); ERROR: database "" does not exist -SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), 'no_such_db'); +SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 WHEN substring(version(), '\d+')::integer = 16 THEN 26 ELSE 1262 END AS oclass_database), 'no_such_db'); ERROR: database "no_such_db" does not exist -- invalid OCLASS SELECT citus_internal.acquire_citus_advisory_object_class_lock(-1, NULL); diff --git a/src/test/regress/sql/create_drop_database_propagation.sql b/src/test/regress/sql/create_drop_database_propagation.sql index de55258c3..a2699ce2c 100644 --- a/src/test/regress/sql/create_drop_database_propagation.sql +++ b/src/test/regress/sql/create_drop_database_propagation.sql @@ -663,13 +663,13 @@ DROP ROLE propagated_role, non_propagated_role; -- test citus_internal.acquire_citus_advisory_object_class_lock with null input SELECT citus_internal.acquire_citus_advisory_object_class_lock(null, 'regression'); -SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), null); - -- OCLASS_DATABASE -SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), NULL); -SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), 'regression'); -SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), ''); -SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), 'no_such_db'); +-- Set oclass_database value based on PostgreSQL version: 25 for < 16, 26 for version 16, and 1262 for version >= 17 +SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 WHEN substring(version(), '\d+')::integer = 16 THEN 26 ELSE 1262 END AS oclass_database), NULL); +SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 WHEN substring(version(), '\d+')::integer = 16 THEN 26 ELSE 1262 END AS oclass_database), 'regression'); +SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 WHEN substring(version(), '\d+')::integer = 16 THEN 26 ELSE 1262 END AS oclass_database), ''); +SELECT citus_internal.acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 WHEN substring(version(), '\d+')::integer = 16 THEN 26 ELSE 1262 END AS oclass_database), 'no_such_db'); + -- invalid OCLASS SELECT citus_internal.acquire_citus_advisory_object_class_lock(-1, NULL);