>>>>> "John" == John Siracusa <[EMAIL PROTECTED]> writes:
John> Keep in mind that you can still make Perl aliases:
John> package MyThing;
John> ...
__PACKAGE__-> meta->setup
John> (
John> columns =>
John> [
John> my_pk => { ... }, # can't alias here
John> ...
John> ],
John> ...
John> );
John> *id = \&my_pk; # can alias here
John> I'm not sure if that helps. If not, the other option is to use RDBO
John> to do the actual database manipulation, but build another layer on top
John> of that to present the public API. MyWrappedThing "has a" MyThing,
John> and so on.
And in a recent project where I transitioned a large CDBI project
to RDBO, I ended up creating these. Came in very handy:
sub id {
my $self = shift;
my @pk = $self->meta->primary_key_columns;
die "need exactly one primary key for $self" unless @pk == 1;
my $getter = $pk[0]->accessor_method_name;
return $self->$getter(@_);
}
use overload
q{""} => sub { return shift->stringify_self },
bool => sub { not shift->_undefined_primary },
fallback => 1,
;
sub stringify_self {
my $self = shift;
return overload::StrVal($self);
}
sub _undefined_primary {
## returns true if all PKs are defined, otherwise false
my $self = shift;
for my $pk ($self->meta->primary_key_columns) {
my $getter = $pk->accessor_method_name;
return 1 unless defined $self->$getter;
}
return 0;
}
sub make_clone {
## clone the object except for primary keys and new items
my $self = shift;
my %updates = @_;
my $new = (ref $self)->new;
for my $column ($new->meta->columns) {
my $getter = $column->accessor_method_name;
my $setter = $column->mutator_method_name;
if (exists $updates{$getter}) {
$new->$setter($updates{$getter});
} elsif ($column->is_primary_key_member) {
# do nothing
} else {
$new->$setter($self->$getter);
}
}
return $new;
}
--
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<[email protected]> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Rose-db-object mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rose-db-object