LP#1618993 - Reverse "Contains Matching Substring" logic
authorChris Sharp <csharp@georgialibraries.org>
Thu, 8 Sep 2016 10:52:47 +0000 (06:52 -0400)
committerChris Sharp <csharp@georgialibraries.org>
Mon, 2 Dec 2019 11:21:28 +0000 (06:21 -0500)
The reporter employs "Contains Matching Substring" operators
and there is sometimes a need to "Exclude Matching Substring".

Open-ILS/src/perlmods/lib/OpenILS/Reporter/SQLBuilder.pm
Open-ILS/web/reports/oils_rpt_filters.js
Open-ILS/web/reports/xul/operators.js
build/i18n/po/reports.js/reports.js.pot

index d98a04f..9032c60 100644 (file)
@@ -967,6 +967,14 @@ sub toSQL {
         $val =~ s/_/\\_/o;
         $sql .= " LIKE \$_$$\$\%$val\%\$_$$\$";
 
+    } elsif (lc($op) eq 'not like') {
+        $val = $$val[0] if (ref($val) eq 'ARRAY');
+        $val = $val->toSQL;
+        $val =~ s/\$_$$\$//g;
+        $val =~ s/%/\\%/o;
+        $val =~ s/_/\\_/o;
+        $sql .= "NOT LIKE \$_$$\$\%$val\%\$_$$\$";
+
     } elsif (lc($op) eq 'ilike') {
         $val = $$val[0] if (ref($val) eq 'ARRAY');
         $val = $val->toSQL;
@@ -975,6 +983,14 @@ sub toSQL {
         $val =~ s/_/\\_/o;
         $sql .= " ILIKE \$_$$\$\%$val\%\$_$$\$";
 
+    } elsif (lc($op) eq 'not ilike') {
+        $val = $$val[0] if (ref($val) eq 'ARRAY');
+        $val = $val->toSQL;
+        $val =~ s/\$_$$\$//g;
+        $val =~ s/%/\\%/o;
+        $val =~ s/_/\\_/o;
+        $sql .= "NOT ILIKE \$_$$\$\%$val\%\$_$$\$";
+
     } else {
         $val = $$val[0] if (ref($val) eq 'ARRAY');
         $sql .= " $op " . $val->toSQL;
index b8b5ded..8f7d389 100644 (file)
@@ -15,6 +15,16 @@ var OILS_RPT_FILTERS = {
                label : rpt_strings.FILTERS_LABEL_ILIKE
        },
 
+       
+       'not like' : {
+               label: rpt_strings.FILTERS_LABEL_NOT_LIKE
+       },
+
+       'not ilike' : {
+               label: rpt_strings.FILTERS_LABEL_NOT_ILIKE
+       },
+
+
        '>' : {
                label : rpt_strings.FILTERS_LABEL_GREATER_THAN,
                labels : { timestamp : rpt_strings.FILTERS_LABEL_GT_TIME }
index 7c512e9..d344802 100644 (file)
@@ -9,12 +9,16 @@ var OILS_RPT_FILTERS = {
 
        'like' : {
                label : rpt_strings.OPERATORS_LIKE
-       }, 
-
-       ilike : {
+       },
+       'not like' : {
+               label : rpt_strings.OPERATORS_NOT_LIKE
+       },
+       'ilike' : {
                label : rpt_strings.OPERATORS_ILIKE
        },
-
+       'not ilike' : {
+               label : rpt_strings.OPERATORS_NOT_ILIKE
+       },
        '>' : {
                label : rpt_strings.OPERATORS_GREATER_THAN,
                labels : { timestamp : rpt_strings.OPERATORS_GT_TIME }
index 5282921..c08bdeb 100644 (file)
@@ -253,6 +253,10 @@ msgstr ""
 msgid "Contains Matching substring"
 msgstr ""
 
+#: reports.js:OPERATORS_NOT_LIKE reports.js:FILTERS_LABEL_NOT_LIKE
+msgid "Does Not Contain Matching substring"
+msgstr ""
+
 #: reports.js:OPERATORS_EQUALS reports.js:TEMPLATE_CONF_EQUALS
 #: reports.js:FILTERS_LABEL_EQUALS
 msgid "Equals"
@@ -413,6 +417,10 @@ msgstr ""
 msgid "Contains Matching substring (ignore case)"
 msgstr ""
 
+#: reports.js:OPERATORS_NOT_ILIKE reports.js:FILTERS_LABEL_NOT_ILIKE
+msgid "Does Not Contain Matching substring (ignore case)"
+msgstr ""
+
 #: reports.js:TRANSFORMS_MOY reports.js:TFORMS_LABEL_MOY
 msgid "Month of Year"
 msgstr ""