On Mon, Jun 03, 2013 at 10:43:20AM +0100, Martin J. Evans wrote:
> Hi,
> 
> I've just hit a problem with bind_col and fetchall_arrayref when a slice is 
> used and I'm wondering how I might fix it. I'm using DBD::Oracle and setting 
> a bind type and some attributes but as soon as a slice is used in 
> fetchall_arrayref, DBI rebinds the columns and I lose the column type and 
> attribute. Here is an example:

> So this is how bind_col ends up being called:
> 
> BIND COL 1 (TYPE => SQL_INTEGER, DiscardString => 1)
> BIND COL 1 (no type (i.e. type = 0) and no attrs)
> BIND COL 2 (no type and no attrs)
> BIND COL 3 (no type and no attrs)
> BIND COL 4 (no type and no attrs)
> 
> The code in DBD::Oracle is possibly flawed in that every time bind_col is 
> called it does:
> 
>       imp_sth->fbh[field-1].req_type = type;
>       imp_sth->fbh[field-1].bind_flags = 0; /* default to none */
> 
> regardless of whether bind_col has been called before and set a type
> or attributes. As type is a parameter to dbd_st_bind_col anyone not
> wishing to set a type has to say 0.
> 
> I could fix my usage case by simply saying if bind_col has been called
> for a column which already has a type set and the incoming type is 0
> don't touch it and if no attributes are passed don't clear any
> existing ones. It would work for me but I'd like to hear any comments.

I see the docs don't spell it out but I've always intended the bind_col
type parameter to be 'sticky' - i.e. a missing or undef value wouldn't
undo previous type settings.

Feel free to patch the docs to clarify that.

Tim.

Reply via email to