On Wed, Mar 19, 2003 at 09:14:06AM -0500, Rudy Lippan wrote:
> On Wed, 19 Mar 2003, Tim Bunce wrote:
> 
> > >
> > > Can you resend? I did not seem to get the attachment?
> > 
> > Oops, forgot. Attached. I've tweaked it slightly to use quote_identifier(),
> > which I'm presuming you're supporting (probably via adding get_info() data).
> > 
> > Some of the CHAR_SET_* and COLLATION_* fields could possibly be
> > added for mysql v4.1.
> 
> Um, Tim... :-)

It's obviously one of those days! I won't say it's attached this time.
That way if it is, it'll just be a pleasant surprise :)

> > > I try to make my code robust against such things; I ping the db and
> > > reconnect if needed.
> > 
> > Doing it in the driver for all server interactions is a more 'robust'
> > approach as it's impractical to do so it completely in the application.
> 
> It depends on your aim.  From my POV, if the db restarts within the scope
> of a request, there should be an error thrown because my application
> might be using locked tables or transactions, but that is why you wanted 
> the attribute, right :)

Sure. But I'm arguing the case for the defence at the moment :)
For applications that don't hold locks, reliable auto-reconnect is good.


> The other options is to do a looks like a number and then bind off of the
> IV/NV ?  Thoughts, suggestions?

[If SvNIOK && SvNV!=0 then it's a number. If SvNV=0 then you need to
disambiguate further using looks_like_number(). If looks_like_number()
is true then treat as number and use SvNV to get the value. If
looks_like_number is false then treat as string.]

But whichever way you slice it there's a risk of it ending up wrong
as some things that should be treated as strings may just happen
to *look* like numbers. It's probably best to be simple and consistent
by treating as varchar unless the user has used bind_param to set a type.


> > > @@ -1047,11 +1056,11 @@
> > >      char *key = SvPV(keysv, kl);
> > >      SV *cachesv = Nullsv;
> > >      int cacheit = FALSE;
> > > +    bool newval = SvTRUE(valuesv);
> > 
> > newval doesn't seem like a good name for this. bool_value perhaps.
> 
> That was in there, I just moved the line out of the if block so newval 
> could be used by both AutoCommit & mysqL_auto_reconnect.

Sure, still could do with a better name though :)

> > > @@ -1091,6 +1100,12 @@
> > > +    } else if (strlen("mysql_auto_reconnect") 
> > > +             == kl && strEQ(key,"mysql_auto_reconnect") ) 
> > 
> > Are you presuming the compiler will optimize strlen("mysql_auto_reconnect")
> > at compile time? I'd use kl==20 instead.
> 
> I was hoping :) I am bad at counting, so I thought I would make it a
> little simpler on myself, besides how long does a strlen("") take on
> something that is not used very often?  How about using 
> sizeof("mysql_auto_reconnect")-1 so the I can do something akin to:
> 
> #define getthingey(a) ((sizeof(a)-1) == kl && strEQ(key,a))

That's a good idea. I might even add a macro to DBIXS.h for that.

> > > +    {
> > > +        /*XXX: Does DBI handle the magic ? */
> > > + imp_dbh->auto_reconnect = newval;
> > 
> > What magic, specifically?
> 
> not there exactly, but up where the SvTRUE is. What happens if the
> variable is tied?  I did not think it very important at this time -- I 
> just wanted to note it as something to look into.

SvTRUE will invoke magic.

Tim.

Reply via email to