Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: The importance of context in debugging

by vladb (Vicar)
on Jul 26, 2002 at 18:49 UTC ( [id://185626]=note: print w/replies, xml ) Need Help??


in reply to The importance of context in debugging

Indeed so! However, in your particular case it is not necessarily the context but thorough understanding of the tools used that is lacking ;-).

Same occurred to me just recently when I was playing with the Class::DBI module. My database contained a dozen tables. A few of these tables served as a cross-reference: they linked data from two tables together. So, when I set out to create a Class::DBI for a joint table like so:
package YV::Table::ArticleAuthor; use base 'YV::Table::DBI'; __PACKAGE__->table('article_authors'); __PACKAGE__->columns(All => qw/author_id article_id/); __PACKAGE__->hasa(YV::Table::Author => 'author_id'); __PACKAGE__->hasa(YV::Table::Article => 'article_id'); # other methods
And later in my code tried to do something like this:
use YV::Table::ArticleAuthor; # this is built dynamically... my %delete_article_xref = ( 23 => 1, ); # $author is an YV::Table::Author object initialized prior.. my @author_articles = YV::Table::ArticleAuthor->search(author_id => $a +uthor->id); # delete cross reference for $author and article id # (In affect, I want to 'disassociate' article with $article_id from t +he $author) for (@author_articles) { next unless $delete_article_xref{$_->article_id}; $_[0]->delete(); }
Guess what happened next from here?

Answer (select text):
As a result of invoking the delete() method on an instance of the YV::Table::ArticleAuthor object, I removed all article to author associations. That is, not just one article from a single (selected) author. This caused a little havoc with a web tool I wrote..

The actual problem rested with my lack of understanding how Class::DBI worked. Looking back at the documentation, I figured that the reason the delete() method was acting so 'strangely' was because the primary column of the YV::Table::ArticleAuthor class was in fact author_id and delete() uses this very column to construct (or rather 'restrict') it's DELETE SQL. So the quick fix to my problem was to swap the fields like so:
__PACKAGE__->columns(All => qw/article_id author_id/);
And since the first column is (by default) taken to be the primary column, delete worked as I wanted it to thereafter. ;-).


Update: err.. I submitted invalid code initially (was taking it from my head heh). This is fixed now.

_____________________
# Under Construction

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://185626]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having an uproarious good time at the Monastery: (7)
As of 2024-04-23 08:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found