<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