@Override
  public void process(NodePropertyUpdate update) {
    // build uniqueness verification state
    switch (update.getUpdateMode()) {
      case ADDED:
        propertyValueDiffSet(referenceCount, update.getValueAfter()).add(update.getNodeId());
        break;
      case CHANGED:
        propertyValueDiffSet(referenceCount, update.getValueBefore()).remove(update.getNodeId());
        propertyValueDiffSet(referenceCount, update.getValueAfter()).add(update.getNodeId());
        break;
      case REMOVED:
        propertyValueDiffSet(referenceCount, update.getValueBefore()).remove(update.getNodeId());
        break;
      default:
        throw new UnsupportedOperationException();
    }

    // do not flush update before close
    updates.add(update);
  }