code: func (t *tableCommon) RemoveRecord(ctx sessionctx.Context, h int64, r []types.Datum) error {
  	err := t.removeRowData(ctx, h)
  	if err != nil {
  		return err
  	}
  	err = t.removeRowIndices(ctx, h, r)
  	if err != nil {
  		return err
  	}
  
  	ctx.StmtAddDirtyTableOP(table.DirtyTableDeleteRow, t.physicalTableID, h, nil)
  	if shouldWriteBinlog(ctx) {
  		cols := t.Cols()
  		colIDs := make([]int64, 0, len(cols)+1)
  		for _, col := range cols {
  			colIDs = append(colIDs, col.ID)
  		}
  		var binlogRow []types.Datum
  		if !t.meta.PKIsHandle {
  			colIDs = append(colIDs, model.ExtraHandleID)
  			binlogRow = make([]types.Datum, 0, len(r)+1)
  			binlogRow = append(binlogRow, r...)
  			binlogRow = append(binlogRow, types.NewIntDatum(h))
  		} else {
  			binlogRow = r
  		}
  		err = t.addDeleteBinlog(ctx, binlogRow, colIDs)
  	}
  	colSize := make(map[int64]int64)
  	for id, col := range t.Cols() {
  		val := -int64(len(r[id].GetBytes()))
  		if val != 0 {
  			colSize[col.ID] = val
  		}
  	}
  	ctx.GetSessionVars().TxnCtx.UpdateDeltaForTable(t.physicalTableID, -1, 1, colSize)
  	return err
  }
docs: // RemoveRecord implements table.Table RemoveRecord interface.