Don't call the underlying data-source commit/rollback function repeatedly
in the common case (this still requires the underlying data-source handle
repeated commit/rollback calls, though, it's just a simple cache and any
slightly complex set of data-source cursors will defeat it).