[Dbix-class] updated release has broken my code
Dave Howorth
dhoworth at mrc-lmb.cam.ac.uk
Thu Jan 21 11:03:08 GMT 2016
On 2016-01-20 18:21, Lasse Makholm wrote:
> On Wed, Jan 20, 2016 at 4:32 PM, Dave Howorth <dhoworth at mrc-lmb.cam.ac.uk>
> wrote:
>
>> I have various applications that use DBIx::Class. I just moved one of
>> them, which has been running OK for quite a while, to a new machine and
>> that meant it got a new environment, including an updated DBIx::Class. It
>> no longer runs, and it would help me to try to understand what is broken in
>> my own code if I could understand how the DBIC code works and why it was
>> changed. If anybody could give me any pointers, I'd be grateful.
>>
>> My code is dying with the error message:
>>
>> DBIx::Class::Row::store_column(): No such column '_type' on
>> TDB::Schema::Result::Node
>>
>> This appears to be caused by a change in the code in DBIx::Class::Row in
>> store_column() in particular where
>>
>> $self->throw_exception( "No such column '${column}'" )
>> unless exists $self->{_column_data}{$column} ||
>> $self->has_column($column);
>>
>> has been replaced by
>>
>> $self->throw_exception( "No such column '${column}' on " . ref $self )
>> unless exists $self->{_column_data}{$column} ||
>> $self->result_source->has_column($column);
>>
>> If I put back the original code there, my application appears to work.
>>
>> Now my TDB::Schema::Result::Node contains some gnarly code that it will
>> take me some time to regain familiarity with, and I think it would help me
>> if I understood why that change had been made in DBIx::Class::Row so I
>> might get some idea of what I need to change in my own code.
>>
>> If anybody can point me to the change or provide any explanation, I'd
>> appreciate it.
>>
> https://github.com/dbsrgits/dbix-class/commit/4006691d207a6c257012c4b9a07d674b211349b0
>
> Without knowing what I'm talking about, this would seem to only matter if
> you do something funky like dynamically re-blessing result objects...
>
> Does TDB::Schema::Result::Node and the underlying table actually have a
> _type column?
>
> /L
Many thanks Lasse,
The class is a virtual view. It's data comes from a union over a bunch
of tables but yes it does have a _type column.
I've reproduced the commit log entry below. I obviously haven't had
enough coffee this morning because I still haven't worked out what an
'rsrc' is. And sadly I don't understand how the whole view/result
source/result/row thing is implemented. I haven't found anything in the
POD yet that shows me what I may have done wrong, so I guess I have some
careful reading and code reading to come. I've reproduced the relevant
bits of the class below as well in case anybody can spot a missing call
or bad arguments etc.
Cheers, Dave
Avoid ResultSourceProxy calls whenever possible
Along with efficiency gains this commit makes a very subtle but crucially
important change: From here now on when we operate on an instance, we are
guaranteed to query this instance's result source. The previous codepaths
would nearly randomly switch between the current rsrc instance and the one
registered with the corresponding result class.
package TDB::Schema::Result::Node;
use parent 'DBIx::Class::Core';
__PACKAGE__->table_class('DBIx::Class::ResultSource::View');
__PACKAGE__->table('nodes');
__PACKAGE__->result_source_instance->is_virtual(1);
my $test_db_view =
"SELECT
sp_id AS id,
sp_name COLLATE latin1_general_ci AS _name,
sp_comment COLLATE latin1_general_ci AS _comment,
sp_status COLLATE latin1_general_ci AS status,
'species' COLLATE latin1_general_ci AS _type,
old_sp_id AS old_sunid,
pr_id AS parent_id
FROM species
UNION ALL
... other similar selects for other tables ...
";
__PACKAGE__->result_source_instance->view_definition($test_db_view);
__PACKAGE__->add_columns(
id => {
data_type => 'mediumint',
is_nullable => 0,
},
... other columns ...
_type => {
data_type => 'text',
is_nullable => 0,
},
);
__PACKAGE__->set_primary_key('id');
>
>> Cheers, Dave
>>
>> PS The old version says it is '0.08200' and the new is '0.082820'.
>>
>> _______________________________________________
>> List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
>> IRC: irc.perl.org#dbix-class
>> SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
>> Searchable Archive:
>> http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk
>>
>
>
> _______________________________________________
> List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
> IRC: irc.perl.org#dbix-class
> SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
> Searchable Archive: http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk
More information about the DBIx-Class
mailing list