[ic] Problems using SearchOp
Tim Good
tim.g at edsd.com
Wed Jul 5 10:39:18 EDT 2006
> -----Original Message-----
> From: interchange-users-bounces at icdevgroup.org
> [mailto:interchange-users-bounces at icdevgroup.org] On Behalf
> Of Stefan Hornburg
> Sent: Wednesday, July 05, 2006 8:15 AM
> To: interchange-users at icdevgroup.org
> Subject: Re: [ic] Problems using SearchOp
>
> Tim Good wrote:
> >>-----Original Message-----
> >>From: interchange-users-bounces at icdevgroup.org
> >>[mailto:interchange-users-bounces at icdevgroup.org] On Behalf
> Of Kevin
> >>Walsh
> >>Sent: Wednesday, July 05, 2006 6:37 AM
> >>To: interchange-users at icdevgroup.org
> >>Subject: Re: [ic] Problems using SearchOp
> >>
> >>"Tim Good" <tim.g at edsd.com> wrote:
> >>
> >>>I am trying to create my own op for searching on $somedate ge than
> >>>today.
> >>>Folling directions at:
> >>>http://www.icdevgroup.org/pipermail/interchange-users/2005-A
> >>>pril/042874.html
> >>>Which differ slightly from:
> >>>http://www.icdevgroup.org/interchange-doc-5.2.0/frames/icdat
> >>>abase_32.html
> >>>
> >>>Interchange: 5.4.1 stable, Perl: Perl 5.8.7 non-threaded
> >>
> >>Here is what
> >>
> >>>I put in my catelog.cfg :
> >>>
> >>>## Custom search op for greater than todays date ## used to filter
> >>>auctions which haven't started yet ## from search results.
> >>>CodeDef auctionstart SearchOp
> >>>CodeDef auctionstart Routine <<EOR
> >>>sub {
> >>> my ($self, $i, $pat) = @_;
> >>> $pat = reverse($pat);
> >>> $pat = qr($pat)i;
> >>>
> >>> return sub {
> >>> my $itemstart = shift;
> >>> return ($itemstart ge "2006-07-03 00:00:00");
> >>> };
> >>>}
> >>>
> >>
> >>You don't need the two $pat lines in there, by the way. They were
> >>useful in the code you copied/pasted but are not used at
> all in your
> >>code.
> >
> > Thanks for pointing this out. I had realized that.
> >
> >
> >>On the other hand, you might want to pass your date string in as a
> >>mv_searchspec (se=yourdatestring), and capture that in
> $pat, instead
> >>of hard-coding the value in your code.
> >>
> >
> > This was exactly my original thoughts but hard coded it to
> lessen the
> > Troubleshooting points.
> >
> >
> >>>And the error I get is:
> >>>
> >>> search error: Limit subroutine creation: Can't use an
> >>
> >>undefined value
> >>
> >>>as an ARRAY reference at /usr/local/interchange/lib/Vend/Search.pm
> >>>line 653.
> >>>
> >>
> >>Try this patch:
> >>
> >>*** lib/Vend/Search.pm- Wed Jul 5 12:44:01 2006
> >>--- lib/Vend/Search.pm Wed Jul 5 13:30:27 2006
> >>***************
> >>*** 649,656 ****
> >> $c->[$i] =~ tr/ \t//;
> >> my $o = $c->[$i];
> >> $c->[$i] = $s->{mv_numeric}[$i]
> >>! ? [ @{$numopmap{$o}} ]
> >>! : [ @{$stropmap{$o}} ];
> >> if(! $c->[$i]) {
> >> my $r;
> >> $c->[$i] = [$r, $o], next
> >>--- 649,656 ----
> >> $c->[$i] =~ tr/ \t//;
> >> my $o = $c->[$i];
> >> $c->[$i] = $s->{mv_numeric}[$i]
> >>! ? $numopmap{$o}
> >>! : $stropmap{$o};
> >> if(! $c->[$i]) {
> >> my $r;
> >> $c->[$i] = [$r, $o], next
> >>
> >>The dereference and re-reference seems wasteful to me, and is the
> >>cause of the problem you reported. If there's a reason for doing
> >>that, and I can't see one, then it can be done later in the code.
> >>
> >
> > Kevin thank you for you time in figuring out the patch.That
> is exactly
> > What the doctor ordered. Cheers!
>
> It would be nice if you can post your finished SearchOp here, so
> people can see a real world example in the archives.
>
> Bye
> Racek
Done!
I have created two searchops:
## Custom search op for less than todays date
## used to filter auctions which haven't started yet
## from search results.
CodeDef auctionstart SearchOp
CodeDef auctionstart Routine <<EOR
sub {
my ($self, $i, $pat) = @_;
my $currentdate = $Tag->convert_date( { format => '%F %T' } );
return sub {
my $itemstart = shift;
return ($itemstart le $currentdate);
};
}
EOR
## Custom search op for greater than todays date
## used to filter auctions which have ended
## from search results.
CodeDef auctionends SearchOp
CodeDef auctionends Routine <<EOR
sub {
my ($self, $i, $pat) = @_;
my $currentdate = $Tag->convert_date( { format => '%F %T' } );
return sub {
my $end = shift;
return ($end ge $currentdate);
};
}
EOR
>
> --
> LinuXia Systems => http://www.linuxia.de/
> Expert Interchange Consulting and System Administration
> ICDEVGROUP => http://www.icdevgroup.org/
> Interchange Development Team
>
> _______________________________________________
> interchange-users mailing list
> interchange-users at icdevgroup.org
> http://www.icdevgroup.org/mailman/listinfo/interchange-users
>
More information about the interchange-users
mailing list