[jifty-devel] Strange result with column named "log"!

Wolfgang Kinkeldei wolfgang at kinkeldei.de
Mon Sep 4 05:13:55 EDT 2006


Am 03.09.2006 um 01:27 schrieb Frederic BLANC:

>
>  Hello,
>
>  I found what I think to be namespace conflict between the  
> Jifty::Object
> log method and columns of the same name:
>
>  I was building a quick app to be the frontend of an existing database
> with one of its columns named "log", a legitimate name (IMO) for a  
> column
> designed to keep... log messages.
>  But after I started the server and connected to the Administration
> interface to check that I can access all the data, what was my  
> surprise
> to find the ref of a Log::Log4perl object instead of the expected
> log message!
>
>  After digging into Jifty's code, I found that this behaviour came  
> from
> the existence of the log method of the Object class, mother of
> (almost every Jifty classes including) the Jifty::Record class.

The same result will happen with any column name that is equal to a  
method of Jifty::Record or its superclasses Jifty::DBI::Record or  
Jifty::Object. This is due to the fact, that Jifty::DBI::Record  
constructs accessors for the column names by building subs to access  
the column's value.

Inside the admin mode, the actions access the values by calling
    $self->record->$field

IDEA: by using overloading (use overload ('%{}' => sub {...}) on the  
Jifty::DBI::Record object could behave different when used in hash  
context and using a tied hash on the Record.
Then, any column's value could get retrieved (or set) by accessing:
   $self->record->{$field}

However, then a couple of things would need a review and some  
modifications :-(

>  If I well understood the usage of the log method, it is supposed  
> to be
> a class method of the Jifty class, so maybe the method definition  
> should
> be moved to the Jifty.pm module?
>
>  Best regards,
>  Frederic BLANC
>
> PS: by the way, the Jifty module has a logger method that seems
>     to be used nowhere.

...but it could be used by frontend programmers.


Regards,

Wolfgang Kinkeldei

-- 

' /\_/\ ' .print[split??,"".(($/=q|Cms)+-03467:;<=|)=~tr!C-z -B! -z!)x
'( o.o )' .$/]->[hex]foreach split qr<>,qq+1ecd039ad65b025b8063475b+||
' > ^ < ' .q<!-- Wolfgang Kinkeldei - mailto:wolfgang at kinkeldei.de -->






More information about the jifty-devel mailing list