create_sort_spec does_table_exist
add_token);
+use strict;
+
sub conv_i {
my ($value, $default) = @_;
return (defined($value) && "$value" ne "") ? $value * 1 : $default;
}
+# boolean escape
+sub conv_b {
+ my ($value, $default) = @_;
+ return !defined $value && defined $default ? $default
+ : $value ? 't'
+ : 'f';
+}
+
sub conv_date {
my ($value) = @_;
return (defined($value) && "$value" ne "") ? $value : undef;
}
while ($query =~ /\?/) {
- my $value = shift(@_);
+ my $value = shift || '';
$value =~ s/\'/\\\'/g;
$value = "'${value}'";
$query =~ s/\?/$value/;
my ($form, $dbh, $query) = splice(@_, 0, 3);
- my $sth = prepare_execute_query($form, $dbh, $query, @_);
- my $result = [];
- while (my $ref = $sth->fetchrow_hashref()) {
- push(@{ $result }, $ref);
- }
- $sth->finish();
+ dump_query(LXDebug->QUERY(), '', $query, @_);
+
+ # this works back 'til at least DBI 1.46 on perl 5.8.4 on Debian Sarge (2004)
+ my $result = $dbh->selectall_arrayref($query, { Slice => {} }, @_)
+ or $form->dberror($query . (@_ ? " (" . join(", ", @_) . ")" : ''));
$main::lxdebug->leave_sub(2);
my %params = @_;
my $col = $params{col};
my $val = $params{val};
- my $method = $params{method} || '=';
my $escape = $params{esc} || sub { $_ };
+ my $method = $params{esc} =~ /^start|end|substr$/ ? 'ILIKE' : $params{method} || '=';
$val = [ $val ] unless ref $val eq 'ARRAY';
my %escapes = (
id => \&conv_i,
+ bool => \&conv_b,
date => \&conv_date,
+ start => sub { $_[0] . '%' },
+ end => sub { '%' . $_[0] },
+ substr => sub { '%' . $_[0] . '%' },
);
+ my $_long_token = sub {
+ my $op = shift;
+ sub {
+ my $col = shift;
+ return scalar @_ ? join ' OR ', ("$col $op ?") x scalar @_,
+ : undef;
+ }
+ };
+
my %methods = (
'=' => sub {
my $col = shift;
: scalar @_ == 1 ? sprintf '%s = ?', $col
: undef;
},
+ map({ $_ => $_long_token->($_) } qw(LIKE ILIKE >= <= > <)),
);
$method = $methods{$method} || $method;
=back
-=head1 SEE ALSO
-
=head1 MODULE AUTHORS
Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
=cut