Re: promised trace flags change - a bit late

"Martin J. Evans" <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.sybase.devel
Message-ID <[email protected]>
On 04/02/2011 20:00, Martin J. Evans wrote:
> Tim,
>
> At the LPW I think I promised to add connection and encoding trace 
> flags to DBI which add to the already existing SQL flag. I never got 
> around to it and Merijn reminded me today on #dbi. The change is 
> trivial and once implemented I will replace DBD::ODBC trace flags for 
> connection and encoding with the standard DBI ones. There only remains 
> 2 small issues wrt to this which need confirming:
>
> 1. DBI currently says
>     return 0x00000100 if $name eq 'SQL';
>
>    and as there is no macro for 0x00000100 I have the following in 
> DBD::ODBC:
>
> /* Can't find a constant in DBI for SQL tracing but it is 256 */
> #define SQL_TRACE_FLAG 0x100
>
> and then code like this:
>
>    if (DBIc_TRACE(imp_dbh, SQL_TRACE_FLAG, 0, 3)) {
>        TRACE1(imp_dbh, "    SQLExecDirect %s\n", SvPV_nolen(statement));
>    }
>
> Should there be macros for DBI's trace flags and if so where do they 
> go (in DBIXS.h?)
>
> 2. I propose adding connection and encoding flags to DBI - so far 
> they've kept pretty short:
>
>   ALL
>   SQL
>
> so I've replicated this with:
>
>     sub parse_trace_flag {
>     my ($h, $name) = @_;
>     #      0xddDDDDrL (driver, DBI, reserved, Level)
>     return 0x00000100 if $name eq 'SQL';
>     return 0x00000200 if $name eq 'CON';
>     return 0x00000400 if $name eq 'ENC';
>     return;
>     }
>
> and:
>
> Currently the DBI only defines four trace flags:
>
>   ALL - turn on all DBI and driver flags (not recommended)
>   SQL - trace SQL statements executed
>         (not yet implemented in DBI but implemented in some DBDs)
>   CON - trace connection process
>         (not yet implemented in DBI but implemented in some DBDs)
>   ENC - trace encoding (unicode translations etc)
>         (not yet implemented in DBI but implemented in some DBDs)
>
> is this ok?
>
> and 2 supplementals:
>
> 3. I could look into implementing some/all those flags in DBI but it 
> seems these areas are pretty much covered with trace levels right now 
> and in any case, I cannot find prepare in DBI (for SQL tracing) anyway.
>
> 4. Lastly (and not wanting to get in Merijn's way who agreed to look 
> at it) but at the same workshop you discussed dbd_verbose (or whatever 
> some DBDs have added support for) with Merijn and we think you said 
> there is space in the trace settings for DBD trace settings. 
> Apparently some DBDs only want DBD tracing and not DBI tracing so 
> trace level is no good as it always includes DBI tracing. I think you 
> were talking about reserving some space for DBDs only - perhaps you 
> could remind us - the idea being settings (or a setting) which outputs 
> DBD tracing but not DBI tracing.
>
I've looked in to what ora_verbose/dbd_verbose does and it seems it 
simply duplicates the trace level in a separate setting and requires 
checking along with each check on DBI's trace level. I don't much like 
this and think it might be better to just add a DBI "DBD" trace flag so 
any DBD can do:

if (DBIc_TRACE(imp_dbh, DBD_TRACE_FLAG, 0, 3)) {

I'll add that to the list above unless I get any negative feedback.

Martin
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.