module making calling procedures in DBI easier

"Martin J. Evans" <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.sybase.devel
Message-ID <[email protected]>
I have been working with DBD::Oracle, DBD::mysql and DBD::DB2 in a 
project recently before we decided to settle on Oracle. In the process I 
have developed some code which makes calling procedures and functions in 
a DBD-independent way easier. As we dropped MySQL and DB2 in favour of 
Oracle some of the MySQL and DB2 code is not up to date but I could 
perhaps sort that out. I am tentatively considering releasing this as a 
module on CPAN because a) this sometimes crops up on dbi-users and b) I 
think it may be of general use. My question is where would this sit 
namespace-wise?

The existing code is not a DBIx (mostly because I never found out a 
decent way of chaining DBIx modules and we use DBIx::Log4perl), it is 
just a module which takes a DBI connection handle and simplifies calling 
procedures/functions by a) hiding differences between MySQL, DB2 and 
Oracle b) avoiding having to bind parameters, c) lob handling d) 
mimicing handling output bound parameters even though mysql does not 
have them.

e.g.,

callProc(\%attributes, $schema_or_package_synonym, $proc_fn_name, 
@parameters);

callProc automatically binds the parameters in @parameters in order. If 
they are a simple scalar they are input parameters. If they are a simple 
scalar reference they are an input/output parameter with no specific 
binding type. If they are a reference to a hash then you can use keys of 
blob/clob/cursor to signify how they should be bound and similarly if 
the value is a scalar they are input or scalar reference an input.output 
type. It does not support names parameters as they are not universally 
supported across DBDs - it uses ? or :pN depending on the database.

The said code also has a better (workable) implementation of 
lastInsertId (the one in most DBDs does not work reliably) and an 
interface for sequences but this is of less use and I'd probably leave 
it out.

I could provide more details but I thought I'd sound you out first. I'd 
appreciate any comments even if they are I doubt anyone would use this.

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.