From 65edea7b707e1130db6b8827be97ee28f9cdd3ca Mon Sep 17 00:00:00 2001 From: miker Date: Sun, 1 Oct 2006 20:14:09 +0000 Subject: [PATCH] adding LIKE/ILIKE support git-svn-id: svn://svn.open-ils.org/ILS/trunk@6317 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/perlmods/OpenILS/Reporter/SQLBuilder.pm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Open-ILS/src/perlmods/OpenILS/Reporter/SQLBuilder.pm b/Open-ILS/src/perlmods/OpenILS/Reporter/SQLBuilder.pm index 296ba9c424..20310627c9 100644 --- a/Open-ILS/src/perlmods/OpenILS/Reporter/SQLBuilder.pm +++ b/Open-ILS/src/perlmods/OpenILS/Reporter/SQLBuilder.pm @@ -60,6 +60,10 @@ sub parse_report { my $rs = OpenILS::Reporter::SQLBuilder::ResultSet->new; + if (!$report->{order_by} || @{$report->{order_by}} == 0) { + $report->{order_by} = $report->{select}; + } + $rs->is_subquery( 1 ) if ( $report->{alias} ); $rs ->set_builder( $self ) @@ -826,6 +830,18 @@ sub toSQL { $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 =~ s/^'(.*)'$/$1/o; + $val =~ s/%/\\\\%/o; + $val =~ s/_/\\\\_/o; + $sql .= " LIKE '\%$val\%'"; + } elsif (lc($op) eq 'ilike') { + $val = $$val[0] if (ref($val) eq 'ARRAY'); + $val =~ s/^'(.*)'$/$1/o; + $val =~ s/%/\\\\%/o; + $val =~ s/_/\\\\_/o; + $sql .= " ILIKE '\%$val\%'"; } else { $val = $$val[0] if (ref($val) eq 'ARRAY'); $sql .= " $op " . $val->toSQL; -- 2.11.0