[Dbix-class] Lazy Columns

Peter Rabbitson rabbit+dbic at rabbit.us
Tue May 11 16:40:50 GMT 2010


Bill Moseley wrote:
> 
> 
> On Tue, May 11, 2010 at 8:02 AM, Peter Rabbitson <rabbit+dbic at rabbit.us
> <mailto:rabbit%2Bdbic at rabbit.us>> wrote:
> 
>     > I didn't see this as a bug in Ordered.  Ordered asked for the column
>     > data and got an undefined value and assumed it was null.  Seemed more
>     > like an example of why might be good for DBIC to throw an
>     exception if a
>     > column is accessed w/o being fetched.
> 
>     It may or may not be - this is beyond the point. The public API from
>     day one
>     has been "you get all columns by default" and "every accessor always
>     works".
> 
> 
> But part of the API is also passing in "columns", correct?
>  
> 
>     If you alter the selector, and then do not check that you are asking for
>     something that *you* did not bring back from the db - you get to
>     keep the
>     pieces. In this case Ordered is clearly misusing the API, thus the
>     problem
>     is with Ordered, and it will be fixed sooner or later (sooner if we
>     get a
>     test case contribution).
> 
> 
> Guess I still don't follow.  I've *given* Ordered an item I fetched w/o
> including the position column.  It's really my fault for doing that.
> Ordered has no way of knowing that the object passed to it didn't fetch
> the column it needs, right?  Is there currently a way to inspect a row
> object and determine what columns were fetched from the store?

This means you didn't even read the original thread, which clearly mentioned
http://search.cpan.org/~frew/DBIx-Class-0.08121/lib/DBIx/Class/Row.pm#has_column_loaded

So yes, if a component *relies* on some data being available, it *must*
ensure it is available (as shown above).

>     ^^ nowhere do you inform DBIC that there is in fact a unique constraint
>     on the source/table. The moment you do the appropriate
>     add_unique_constraint
>     the SQL will magically change to being correct :)
> 
> 
> Well, that makes sense.  Any exactly why I posted the full example.
> 
> Although now the database takes more of a beating... ;)

http://dev.catalystframework.org/svnweb/bast/blame/DBIx-Class/0.08/trunk/lib/DBIx/Class/Ordered.pm
Read the comment at lines 791-794, I need a volunteer to make me a list of databases
which can do that without stepping on its own toes. Then we can make exceptions based
on underlying storage.



More information about the DBIx-Class mailing list