Tx commit error

class val TxCommitError
  """
  Error committing a transaction.
  """
  let _verdict: TxCommitVerdict
  let _diag: DiagChain

  new val create(verdict': TxCommitVerdict, diag': DiagChain =
    recover val Array[DiagRecord] end) =>
    _verdict = verdict'
    _diag = diag'

  fun verdict(): TxCommitVerdict => _verdict

  fun string(): String iso^ =>
    recover iso
      let s = String
      s.append("TxCommitError: ")
      s.append(_verdict.string())
      try
        let rec = _diag(0)?
        s.append(" [")
        s.append(rec.sqlstate)
        s.append("]")
      end
      s
    end

  fun unsafe_diag(): DiagChain => _diag

type TxCommitVerdict is (CommitFailed | CommitAmbiguous | NotInTransaction)

primitive CommitFailed
  """
  Server rejected the commit; transaction rolled back.
  """
  fun string(): String val => "commit failed (rolled back by server)"

primitive CommitAmbiguous
  """
  Commit outcome unknown; reconnect required.
  """
  fun string(): String val => "commit result unknown (reconnect required)"

primitive NotInTransaction
  """
  Commit or rollback called without an active transaction.
  """
  fun string(): String val => "not in transaction"