[Dbix-class] DBIx::Class 0.08100 released to CPAN
Peter Rabbitson
rabbit+dbic at rabbit.us
Tue Apr 21 06:25:19 GMT 2009
David Ihnen wrote:
> John Napiorkowski wrote:
>>
>> --- On Mon, 4/20/09, David Ihnen <davidi at norchemlab.com> wrote:
>>
>>
>>> From: David Ihnen <davidi at norchemlab.com>
>>> Subject: Re: [Dbix-class] DBIx::Class 0.08100 released to CPAN
>>> To: "Class user and developer list" <dbix-class at lists.scsys.co.uk>
>>> Date: Monday, April 20, 2009, 6:18 PM
>>>
>>>
>>>
>>>
>>>
>>>
>>> Okay, I have a question playing with this release.
>>>
>>>
>>>
>>> We have observed that if you attempt to create-related a
>>> new row in a
>>> table that has a belongs-to to a third table - and omit the
>>> hash entry
>>> for the relationship column id in question entirely - we
>>> get an error:
>>>
>>>
>>>
>>> DBIx::Class::Relationship::Accessor::__ANON__():
>>> Column
>>> donor_id not loaded or not passed to new() prior to
>>> insert() on
>>> DB::Schema::ivr_schedule=HASH(0x7f895b9c72e8) trying to
>>> resolve
>>> relationship (maybe you forgot to call
>>> ->reload_from_storage to get
>>> defaults from the db) at
>>> /var/www/samp/DB/Schema/ivr_schedule.pm line
>>> 345
>>>
>>>
>>>
>>> BUT - if we *do* put the hash entry in for the relationship
>>> tying
>>> column (donor_id in this case) - but leave its value
>>> undefined - the
>>> error does not occur.
>>>
>>>
>>>
>>> What do you make of that?
>>>
>>>
>>>
>>> David Ihnen
>>>
>>>
>>>
>>
>> I noticed something similar when playing with MojoMojo, but didn't think I could consider it a bug. What I found was that if you do create on a source with a column that is allowed to be null and you don't pass the column explicitly as undef value, when you do get_columns on it (that is the object returned by ->create) , that column is missing. Doing ->reload_from_storage after create fixes it, since that will force a reload from the database, and the column is properly setup as undef. Hence the message.
>>
> So 'does not exist' is not equivalent to 'undef' per the logic in the
> code? Does something break if they are equivalent?
http://search.cpan.org/~mstrout/DBIx-Class-0.08100/lib/DBIx/Class/Row.pm#new
'does not exist' = I don't know
'undef' = There isn't one
>> So my question to you is if this relationship is allowed to be null?
> Yes, several points in our schema have multi-way connections - a table
> can point to either A or B or C (like in this case a schedule that can
> be attached to three different types of objects) So this table is
> allowed to have null values on these rows. Curiously - the donor table
> gave the result but the group table did not. We were unable to
> determine any difference in the configuration of the classes between the
> two relationships.
Off the top of my head this *might* be related to:
http://search.cpan.org/~mstrout/DBIx-Class-0.08100/lib/DBIx/Class/Relationship.pm#belongs_to
(look at the bottom, discussion of undef_on_null_fk). If this is indeed
the cause, we need to fix things up so the behavior is uniform.
More information about the DBIx-Class
mailing list