Hello, do you have any opinion or comments?
Tim, you as a DBI maintainer, what do you think about those ideas?
On Friday 27 April 2018 16:03:59 p...@cpan.org wrote:
> Hello,
>
> I would like to propose two new changes to DBI which extends
> last_insert_id API.
>
> First one: Allow to call $dbh->last_insert_id() method without
> arguments. Currently this method needs to take four arguments (plus
> $dbh) and XS code validates their count:
>
> XS_EUPXS(XS_DBD__Perl__db_last_insert_id)
> {
> dVAR; dXSARGS;
> if (items < 5 || items > 6)
>croak_xs_usage(cv, "dbh, catalog, schema, table, field,
> attr=Nullsv");
> ...
> }
>
> More databases does not process these arguments and caller needs to
> supply four undefs.
>
> So I'm proposing change that caller would be allowed to call
> $dbh->last_insert_id() without any argument and DBI would fill those
> missing arguments by undefs prior to calling DBI driver function. This
> does not change driver API, so all existing DBI drivers would work as
> before and allows application to not specify those useless four undef
> arguments.
>
> Second change: Add a new statement method $sth->last_insert_id().
> Some databases (e.g. MariaDB) supports tracking last insert id when more
> statement or cursor handles are open. This would allow to call e.g.
>
> $sth1->execute();
> $sth2->execute();
> ...
> $sth1->last_insert_id();
> $sth2->last_insert_id();
>
> for drivers which would support it. $sth1->last_insert_id() would return
> insert it which belongs to last ->execute of $sth1 even there were more
> INSERT/execute calls (e.g. by $sth2).
>
> Currently database handle method $dbh->last_insert_id() returns id of
> the most recent INSERT statement.
>
> What do you think about those two enhancements?
>
> Here is my prototype implementation for DBI:
> https://github.com/perl5-dbi/dbi/compare/master...pali:last-insert-id
>
> DBI drivers can then implement own dbd_st_last_insert_id() function and
> provide correct id for the selected $sth statement.