Skip to content

Commit 1f31c6c

Browse files
author
Sergejs Vinniks
committed
Implemented GET_STRINGS, GET_NUMBERS and GET_DATES
1 parent bd4aee2 commit 1f31c6c

16 files changed

+548
-0
lines changed

src/packages/persistent_json_store.pkb

+58
Original file line numberDiff line numberDiff line change
@@ -1197,6 +1197,64 @@ CREATE OR REPLACE PACKAGE BODY persistent_json_store IS
11971197

11981198
END;
11991199

1200+
FUNCTION get_raw_values (
1201+
p_array_id IN NUMBER,
1202+
p_type IN CHAR
1203+
)
1204+
RETURN t_varchars IS
1205+
1206+
v_array json_core.t_json_value;
1207+
v_raw_values t_varchars;
1208+
1209+
v_values json_core.t_json_values;
1210+
v_value json_core.t_json_value;
1211+
1212+
v_element_i PLS_INTEGER;
1213+
v_last_element_i PLS_INTEGER;
1214+
1215+
BEGIN
1216+
1217+
v_array := get_value(p_array_id);
1218+
1219+
IF v_array.type != 'A' THEN
1220+
--Value is not an array!
1221+
error$.raise('JDC-00012');
1222+
END IF;
1223+
1224+
SELECT *
1225+
BULK COLLECT INTO v_values
1226+
FROM json_values
1227+
WHERE parent_id = p_array_id
1228+
ORDER BY to_index(name);
1229+
1230+
v_raw_values := t_varchars();
1231+
v_last_element_i := 0;
1232+
1233+
FOR v_i IN 1..v_values.COUNT LOOP
1234+
1235+
v_value := v_values(v_i);
1236+
1237+
IF v_value.type NOT IN (p_type, 'E') THEN
1238+
-- Type conversion error!
1239+
error$.raise('JDC-00010');
1240+
END IF;
1241+
1242+
v_element_i := v_value.name;
1243+
1244+
FOR v_i IN v_last_element_i..v_element_i LOOP
1245+
v_raw_values.EXTEND(1);
1246+
END LOOP;
1247+
1248+
v_raw_values(v_element_i + 1) := v_value.value;
1249+
1250+
v_last_element_i := v_element_i + 1;
1251+
1252+
END LOOP;
1253+
1254+
RETURN v_raw_values;
1255+
1256+
END;
1257+
12001258
FUNCTION index_of (
12011259
p_array_id IN NUMBER,
12021260
p_type IN VARCHAR2,

src/packages/persistent_json_store.pks

+6
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,12 @@ CREATE OR REPLACE PACKAGE persistent_json_store IS
144144
)
145145
RETURN NUMBER;
146146

147+
FUNCTION get_raw_values (
148+
p_array_id IN NUMBER,
149+
p_type IN CHAR
150+
)
151+
RETURN t_varchars;
152+
147153
FUNCTION index_of (
148154
p_array_id IN NUMBER,
149155
p_type IN VARCHAR2,

src/packages/transient_json_store.pkb

+60
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,66 @@ CREATE OR REPLACE PACKAGE BODY transient_json_store IS
577577

578578
END;
579579

580+
FUNCTION get_raw_values (
581+
p_array_id IN NUMBER,
582+
p_type IN CHAR
583+
)
584+
RETURN t_varchars IS
585+
586+
v_array json_core.t_json_value;
587+
v_raw_values t_varchars;
588+
589+
v_name VARCHAR2(4000);
590+
v_pattern VARCHAR2(4000);
591+
592+
v_value_id NUMBER;
593+
v_value json_core.t_json_value;
594+
595+
v_element_i PLS_INTEGER;
596+
v_last_element_i PLS_INTEGER;
597+
598+
BEGIN
599+
600+
v_array := get_value(p_array_id);
601+
602+
IF v_array.type != 'A' THEN
603+
--Value is not an array!
604+
error$.raise('JDC-00012');
605+
END IF;
606+
607+
v_raw_values := t_varchars();
608+
v_last_element_i := 0;
609+
610+
v_name := v_value_child_ids.NEXT(v_array.id || '-');
611+
v_pattern := v_array.id || '-%';
612+
613+
WHILE v_name LIKE v_pattern LOOP
614+
615+
v_value_id := v_value_child_ids(v_name);
616+
v_value := v_values(v_value_id);
617+
618+
IF v_value.type NOT IN (p_type, 'E') THEN
619+
-- Type conversion error!
620+
error$.raise('JDC-00010');
621+
END IF;
622+
623+
v_element_i := v_value.name;
624+
625+
FOR v_i IN v_last_element_i..v_element_i LOOP
626+
v_raw_values.EXTEND(1);
627+
END LOOP;
628+
629+
v_raw_values(v_element_i + 1) := v_value.value;
630+
631+
v_name := v_value_child_ids.NEXT(v_name);
632+
v_last_element_i := v_element_i + 1;
633+
634+
END LOOP;
635+
636+
RETURN v_raw_values;
637+
638+
END;
639+
580640
FUNCTION index_of (
581641
p_array_id IN NUMBER,
582642
p_type IN VARCHAR2,

src/packages/transient_json_store.pks

+6
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ CREATE OR REPLACE PACKAGE transient_json_store IS
8181
)
8282
RETURN NUMBER;
8383

84+
FUNCTION get_raw_values (
85+
p_array_id IN NUMBER,
86+
p_type IN CHAR
87+
)
88+
RETURN t_varchars;
89+
8490
FUNCTION index_of (
8591
p_array_id IN NUMBER,
8692
p_type IN VARCHAR2,

src/types/t_json.tpb

+59
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,65 @@ CREATE OR REPLACE TYPE BODY t_json IS
642642

643643
END;
644644

645+
MEMBER FUNCTION get_strings
646+
RETURN t_varchars IS
647+
BEGIN
648+
json_core.allow_private_call;
649+
RETURN get_raw_values('S');
650+
END;
651+
652+
MEMBER FUNCTION get_numbers
653+
RETURN t_numbers IS
654+
655+
v_raw_values t_varchars;
656+
v_numbers t_numbers;
657+
658+
BEGIN
659+
660+
json_core.allow_private_call;
661+
v_raw_values := get_raw_values('N');
662+
663+
v_numbers := t_numbers();
664+
v_numbers.EXTEND(v_raw_values.COUNT);
665+
666+
FOR v_i IN 1..v_raw_values.COUNT LOOP
667+
v_numbers(v_i) := v_raw_values(v_i);
668+
END LOOP;
669+
670+
RETURN v_numbers;
671+
672+
END;
673+
674+
MEMBER FUNCTION get_dates
675+
RETURN t_dates IS
676+
677+
v_raw_values t_varchars;
678+
v_dates t_dates;
679+
680+
BEGIN
681+
682+
json_core.allow_private_call;
683+
v_raw_values := get_raw_values('S');
684+
685+
v_dates := t_dates();
686+
v_dates.EXTEND(v_raw_values.COUNT);
687+
688+
FOR v_i IN 1..v_raw_values.COUNT LOOP
689+
690+
BEGIN
691+
v_dates(v_i) := TO_DATE(v_raw_values(v_i), 'YYYY-MM-DD');
692+
EXCEPTION
693+
WHEN OTHERS THEN
694+
-- Type conversion error!
695+
error$.raise('JDC-00010');
696+
END;
697+
698+
END LOOP;
699+
700+
RETURN v_dates;
701+
702+
END;
703+
645704
-- Property modification methods
646705

647706
MEMBER FUNCTION set_string (

src/types/t_json.tps

+14
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ CREATE OR REPLACE TYPE t_json IS OBJECT (
5353
NOT INSTANTIABLE MEMBER FUNCTION get_length
5454
RETURN NUMBER,
5555

56+
NOT INSTANTIABLE MEMBER FUNCTION get_raw_values (
57+
p_type IN CHAR
58+
)
59+
RETURN t_varchars,
60+
5661
NOT INSTANTIABLE MEMBER FUNCTION index_of (
5762
p_type IN CHAR
5863
,p_value IN VARCHAR2
@@ -293,6 +298,15 @@ CREATE OR REPLACE TYPE t_json IS OBJECT (
293298
)
294299
RETURN CLOB,
295300

301+
MEMBER FUNCTION get_strings
302+
RETURN t_varchars,
303+
304+
MEMBER FUNCTION get_numbers
305+
RETURN t_numbers,
306+
307+
MEMBER FUNCTION get_dates
308+
RETURN t_dates,
309+
296310
-- Property modification methods
297311

298312
MEMBER FUNCTION set_string (

src/types/t_persistent_json.tpb

+9
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,15 @@ CREATE OR REPLACE TYPE BODY t_persistent_json IS
281281
BEGIN
282282
RETURN persistent_json_store.get_length(id);
283283
END;
284+
285+
OVERRIDING MEMBER FUNCTION get_raw_values (
286+
p_type IN CHAR
287+
)
288+
RETURN t_varchars IS
289+
BEGIN
290+
json_core.private_call;
291+
RETURN persistent_json_store.get_raw_values(id, p_type);
292+
END;
284293

285294
OVERRIDING MEMBER FUNCTION index_of (
286295
p_type IN CHAR

src/types/t_persistent_json.tps

+5
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ CREATE OR REPLACE TYPE t_persistent_json UNDER t_json (
109109
OVERRIDING MEMBER FUNCTION get_length
110110
RETURN NUMBER,
111111

112+
OVERRIDING MEMBER FUNCTION get_raw_values (
113+
p_type IN CHAR
114+
)
115+
RETURN t_varchars,
116+
112117
OVERRIDING MEMBER FUNCTION index_of (
113118
p_type IN CHAR
114119
,p_value IN VARCHAR2

src/types/t_transient_json.tpb

+9
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,15 @@ CREATE OR REPLACE TYPE BODY t_transient_json IS
281281
BEGIN
282282
RETURN transient_json_store.get_length(id);
283283
END;
284+
285+
OVERRIDING MEMBER FUNCTION get_raw_values (
286+
p_type IN CHAR
287+
)
288+
RETURN t_varchars IS
289+
BEGIN
290+
json_core.private_call;
291+
RETURN transient_json_store.get_raw_values(id, p_type);
292+
END;
284293

285294
OVERRIDING MEMBER FUNCTION index_of (
286295
p_type IN CHAR

src/types/t_transient_json.tps

+5
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,11 @@ CREATE OR REPLACE TYPE t_transient_json UNDER t_json (
109109
OVERRIDING MEMBER FUNCTION get_length
110110
RETURN NUMBER,
111111

112+
OVERRIDING MEMBER FUNCTION get_raw_values (
113+
p_type IN CHAR
114+
)
115+
RETURN t_varchars,
116+
112117
OVERRIDING MEMBER FUNCTION index_of (
113118
p_type IN CHAR
114119
,p_value IN VARCHAR2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
let implementationPackage = "persistent_json_store";
2+
3+
load("test/templates/implementation_package/get_raw_values.js.tpl")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
let implementationPackage = "persistent_json_store";
2+
let implementationType = "t_persistent_json";
3+
4+
load("test/templates/implementation_type/get_array_scalars.js.tpl");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
let implementationPackage = "transient_json_store";
2+
let implementationType = "t_transient_json";
3+
4+
load("test/templates/implementation_type/get_array_scalars.js.tpl");

0 commit comments

Comments
 (0)