[Dbix-class] RFC: DBIx::Class::JSON
Todd W
trwww at sbcglobal.net
Fri Sep 15 23:04:46 CEST 2006
From: "Matt S Trout" <dbix-class at trout.me.uk>
> Nilson Santos Figueiredo Junior wrote:
>> On 9/14/06, Dami Laurent (PJ) <laurent.dami at justice.ge.ch> wrote:
>>> Well, following all relationships automatically might lead you to
>>> dump the whole database ! So the programmer needs a way to specify
>>> which relationships should be followed, how deep the recursion will go,
>>> etc, but it's not obvious to design a simple yet powerful API for that.
>>> I tried to do it with methods 'expand', 'autoExpand' in DBIx::DataModel,
>>> but it needs further work to become more flexible.
>>
>> It doesn't dump all relationships, it only dumps the ones you
>> explicitely.
>>
>> One existing issue is that, as it is, you can't specify arbitrary
>> dumping chains. You can only specify first-level relationships or
>> "nested" relationships which will always be followed (useful for
>> dumping tree like things, where one row might have another row as
>> parent and this parent row might have another parent row, etc).
>
> I think what I'd like to see is a general serialization interface that
> plugins can be written for. Something like
>
> __PACKAGE__->load_components(qw/Serializer/);
> __PACKAGE__->serialization_options({ follow_rels => ... });
>
> ...
>
> $obj->serialize_to('JSON');
> $obj->serialize_to('XML');
>
> etc.
>
> How does that look to you guys?
I need to pass the follow_rels in the call to serialize_to, as sometimes
I'd sometimes want relationships serialized, and sometimes I wouldn't.
__PACKAGE__->load_components(qw/Serializer/);
__PACKAGE__->serialization_options({ follow_rels => ... }); # default
$obj->serialize_to('JSON', serialization_options => { follow_rels =>
... } );
$obj->serialize_to('XML', serialization_options => { follow_rels => ... } );
Or perhaps:
$obj->JSON( serialization_options => { follow_rels => ... } );
$obj->XML( serialization_options => { follow_rels => ... } );
$obj->XML_RPC( serialization_options => { follow_rels => ... } );
Also, as PJ said, its really easy to dump the entire database, or even go in
to a infinite loop when a given class is specified to serialize a has_many
and THAT class is specified to serialize the has_a to the given class
(sorry, using CDBI speak).
It is a hard thing to do... but I for one would drop CDBI like a bad habit
if DBIx::Class had this.
Todd W.
More information about the Dbix-class
mailing list