in hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/backend/store/BackendMutation.java [83:147]
private void optimizeUpdates(BackendEntry entry, Action action) {
final Id id = entry.id();
assert id != null;
final List<BackendAction> items = this.updates.get(entry.type(), id);
assert items != null;
boolean ignoreCurrent = false;
for (Iterator<BackendAction> iter = items.iterator(); iter.hasNext(); ) {
BackendAction originItem = iter.next();
Action originAction = originItem.action();
switch (action) {
case INSERT:
iter.remove();
break;
case DELETE:
if (originAction == Action.INSERT) {
throw incompatibleActionException(action, originAction);
} else if (originAction == Action.DELETE) {
ignoreCurrent = true;
} else {
iter.remove();
}
break;
case APPEND:
if (entry.type().isUniqueIndex() &&
originAction == Action.APPEND) {
throw new IllegalArgumentException(String.format(
"Unique constraint conflict is found in" +
" transaction between %s and %s",
entry, originItem.entry()));
}
if (originAction == Action.INSERT ||
originAction == Action.DELETE) {
throw incompatibleActionException(action, originAction);
} else {
Id subId = entry.subId();
Id originSubId = originItem.entry().subId();
assert subId != null;
if (subId == originSubId || subId.equals(originSubId)) {
iter.remove();
}
}
break;
case ELIMINATE:
if (originAction == Action.INSERT ||
originAction == Action.DELETE) {
throw incompatibleActionException(action, originAction);
} else {
Id subId = entry.subId();
Id originSubId = originItem.entry().subId();
assert subId != null;
if (subId == originSubId || subId.equals(originSubId)) {
iter.remove();
}
}
break;
default:
throw new AssertionError(String.format(
"Unknown mutate action: %s", action));
}
}
if (!ignoreCurrent) {
items.add(BackendAction.of(action, entry));
}
}