<snip>
> 
> So here is my suggestion, based on my work on the DBD::Oracle
> execute_array patch:
> 
> DBI interface:
> 
> The main user-level interface is execute_array(). Four different ways to
> use:
> 
> 1. Column-wise, using $sth->bind_param_array() for each column, then
>    $sth->execute_array(\%attr). This is the only method that supports
>    named placeholders (:foo style).
> 2. Column-wise, using $sth->execute_array(\%attr, [EMAIL PROTECTED], [EMAIL 
> PROTECTED]).

m'kay.

> 3. Row-wise, using execute_array({ArrayTupleFetch => sub { ... } }).
>    This is the only row-wise method supported in DBI 1.37. This permits
>    calling execute_array() with a very large number of rows without
>    having to keep them all in memory at once (subject to driver support;
>    Oracle will buffer rows and send them off to Oracle in batches
>    because of OCI restrictions).

Does this need to be modified to provide the column type info ? I don't see
anything in the DBI 1.38 POD indicating type info can be specified...tho
I spose the bind_param() i/f (wo binding data) can be used as a cheat ?

> 4. Row-wise, using execute_array({ArrayTuple => [ [1,'A'], [2,'B'] ]}).
>    Useful in the common case where the user already has a list
>    of tuples. Less memory-efficient than column-wise, though.

Again, whence column type info ? Also, why less memory efficient 
(in the wholistic sense) ? If you bind N column arrays of M elements each
column wise, vs. binding M tuple arrays of N columns for rowwise,
isn't the total memory use nearly equal ?

> 
> DBD::xxx interface:
> 
> Low-level methods implemented by drivers and usually only called by the
> DBI implementation of execute_array():
> 
> 1. The execute_for_fetch() method. The implementation of this in the
>    driver is mandatory (in the sense that without it no native
>    execute_array() will be available; DBI will emulate it with an
>    execute() for each row).

I assume you mean mandatory to support rowwise ?

> 2. A new $sth->execute_array_rowwise([EMAIL PROTECTED], [EMAIL PROTECTED])
>    for direct implementation of row-wise array execution. Optional; if
>    implemented it will be used by DBI::execute_array() when an array of
>    tuples is already available (ie. execute_array() method 4 above).

- needs type attribute capability; maybe also a named PH order list to indicate
which tuple elements map to which named PHs ?

- should argument order be changed to more closely match execute_array ?

> 3. A new $sth->execute_array_colwise([EMAIL PROTECTED], [EMAIL PROTECTED], ..., 
> [EMAIL PROTECTED])
>    for direct implementation of column-wise array execution. Optional;
>    if implemented it will be used by DBI for execute_array() method 1
>    and 2 above. If we want to implement named placeholders this method
>    needs to be extended to take a mapping { 'foo' => [EMAIL PROTECTED],
>    'bar' => [EMAIL PROTECTED] }, but maybe that is not so important.
> 
> 
>  - Kristian.
> 
> -- 
> Kristian Nielsen   [EMAIL PROTECTED]
> Development Manager, Sifira A/S
> 

Dean Arnold
Presicient Corp.
www.presicient.com

Reply via email to