Skip to content

Commit 26ba887

Browse files
committed
refactor: move DBMS_OUTPUT from ivorysql_ora to plisql
Move DBMS_OUTPUT package to plisql extension for clean module dependencies: - ivorysql_ora no longer depends on plisql for PACKAGE syntax - DBMS_OUTPUT now lives in plisql alongside future DBMS_UTILITY - Change VARCHAR2 to TEXT (casts exist for transparency) - Enable Oracle mode in initdb when loading plisql extension - Update tests to use TEXT type
1 parent dc0d36e commit 26ba887

File tree

10 files changed

+128
-135
lines changed

10 files changed

+128
-135
lines changed

contrib/ivorysql_ora/Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ OBJS = \
2525
src/builtin_functions/datetime_datatype_functions.o \
2626
src/builtin_functions/numeric_datatype_functions.o \
2727
src/builtin_functions/misc_functions.o \
28-
src/builtin_functions/dbms_output.o \
2928
src/merge/ora_merge.o \
3029
src/sysview/sysview_functions.o \
3130
src/xml_functions/ora_xml_functions.o
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
src/datatype/datatype
22
src/builtin_functions/builtin_functions
3-
src/builtin_functions/dbms_output
43
src/sysview/sysview
54
src/xml_functions/xml_functions

contrib/ivorysql_ora/src/builtin_functions/dbms_output--1.0.sql

Lines changed: 0 additions & 114 deletions
This file was deleted.

src/bin/initdb/initdb.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2091,7 +2091,10 @@ load_plpgsql(FILE *cmdfd)
20912091
static void
20922092
load_plisql(FILE *cmdfd)
20932093
{
2094+
/* Switch to oracle mode to allow CREATE PACKAGE in extension SQL */
2095+
PG_CMD_PUTS("set ivorysql.compatible_mode to oracle;\n\n");
20942096
PG_CMD_PUTS("CREATE EXTENSION plisql;\n\n");
2097+
PG_CMD_PUTS("set ivorysql.compatible_mode to pg;\n\n");
20952098
}
20962099

20972100
static void

src/pl/plisql/src/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ rpath =
4040
OBJS = \
4141
$(WIN32RES) \
4242
pl_comp.o \
43+
pl_dbms_output.o \
4344
pl_exec.o \
4445
pl_funcs.o \
4546
pl_gram.o \

src/pl/plisql/src/expected/plisql_dbms_output.out

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
--
22
-- Tests for DBMS_OUTPUT package
33
--
4-
-- Note: Use Oracle data types (VARCHAR2, INTEGER) for OUT parameters in Oracle mode
4+
-- Note: DBMS_OUTPUT uses TEXT type for string parameters
55
--
66
-- Enable output with default buffer size
77
CALL dbms_output.enable();
@@ -191,9 +191,9 @@ CALL dbms_output.put_line('Second enable');
191191
CALL dbms_output.enable();
192192
CALL dbms_output.put_line('Before final disable');
193193
CALL dbms_output.disable();
194-
-- Test GET_LINE (use Oracle types: VARCHAR2, INTEGER)
194+
-- Test GET_LINE
195195
DECLARE
196-
line VARCHAR2;
196+
line TEXT;
197197
status INTEGER;
198198
BEGIN
199199
dbms_output.enable();
@@ -207,9 +207,9 @@ END;
207207
/
208208
NOTICE: Line: Test GET_LINE, Status: 0
209209
NOTICE: Empty line: <NULL>, Status: 1
210-
-- Test GET_LINES (use Oracle types: VARCHAR2[], INTEGER)
210+
-- Test GET_LINES
211211
DECLARE
212-
lines VARCHAR2[];
212+
lines TEXT[];
213213
numlines INTEGER := 10;
214214
BEGIN
215215
dbms_output.enable();

src/pl/plisql/src/expected/plisql_nested_subproc2.out

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3996,11 +3996,6 @@ begin
39963996
end;
39973997
/
39983998
INFO: var1 = 2
3999-
ERROR: schema "dbms_output" does not exist
4000-
LINE 1: CALL dbms_output.put_line('xiexie')
4001-
^
4002-
QUERY: CALL dbms_output.put_line('xiexie')
4003-
CONTEXT: PL/iSQL function inline_code_block line 5 at CALL
40043999
create or replace function test.test_f(id integer) return integer is
40054000
var1 integer;
40064001
function test_f(id integer) return integer;

contrib/ivorysql_ora/src/builtin_functions/dbms_output.c renamed to src/pl/plisql/src/pl_dbms_output.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*
16-
* dbms_output.c
16+
* pl_dbms_output.c
1717
*
1818
* This file contains the native implementation of Oracle's DBMS_OUTPUT
1919
* package for IvorySQL.
2020
*
2121
* Provides session-level buffering for PUT_LINE, PUT, NEW_LINE,
2222
* GET_LINE, and GET_LINES functions with full Oracle compatibility.
2323
*
24-
* contrib/ivorysql_ora/src/builtin_functions/dbms_output.c
24+
* src/pl/plisql/src/pl_dbms_output.c
2525
*
2626
*-------------------------------------------------------------------------
2727
*/
@@ -406,7 +406,7 @@ ora_dbms_output_new_line(PG_FUNCTION_ARGS)
406406
* ora_dbms_output_get_line
407407
*
408408
* Retrieve one line from buffer.
409-
* Returns: (line VARCHAR2, status INTEGER)
409+
* Returns: (line TEXT, status INTEGER)
410410
* - status = 0: success, line contains data
411411
* - status = 1: no more lines, line is NULL (Oracle behavior)
412412
*/
@@ -452,7 +452,7 @@ ora_dbms_output_get_line(PG_FUNCTION_ARGS)
452452
*
453453
* Retrieve multiple lines from buffer.
454454
* Input: numlines (max lines to retrieve)
455-
* Returns: (lines VARCHAR2[], actual_count INTEGER)
455+
* Returns: (lines TEXT[], actual_count INTEGER)
456456
* - actual_count is set to number of lines actually retrieved
457457
*/
458458
Datum

src/pl/plisql/src/plisql--1.0.sql

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,113 @@
2121
ALTER LANGUAGE plisql OWNER TO @extowner@;
2222

2323
COMMENT ON LANGUAGE plisql IS 'PL/iSQL procedural language';
24+
25+
--
26+
-- DBMS_OUTPUT Package
27+
--
28+
-- Oracle-compatible output buffering package.
29+
-- Provides PUT_LINE, PUT, NEW_LINE, GET_LINE, and GET_LINES functions.
30+
--
31+
32+
-- Register C functions
33+
CREATE FUNCTION sys.ora_dbms_output_enable(buffer_size INTEGER DEFAULT 20000)
34+
RETURNS VOID
35+
AS 'MODULE_PATHNAME', 'ora_dbms_output_enable'
36+
LANGUAGE C VOLATILE;
37+
38+
CREATE FUNCTION sys.ora_dbms_output_disable()
39+
RETURNS VOID
40+
AS 'MODULE_PATHNAME', 'ora_dbms_output_disable'
41+
LANGUAGE C VOLATILE;
42+
43+
CREATE FUNCTION sys.ora_dbms_output_put_line(a TEXT)
44+
RETURNS VOID
45+
AS 'MODULE_PATHNAME', 'ora_dbms_output_put_line'
46+
LANGUAGE C VOLATILE;
47+
48+
CREATE FUNCTION sys.ora_dbms_output_put(a TEXT)
49+
RETURNS VOID
50+
AS 'MODULE_PATHNAME', 'ora_dbms_output_put'
51+
LANGUAGE C VOLATILE;
52+
53+
CREATE FUNCTION sys.ora_dbms_output_new_line()
54+
RETURNS VOID
55+
AS 'MODULE_PATHNAME', 'ora_dbms_output_new_line'
56+
LANGUAGE C VOLATILE;
57+
58+
-- Create composite types for GET_LINE and GET_LINES return values
59+
CREATE TYPE sys.dbms_output_line AS (
60+
line TEXT,
61+
status INTEGER
62+
);
63+
64+
CREATE TYPE sys.dbms_output_lines AS (
65+
lines TEXT[],
66+
numlines INTEGER
67+
);
68+
69+
CREATE FUNCTION sys.ora_dbms_output_get_line()
70+
RETURNS sys.dbms_output_line
71+
AS 'MODULE_PATHNAME', 'ora_dbms_output_get_line'
72+
LANGUAGE C VOLATILE;
73+
74+
CREATE FUNCTION sys.ora_dbms_output_get_lines(numlines INTEGER)
75+
RETURNS sys.dbms_output_lines
76+
AS 'MODULE_PATHNAME', 'ora_dbms_output_get_lines'
77+
LANGUAGE C VOLATILE;
78+
79+
-- Create DBMS_OUTPUT package
80+
CREATE OR REPLACE PACKAGE dbms_output IS
81+
PROCEDURE enable(buffer_size INTEGER DEFAULT 20000);
82+
PROCEDURE disable;
83+
PROCEDURE put_line(a TEXT);
84+
PROCEDURE put(a TEXT);
85+
PROCEDURE new_line;
86+
PROCEDURE get_line(line OUT TEXT, status OUT INTEGER);
87+
PROCEDURE get_lines(lines OUT TEXT[], numlines IN OUT INTEGER);
88+
END dbms_output;
89+
90+
CREATE OR REPLACE PACKAGE BODY dbms_output IS
91+
92+
PROCEDURE enable(buffer_size INTEGER DEFAULT NULL) IS
93+
BEGIN
94+
PERFORM sys.ora_dbms_output_enable(buffer_size);
95+
END;
96+
97+
PROCEDURE disable IS
98+
BEGIN
99+
PERFORM sys.ora_dbms_output_disable();
100+
END;
101+
102+
PROCEDURE put_line(a TEXT) IS
103+
BEGIN
104+
PERFORM sys.ora_dbms_output_put_line(a);
105+
END;
106+
107+
PROCEDURE put(a TEXT) IS
108+
BEGIN
109+
PERFORM sys.ora_dbms_output_put(a);
110+
END;
111+
112+
PROCEDURE new_line IS
113+
BEGIN
114+
PERFORM sys.ora_dbms_output_new_line();
115+
END;
116+
117+
PROCEDURE get_line(line OUT TEXT, status OUT INTEGER) IS
118+
result sys.dbms_output_line;
119+
BEGIN
120+
SELECT * INTO result FROM sys.ora_dbms_output_get_line();
121+
line := result.line;
122+
status := result.status;
123+
END;
124+
125+
PROCEDURE get_lines(lines OUT TEXT[], numlines IN OUT INTEGER) IS
126+
result sys.dbms_output_lines;
127+
BEGIN
128+
SELECT * INTO result FROM sys.ora_dbms_output_get_lines(numlines);
129+
lines := result.lines;
130+
numlines := result.numlines;
131+
END;
132+
133+
END dbms_output;

src/pl/plisql/src/sql/plisql_dbms_output.sql

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
--
22
-- Tests for DBMS_OUTPUT package
33
--
4-
-- Note: Use Oracle data types (VARCHAR2, INTEGER) for OUT parameters in Oracle mode
4+
-- Note: DBMS_OUTPUT uses TEXT type for string parameters
55
--
66

77
-- Enable output with default buffer size
@@ -207,9 +207,9 @@ CALL dbms_output.enable();
207207
CALL dbms_output.put_line('Before final disable');
208208
CALL dbms_output.disable();
209209

210-
-- Test GET_LINE (use Oracle types: VARCHAR2, INTEGER)
210+
-- Test GET_LINE
211211
DECLARE
212-
line VARCHAR2;
212+
line TEXT;
213213
status INTEGER;
214214
BEGIN
215215
dbms_output.enable();
@@ -222,9 +222,9 @@ BEGIN
222222
END;
223223
/
224224

225-
-- Test GET_LINES (use Oracle types: VARCHAR2[], INTEGER)
225+
-- Test GET_LINES
226226
DECLARE
227-
lines VARCHAR2[];
227+
lines TEXT[];
228228
numlines INTEGER := 10;
229229
BEGIN
230230
dbms_output.enable();

0 commit comments

Comments
 (0)