@@ -5,6 +5,46 @@ PROMPT sqlplus_header.sql;
55WHENEVER SQLERROR EXIT -99;
66WHENEVER OSERROR EXIT -98;
77SET DEFINE OFF;
8+ --
9+ --*************************--
10+ PROMPT DZ_JSON_CONSTANTS.pks;
11+
12+ CREATE OR REPLACE PACKAGE dz_json_constants
13+ AUTHID CURRENT_USER
14+ AS
15+ -----------------------------------------------------------------------------
16+ -----------------------------------------------------------------------------
17+ /*
18+ Constant: dz_json_constants.c_json_unescaped_slashes
19+ Flag to control whether to escape forward slashes. Certain libraries may
20+ or may not require such escaping.
21+ */
22+ c_json_unescaped_slashes CONSTANT BOOLEAN := TRUE;
23+
24+ -----------------------------------------------------------------------------
25+ -----------------------------------------------------------------------------
26+ /*
27+ Constant: dz_json_constants.c_json_unescaped_unicode
28+ Flag to control escaping of unicode characters into /u format. Set to TRUE
29+ to leave all unicode text as received. Note this is not recommended for
30+ most JSON handling.
31+ */
32+ c_json_unescaped_unicode CONSTANT BOOLEAN := FALSE;
33+
34+ -----------------------------------------------------------------------------
35+ -----------------------------------------------------------------------------
36+ /*
37+ Constant: dz_json_constants.c_json_escape_all_nonascii
38+ Flag to control whether to escape all non-ascii characters into /u format.
39+ May be helpful for certain character sets or use cases.
40+ */
41+ c_json_escape_all_nonascii CONSTANT BOOLEAN := FALSE;
42+
43+ END dz_json_constants;
44+ /
45+
46+ GRANT EXECUTE ON dz_json_constants TO PUBLIC;
47+
848--
949--*************************--
1050PROMPT DZ_JSON_UTIL.pks;
@@ -1667,16 +1707,16 @@ AS
16671707 /*
16681708 header: DZ_JSON
16691709
1670- - Build ID: 37
1671- - Change Set: 34d20bf89b8269ad25851e24544c58537d74501c
1710+ - Build ID: 51
1711+ - Change Set: acc78b726846553f324d43d4951bf24453c71115
16721712
16731713 Utility for the creation of JSON and GeoJSON from Oracle data types and
16741714 structures. Support for the deserialization of JSON is not implemented.
16751715
16761716 */
16771717 -----------------------------------------------------------------------------
16781718 -----------------------------------------------------------------------------
1679-
1719+
16801720 -----------------------------------------------------------------------------
16811721 -----------------------------------------------------------------------------
16821722 /*
@@ -4293,56 +4333,72 @@ AS
42934333 RETURN 'null';
42944334
42954335 ELSE
4336+
4337+ IF NOT dz_json_constants.c_json_unescaped_slashes
4338+ THEN
4339+ str_output := REGEXP_REPLACE(str_output,'/','\/');
4340+
4341+ END IF;
4342+
42964343 str_output := REGEXP_REPLACE(str_output,'\\' ,'\\\');
4297- str_output := REGEXP_REPLACE(str_output,'/' ,'\/');
42984344 str_output := REGEXP_REPLACE(str_output,'"' ,'\"');
4299-
43004345 str_output := REGEXP_REPLACE(str_output,CHR(8) ,'\b');
43014346 str_output := REGEXP_REPLACE(str_output,CHR(9) ,'\t');
43024347 str_output := REGEXP_REPLACE(str_output,CHR(10) ,'\n');
43034348 str_output := REGEXP_REPLACE(str_output,CHR(12) ,'\f');
43044349 str_output := REGEXP_REPLACE(str_output,CHR(13) ,'');
43054350 str_output := REGEXP_REPLACE(str_output,CHR(21) ,'\u0015');
43064351
4307- str_output := REGEXP_REPLACE(str_output,UNISTR('\00AE'),'\u00AE');
4308- str_output := REGEXP_REPLACE(str_output,UNISTR('\00B0'),'\u00B0');
4309- str_output := REGEXP_REPLACE(str_output,UNISTR('\00B1'),'\u00B1');
4310- str_output := REGEXP_REPLACE(str_output,UNISTR('\00B2'),'\u00B2');
4311- str_output := REGEXP_REPLACE(str_output,UNISTR('\00B3'),'\u00B3');
4312- str_output := REGEXP_REPLACE(str_output,UNISTR('\00B4'),'\u00B4');
4313- str_output := REGEXP_REPLACE(str_output,UNISTR('\00B5'),'\u00B5');
4314- str_output := REGEXP_REPLACE(str_output,UNISTR('\00B7'),'\u00B7');
4315- str_output := REGEXP_REPLACE(str_output,UNISTR('\00BC'),'\u00BC');
4316- str_output := REGEXP_REPLACE(str_output,UNISTR('\00BD'),'\u00BD');
4317- str_output := REGEXP_REPLACE(str_output,UNISTR('\00C9'),'\u00C9');
4318- str_output := REGEXP_REPLACE(str_output,UNISTR('\00D7'),'\u00D7');
4319- str_output := REGEXP_REPLACE(str_output,UNISTR('\00E0'),'\u00E0');
4320- str_output := REGEXP_REPLACE(str_output,UNISTR('\00E1'),'\u00E1');
4321- str_output := REGEXP_REPLACE(str_output,UNISTR('\00E2'),'\u00E2');
4322- str_output := REGEXP_REPLACE(str_output,UNISTR('\00E3'),'\u00E3');
4323- str_output := REGEXP_REPLACE(str_output,UNISTR('\00E7'),'\u00E7');
4324- str_output := REGEXP_REPLACE(str_output,UNISTR('\00E8'),'\u00E8');
4325- str_output := REGEXP_REPLACE(str_output,UNISTR('\00E9'),'\u00E9');
4326- str_output := REGEXP_REPLACE(str_output,UNISTR('\00EA'),'\u00EA');
4327- str_output := REGEXP_REPLACE(str_output,UNISTR('\00EB'),'\u00EB');
4328- str_output := REGEXP_REPLACE(str_output,UNISTR('\00EC'),'\u00EC');
4329- str_output := REGEXP_REPLACE(str_output,UNISTR('\00ED'),'\u00ED');
4330- str_output := REGEXP_REPLACE(str_output,UNISTR('\00D1'),'\u00D1');
4331- str_output := REGEXP_REPLACE(str_output,UNISTR('\00F3'),'\u00F3');
4332- str_output := REGEXP_REPLACE(str_output,UNISTR('\00F6'),'\u00F6');
4333- str_output := REGEXP_REPLACE(str_output,UNISTR('\0161'),'\u0161');
4334- str_output := REGEXP_REPLACE(str_output,UNISTR('\2013'),'\u2013');
4335- str_output := REGEXP_REPLACE(str_output,UNISTR('\2014'),'\u2014');
4336- str_output := REGEXP_REPLACE(str_output,UNISTR('\2015'),'\u2015');
4337- str_output := REGEXP_REPLACE(str_output,UNISTR('\2018'),'\u2018');
4338- str_output := REGEXP_REPLACE(str_output,UNISTR('\2019'),'\u2019');
4339- str_output := REGEXP_REPLACE(str_output,UNISTR('\201B'),'\u201B');
4340- str_output := REGEXP_REPLACE(str_output,UNISTR('\201C'),'\u201C');
4341- str_output := REGEXP_REPLACE(str_output,UNISTR('\201D'),'\u201D');
4342- str_output := REGEXP_REPLACE(str_output,UNISTR('\201F'),'\u201F');
4343- str_output := REGEXP_REPLACE(str_output,UNISTR('\2022'),'\u2022');
4344- str_output := REGEXP_REPLACE(str_output,UNISTR('\20AC'),'\u20AC');
4345- str_output := REGEXP_REPLACE(str_output,UNISTR('\2122'),'\u2122');
4352+ IF NOT dz_json_constants.c_json_unescaped_unicode
4353+ THEN
4354+ IF dz_json_constants.c_json_escape_all_nonascii
4355+ THEN
4356+ str_output := REGEXP_REPLACE(ASCIISTR(str_output),'\\','\\u');
4357+
4358+ ELSE
4359+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00AE'),'\u00AE');
4360+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00B0'),'\u00B0');
4361+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00B1'),'\u00B1');
4362+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00B2'),'\u00B2');
4363+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00B3'),'\u00B3');
4364+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00B4'),'\u00B4');
4365+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00B5'),'\u00B5');
4366+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00B7'),'\u00B7');
4367+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00BC'),'\u00BC');
4368+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00BD'),'\u00BD');
4369+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00C9'),'\u00C9');
4370+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00D7'),'\u00D7');
4371+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00E0'),'\u00E0');
4372+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00E1'),'\u00E1');
4373+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00E2'),'\u00E2');
4374+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00E3'),'\u00E3');
4375+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00E7'),'\u00E7');
4376+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00E8'),'\u00E8');
4377+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00E9'),'\u00E9');
4378+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00EA'),'\u00EA');
4379+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00EB'),'\u00EB');
4380+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00EC'),'\u00EC');
4381+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00ED'),'\u00ED');
4382+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00D1'),'\u00D1');
4383+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00F3'),'\u00F3');
4384+ str_output := REGEXP_REPLACE(str_output,UNISTR('\00F6'),'\u00F6');
4385+ str_output := REGEXP_REPLACE(str_output,UNISTR('\0161'),'\u0161');
4386+ str_output := REGEXP_REPLACE(str_output,UNISTR('\2013'),'\u2013');
4387+ str_output := REGEXP_REPLACE(str_output,UNISTR('\2014'),'\u2014');
4388+ str_output := REGEXP_REPLACE(str_output,UNISTR('\2015'),'\u2015');
4389+ str_output := REGEXP_REPLACE(str_output,UNISTR('\2018'),'\u2018');
4390+ str_output := REGEXP_REPLACE(str_output,UNISTR('\2019'),'\u2019');
4391+ str_output := REGEXP_REPLACE(str_output,UNISTR('\201B'),'\u201B');
4392+ str_output := REGEXP_REPLACE(str_output,UNISTR('\201C'),'\u201C');
4393+ str_output := REGEXP_REPLACE(str_output,UNISTR('\201D'),'\u201D');
4394+ str_output := REGEXP_REPLACE(str_output,UNISTR('\201F'),'\u201F');
4395+ str_output := REGEXP_REPLACE(str_output,UNISTR('\2022'),'\u2022');
4396+ str_output := REGEXP_REPLACE(str_output,UNISTR('\20AC'),'\u20AC');
4397+ str_output := REGEXP_REPLACE(str_output,UNISTR('\2122'),'\u2122');
4398+
4399+ END IF;
4400+
4401+ END IF;
43464402
43474403 IF p_quote_strings = 'FALSE'
43484404 THEN
@@ -4434,56 +4490,72 @@ AS
44344490 RETURN TO_CLOB('null');
44354491
44364492 ELSE
4493+
4494+ IF NOT dz_json_constants.c_json_unescaped_slashes
4495+ THEN
4496+ clb_output := REGEXP_REPLACE(clb_output,'/' ,'\/');
4497+
4498+ END IF;
4499+
44374500 clb_output := REGEXP_REPLACE(clb_output,'\\' ,'\\\');
4438- clb_output := REGEXP_REPLACE(clb_output,'/' ,'\/');
44394501 clb_output := REGEXP_REPLACE(clb_output,'"' ,'\"');
4440-
44414502 clb_output := REGEXP_REPLACE(clb_output,CHR(8) ,'\b');
44424503 clb_output := REGEXP_REPLACE(clb_output,CHR(9) ,'\t');
44434504 clb_output := REGEXP_REPLACE(clb_output,CHR(10) ,'\n');
44444505 clb_output := REGEXP_REPLACE(clb_output,CHR(12) ,'\f');
44454506 clb_output := REGEXP_REPLACE(clb_output,CHR(13) ,'');
44464507 clb_output := REGEXP_REPLACE(clb_output,CHR(21) ,'\u0015');
44474508
4448- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00AE'),'\u00AE');
4449- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00B0'),'\u00B0');
4450- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00B1'),'\u00B1');
4451- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00B2'),'\u00B2');
4452- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00B3'),'\u00B3');
4453- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00B4'),'\u00B4');
4454- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00B5'),'\u00B5');
4455- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00B7'),'\u00B7');
4456- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00BC'),'\u00BC');
4457- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00BD'),'\u00BD');
4458- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00C9'),'\u00C9');
4459- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00D7'),'\u00D7');
4460- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00E0'),'\u00E0');
4461- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00E1'),'\u00E1');
4462- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00E2'),'\u00E2');
4463- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00E3'),'\u00E3');
4464- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00E7'),'\u00E7');
4465- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00E8'),'\u00E8');
4466- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00E9'),'\u00E9');
4467- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00EA'),'\u00EA');
4468- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00EB'),'\u00EB');
4469- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00EC'),'\u00EC');
4470- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00ED'),'\u00ED');
4471- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00D1'),'\u00D1');
4472- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00F3'),'\u00F3');
4473- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00F6'),'\u00F6');
4474- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\0161'),'\u0161');
4475- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\2013'),'\u2013');
4476- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\2014'),'\u2014');
4477- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\2015'),'\u2015');
4478- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\2018'),'\u2018');
4479- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\2019'),'\u2019');
4480- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\201B'),'\u201B');
4481- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\201C'),'\u201C');
4482- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\201D'),'\u201D');
4483- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\201F'),'\u201F');
4484- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\2022'),'\u2022');
4485- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\20AC'),'\u20AC');
4486- clb_output := REGEXP_REPLACE(clb_output,UNISTR('\2122'),'\u2122');
4509+ IF NOT dz_json_constants.c_json_unescaped_unicode
4510+ THEN
4511+ IF dz_json_constants.c_json_escape_all_nonascii
4512+ THEN
4513+ clb_output := REGEXP_REPLACE(ASCIISTR(clb_output),'\\','\\u');
4514+
4515+ ELSE
4516+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00AE'),'\u00AE');
4517+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00B0'),'\u00B0');
4518+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00B1'),'\u00B1');
4519+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00B2'),'\u00B2');
4520+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00B3'),'\u00B3');
4521+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00B4'),'\u00B4');
4522+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00B5'),'\u00B5');
4523+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00B7'),'\u00B7');
4524+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00BC'),'\u00BC');
4525+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00BD'),'\u00BD');
4526+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00C9'),'\u00C9');
4527+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00D7'),'\u00D7');
4528+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00E0'),'\u00E0');
4529+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00E1'),'\u00E1');
4530+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00E2'),'\u00E2');
4531+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00E3'),'\u00E3');
4532+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00E7'),'\u00E7');
4533+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00E8'),'\u00E8');
4534+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00E9'),'\u00E9');
4535+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00EA'),'\u00EA');
4536+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00EB'),'\u00EB');
4537+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00EC'),'\u00EC');
4538+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00ED'),'\u00ED');
4539+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00D1'),'\u00D1');
4540+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00F3'),'\u00F3');
4541+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\00F6'),'\u00F6');
4542+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\0161'),'\u0161');
4543+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\2013'),'\u2013');
4544+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\2014'),'\u2014');
4545+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\2015'),'\u2015');
4546+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\2018'),'\u2018');
4547+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\2019'),'\u2019');
4548+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\201B'),'\u201B');
4549+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\201C'),'\u201C');
4550+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\201D'),'\u201D');
4551+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\201F'),'\u201F');
4552+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\2022'),'\u2022');
4553+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\20AC'),'\u20AC');
4554+ clb_output := REGEXP_REPLACE(clb_output,UNISTR('\2122'),'\u2122');
4555+
4556+ END IF;
4557+
4558+ END IF;
44874559
44884560 IF p_quote_strings = 'FALSE'
44894561 THEN
@@ -8197,10 +8269,10 @@ CREATE OR REPLACE PACKAGE dz_json_test
81978269AUTHID DEFINER
81988270AS
81998271
8200- C_CHANGESET CONSTANT VARCHAR2(255 Char) := '34d20bf89b8269ad25851e24544c58537d74501c ';
8272+ C_CHANGESET CONSTANT VARCHAR2(255 Char) := 'acc78b726846553f324d43d4951bf24453c71115 ';
82018273 C_JENKINS_JOBNM CONSTANT VARCHAR2(255 Char) := 'DZ_JSON';
8202- C_JENKINS_BUILD CONSTANT NUMBER := 37 ;
8203- C_JENKINS_BLDID CONSTANT VARCHAR2(255 Char) := '37 ';
8274+ C_JENKINS_BUILD CONSTANT NUMBER := 51 ;
8275+ C_JENKINS_BLDID CONSTANT VARCHAR2(255 Char) := '51 ';
82048276
82058277 C_PREREQUISITES CONSTANT MDSYS.SDO_STRING2_ARRAY := MDSYS.SDO_STRING2_ARRAY(
82068278 );
0 commit comments