From 616f1165625f839f422f4c8b430fd86397105c6b Mon Sep 17 00:00:00 2001 From: rossd-bitquill Date: Thu, 27 Jan 2022 17:39:27 -0800 Subject: [PATCH 1/4] Change HAS_DBACCESS() to always return 1. The existing implementation of HAS_DBACCESS() would always return NULL due to an exception thrown by the underlying psql call because the Babelfish table names do not match the postgres table names. This commit changes HAS_DBACCESS to always return 1. The underlying issue will be fixed alongside a larger implementation of permissions/ownership. Signed-off-by: rossd-bitquill --- contrib/babelfishpg_tsql/sql/sys_functions.sql | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/contrib/babelfishpg_tsql/sql/sys_functions.sql b/contrib/babelfishpg_tsql/sql/sys_functions.sql index e2ae177b456..a3a4e2a8f80 100644 --- a/contrib/babelfishpg_tsql/sql/sys_functions.sql +++ b/contrib/babelfishpg_tsql/sql/sys_functions.sql @@ -655,17 +655,14 @@ LANGUAGE plpgsql VOLATILE RETURNS NULL ON NULL INPUT; +-- This procedure is deliberately short-circuited to always return 1. +-- Babelfish does not currently have full support for permissions, +-- because the Babelfish table names might not match the unerlying +-- Postgres table names, so previous implementation threw an exception +-- on the underlying psql, and thus always returned NULL. CREATE OR REPLACE FUNCTION sys.has_dbaccess(database_name PG_CATALOG.TEXT) RETURNS INTEGER AS $$ -DECLARE has_access BOOLEAN; BEGIN - has_access = has_database_privilege(database_name, 'CONNECT'); - IF has_access THEN - RETURN 1; - ELSE - RETURN 0; - END IF; -EXCEPTION WHEN others THEN - RETURN NULL; + RETURN 1; END; $$ STRICT From f64f5f1772296cc7c530dc8d5440e5a8e9ff6383 Mon Sep 17 00:00:00 2001 From: rossd-bitquill Date: Tue, 1 Feb 2022 11:55:09 -0800 Subject: [PATCH 2/4] Add tests for HAS_DBACCESS. Signed-off-by: rossd-bitquill --- test/JDBC/expected/BABEL-HAS_DBACCESS.out | 25 +++++++++++++++++++++++ test/JDBC/input/BABEL-HAS_DBACCESS.sql | 10 +++++++++ 2 files changed, 35 insertions(+) create mode 100644 test/JDBC/expected/BABEL-HAS_DBACCESS.out create mode 100644 test/JDBC/input/BABEL-HAS_DBACCESS.sql diff --git a/test/JDBC/expected/BABEL-HAS_DBACCESS.out b/test/JDBC/expected/BABEL-HAS_DBACCESS.out new file mode 100644 index 00000000000..3a342d67e8c --- /dev/null +++ b/test/JDBC/expected/BABEL-HAS_DBACCESS.out @@ -0,0 +1,25 @@ +CREATE DATABASE TestDB; +SELECT HAS_DBACCESS('TestDB'); +GO +~~START~~ +int +1 +~~END~~ + + +SELECT HAS_DBACCESS('does_not_exist'); +GO +~~START~~ +int +1 +~~END~~ + + +DROP DATABASE TestDB; +SELECT HAS_DBACCESS('TestDB'); +GO +~~START~~ +int +1 +~~END~~ + diff --git a/test/JDBC/input/BABEL-HAS_DBACCESS.sql b/test/JDBC/input/BABEL-HAS_DBACCESS.sql new file mode 100644 index 00000000000..1ec846b8cce --- /dev/null +++ b/test/JDBC/input/BABEL-HAS_DBACCESS.sql @@ -0,0 +1,10 @@ +CREATE DATABASE TestDB; +SELECT HAS_DBACCESS('TestDB'); +GO + +SELECT HAS_DBACCESS('does_not_exist'); +GO + +DROP DATABASE TestDB; +SELECT HAS_DBACCESS('TestDB'); +GO From fc610eaa0bae9e4a66d09232e507756205a3790d Mon Sep 17 00:00:00 2001 From: rossd-bitquill Date: Tue, 1 Feb 2022 13:03:07 -0800 Subject: [PATCH 3/4] Add DROP DATABASE IF EXISTS to improve reliability of tests. Signed-off-by: rossd-bitquill --- test/JDBC/expected/BABEL-HAS_DBACCESS.out | 1 + test/JDBC/input/BABEL-HAS_DBACCESS.sql | 1 + test/JDBC/jdbc_schedule | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/test/JDBC/expected/BABEL-HAS_DBACCESS.out b/test/JDBC/expected/BABEL-HAS_DBACCESS.out index 3a342d67e8c..0830c6e786b 100644 --- a/test/JDBC/expected/BABEL-HAS_DBACCESS.out +++ b/test/JDBC/expected/BABEL-HAS_DBACCESS.out @@ -1,3 +1,4 @@ +DROP DATABASE IF EXISTS TestDB; CREATE DATABASE TestDB; SELECT HAS_DBACCESS('TestDB'); GO diff --git a/test/JDBC/input/BABEL-HAS_DBACCESS.sql b/test/JDBC/input/BABEL-HAS_DBACCESS.sql index 1ec846b8cce..6c065b556a1 100644 --- a/test/JDBC/input/BABEL-HAS_DBACCESS.sql +++ b/test/JDBC/input/BABEL-HAS_DBACCESS.sql @@ -1,3 +1,4 @@ +DROP DATABASE IF EXISTS TestDB; CREATE DATABASE TestDB; SELECT HAS_DBACCESS('TestDB'); GO diff --git a/test/JDBC/jdbc_schedule b/test/JDBC/jdbc_schedule index eabc1bbad9f..4b8ef831586 100644 --- a/test/JDBC/jdbc_schedule +++ b/test/JDBC/jdbc_schedule @@ -8,5 +8,5 @@ # new line # 6. If you want the framework to not run certain files, use: ignore#!# -all +BABEL-HAS_DBACCESS From 44b34daf4c93c54acddb910326db29c0255f7039 Mon Sep 17 00:00:00 2001 From: Ross <97000928+rossd-bitquill@users.noreply.github.com> Date: Tue, 1 Feb 2022 13:17:31 -0800 Subject: [PATCH 4/4] Revert change to jdbc_schedule --- test/JDBC/jdbc_schedule | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/JDBC/jdbc_schedule b/test/JDBC/jdbc_schedule index 4b8ef831586..eabc1bbad9f 100644 --- a/test/JDBC/jdbc_schedule +++ b/test/JDBC/jdbc_schedule @@ -8,5 +8,5 @@ # new line # 6. If you want the framework to not run certain files, use: ignore#!# -BABEL-HAS_DBACCESS +all