Skip to content

Commit edad3e7

Browse files
authored
Update function signature for OBJECT_DEFINITION (#3814)
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 edee5c2 commit edad3e7

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
@@ -4408,11 +4408,11 @@ RETURNS sys.SYSNAME AS
44084408
'babelfishpg_tsql', 'object_schema_name'
44094409
LANGUAGE C STABLE;
44104410

4411-
CREATE OR REPLACE FUNCTION OBJECT_DEFINITION(IN object_id INT)
4412-
RETURNS sys.NVARCHAR(4000)
4411+
CREATE OR REPLACE FUNCTION sys.OBJECT_DEFINITION(IN object_id INT)
4412+
RETURNS sys.NVARCHAR
44134413
AS $$
44144414
DECLARE
4415-
definition sys.nvarchar(4000);
4415+
definition sys.NVARCHAR;
44164416
BEGIN
44174417

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

contrib/babelfishpg_tsql/sql/upgrades/babelfishpg_tsql--5.2.0--5.3.0.sql

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

767+
CREATE OR REPLACE FUNCTION sys.OBJECT_DEFINITION(IN object_id INT)
768+
RETURNS sys.NVARCHAR
769+
AS $$
770+
DECLARE
771+
definition sys.NVARCHAR;
772+
BEGIN
773+
774+
definition = (SELECT cc.definition FROM sys.check_constraints cc WHERE cc.object_id = $1);
775+
IF (definition IS NULL)
776+
THEN
777+
definition = (SELECT dc.definition FROM sys.default_constraints dc WHERE dc.object_id = $1);
778+
IF (definition IS NULL)
779+
THEN
780+
definition = (SELECT asm.definition FROM sys.all_sql_modules asm WHERE asm.object_id = $1);
781+
IF (definition IS NULL)
782+
THEN
783+
RETURN NULL;
784+
END IF;
785+
END IF;
786+
END IF;
787+
788+
RETURN definition;
789+
END;
790+
$$
791+
LANGUAGE plpgsql STABLE;
767792
create or replace function sys.PATINDEX(in pattern varchar, in expression varchar) returns bigint as
768793
$body$
769794
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)