Christopher H. Laco wrote:
> While working on the Handel conversion to DBIC, I've come across the
> need to have my resultsets always be "Carts" and "Items" regardless of
> what the actual packages are named.
>
> For now, I've simply created a register_cart_classes() method that calls
> register_class and sets the appropriate generic $monkier. Unfortunately,
> that means I can't use load_classes() and whatever magic it may contain.
>
> Would there be any interest in adding something to ResultSource:
>
> package My::Schema::Foo;
> __PACKAGE__->table('foo');
> __PACKAGE__->alias('Cart')
> # or
> __PACKAGE__->moniker('Cart');
>
>
> Then, after load_classes and connect(), we have:
>
> $schema->resultset('Cart')...
>
> instead of:
>
> $schema->resultset('Foo')...
>
>
> -=Chris
Upon some direction from mst, I've started working on this.
The initial plan was to change $resultsource->name to
$resultsource->table_name, then use $resultsource->name like so:
package MySchema::MyTable;
__PACKAGE__->table('my_table');
__PACKAGE__->name('Table');
1;
# later in in the schema...
$schema->resultset('Table')->find(1);
After getting so far, it became apparent that more than a few things use
$resultsource->name, including but not limited to:
> lib\DBIx\Class\ResultSet.pm(301): "Unknown key $attrs->{key} on '" .
> $self->result_source->name . "'"
> lib\DBIx\Class\ResultSet.pm(1221): "search_related: result source '" .
> $self->result_source->name .
> lib\DBIx\Class\ResultSource.pm(265): $self->throw_exception("No such column
> $col on table " . $self->name)
> lib\DBIx\Class\ResultSource.pm(301): $self->throw_exception("No such column
> $col on table " . $self->name)
> lib\DBIx\Class\ResultSource.pm(647): $self->throw_exception( $self->name . "
> has no such relationship '$pre'" )
> lib\DBIx\Class\CDBICompat\LazyLoading.pm(32): $self->result_source->name,
> [EMAIL PROTECTED],
> lib\DBIx\Class\Storage\DBI\Oracle.pm(34): $sth->execute( uc($source->name) );
> lib\DBIx\Class\Storage\DBI\Oracle.pm(38): croak "Unable to find a sequence
> INSERT trigger on table '" . $source->name . "'.";
> lib\DBIx\Class\Storage\DBI\Pg.pm(21): my ($schema,$table) = $source->name =~
> /^(.+)\.(.+)$/ ? ($1,$2)
> lib\DBIx\Class\Storage\DBI\Pg.pm(22): : (undef,$source->name);
> lib\SQL\Translator\Parser\DBIx\Class.pm(53): name => $source->name,
> lib\SQL\Translator\Parser\DBIx\Class.pm(93): my $rel_table =
> $source->related_source($rel)->name;
> lib\SQL\Translator\Producer\DBIx\Class\File.pm(71): my $tname = $table->name;
> lib\SQL\Translator\Producer\DBIx\Class\File.pm(85): { { $_->name => {
> lib\SQL\Translator\Producer\DBIx\Class\File.pm(86): name =>
> $_->name,
> lib\SQL\Translator\Producer\DBIx\Class\File.pm(113): my @pk = map { $_->name
> } ($pk->fields);
> lib\SQL\Translator\Producer\DBIx\Class\File.pm(124): #
> $cont->fields->[0]->name . "', '" .
> lib\SQL\Translator\Producer\DBIx\Class\File.pm(127):
> $tableextras{$table->name} .= "\n__PACKAGE__->belongs_to('" .
> lib\SQL\Translator\Producer\DBIx\Class\File.pm(128): $cont->fields->[0]->name
> . "', '" .
> lib\SQL\Translator\Producer\DBIx\Class\File.pm(132): "get_" . $table->name.
> "', '" .
> lib\SQL\Translator\Producer\DBIx\Class\File.pm(133): "${dbixschema}::" .
> $table->name. "', '" .
> lib\SQL\Translator\Producer\DBIx\Class\File.pm(134): $cont->fields->[0]->name
> . "');";
> lib\SQL\Translator\Producer\DBIx\Class\File.pm(139):
> $tableoutput{$table->name} .= $output;
So, the question now becomes, what does everything think?
Should we leave ->name alone, and make something new like
result_source_name(), or do we forge ahead with changing the meaning of
what ->name() returns?
-=Chris
signature.asc
Description: OpenPGP digital signature
_______________________________________________ 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/
