Thanks Stas.
Tim.
On Sun, Mar 09, 2003 at 01:58:22PM +1100, Stas Bekman wrote:
> Tim Bunce wrote:
> >On Thu, Feb 27, 2003 at 03:04:36PM +1100, Stas Bekman wrote:
> >
> >>As I was looking through DBI.xs, I've noticed that dbi_get_attr_k is a
> >>very long if/elseif flow. Wouldn't converting it to use switch(*key) (on
> >>the first letter) make things a bit faster? Or is the Perl overhead so
> >>much more significant that it doesn't worth the effort?
> >
> >
> >I'm not sure it's really worth the effort, but you're welcome to :)
> >
> >
> >>the only issue is the last else {} block, which I thought could be split
> >>of and run if valuesv is undef, but I see that at least RowsInCache may
> >>set it to this value, so this won't work. The alternative solution is use
> >>goto() to break out ;)
> >
> >
> >Just init valuesv to Nullsv, add a few valuesv = &sv_undef's in a
> >few places where an attribute has been recognised but not set,
> >then you can test for if (!valuesv) at the end.
>
> I've attached the whole dbi_get_attr_k rather than posting diff, since it
> won't be useful for reading anyways. and I didn't inlined since I'm afraid
> my mail agent will mess it up.
>
> Notice that I've tried to do the group by htype, but I didn't know where
> the attrs with no check for htype belong to, so I couldn't do if/else
> if/else, but had to do separate if()'s. Also there were a few cases with
> 'htype <= DBIt_DB' requiring a special case.
>
> I've also duplicated the code from
>
> /* these are here but are, sadly, not called because not-preloading */
> /* them into the handle attrib cache caused wierdness in t/proxy.t */
> /* that I never got to the bottom of. One day maybe. */
> else if ( (htype==DBIt_ST && keylen==8 && strEQ(key, "Database"))
> || (htype==DBIt_DB && keylen==6 && strEQ(key, "Driver"))
> ) {
> D_imp_from_child(imp_dbh, imp_dbh_t, imp_xxh);
> valuesv = newRV((SV*)DBIc_MY_H(imp_dbh));
> cacheit = FALSE; /* else create ref loop */
> }
>
> as I've moved each attr to its group.
>
> Also I wasn't sure whether I should now remove the checks for keylen, but
> I've kept them in, since they were already there. Feel free to remove them
> where they don't make sense.
>
> In any case, now that it's a switch/case construct it should be easy to
> further perfect the organization.
>
>
> __________________________________________________________________
> Stas Bekman JAm_pH ------> Just Another mod_perl Hacker
> http://stason.org/ mod_perl Guide ---> http://perl.apache.org
> mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
> http://modperlbook.org http://apache.org http://ticketmaster.com