Description
In Gremlin-Java, g.V().has(a).has(b).has(c).out() is originally represented as [GraphStep,HasStep(a),HasStep(b),HasStep(c),VertexStep]. Ultimately, InlineFilterStrategy or most provider strategies will turn such HasStep-chains into [GraphStep,HasStep(a,b,c),VertexStep]. That is, strategies fold has()-steps "left" and delete "right" has()-steps and left propagates their labels (i.e. clock cycles). I think that GraphTraversal should simply do this:
public GraphTraversal has(whateves) { if(this.getEndStep() instanceof HasStep) this.getEndSte().addHasContainer(new HasContainer(whateves)) else this.addStep(new HasStep(new HasContainer(whateves))); this.bytecode.addStep("has",whateves); return this; }
In essence, a "write time" optimization can be done. Given that chains of has()'s is super common, this can save significant clock-cycles in the long run of a production application.
Attachments
Issue Links
- links to