execute_array/execute_for_fetch binding parameter types - clarification sought

"Martin J. Evans" <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.sybase.devel
Message-ID <[email protected]>
I've been working on support for execute_for_fetch in DBD::ODBC. I've 
been looking around for testers and as usual the DBIx::Class users have 
come up trumps. However, a question has arisen on irc #dbi which 
although I believe I know the answer to it is not specifically mentioned 
in the DBI docs.

If I use bind_param(N, $param, {TYPE => sql_type}) the parameter is 
bound as a sql_type.

If I use execute_for_fetch I don't believe there is a way to specify the 
parameter type.

However, DBI talks about sticky types (mostly wrt bind_col) and since I 
added support for sticky types to DBD::ODBC (a few years ago) the 
following actually works:

my $s = $h->prepare(q/some sql/);
$s->bind_param(1, undef, {TYPE=>SQL_DECIMAL});
$s->execute_for_fetch($fetch_tuple_sub);

as DBD::ODBC knows you bound p1 as SQL_DECIMAL so when you call 
execute_for_fetch and it describes the parameters it knows p1 has had 
its type overridden as a SQL_DECIMAL (despite what SQLDescribeParam says 
in ODBC). It does not care you called bind_param and set p1 to undef as 
that is ignored when execute_for_fetch is called.

It appears DBIx::Class uses parameter types a lot and is looking at 
improvements using execute_for_fetch. I suggested to the DBIx::Class 
guys the sticky parameter type was probably valid (and certainly is in 
DBD::ODBC) but is this the intention of DBI?

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.