Re: Clarification sought on deleting connection attributes

Tim Bunce <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.sybase.devel
Message-ID <[email protected]>
On Mon, Jul 28, 2008 at 01:13:50PM +0100, Martin Evans wrote:
> Hi,
>
> From the DBI::DBD docs in "The dbd_db_login6 method" I read:
>
> =====
> Here’s how you fetch them; as an example we use hostname attribute,
> which can be up to 12 characters long excluding null terminator:
>
> SV** svp;
> STRLEN len;
> char* hostname;
>
> if ( (svp = DBD_ATTRIB_GET_SVP(attr, "drv_hostname", 12)) && SvTRUE(*svp)) {
>    hostname = SvPV(*svp, len);
>    DBD__ATTRIB_DELETE(attr, "drv_hostname", 12); /* avoid later STORE */
> } else {
>     hostname = "localhost";
> }
> =====
>
> My question concerns the comment saying "avoid later STORE". If I have a 
> DBD::ODBC specific attribute which a) may be specified on the connect call 
> and b) is copied to any statement handles when they are created and c) may 
> also be on a statement handle, should I be calling DBD__ATTRIB_DELETE? and 
> what does that "avoid later STORE" really mean?

After $drh->connect(..., $attr) returns a handle DBI->connect(...)
effectively does $dbh->STORE($_, $attr->{$_}) for keys %$attr;

If the handle has already dealt with the attribute during the drivers
connect/login processing then the later STORE by the DBI is at best
redundant and could, at worse, cause problems/errors/whatever.

So the driver can delete from %$attr any attributes it doesn't want the
DBI to call STORE on later.

Tim.

p.s. patch to DBI::DBD docs most welcome!
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.