[ https://issues.apache.org/jira/browse/TINKERPOP-2942?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tom Kolanko closed TINKERPOP-2942. ---------------------------------- Resolution: Fixed typo in query > 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 > Priority: Minor > > 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)