$ctype => undef
$string
$what
+$dbh => undef
</%args>
<%flags>
use CommodsWeb;
die if $what =~ m/[^a-z]/;
-my $specifics= "check_${what}";
-my $specific= $m->fetch_comp($specifics);
+my $chk= $m->fetch_comp("check_${what}");
-my $dbh= dbw_connect($ocean);
-my $sqlstmt= $specific->scall_method("sqlstmt");
-my $sth= $dbh->prepare($sqlstmt);
-my @sqlstmt_qs= $sqlstmt =~ m/\?/g;
+my $mydbh;
+$dbh ||= ($mydbh= dbw_connect($ocean));
-#die "$sqlstmt @sqlstmt_qs";
+#print STDERR "qtsc string=\`$string'\n";
+
+my ($sth, @sqlstmt_qs);
+if ($chk->method_exists('sqlstmt')) {
+ my $sqlstmt= $chk->scall_method("sqlstmt");
+ $sth= $dbh->prepare($sqlstmt);
+ @sqlstmt_qs= $sqlstmt =~ m/\?/g;
+}
my $emsg= '';
my @results;
+my @specs;
+my $hooks = { Emsg => \$emsg, String => \$string,
+ Results => \@results, Specs => \@specs,
+ };
+
+if ($chk->method_exists('preparse')) {
+ $chk->call_method('preparse', h => $hooks);
+} else {
+ @specs= $chk->attr('multiple') ? (split m#[/|,]#, $string) : ($string);
+}
-my @specs= $specific->attr('multiple') ? (split m#[/|,]#, $string) : ($string);
+no warnings qw(exiting);
foreach my $each (@specs) {
$each =~ s/^\s*//; $each =~ s/\s*$//; $each =~ s/\s+/ /g;
}
if (!$results) {
if (!%m) {
- $err->($specific->scall_method("nomatch",
+ $err->($chk->scall_method("nomatch",
spec => $each));
- } elsif (keys(%m) > 5) {
- $err->(' ');
+ } elsif (keys(%m) > $chk->attr('maxambig')) {
+ $err->($chk->scall_method("manyambig"));
} else {
- $err->($specific->scall_method("ambiguous",
+ $err->($chk->scall_method("ambiguous",
spec => $each,
couldbe => join(', ', sort keys %m)));
}
push @results, $results->[0];
};
-$emsg='' if !defined $emsg;
my $canontext= join ' | ', map { $_->[0] } @results;
+if ($chk->method_exists('postquery')) {
+ $hooks->{Canon}= \$canontext;
+ $chk->call_method('postquery', h => $hooks);
+}
+
+$emsg='' if !defined $emsg;
+@results=() if length $emsg;
+
+#print STDERR "qtsc emsg=\`$emsg' results=\`@results'\n";
if ($format =~ /json/) {
$r->content_type($ctype or $format);
print Dumper($emsg, $canontext, \@results);
}
-$dbh->rollback();
+$mydbh->rollback() if $mydbh;
return $emsg,
$canontext,