Quoting Nick Kew <[EMAIL PROTECTED]>:

static int dbd_foo_transaction_mode(apr_dbd_transaction_t *trans,
                                                                int flags)
{
  int ret = 0
   int mode = flags & APR_DBD_TRANSACTION_MODEBITS;
   switch (flags) {
             ^^^^^
               |-------> should be mode?

   case APR_DBD_TRANSACTION_COMMIT:
   case APR_DBD_TRANSACTION_ROLLBACK:
      trans->mode = mode;
      break;
   default:
      trans->mode = APR_DBD_TRANSACTION_DEFAULT ;
      break;
   }
   if ((trans->errnum != 0) && (flags & APR_DBD_TRANSACTION_CLEARERR)) {
      ret = foo_clearerror(...);

I'm guessing foo_clearerror() is a database specific function for clearing errors, if such a beast exists. If not, user gets back APR_ENOTIMPL status and the whole transaction must be rolled back. This would obviously need to be called every time an error code is returned by query/select, right?

Still a little bit unclear on the function of APR_DBD_TRANSACTION_DEFAULT here. Given that the errors need to be cleared explicitly anyway (or at least that's how I read it), having one commit mode should be sufficient (i.e. if the errors weren't cleared by using APR_DBD_TRANSACTION_CLEARERR, commit won't work anyway).

--
Bojan

Reply via email to