On Mon, Apr 20, 2009 at 03:18:01PM -0700, David Ihnen wrote: > 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?
It's a feature. If you don't supply an explicit undef, DBIC can't know what the value in the database is - you could have a default of something else, or a trigger could set it, or whatever. Which means loading the relationship assuming it was NULL is wrong. So DBIx::Class now die()s rather than giving undefined and potentially dangerous/incorrect behaviour. The code underlying this behaviour also fixes a number of other potentially dangerous bugs, for example trying to inflate a belongs_to when you didn't load that column (by passing a limited select => list). I'm aware this isn't entirely backwards compatible, but it resolves a lot of bugs, and only really makes existing bugs-in-potentia obvious rather than breaking code that was correct, so I'm not really willing to revert it entirely - does anybody have a suggestion for fixing the backcompat without re-bugging the other cases? -- Matt S Trout Need help with your Catalyst or DBIx::Class project? Technical Director http://www.shadowcat.co.uk/catalyst/ Shadowcat Systems Ltd. Want a managed development or deployment platform? http://chainsawblues.vox.com/ http://www.shadowcat.co.uk/servers/ _______________________________________________ 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