add initial cut of support for in-db array datatype operators
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 11 Nov 2009 18:52:01 +0000 (18:52 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 11 Nov 2009 18:52:01 +0000 (18:52 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@14869 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Reporter/SQLBuilder.pm
Open-ILS/web/js/dojo/openils/reports/nls/reports.js
Open-ILS/web/reports/oils_rpt_filters.js
Open-ILS/web/reports/xul/operators.js
Open-ILS/web/reports/xul/template-config.js
Open-ILS/web/reports/xul/transforms.js

index 228b6d3..44ed548 100644 (file)
@@ -943,6 +943,16 @@ sub toSQL {
        } elsif (lc($op) eq 'not in') {
                $sql .= " NOT IN (". join(",", map { $_->toSQL } @$val).")";
 
+       } elsif (lc($op) eq '= any') {
+               $val = $$val[0] if (ref($val) eq 'ARRAY');
+               $val = $val->toSQL;
+               $sql = "$val = ANY (".$self->SUPER::toSQL.")";
+
+       } elsif (lc($op) eq '<> any') {
+               $val = $$val[0] if (ref($val) eq 'ARRAY');
+               $val = $val->toSQL;
+               $sql = "$val <> ANY (".$self->SUPER::toSQL.")";
+
        } elsif (lc($op) eq 'is blank') {
                $sql = '('. $self->SUPER::toSQL ." IS NULL OR ". $self->SUPER::toSQL ." = '')";
 
index f9b72e5..34bd06f 100644 (file)
@@ -25,6 +25,8 @@
        "FILTERS_LABEL_NOT_NULL": "Is not NULL",
        "FILTERS_LABEL_NULL_BLANK": "Is NULL or Blank",
        "FILTERS_LABEL_NOT_NULL_BLANK": "Is not NULL or Blank",
+       "FILTERS_LABEL_EQ_ANY": "Equals Any",
+       "FILTERS_LABEL_NE_ANY": "Does Not Equal Any",
        
        "FOLDERS_TEMPLATES": "Templates",
        "FOLDERS_TEMPLATE": "Template",
        "OPERATORS_IS_NOT_NULL": "Is not NULL",
        "OPERATORS_NULL_BLANK": "Is NULL or Blank",
        "OPERATORS_NOT_NULL_BLANK": "Is not NULL or Blank",
+       "OPERATORS_EQ_ANY": "Equals Any",
+       "OPERATORS_NE_ANY": "Does Not Equal Any",
        
        "SOURCE_BROWSE_AGGREGATE": "Aggregate",
        "SOURCE_BROWSE_NON_AGGREGATE": "Non-Aggregate",
index 714cb7b..b8b5ded 100644 (file)
@@ -66,6 +66,14 @@ var OILS_RPT_FILTERS = {
 
     'is not blank' : {
         label : rpt_strings.FILTERS_LABEL_NOT_NULL_BLANK
+       },
+
+    '= any' : {
+        label : rpt_strings.FILTERS_LABEL_EQ_ANY
+    },
+
+    '<> any' : {
+        label : rpt_strings.FILTERS_LABEL_NE_ANY
        }
 }
 
index d717c30..7c512e9 100644 (file)
@@ -66,6 +66,14 @@ var OILS_RPT_FILTERS = {
 
        'is not blank' : {
                label : rpt_strings.OPERATORS_NOT_NULL_BLANK
+       },
+
+       '= any' : {
+               labels : { 'array' : rpt_strings.OPERATORS_EQ_ANY }
+       },
+
+       '<> any' : {
+               labels : { 'array' : rpt_strings.OPERATORS_NE_ANY }
        }
 }
 
index 387c7c8..c72758f 100644 (file)
@@ -105,7 +105,7 @@ function addReportAtoms () {
                                  alias     : field_label,
                                  join      : jointype,
                                  datatype  : datatype,
-                                 op        : '=',
+                                 op        : (datatype == 'array') ? '= any' : '=',
                                  op_label  : rpt_strings.TEMPLATE_CONF_EQUALS,
                                  op_value  : {}
                                };
@@ -513,13 +513,16 @@ function populateOperatorContext () {
 
        for (var i in OILS_RPT_FILTERS) {
                var o = OILS_RPT_FILTERS[i];
-               menu.appendChild(
-                       createMenuItem(
-                               { label : o.label,
-                                 onmouseup : "changeOperator({op:'"+i+"',label:'"+o.label+"'})"
-                               }
-                       )
-               );
+        if (o.label) {
+               menu.appendChild(
+                       createMenuItem(
+                               { label : o.label,
+                                 onmouseup : "changeOperator({op:'"+i+"',label:'"+o.label+"'})"
+                                   }
+                       )
+               );
+        }
+
                if (o.labels) {
                        var keys = getKeys(o.labels);
                        for ( var k in keys ) {
index 86abb53..96b909d 100644 (file)
@@ -1,6 +1,7 @@
 dojo.requireLocalization("openils.reports", "reports");
 
 var rpt_strings = dojo.i18n.getLocalization("openils.reports", "reports");
+var OILS_RPT_DTYPE_ARRAY = 'array';
 var OILS_RPT_DTYPE_STRING = 'text';
 var OILS_RPT_DTYPE_MONEY = 'money';
 var OILS_RPT_DTYPE_BOOL = 'bool';