in hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugePrimaryKeyStrategy.java [47:106]
public void apply(Traversal.Admin<?, ?> traversal) {
List<Step> removeSteps = new LinkedList<>();
Mutating curAddStep = null;
List<Step> stepList = traversal.getSteps();
for (int i = 0, s = stepList.size(); i < s; i++) {
Step step = stepList.get(i);
if (i == 0 && AddVertexStartStep.class.isInstance(step)) {
curAddStep = (Mutating) step;
continue;
} else if (curAddStep == null && AddVertexStep.class.isInstance((step))) {
curAddStep = (Mutating) step;
continue;
}
if (curAddStep == null) continue;
if (!AddPropertyStep.class.isInstance(step)) {
curAddStep = null;
continue;
}
AddPropertyStep propertyStep = (AddPropertyStep) step;
if (propertyStep.getCardinality() == Cardinality.single
|| propertyStep.getCardinality() == null) {
Object[] kvs = new Object[2];
List<Object> kvList = new LinkedList<>();
propertyStep.getParameters().getRaw().forEach((k, v) -> {
if (T.key.equals(k)) {
kvs[0] = v.get(0);
} else if (T.value.equals(k)) {
kvs[1] = v.get(0);
} else {
kvList.add(k.toString());
kvList.add(v.get(0));
}
});
curAddStep.configure(kvs);
if (kvList.size() > 0) {
curAddStep.configure(kvList.toArray(new Object[kvList.size()]));
}
removeSteps.add(step);
} else {
curAddStep = null;
}
}
for (Step index : removeSteps) {
traversal.removeStep(index);
}
}