code: func (f *fragment) setValueBase(columnID uint64, bitDepth uint, value uint64, clear bool) (changed bool, err error) {
  	f.mu.Lock()
  	defer f.mu.Unlock()
  	mustClose, err := f.reopen()
  	if err != nil {
  		return false, errors.Wrap(err, "reopening")
  	}
  	if mustClose {
  		defer f.safeClose()
  	}
  
  	for i := uint(0); i < bitDepth; i++ {
  		if value&(1<<i) != 0 {
  			if c, err := f.unprotectedSetBit(uint64(i), columnID); err != nil {
  				return changed, err
  			} else if c {
  				changed = true
  			}
  		} else {
  			if c, err := f.unprotectedClearBit(uint64(i), columnID); err != nil {
  				return changed, err
  			} else if c {
  				changed = true
  			}
  		}
  	}
  
  	// Mark value as set (or cleared).
  	if clear {
  		if c, err := f.unprotectedClearBit(uint64(bitDepth), columnID); err != nil {
  			return changed, errors.Wrap(err, "clearing not-null")
  		} else if c {
  			changed = true
  		}
  	} else {
  		if c, err := f.unprotectedSetBit(uint64(bitDepth), columnID); err != nil {
  			return changed, errors.Wrap(err, "marking not-null")
  		} else if c {
  			changed = true
  		}
  	}
  
  	return changed, nil
  }
docs: // TODO get rid of this and use positionsForValue to generate a single write op, and set that with importPositions.