On Thu, Sep 13, 2007 at 09:52:30AM +0100, Richard Jones wrote:
> Matt S Trout wrote:
> >>All appears to be working fine, but I notice from the debugging SQL that 
> >>the date field (dob) is always updated, even though the submitted value 
> >>is identical to the stored value of the retrieved record, ie:
> >>
> >>UPDATE users SET dob = ?, gender = ? WHERE ( id = ? )
> >>
> >>I assume this is because I am using InflateColumn::DateTime on the date 
> >>fields. If I dump $user->last_name I get a scalar, but $user->dob gives 
> >>me a complex data structure (the DateTime object?). But I'm not sure why 
> >>it is trying to update the date field. Presumably it's harmless, as the 
> >>update would silently fail anyway?
> >
> >My suspicion would be that your DB isn't sending back the same datetime
> >string as is being saved, so the update always -thinks- the data's changed
> >even though the column values are equivalent.
> >
> >If so, the DateTime::Format::NameOfYourDb module probably needs patching.
> >
> >Fancy trying warn $obj->get_column('dob') before+after to see if I'm right?
> 
> Result of 2 updates where only a non-date field should have been affected:
> 
> PRE: 1934-12-21
> POST:1934-12-21

That one looks like it shouldn't have updated.
 
> PRE: 1927-09-09
> POST:1927-9-9

That one looks like what I was expecting.

> However, looking again at the docs it's quite possible that I'm not 
> using the InflateColumn::DateTime function properly as I don't actually 
> call inflate or deflate before updating or after searching (rather using 
> my own function to transform dates to/from MySQL format, and/or using 
> dob.strftime() function in the templates). Could that have anything to 
> do with the inappropriate field update? Meanwhile I'll have a play with 
> InflateColumn::DateTime.

You should just be dealing in DateTime objects and using the DBIC accessors;
the inflate/deflate will be transparent.

If you're using your own code to transform dates to/from mysql format you're
doing it wrong and any bugs are your problem. You can get the object DBIC
does to do it via $storage->datetime_parser.

-- 
      Matt S Trout       Need help with your Catalyst or DBIx::Class project?
   Technical Director    Want a managed development or deployment platform?
 Shadowcat Systems Ltd.  Contact mst (at) shadowcatsystems.co.uk for a quote
http://chainsawblues.vox.com/                    http://www.shadowcat.co.uk/ 

_______________________________________________
List: http://lists.rawmode.org/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/[EMAIL PROTECTED]

Reply via email to