From ca727c80ce785f4dbe639aaca0dc4b8d045b5232 Mon Sep 17 00:00:00 2001 From: ANJU BHARTI Date: Fri, 20 Dec 2024 10:33:56 +0000 Subject: [PATCH] Fix is_srvrolemember output for login same as specified server role Earlier is_srvrolemember was returning 1 for login same as specified server role. With this commit, now it will return expected output. Signed-off-by: ANJU BHARTI --- .../babelfishpg_tsql/sql/babelfishpg_tsql.sql | 3 +++ .../babelfishpg_tsql--4.4.0--4.5.0.sql | 3 +++ .../expected/dbcreator_role-vu-verify.out | 25 +++++++++++++++++++ .../expected/securityadmin_role-vu-verify.out | 8 ++++++ .../single_db/dbcreator_role-vu-verify.out | 25 +++++++++++++++++++ test/JDBC/input/dbcreator_role-vu-verify.mix | 10 ++++++++ .../input/securityadmin_role-vu-verify.mix | 3 +++ 7 files changed, 77 insertions(+) diff --git a/contrib/babelfishpg_tsql/sql/babelfishpg_tsql.sql b/contrib/babelfishpg_tsql/sql/babelfishpg_tsql.sql index 42b51e1d1f..816a431509 100644 --- a/contrib/babelfishpg_tsql/sql/babelfishpg_tsql.sql +++ b/contrib/babelfishpg_tsql/sql/babelfishpg_tsql.sql @@ -2190,6 +2190,9 @@ BEGIN ELSIF role = 'public' COLLATE sys.database_default THEN RETURN 1; + + ELSEIF role = login THEN + RETURN 0; ELSIF role COLLATE sys.database_default IN ('sysadmin', 'securityadmin', 'dbcreator') THEN has_role = (pg_has_role(login::TEXT, role::TEXT, 'MEMBER') diff --git a/contrib/babelfishpg_tsql/sql/upgrades/babelfishpg_tsql--4.4.0--4.5.0.sql b/contrib/babelfishpg_tsql/sql/upgrades/babelfishpg_tsql--4.4.0--4.5.0.sql index 8d1bb91531..dcb7762f1f 100644 --- a/contrib/babelfishpg_tsql/sql/upgrades/babelfishpg_tsql--4.4.0--4.5.0.sql +++ b/contrib/babelfishpg_tsql/sql/upgrades/babelfishpg_tsql--4.4.0--4.5.0.sql @@ -1693,6 +1693,9 @@ BEGIN ELSIF role = 'public' COLLATE sys.database_default THEN RETURN 1; + + ELSEIF role = login THEN + RETURN 0; ELSIF role COLLATE sys.database_default IN ('sysadmin', 'securityadmin', 'dbcreator') THEN has_role = (pg_has_role(login::TEXT, role::TEXT, 'MEMBER') diff --git a/test/JDBC/expected/dbcreator_role-vu-verify.out b/test/JDBC/expected/dbcreator_role-vu-verify.out index cd3efe781a..d944bad23e 100644 --- a/test/JDBC/expected/dbcreator_role-vu-verify.out +++ b/test/JDBC/expected/dbcreator_role-vu-verify.out @@ -32,6 +32,31 @@ int ~~END~~ +select is_srvrolemember('dbcreator','dbcreator') +go +~~START~~ +int +0 +~~END~~ + + +select is_srvrolemember('sysadmin','sysadmin') +go +~~START~~ +int +0 +~~END~~ + + +-- should return NULL for invalid login +select is_srvrolemember('l1', 'l1') +go +~~START~~ +int + +~~END~~ + + alter login dbcreator_login1 with password='123' go diff --git a/test/JDBC/expected/securityadmin_role-vu-verify.out b/test/JDBC/expected/securityadmin_role-vu-verify.out index ccabd5967a..97c6c10cc1 100644 --- a/test/JDBC/expected/securityadmin_role-vu-verify.out +++ b/test/JDBC/expected/securityadmin_role-vu-verify.out @@ -15,6 +15,14 @@ int ~~END~~ +select is_srvrolemember('securityadmin','securityadmin') +go +~~START~~ +int +0 +~~END~~ + + alter login securityadmin_login1 with password='123' go diff --git a/test/JDBC/expected/single_db/dbcreator_role-vu-verify.out b/test/JDBC/expected/single_db/dbcreator_role-vu-verify.out index 00b27faa19..08c4198868 100644 --- a/test/JDBC/expected/single_db/dbcreator_role-vu-verify.out +++ b/test/JDBC/expected/single_db/dbcreator_role-vu-verify.out @@ -32,6 +32,31 @@ int ~~END~~ +select is_srvrolemember('dbcreator','dbcreator') +go +~~START~~ +int +0 +~~END~~ + + +select is_srvrolemember('sysadmin','sysadmin') +go +~~START~~ +int +0 +~~END~~ + + +-- should return NULL for invalid login +select is_srvrolemember('l1', 'l1') +go +~~START~~ +int + +~~END~~ + + alter login dbcreator_login1 with password='123' go diff --git a/test/JDBC/input/dbcreator_role-vu-verify.mix b/test/JDBC/input/dbcreator_role-vu-verify.mix index bc22a67466..f5dd59a7b5 100644 --- a/test/JDBC/input/dbcreator_role-vu-verify.mix +++ b/test/JDBC/input/dbcreator_role-vu-verify.mix @@ -13,6 +13,16 @@ go select is_srvrolemember('dbcreator', 'securityadmin') go +select is_srvrolemember('dbcreator','dbcreator') +go + +select is_srvrolemember('sysadmin','sysadmin') +go + +-- should return NULL for invalid login +select is_srvrolemember('l1', 'l1') +go + alter login dbcreator_login1 with password='123' go diff --git a/test/JDBC/input/securityadmin_role-vu-verify.mix b/test/JDBC/input/securityadmin_role-vu-verify.mix index e764c9e726..60c56562b8 100644 --- a/test/JDBC/input/securityadmin_role-vu-verify.mix +++ b/test/JDBC/input/securityadmin_role-vu-verify.mix @@ -5,6 +5,9 @@ go select is_srvrolemember('securityadmin', 'sysadmin') go +select is_srvrolemember('securityadmin','securityadmin') +go + alter login securityadmin_login1 with password='123' go