[SearchBuilder-devel] [RFC] JDBI::Filters should be configurable via column info

Ruslan Zakirov ruslan.zakirov at gmail.com
Wed Sep 21 18:36:25 EDT 2005


On 9/22/05, Jesse Vincent <jesse at bestpractical.com> wrote:
>
> > > there should be ways to do:
> > >
> > > * global filters
> > I don't see much usage of it.
>
> * "my database is utf8" . make sure all my data is.
instead you should say "my columns with text type are utf8".

>
> > > * app-specific filters
> > IMHO this is not special group of filters, but app can override
> > methods which return filters lists and add/remove filters. As Robert
> > said: - "they can always write a custom accessor/modifier/whateverer
> > to munge the data"
>
> I'd rather have convenient hooks than make the app have deep knowledge
> of what other filters are there.
>
> > > * column specific filters
> > Looks like current code implement this type of filters, but really it
> > implements something like global filters.
> >
> > > * column type specific filters.
> > Where do you want to describe this?
>
> This is a good question. I don't know. does Jifty::DBI::Column have
> subclasses for different types?
>
>
> > > * database specific filters
> > DB type(Oracle, Pg...) specific?
>
> yes! (Think "postgres needs a mime64 for blobs filter")
>
> > API design:
> >
> > I think almost all this can be done with two methods, but defined for
> > different classes: Handle, Record, Column.
> >
> > public API:
> > I suggest two methods: input_filters, output_filters.
> > In JDBI core this methods looks like:
> > sub input_filters { return @our_default_list }
> > sub output_filters { return reverse $_[0]->input_filters }
> > So if someone wants different chain for output then he override
> > output_filters method.
>
> What object is this on? the column?
Handle, Column and Record.

>
>
>
> > private API methods:
> >
> > sub Record::_filters( $direction, $column ) {
> >   my @filters = ();
> >   my @objs = ($self, $column, $self->handle);
> >   @objs = reverse @objs if $direction eq 'output';
> >   my $method = $direction ."_filters";
> >   foreach my $obj( @objs ) {
> >     push @filters, $obj->$method( column => $column, record => $self );
> >   }
> >   return @filters;
> > }
> >
> > sub Record::_apply_input_filters( $column, $value_ref );
> > sub Record::_apply_output_filters( $column, $value_ref );
> > sub Record::__apply_filters( $action, $column, $value_ref, @list );
>
>
> Why are these on the record, not on the column? And why positional
because we apply filters _only_ when something happens with record's
value. Yeah, there is also methods in column class, but that methods
return only list of the filters we should apply.

> params? I hate positional params ;)
I know,

>
> > Thoughts?
> >
> > >
> > >
> > > > --
> > > > Best regards, Ruslan.
> > > > _______________________________________________
> > > > SearchBuilder-devel mailing list
> > > > SearchBuilder-devel at bestpractical.com
> > > > http://lists.bestpractical.com/cgi-bin/mailman/listinfo/searchbuilder-devel
> > > >
> > >
> > > --
> > >
> >
> >
> > --
> > Best regards, Ruslan.
> >
>
> --
>


--
Best regards, Ruslan.


More information about the SearchBuilder-devel mailing list