Skip to content

Commit

Permalink
test commit
Browse files Browse the repository at this point in the history
  • Loading branch information
roshan0708 committed Jul 10, 2024
1 parent 9907019 commit 3d684af
Show file tree
Hide file tree
Showing 4 changed files with 358 additions and 23 deletions.
57 changes: 34 additions & 23 deletions contrib/babelfishpg_tsql/sql/babelfishpg_tsql.sql
Original file line number Diff line number Diff line change
Expand Up @@ -983,10 +983,10 @@ AND has_table_privilege(t1.oid, 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,TRIGGER');
GRANT SELECT ON sys.sp_tables_view TO PUBLIC;

CREATE OR REPLACE FUNCTION sys.sp_tables_internal(
in_table_name sys.nvarchar(384) = '',
in_table_owner sys.nvarchar(384) = '',
in_table_qualifier sys.sysname = '',
in_table_type sys.varchar(100) = '',
in_table_name sys.nvarchar(384) = NULL,
in_table_owner sys.nvarchar(384) = NULL,
in_table_qualifier sys.sysname = NULL,
in_table_type sys.varchar(100) = NULL,
in_fusepattern sys.bit = '1')
RETURNS TABLE (
out_table_qualifier sys.sysname,
Expand Down Expand Up @@ -1015,12 +1015,10 @@ CREATE OR REPLACE FUNCTION sys.sp_tables_internal(
CAST(table_type AS sys.varchar(32)) AS TABLE_TYPE,
CAST(remarks AS sys.varchar(254)) AS REMARKS
FROM sys.sp_tables_view
WHERE ((SELECT coalesce(in_table_name,'')) = '' OR table_name LIKE in_table_name collate sys.database_default)
AND ((SELECT coalesce(in_table_owner,'')) = '' OR table_owner LIKE in_table_owner collate sys.database_default)
AND ((SELECT coalesce(in_table_qualifier,'')) = '' OR table_qualifier LIKE in_table_qualifier collate sys.database_default)
AND ((SELECT coalesce(cs_as_in_table_type,'')) = ''
OR table_type = opt_table
OR table_type = opt_view)
WHERE (in_table_name IS NULL OR table_name LIKE in_table_name collate sys.database_default)
AND (in_table_owner IS NULL OR table_owner LIKE in_table_owner collate sys.database_default)
AND (in_table_qualifier IS NULL OR table_qualifier LIKE in_table_qualifier collate sys.database_default)
AND (cs_as_in_table_type IS NULL OR table_type = opt_table OR table_type = opt_view)
ORDER BY table_qualifier, table_owner, table_name;
ELSE
RETURN query
Expand All @@ -1031,30 +1029,43 @@ CREATE OR REPLACE FUNCTION sys.sp_tables_internal(
CAST(table_type AS sys.varchar(32)) AS TABLE_TYPE,
CAST(remarks AS sys.varchar(254)) AS REMARKS
FROM sys.sp_tables_view
WHERE ((SELECT coalesce(in_table_name,'')) = '' OR table_name = in_table_name collate sys.database_default)
AND ((SELECT coalesce(in_table_owner,'')) = '' OR table_owner = in_table_owner collate sys.database_default)
AND ((SELECT coalesce(in_table_qualifier,'')) = '' OR table_qualifier = in_table_qualifier collate sys.database_default)
AND ((SELECT coalesce(cs_as_in_table_type,'')) = ''
OR table_type = opt_table
OR table_type = opt_view)
WHERE (in_table_name IS NULL OR table_name = in_table_name collate sys.database_default)
AND (in_table_owner IS NULL OR table_owner = in_table_owner collate sys.database_default)
AND (in_table_qualifier IS NULL OR table_qualifier = in_table_qualifier collate sys.database_default)
AND (cs_as_in_table_type IS NULL OR table_type = opt_table OR table_type = opt_view)
ORDER BY table_qualifier, table_owner, table_name;
END IF;
END;
$$
LANGUAGE plpgsql STABLE;


CREATE OR REPLACE PROCEDURE sys.sp_tables (
"@table_name" sys.nvarchar(384) = '',
"@table_owner" sys.nvarchar(384) = '',
"@table_qualifier" sys.sysname = '',
"@table_type" sys.nvarchar(100) = '',
"@table_name" sys.nvarchar(384) = NULL,
"@table_owner" sys.nvarchar(384) = NULL,
"@table_qualifier" sys.sysname = NULL,
"@table_type" sys.nvarchar(100) = NULL,
"@fusepattern" sys.bit = '1')
AS $$
DECLARE @opt_table sys.varchar(16) = '';
DECLARE @opt_view sys.varchar(16) = '';
DECLARE @opt_view sys.varchar(16) = '';
BEGIN
IF (@table_qualifier != '') AND (LOWER(@table_qualifier) != LOWER(sys.db_name()))

-- Handle special case: Enumerate all databases when no filters are applied
IF (@table_qualifier = '%' AND @table_owner = '' AND @table_name = '')
BEGIN
-- Enumerate all databases when owner and name are blank
SELECT
CAST(d.name AS sys.sysname) AS TABLE_QUALIFIER,
CAST(NULL AS sys.sysname) AS TABLE_OWNER,
CAST(NULL AS sys.sysname) AS TABLE_NAME,
CAST(NULL AS sys.varchar(32)) AS TABLE_TYPE,
CAST(NULL AS sys.varchar(254)) AS REMARKS
FROM sys.databases d ORDER BY TABLE_QUALIFIER;

RETURN;
END;

IF (@table_qualifier != '' AND LOWER(@table_qualifier) != LOWER(sys.db_name()))
BEGIN
THROW 33557097, N'The database name component of the object qualifier must be the name of the current database.', 1;
END
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,106 @@ ALTER TABLE sys.babelfish_function_ext DROP CONSTRAINT babelfish_function_ext_pk
ALTER TABLE sys.babelfish_function_ext ADD CONSTRAINT babelfish_function_ext_pkey PRIMARY KEY (funcname, nspname, funcsignature);
RESET allow_system_table_mods;

CREATE OR REPLACE FUNCTION sys.sp_tables_internal(
in_table_name sys.nvarchar(384) = NULL,
in_table_owner sys.nvarchar(384) = NULL,
in_table_qualifier sys.sysname = NULL,
in_table_type sys.varchar(100) = NULL,
in_fusepattern sys.bit = '1')
RETURNS TABLE (
out_table_qualifier sys.sysname,
out_table_owner sys.sysname,
out_table_name sys.sysname,
out_table_type sys.varchar(32),
out_remarks sys.varchar(254)
)
AS $$
DECLARE opt_table sys.varchar(16) = '';
DECLARE opt_view sys.varchar(16) = '';
DECLARE cs_as_in_table_type varchar COLLATE "C" = in_table_type;
BEGIN
IF upper(cs_as_in_table_type) LIKE '%''TABLE''%' THEN
opt_table = 'TABLE';
END IF;
IF upper(cs_as_in_table_type) LIKE '%''VIEW''%' THEN
opt_view = 'VIEW';
END IF;
IF in_fusepattern = 1 THEN
RETURN query
SELECT
CAST(table_qualifier AS sys.sysname) AS TABLE_QUALIFIER,
CAST(table_owner AS sys.sysname) AS TABLE_OWNER,
CAST(table_name AS sys.sysname) AS TABLE_NAME,
CAST(table_type AS sys.varchar(32)) AS TABLE_TYPE,
CAST(remarks AS sys.varchar(254)) AS REMARKS
FROM sys.sp_tables_view
WHERE (in_table_name IS NULL OR table_name LIKE in_table_name collate sys.database_default)
AND (in_table_owner IS NULL OR table_owner LIKE in_table_owner collate sys.database_default)
AND (in_table_qualifier IS NULL OR table_qualifier LIKE in_table_qualifier collate sys.database_default)
AND (cs_as_in_table_type IS NULL OR table_type = opt_table OR table_type = opt_view)
ORDER BY table_qualifier, table_owner, table_name;
ELSE
RETURN query
SELECT
CAST(table_qualifier AS sys.sysname) AS TABLE_QUALIFIER,
CAST(table_owner AS sys.sysname) AS TABLE_OWNER,
CAST(table_name AS sys.sysname) AS TABLE_NAME,
CAST(table_type AS sys.varchar(32)) AS TABLE_TYPE,
CAST(remarks AS sys.varchar(254)) AS REMARKS
FROM sys.sp_tables_view
WHERE (in_table_name IS NULL OR table_name = in_table_name collate sys.database_default)
AND (in_table_owner IS NULL OR table_owner = in_table_owner collate sys.database_default)
AND (in_table_qualifier IS NULL OR table_qualifier = in_table_qualifier collate sys.database_default)
AND (cs_as_in_table_type IS NULL OR table_type = opt_table OR table_type = opt_view)
ORDER BY table_qualifier, table_owner, table_name;
END IF;
END;
$$
LANGUAGE plpgsql STABLE;

CREATE OR REPLACE PROCEDURE sys.sp_tables (
"@table_name" sys.nvarchar(384) = NULL,
"@table_owner" sys.nvarchar(384) = NULL,
"@table_qualifier" sys.sysname = NULL,
"@table_type" sys.nvarchar(100) = NULL,
"@fusepattern" sys.bit = '1')
AS $$
DECLARE @opt_table sys.varchar(16) = '';
DECLARE @opt_view sys.varchar(16) = '';
BEGIN

-- Handle special case: Enumerate all databases when no filters are applied
IF (@table_qualifier = '%' AND @table_owner = '' AND @table_name = '')
BEGIN
-- Enumerate all databases when owner and name are blank
SELECT
CAST(d.name AS sys.sysname) AS TABLE_QUALIFIER,
CAST(NULL AS sys.sysname) AS TABLE_OWNER,
CAST(NULL AS sys.sysname) AS TABLE_NAME,
CAST(NULL AS sys.varchar(32)) AS TABLE_TYPE,
CAST(NULL AS sys.varchar(254)) AS REMARKS
FROM sys.databases d ORDER BY TABLE_QUALIFIER;

RETURN;
END;

IF (@table_qualifier != '' AND LOWER(@table_qualifier) != LOWER(sys.db_name()))
BEGIN
THROW 33557097, N'The database name component of the object qualifier must be the name of the current database.', 1;
END

SELECT
CAST(out_table_qualifier AS sys.sysname) AS TABLE_QUALIFIER,
CAST(out_table_owner AS sys.sysname) AS TABLE_OWNER,
CAST(out_table_name AS sys.sysname) AS TABLE_NAME,
CAST(out_table_type AS sys.varchar(32)) AS TABLE_TYPE,
CAST(out_remarks AS sys.varchar(254)) AS REMARKS
FROM sys.sp_tables_internal(@table_name, @table_owner, @table_qualifier, CAST(@table_type AS varchar(100)), @fusepattern);
END;
$$
LANGUAGE 'pltsql';
GRANT EXECUTE ON PROCEDURE sys.sp_tables TO PUBLIC;

-- BBF_PARTITION_FUNCTION
-- This catalog stores the metadata of partition funtions.
CREATE TABLE sys.babelfish_partition_function
Expand Down
153 changes: 153 additions & 0 deletions test/JDBC/expected/BABEL-SP_TABLES-vu-verify.out
Original file line number Diff line number Diff line change
Expand Up @@ -272,3 +272,156 @@ varchar#!#varchar#!#varchar#!#varchar#!#varchar
babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_t_sptables#!#TABLE#!#<NULL>
~~END~~


exec [sys].sp_tables @table_qualifier = 'babel_sp_tables_vu_prepare_db1';
go
~~START~~
varchar#!#varchar#!#varchar#!#varchar#!#varchar
babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_mytable1#!#TABLE#!#<NULL>
babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_mytable2#!#TABLE#!#<NULL>
babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_t_sotables2#!#TABLE#!#<NULL>
babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_t_sptables#!#TABLE#!#<NULL>
babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_t_sptables2#!#TABLE#!#<NULL>
babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_t_sptables5#!#VIEW#!#<NULL>
babel_sp_tables_vu_prepare_db1#!#dbo#!#sysdatabases#!#VIEW#!#<NULL>
~~END~~



-- special case: when table_qualifier only contains one % wildcard character and 0 or more space characters
-- should enumerate all databases
declare @p1 sys.nvarchar=''
declare @P2 sys.nvarchar=''
declare @P3 sys.nvarchar='% '
declare @P4 sys.nvarchar=NULL
declare @fUsePattern bit = 1
EXEC [sys].sp_tables @p1, @P2, @P3, @P4, @fUsePattern = @fUsePattern
GO
~~START~~
varchar#!#varchar#!#varchar#!#varchar#!#varchar
babel_sp_tables_vu_prepare_db1#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
master#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
msdb#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
tempdb#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
~~END~~


declare @p1 sys.nvarchar=''
declare @P2 sys.nvarchar=''
declare @P3 sys.nvarchar='%'
declare @P4 sys.nvarchar=NULL
declare @fUsePattern bit = 1
EXEC [sys].sp_tables @p1, @P2, @P3, @P4, @fUsePattern = @fUsePattern
GO
~~START~~
varchar#!#varchar#!#varchar#!#varchar#!#varchar
babel_sp_tables_vu_prepare_db1#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
master#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
msdb#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
tempdb#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
~~END~~


EXEC [sys].sp_tables @table_name = '', @table_owner = '', @table_qualifier = '% ', @table_type = NULL, @fUsePattern = 1;
GO
~~START~~
varchar#!#varchar#!#varchar#!#varchar#!#varchar
babel_sp_tables_vu_prepare_db1#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
master#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
msdb#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
tempdb#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
~~END~~


EXEC [sys].sp_tables @table_name = '', @table_owner = '', @table_qualifier = '%', @table_type = NULL, @fUsePattern = 1;
GO
~~START~~
varchar#!#varchar#!#varchar#!#varchar#!#varchar
babel_sp_tables_vu_prepare_db1#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
master#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
msdb#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
tempdb#!#<NULL>#!#<NULL>#!#<NULL>#!#<NULL>
~~END~~


-- should return empty set
declare @p1 sys.nvarchar=''
declare @P2 sys.nvarchar=''
declare @P3 sys.nvarchar=' %'
declare @P4 sys.nvarchar=NULL
declare @fUsePattern bit = 1
EXEC [sys].sp_tables @p1, @P2, @P3, @P4, @fUsePattern = @fUsePattern
GO
~~START~~
varchar#!#varchar#!#varchar#!#varchar#!#varchar
~~END~~


declare @p1 sys.nvarchar=''
declare @P2 sys.nvarchar=''
declare @P3 sys.nvarchar=' % '
declare @P4 sys.nvarchar=NULL
declare @fUsePattern bit = 1
EXEC [sys].sp_tables @p1, @P2, @P3, @P4, @fUsePattern = @fUsePattern
GO
~~START~~
varchar#!#varchar#!#varchar#!#varchar#!#varchar
~~END~~


declare @p1 sys.nvarchar=' '
declare @P2 sys.nvarchar=''
declare @P3 sys.nvarchar=NULL
declare @P4 sys.nvarchar=NULL
declare @fUsePattern bit = 1
EXEC [sys].sp_tables @p1, @P2, @P3, @P4, @fUsePattern = @fUsePattern
GO
~~START~~
varchar#!#varchar#!#varchar#!#varchar#!#varchar
~~END~~


-- should throw error
EXEC [sys].sp_tables @table_name = '', @table_owner = '', @table_qualifier = ' %', @table_type = NULL, @fUsePattern = 1;
GO
~~ERROR (Code: 33557097)~~

~~ERROR (Message: The database name component of the object qualifier must be the name of the current database.)~~


EXEC [sys].sp_tables @table_name = '', @table_owner = '', @table_qualifier = ' % ', @table_type = NULL, @fUsePattern = 1;
GO
~~ERROR (Code: 33557097)~~

~~ERROR (Message: The database name component of the object qualifier must be the name of the current database.)~~


-- special case: when all parameters are empty string, should return empty set
EXEC [sys].sp_tables @table_name = '', @table_owner = '', @table_qualifier = '', @table_type = '', @fUsePattern = 0;
GO
~~START~~
varchar#!#varchar#!#varchar#!#varchar#!#varchar
~~END~~


EXEC [sys].sp_tables @table_name = '', @table_owner = '', @table_qualifier = '', @table_type = '';
GO
~~START~~
varchar#!#varchar#!#varchar#!#varchar#!#varchar
~~END~~


-- special case: when all parameters are NULL, should return all tables and views of current database i.e. babel_sp_tables_vu_prepare_db1
EXEC [sys].sp_tables;
GO
~~START~~
varchar#!#varchar#!#varchar#!#varchar#!#varchar
babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_mytable1#!#TABLE#!#<NULL>
babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_mytable2#!#TABLE#!#<NULL>
babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_t_sotables2#!#TABLE#!#<NULL>
babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_t_sptables#!#TABLE#!#<NULL>
babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_t_sptables2#!#TABLE#!#<NULL>
babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_t_sptables5#!#VIEW#!#<NULL>
babel_sp_tables_vu_prepare_db1#!#dbo#!#sysdatabases#!#VIEW#!#<NULL>
~~END~~

Loading

0 comments on commit 3d684af

Please sign in to comment.