@@ -988,68 +988,7 @@ create or replace package body ut_utils is
988988
989989 return l_result;
990990 end;
991-
992- function valid_tag_expression(a_tags in varchar2) return number is
993- t_left_side ut_varchar2_list := ut_varchar2_list('|','&',',');
994- t_right_side ut_varchar2_list := ut_varchar2_list('!','-');
995- l_left_side_expression varchar2(100) := '[|&,]';
996- l_left_side_regex varchar(400) := '([^|&,]*)[|&,](.*)';
997- l_left_side varchar2(4000);
998-
999- l_rigth_side_expression varchar2(100) := '[!-]';
1000- l_right_side_regex varchar(400) := '([!-])([^!-].*)';
1001- l_right_side varchar2(4000);
1002-
1003- l_tags varchar2(4000) := a_tags;
1004- l_result number :=1;
1005- begin
1006- --Validate that we have closed up all brackets
1007- if regexp_count(l_tags,'\(') <> regexp_count(l_tags,'\)') then
1008- l_result := 0;
1009- end if;
1010-
1011- --Remove brackets as we dont evaluate expression only validate.
1012- l_tags := replace(replace(l_tags,'('),')');
1013-
1014- --Check if there are any left side operators for first in order from left to right
1015- if regexp_count(l_tags,l_left_side_expression) > 0 then
1016- --Extract left part of operator and remaining of string to right
1017- l_left_side := regexp_replace(l_tags,l_left_side_regex,'\1');
1018- l_right_side := regexp_replace(l_tags,l_left_side_regex,'\2');
1019-
1020- --If left side is null that means that we used left side operator without
1021- -- left and right e.g. &test
1022- if l_left_side is null then
1023- l_result := 0;
1024- else
1025- --Extract right side from left side expression if there is any !-
1026- --Remove first negation tag to see if there is double negation
1027- l_left_side := regexp_replace(l_left_side,l_right_side_regex,'\2');
1028- end if;
1029-
1030-
1031- --check that on right side there is no extra negation
1032- if regexp_count(l_left_side,l_rigth_side_expression) > 0 then
1033- l_result := 0;
1034- end if;
1035-
1036- --Now process right side of string
1037- if l_right_side is not null then
1038- l_result := least(l_result,valid_tag_expression(l_right_side));
1039- else
1040- l_result := 0;
1041- end if;
1042- else
1043- --We just process single tag.
1044- l_left_side := l_tags;
1045- l_left_side := regexp_replace(l_left_side,l_right_side_regex,'\2');
1046- if regexp_count(l_left_side,l_rigth_side_expression) > 0 then
1047- l_result := 0;
1048- end if;
1049- end if;
1050-
1051- return l_result;
1052- end;
991+
1053992
1054993end ut_utils;
1055994/
0 commit comments