[CDBI] Deep recursion

Arshavir Grigorian grigorian at gmail.com
Wed Aug 8 05:48:28 BST 2007


On 8/7/07, Michael G Schwern <schwern at pobox.com> wrote:
> Arshavir Grigorian wrote:
> > Hi,
> >
> > I have a table with a primary key called "id". When I make an insert
> > into that table, then try to get the primary key, I get into deep
> > recursion:
> >
> > __PACKAGE__->table('tab');
> > __PACKAGE__->columns(Primary => 'id');
> > __PACKAGE__->columns(All => qw/id .../);
> >
> > ...
> >
> > my $obj = TAB->insert($href);
> > my $id = $obj->id;
> >
> > And in the logs, I see a lot of:
> >
> >         Class::DBI::_flesh('TAB=HASH(0x9102a08)', 'Primary') called at
> > /usr/local/share/perl/5.8.7/Class/DBI.pm line 844
> >         Class::DBI::get('TAB=HASH(0x9102a08)', 'id') called at
> > /usr/local/share/perl/5.8.7/Class/Accessor.pm line 393
> >         Class::Accessor::__ANON__('TAB=HASH(0x9102a08)') called at
> > /usr/local/share/perl/5.8.7/Class/DBI.pm line 857
>
> If you name a column accessor "id" it blows over the very important built-in
> method "id".  Granted it would be nice if it warned you about this very common
> mistake.
>
> The following covers how to map columns to differently named accessors.
> http://search.cpan.org/~tmtm/Class-DBI-v3.0.16/lib/Class/DBI.pm#Changing_Your_Column_Accessor_Method_Names
>

Also, I noticed that this problem occurs only on objects that have
just been created/inserted (vs objects that one gets through a
retrieve/search operation).

$obj = TAB->retrieve(...); $obj->id; - works fine.



More information about the ClassDBI mailing list