Tom Kolanko created TINKERPOP-2942: -------------------------------------- Summary: properties named ID cannot be used when combined with a label Key: TINKERPOP-2942 URL: https://issues.apache.org/jira/browse/TINKERPOP-2942 Project: TinkerPop Issue Type: Bug Components: process Affects Versions: 3.6.2 Reporter: Tom Kolanko
When you have a property named `ID` you cannot filter on it when combined with a vertex label. Here is a testcase that runs on the gremlin-console: {code} gremlin> graph = TinkerFactory.createModern() ==>tinkergraph[vertices:6 edges:6] gremlin> g = traversal().withEmbedded(graph) ==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard] gremlin> g.V(1).property("ID", "ABC") ==>v[1] gremlin> g.V(1).properties() ==>vp[name->marko] ==>vp[ID->ABC] ==>vp[age->29] gremlin> g.V().has('ID', 'ABC').count() ==>1 gremlin> g.V().has('PERSON', 'ID', 'ABC').count() ==>0 gremlin> g.V().hasLabel('PERSON').has('ID', 'ABC').count() ==>0 {code} if you compare the explain plans: {code} gremlin> g.V().has('ID', 'ABC').count().explain() ==>Traversal Explanation ==================================================================================================== Original Traversal [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] ConnectiveStrategy [D] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] IdentityRemovalStrategy [O] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] ByModulatorOptimizationStrategy [O] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] CountStrategy [O] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] MatchPredicateStrategy [O] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] FilterRankingStrategy [O] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] IncidentToAdjacentStrategy [O] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] InlineFilterStrategy [O] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] AdjacentToIncidentStrategy [O] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] RepeatUnrollStrategy [O] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] PathRetractionStrategy [O] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] EarlyLimitStrategy [O] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] LazyBarrierStrategy [O] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] TinkerMergeEVStepStrategy [P] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] TinkerGraphCountStrategy [P] [GraphStep(vertex,[]), HasStep([ID.eq(ABC)]), CountGlobalStep] TinkerGraphStepStrategy [P] [TinkerGraphStep(vertex,[ID.eq(ABC)]), CountGlobalStep] ProfileStrategy [F] [TinkerGraphStep(vertex,[ID.eq(ABC)]), CountGlobalStep] StandardVerificationStrategy [V] [TinkerGraphStep(vertex,[ID.eq(ABC)]), CountGlobalStep] Final Traversal [TinkerGraphStep(vertex,[ID.eq(ABC)]), CountGlobalStep] gremlin> {code} {code} gremlin> g.V().has('PERSON', 'ID', 'ABC').count().explain() ==>Traversal Explanation ======================================================================================================================= Original Traversal [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] ConnectiveStrategy [D] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] IdentityRemovalStrategy [O] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] ByModulatorOptimizationStrategy [O] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] CountStrategy [O] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] MatchPredicateStrategy [O] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] FilterRankingStrategy [O] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] IncidentToAdjacentStrategy [O] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] InlineFilterStrategy [O] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] AdjacentToIncidentStrategy [O] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] RepeatUnrollStrategy [O] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] PathRetractionStrategy [O] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] EarlyLimitStrategy [O] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] LazyBarrierStrategy [O] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] TinkerMergeEVStepStrategy [P] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] TinkerGraphCountStrategy [P] [GraphStep(vertex,[]), HasStep([~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] TinkerGraphStepStrategy [P] [TinkerGraphStep(vertex,[~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] ProfileStrategy [F] [TinkerGraphStep(vertex,[~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] StandardVerificationStrategy [V] [TinkerGraphStep(vertex,[~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] Final Traversal [TinkerGraphStep(vertex,[~label.eq(PERSON), ID.eq(ABC)]), CountGlobalStep] {code} The `ID.eq(ABC)` part seems to be the same -- This message was sent by Atlassian Jira (v8.20.10#820010)