[Dbix-class] Pseudo columns

Paul Makepeace paulm at paulm.com
Wed Nov 1 22:34:12 GMT 2006


Ah, thanks for this Lee. What I was missing was just having the method
in the class definition (duh). One of these days I'll actually use
this software long enough for this stuff to stick...

This is the kind of bit fiddling that's needed btw,

sub show_headline {
	my $self = shift;
	if (@_>0) {
		$self->story_text_used( $_[0] ? $self->story_text_used | 1 :
$self->story_text_used & ~1 );
	}
	return $self->story_text_used & 1 ? 1 : 0;
}

The ^ will just invert so you'd need to test the field's state before using it.

P

On 10/26/06, Lee Standen <nom at standen.id.au> wrote:
> You're not responding in IRC, so I'll just correct myself here :)
>
> if ($_[0]) {
>     # Set the field
>     $self->story_text_used( $self->story_text_used | 4 );
> } else {
>     # Clear the field
>     $self->story_text_used( $self->story_text_used ^ 4 );
> }
>
> Replace that in the below code example, and you should be laughing :)
>
>
> Lee Standen wrote:
> > Looked at working on bitwise fields?
> >
> > I assume it's using 1, 2 & 4 as values, much like Linux uses for rwx
> > permissions.
> > This should do the trick, although you could probably condense it a
> > bit :)  Check out
> > http://www.perl.com/doc/manual/html/pod/perlop.html#Bitwise_Or_and_Exclusive_Or
> > for info on the bitwise operators.
> >
> >
> > sub show_headline {
> >    my $self = shift;
> >    if (@_>0) {
> >       if ($_[0]) {
> >          $self->story_text_used( $self->story_text_used ^ 4 );
> >       } else {
> >          $self->story_text_used( $self->story_text_used | 4 );
> >       }
> >    }
> >    return $self->story_text_used & 4;
> > }
> >
> > sub show_synopsis {
> >    my $self = shift;
> >    if (@_>0) {
> >       if ($_[0]) {
> >          $self->story_text_used( $self->story_text_used ^ 2 );
> >       } else {
> >          $self->story_text_used( $self->story_text_used | 2 );
> >       }
> >    }
> >    return $self->story_text_used & 2;
> > }
> >
> > sub show_comment {
> >    my $self = shift;
> >    if (@_>0) {
> >       if ($_[0]) {
> >          $self->story_text_used( $self->story_text_used ^ 1 );
> >       } else {
> >          $self->story_text_used( $self->story_text_used | 1 );
> >       }
> >    }
> >    return $self->story_text_used & 1;
> > }
> >
> >
> >
> > Paul Makepeace wrote:
> >> I have a legacy database that encodes three booleans into an integer,
> >> 0-7. I've like to present three accessors alongside the other columns
> >> that map to that integer. If I can automagically update it all the
> >> better.
> >>
> >> So I have,
> >>
> >> $chart->story_text_used() # 0-7, real database column
> >>
> >> and would prefer
> >>
> >> $chart->show_headline() # 0,1; not in the db
> >> $chart->show_synopsis() # ditto
> >> $chart->show_comment() # ditto
> >>
> >> One thought was: I see there's an example of overriding store_column
> >> in the cookbook, presumably I'd need to override override get_column
> >> as well?
> >>
> >> Or is there another way?
> >>
> >> In particular, I'd like to be able to say "these are non-DB-backed
> >> columns" and instantiate them on the fly rather than necessarily
> >> putting them in the schema class. So e.g. in a Cat controller I could
> >> make a couple of columns on the fly that the template could use just
> >> as another column. Is this possible? I know it sounds kind of horrible
> >> but it would at the very least help debugging.
> >>
> >> Thanks,
> >> Paul
> >>
> >> _______________________________________________
> >> List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
> >> Wiki: http://dbix-class.shadowcatsystems.co.uk/
> >> IRC: irc.perl.org#dbix-class
> >> SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
> >> Searchable Archive:
> >> http://www.mail-archive.com/dbix-class@lists.rawmode.org/
> >>
> >
> >
> > _______________________________________________
> > List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
> > Wiki: http://dbix-class.shadowcatsystems.co.uk/
> > IRC: irc.perl.org#dbix-class
> > SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
> > Searchable Archive:
> > http://www.mail-archive.com/dbix-class@lists.rawmode.org/
> >
>
>
> _______________________________________________
> List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
> Wiki: http://dbix-class.shadowcatsystems.co.uk/
> IRC: irc.perl.org#dbix-class
> SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
> Searchable Archive: http://www.mail-archive.com/dbix-class@lists.rawmode.org/
>



More information about the Dbix-class mailing list