return $self->{_sql} if ($self->{_sql});
- my $sql;
+ my $sql = '';
my $rel = $self->find_relation();
if ($rel && $rel->is_nullable) {
if (lc($op) eq 'in') {
$sql .= " IN (". join(",", map { $_->toSQL } @$val).")";
+
} elsif (lc($op) eq 'not in') {
$sql .= " NOT IN (". join(",", map { $_->toSQL } @$val).")";
+
+ } elsif (lc($op) eq 'is blank') {
+ $sql = '('. $self->SUPER::toSQL ." IS NULL OR ". $self->SUPER::toSQL ." = '')";
+
+ } elsif (lc($op) eq 'is not blank') {
+ $sql = '('. $self->SUPER::toSQL ." IS NOT NULL AND ". $self->SUPER::toSQL ." <> '')";
+
} elsif (lc($op) eq 'between') {
$sql .= " BETWEEN ". join(" AND ", map { $_->toSQL } @$val);
+
} elsif (lc($op) eq 'not between') {
$sql .= " NOT BETWEEN ". join(" AND ", map { $_->toSQL } @$val);
+
} elsif (lc($op) eq 'like') {
$val = $$val[0] if (ref($val) eq 'ARRAY');
$val = $val->toSQL;
$val =~ s/%/\\\\%/o;
$val =~ s/_/\\\\_/o;
$sql .= " LIKE '\%$val\%'";
+
} elsif (lc($op) eq 'ilike') {
$val = $$val[0] if (ref($val) eq 'ARRAY');
$val = $val->toSQL;
$val =~ s/%/\\\\%/o;
$val =~ s/_/\\\\_/o;
$sql .= " ILIKE '\%$val\%'";
+
} else {
$val = $$val[0] if (ref($val) eq 'ARRAY');
$sql .= " $op " . $val->toSQL;
//_debug('NEXT PARAM = ' + oilsRptID2);
//_debug('NEXT PARAM = ' + oilsRptNextParam());
- if( filter == 'is' || filter == 'is not' )
+ if( filter == 'is' || filter == 'is not' || filter == 'is blank' || filter == 'is not blank' )
where.condition[filter] = null;
else where.condition[filter] = oilsRptNextParam();
column: { transform: tform, colname: oilsRptPathCol(path) },
condition : {}
};
- if( filter == 'is' || filter == 'is not' )
+ if( filter == 'is' || filter == 'is not' || filter == 'is blank' || filter == 'is not blank' )
having.condition[filter] = null;
else having.condition[filter] = oilsRptNextParam();
if (tab_name.match(/filter/)) {
element.condition = {};
- if (tab[field].op == 'is' || tab[field].op == 'is not') {
+ if (tab[field].op == 'is' || tab[field].op == 'is not' || tab[field].op == 'is blank' || tab[field].op == 'is not blank') {
element.condition[tab[field].op] = null;
} else {
element.condition[tab[field].op] =