Skip to content

Commit 4f7dfc3

Browse files
authored
Update function signature for OBJECT_DEFINITION (#3862)
Currently OBJECT_DEFINITION function return type is defined as sys.NVARCHAR(4000). This limits the object definition being return to 4000 bytes pair. This PR removes this limitation. Task: BABEL-5057 Signed-off-by: Shard Gupta <shardga@amazon.com>
1 parent 3ef7dc1 commit 4f7dfc3

8 files changed

+925
-8
lines changed

contrib/babelfishpg_tsql/sql/sys_functions.sql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4403,11 +4403,11 @@ RETURNS sys.SYSNAME AS
44034403
'babelfishpg_tsql', 'object_schema_name'
44044404
LANGUAGE C STABLE;
44054405

4406-
CREATE OR REPLACE FUNCTION OBJECT_DEFINITION(IN object_id INT)
4407-
RETURNS sys.NVARCHAR(4000)
4406+
CREATE OR REPLACE FUNCTION sys.OBJECT_DEFINITION(IN object_id INT)
4407+
RETURNS sys.NVARCHAR
44084408
AS $$
44094409
DECLARE
4410-
definition sys.nvarchar(4000);
4410+
definition sys.NVARCHAR;
44114411
BEGIN
44124412

44134413
definition = (SELECT cc.definition FROM sys.check_constraints cc WHERE cc.object_id = $1);

contrib/babelfishpg_tsql/sql/upgrades/babelfishpg_tsql--4.6.0--4.7.0.sql

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -736,6 +736,31 @@ WHERE sch.nspname = t.typnamespace::regnamespace::name
736736
AND t.typtypmod = -1
737737
AND t.typtype = 'd';
738738

739+
CREATE OR REPLACE FUNCTION sys.OBJECT_DEFINITION(IN object_id INT)
740+
RETURNS sys.NVARCHAR
741+
AS $$
742+
DECLARE
743+
definition sys.NVARCHAR;
744+
BEGIN
745+
746+
definition = (SELECT cc.definition FROM sys.check_constraints cc WHERE cc.object_id = $1);
747+
IF (definition IS NULL)
748+
THEN
749+
definition = (SELECT dc.definition FROM sys.default_constraints dc WHERE dc.object_id = $1);
750+
IF (definition IS NULL)
751+
THEN
752+
definition = (SELECT asm.definition FROM sys.all_sql_modules asm WHERE asm.object_id = $1);
753+
IF (definition IS NULL)
754+
THEN
755+
RETURN NULL;
756+
END IF;
757+
END IF;
758+
END IF;
759+
760+
RETURN definition;
761+
END;
762+
$$
763+
LANGUAGE plpgsql STABLE;
739764
create or replace function sys.PATINDEX(in pattern varchar, in expression varchar) returns bigint as
740765
$body$
741766
declare

test/JDBC/expected/BABEL_OBJECT_DEFINITION-vu-cleanup.out

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,19 @@ DROP PROCEDURE if exists object_definition_procedure;
5151
GO
5252
DROP FUNCTION if exists object_definition_function();
5353
GO
54+
55+
-- Clean up
56+
DROP FUNCTION dbo.object_definition_LargeFunction
57+
GO
58+
DROP VIEW dbo.object_definition_LargeView
59+
GO
60+
DROP PROCEDURE dbo.object_definition_Largeproc
61+
GO
62+
DROP VIEW dbo.object_definition_dependency_view
63+
GO
64+
DROP PROCEDURE dbo.object_definition_dependency_proc
65+
GO
66+
DROP FUNCTION dbo.object_definition_dependency_func
67+
GO
68+
DROP PROCEDURE dbo.object_definition_dependent_proc
69+
GO

test/JDBC/expected/BABEL_OBJECT_DEFINITION-vu-prepare.out

Lines changed: 375 additions & 1 deletion
Large diffs are not rendered by default.

test/JDBC/expected/BABEL_OBJECT_DEFINITION-vu-verify.out

Lines changed: 79 additions & 1 deletion
Large diffs are not rendered by default.

test/JDBC/input/BABEL_OBJECT_DEFINITION-vu-cleanup.mix

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,20 @@ GO
5050
DROP PROCEDURE if exists object_definition_procedure;
5151
GO
5252
DROP FUNCTION if exists object_definition_function();
53-
GO
53+
GO
54+
55+
-- Clean up
56+
DROP FUNCTION dbo.object_definition_LargeFunction
57+
GO
58+
DROP VIEW dbo.object_definition_LargeView
59+
GO
60+
DROP PROCEDURE dbo.object_definition_Largeproc
61+
GO
62+
DROP VIEW dbo.object_definition_dependency_view
63+
GO
64+
DROP PROCEDURE dbo.object_definition_dependency_proc
65+
GO
66+
DROP FUNCTION dbo.object_definition_dependency_func
67+
GO
68+
DROP PROCEDURE dbo.object_definition_dependent_proc
69+
GO

test/JDBC/input/BABEL_OBJECT_DEFINITION-vu-prepare.mix

Lines changed: 375 additions & 1 deletion
Large diffs are not rendered by default.

test/JDBC/input/BABEL_OBJECT_DEFINITION-vu-verify.mix

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,4 +132,38 @@ go
132132
ALTER function object_definition_function() RETURNS [VARCHAR](6000) AS BEGIN DECLARE @storeOriginalQuery_var [varchar] (6000) RETURN @storeOriginalQuery_var END
133133
go
134134
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'object_definition_function';
135-
go
135+
go
136+
137+
-- Test OBJECT_DEFINITION on the large stored procedure
138+
SELECT LEN(OBJECT_DEFINITION(OBJECT_ID('dbo.object_definition_Largeproc'))) AS DefinitionLength
139+
GO
140+
141+
SELECT OBJECT_DEFINITION(OBJECT_ID('dbo.object_definition_Largeproc'))
142+
GO
143+
144+
-- Test OBJECT_DEFINITION on the large view
145+
SELECT LEN(OBJECT_DEFINITION(OBJECT_ID('dbo.object_definition_LargeView'))) AS DefinitionLength
146+
GO
147+
148+
SELECT OBJECT_DEFINITION(OBJECT_ID('dbo.object_definition_LargeView'))
149+
GO
150+
151+
-- Test OBJECT_DEFINITION on the large function
152+
SELECT LEN(OBJECT_DEFINITION(OBJECT_ID('dbo.object_definition_LargeFunction'))) AS DefinitionLength
153+
GO
154+
155+
SELECT OBJECT_DEFINITION(OBJECT_ID('dbo.object_definition_LargeFunction'))
156+
GO
157+
158+
-- Test the dependency view
159+
SELECT * FROM dbo.object_definition_dependency_view WHERE name = 'dbo.object_definition_dependent_proc'
160+
GO
161+
162+
-- Test the new dependency procedure
163+
EXEC dbo.object_definition_dependency_proc 'dbo.object_definition_dependent_proc'
164+
GO
165+
166+
-- Test the dependency function
167+
SELECT dbo.object_definition_dependency_func('dbo.object_definition_dependent_proc') AS FunctionResult
168+
GO
169+

0 commit comments

Comments
 (0)