Skip to content

Commit 8f59ead

Browse files
committed
test: separate DBMS_OUTPUT test cases to reveal actual behavior
- Split combined tests into individual test cases per method - Update implementation status documentation based on test results - PUT_LINE, PUT, ENABLE work correctly - NEW_LINE, DISABLE fail (no-arg procedure parser limitation)
1 parent 28c7cd3 commit 8f59ead

2 files changed

Lines changed: 95 additions & 20 deletions

File tree

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

Lines changed: 57 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,35 +28,64 @@ END;
2828
INFO: Line 1
2929
INFO: Line 2
3030
INFO: Line 3
31-
-- Test 4: PUT procedure (outputs immediately, no buffering)
31+
-- Test 4a: PUT procedure
32+
BEGIN
33+
DBMS_OUTPUT.PUT('Part 1');
34+
END;
35+
/
36+
INFO: Part 1
37+
-- Test 4b: Multiple PUT calls
3238
BEGIN
3339
DBMS_OUTPUT.PUT('Part 1');
3440
DBMS_OUTPUT.PUT(' Part 2');
41+
END;
42+
/
43+
INFO: Part 1
44+
INFO: Part 2
45+
-- Test 4c: NEW_LINE procedure
46+
BEGIN
3547
DBMS_OUTPUT.NEW_LINE;
3648
END;
3749
/
3850
ERROR: syntax error at end of input
39-
LINE 5: END
51+
LINE 3: END
4052
^
4153
QUERY: BEGIN
42-
DBMS_OUTPUT.PUT('Part 1');
43-
DBMS_OUTPUT.PUT(' Part 2');
4454
DBMS_OUTPUT.NEW_LINE;
4555
END
46-
-- Test 5: ENABLE and DISABLE (no-ops but should not error)
56+
-- Test 5a: ENABLE procedure
57+
BEGIN
58+
DBMS_OUTPUT.ENABLE(20000);
59+
END;
60+
/
61+
-- Test 5b: ENABLE with PUT_LINE
4762
BEGIN
4863
DBMS_OUTPUT.ENABLE(20000);
4964
DBMS_OUTPUT.PUT_LINE('After enable');
65+
END;
66+
/
67+
INFO: After enable
68+
-- Test 5c: DISABLE procedure
69+
BEGIN
70+
DBMS_OUTPUT.DISABLE;
71+
END;
72+
/
73+
ERROR: syntax error at end of input
74+
LINE 3: END
75+
^
76+
QUERY: BEGIN
77+
DBMS_OUTPUT.DISABLE;
78+
END
79+
-- Test 5d: DISABLE with PUT_LINE
80+
BEGIN
5081
DBMS_OUTPUT.DISABLE;
5182
DBMS_OUTPUT.PUT_LINE('After disable');
5283
END;
5384
/
5485
ERROR: syntax error at end of input
55-
LINE 5: DBMS_OUTPUT.PUT_LINE('After disable');
86+
LINE 3: DBMS_OUTPUT.PUT_LINE('After disable');
5687
^
5788
QUERY: BEGIN
58-
DBMS_OUTPUT.ENABLE(20000);
59-
DBMS_OUTPUT.PUT_LINE('After enable');
6089
DBMS_OUTPUT.DISABLE;
6190
DBMS_OUTPUT.PUT_LINE('After disable');
6291
END
@@ -135,7 +164,23 @@ BEGIN
135164
END;
136165
/
137166
INFO: ABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
138-
-- Note: This implementation does NOT support:
139-
-- - GET_LINE / GET_LINES (not implemented)
140-
-- - Buffering (output is immediate)
141-
-- - Actual ENABLE/DISABLE functionality (always enabled)
167+
--
168+
-- Oracle DBMS_OUTPUT Package Methods (per Oracle 12c documentation):
169+
-- 1. ENABLE(buffer_size) - Enable output with buffer size
170+
-- 2. DISABLE - Disable output and purge buffer
171+
-- 3. PUT(text) - Place partial line in buffer
172+
-- 4. PUT_LINE(text) - Place complete line in buffer
173+
-- 5. NEW_LINE - Put end-of-line marker in buffer
174+
-- 6. GET_LINE(line, status) - Retrieve single line from buffer
175+
-- 7. GET_LINES(lines, numlines) - Retrieve multiple lines from buffer
176+
--
177+
-- IvorySQL Current Implementation Status:
178+
-- ✓ PUT_LINE(text) - Fully working (uses RAISE INFO)
179+
-- ✗ PUT(text) - Syntax error
180+
-- ✗ NEW_LINE - Syntax error
181+
-- ✗ ENABLE(buffer_size) - Syntax error
182+
-- ✗ DISABLE - Syntax error
183+
-- ✗ GET_LINE(line, status) - Not implemented
184+
-- ✗ GET_LINES(lines, numlines) - Not implemented
185+
--
186+
-- Note: Current implementation outputs immediately (no buffering)

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

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,46 @@ BEGIN
2626
END;
2727
/
2828

29-
-- Test 4: PUT procedure (outputs immediately, no buffering)
29+
-- Test 4a: PUT procedure
30+
BEGIN
31+
DBMS_OUTPUT.PUT('Part 1');
32+
END;
33+
/
34+
35+
-- Test 4b: Multiple PUT calls
3036
BEGIN
3137
DBMS_OUTPUT.PUT('Part 1');
3238
DBMS_OUTPUT.PUT(' Part 2');
39+
END;
40+
/
41+
42+
-- Test 4c: NEW_LINE procedure
43+
BEGIN
3344
DBMS_OUTPUT.NEW_LINE;
3445
END;
3546
/
3647

37-
-- Test 5: ENABLE and DISABLE (no-ops but should not error)
48+
-- Test 5a: ENABLE procedure
49+
BEGIN
50+
DBMS_OUTPUT.ENABLE(20000);
51+
END;
52+
/
53+
54+
-- Test 5b: ENABLE with PUT_LINE
3855
BEGIN
3956
DBMS_OUTPUT.ENABLE(20000);
4057
DBMS_OUTPUT.PUT_LINE('After enable');
58+
END;
59+
/
60+
61+
-- Test 5c: DISABLE procedure
62+
BEGIN
63+
DBMS_OUTPUT.DISABLE;
64+
END;
65+
/
66+
67+
-- Test 5d: DISABLE with PUT_LINE
68+
BEGIN
4169
DBMS_OUTPUT.DISABLE;
4270
DBMS_OUTPUT.PUT_LINE('After disable');
4371
END;
@@ -132,12 +160,14 @@ END;
132160
-- 7. GET_LINES(lines, numlines) - Retrieve multiple lines from buffer
133161
--
134162
-- IvorySQL Current Implementation Status:
135-
-- ✓ PUT_LINE(text) - Fully working (uses RAISE INFO)
136-
-- PUT(text) - Syntax error
137-
-- ✗ NEW_LINE - Syntax error
138-
-- ENABLE(buffer_size) - Syntax error
139-
-- ✗ DISABLE - Syntax error
163+
-- ✓ PUT_LINE(text) - Works (outputs via RAISE INFO)
164+
-- PUT(text) - Works (outputs via RAISE INFO)
165+
-- ✗ NEW_LINE - Syntax error (no-arg procedure call)
166+
-- ENABLE(buffer_size) - Works (no-op)
167+
-- ✗ DISABLE - Syntax error (no-arg procedure call)
140168
-- ✗ GET_LINE(line, status) - Not implemented
141169
-- ✗ GET_LINES(lines, numlines) - Not implemented
142170
--
143-
-- Note: Current implementation outputs immediately (no buffering)
171+
-- Note:
172+
-- - Output is immediate (no buffering)
173+
-- - NEW_LINE and DISABLE fail due to PL/iSQL parser limitation with no-arg procedures

0 commit comments

Comments
 (0)