docs: def _merge_legacy(run, full_result, result, index):
      """Merge a result from a legacy opcode into the full results.
      """
      affected = result.get('n', 0)
  
      errmsg = result.get("errmsg", result.get("err", ""))
      if errmsg:
          # wtimeout is not considered a hard failure in
          # MongoDB 2.6 so don't treat it like one here.
          if result.get("wtimeout"):
              error_doc = {'errmsg': errmsg, 'code': _WRITE_CONCERN_ERROR}
              full_result['writeConcernErrors'].append(error_doc)
          else:
              code = result.get("code", _UNKNOWN_ERROR)
              error = _make_error(run.index(index), code, errmsg, run.ops[index])
              if "errInfo" in result:
                  error["errInfo"] = result["errInfo"]
              full_result["writeErrors"].append(error)
              return
      if run.op_type == _INSERT:
          full_result['nInserted'] += 1
      elif run.op_type == _UPDATE:
          if "upserted" in result:
              doc = {_UINDEX: run.index(index), _UID: result["upserted"]}
              full_result["upserted"].append(doc)
              full_result['nUpserted'] += affected
          # Versions of MongoDB before 2.6 don't return the _id for an
          # upsert if _id is not an ObjectId.
          elif result.get("updatedExisting") is False and affected == 1:
              op = run.ops[index]
              # If _id is in both the update document *and* the query spec
              # the update document _id takes precedence.
              _id = op['u'].get('_id', op['q'].get('_id'))
              doc = {_UINDEX: run.index(index), _UID: _id}
              full_result["upserted"].append(doc)
              full_result['nUpserted'] += affected
          else:
              full_result['nMatched'] += affected
  
      elif run.op_type == _DELETE:
          full_result['nRemoved'] += affected