> On Sat, Feb 21, 2004 at 08:39:24PM -0500, Jeff Urlwin wrote:
> > I've been lurking through the $sth->{NAME} issues and it 
> seems to me 
> > that the current behavior of DBD::ODBC is onerous.  If 
> dbd_describe() 
> > fails, it croaks (which is what DBD::Oracle does).
> > 
> > If we return a Nullsv at this point, the end application does *not* 
> > get an undef reference, rather it gets a reference to an 
> empty array.
> 
> [In general: Never use Nullsv without good reason. Use 
> &sv_undef for undef.]
> 
> Returning Nullsv tells the Driver.xst code that you "didn't 
> handle this attribute FETCH yourself and you want the DBI to 
> handle it":
> 
>     valuesv = dbd_st_FETCH_attrib(sth, imp_sth, keysv);
>     if (!valuesv)
>         valuesv = DBIc_DBISTATE(imp_sth)->get_attr(sth, keysv);
>     ST(0) = valuesv;    /* dbd_st_FETCH_attrib did sv_2mortal   */
> 
> [But looking at the DBI code (dbih_get_attr_k()) I'm not sure 
> why it doesn't get into infinite recursion calling FETCH. 
> I'll look into that.]
> 
> Anyway, try returning &sv_undef. I think it should also warn(...) if
> DBIc_WARN(imp_xxh) is true.

Ok -- I did this and it still returns a ref to an empty array.  
Do you want a similar patch for DBD::Oracle ??

Regards,

Jeff

> 
> > Currently this affects calling sth->NAME on update, delete, most 
> > procedure calls, DDL statements, etc.
> > 
> > I think I'd like having it return a null reference instead of a 
> > reference to an empty array, but I don't know how to manage that at 
> > this point.
> > 
> > I know there was some discussion on this recently, but I 
> couldn't find 
> > any conclusion on google.  It's been a day of babysitting my three 
> > young kids, so please excuse me if I missed it ;)
> 
> I need to look back to what I said when this came up before. 
> I think there are some changes I could make so that FETCH 
> could trigger PrintError/RaiseError. Currently it can't.

I think that would be good.

Reg

Reply via email to