© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
Apache TinkerPopAT
Apache TinkerPop•13mo ago•
24 replies
Arthur from gdotv

Neptune, Gremlin Java & Bindings

Hey,

I've got a bit of an issue that I'm trying to find a solution for regarding the use of bindings in Gremlin with Neptune.
As stated in the docs, they're not supported. What I'd like to get to is a workaround solution where I can locally apply bindings to a query, convert it to a string and submit it to Neptune with the bindings "applied".

So for instance given the following query:
g.V().hasLabel(my_label_param).limit(results_limit), and bindings my_label_param='airport', results_limit=100
I'd like to submit the following query on Neptune:
g.V().hasLabel('airport').limit(100)

Is there a way perhaps through the gremlin-lang implementation to achieve this? The reason I'd prefer it this way is so that I'm not relying on string replacement where gremlin injection could occur.
Solution
@G.V() - Gremlin IDE (Arthur) with a small modification, it's possible to change the existing translators in 3.x to replace variable placeholders for the values in the bindings. adding this override to
GroovyTranslator.DefaultTypeTranslator
GroovyTranslator.DefaultTypeTranslator
:
        @Override
        protected Script convertToScript(final Object object) {
            if (object instanceof Bytecode.Binding) {
                return super.convertToScript(((Bytecode.Binding) object).value());
            } else {
                return super.convertToScript(object);
            }
        }
        @Override
        protected Script convertToScript(final Object object) {
            if (object instanceof Bytecode.Binding) {
                return super.convertToScript(((Bytecode.Binding) object).value());
            } else {
                return super.convertToScript(object);
            }
        }

seems to make it work how you want:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> b = new org.apache.tinkerpop.gremlin.process.traversal.Bindings()
==>bindings[main]
gremlin> t = g.V().has('name',b.of("n","josh"));[]
gremlin> translator = GroovyTranslator.of("g")
==>translator[g:gremlin-groovy]
gremlin> translator.translate(t).getScript()
==>g.V().has("name","josh")
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> b = new org.apache.tinkerpop.gremlin.process.traversal.Bindings()
==>bindings[main]
gremlin> t = g.V().has('name',b.of("n","josh"));[]
gremlin> translator = GroovyTranslator.of("g")
==>translator[g:gremlin-groovy]
gremlin> translator.translate(t).getScript()
==>g.V().has("name","josh")

I guess from your perspective that means you create your own extension to
DefaultTypeTranslator
DefaultTypeTranslator
then hand it to
GroovyTranslator.of("g", <YourTypeTranslator>)
GroovyTranslator.of("g", <YourTypeTranslator>)
. i think that would work. The 4.x translators based on the grammar (and not bytecode) are designed to allow this sort of translation more directly, but that's not something you should have to worry about for a while i guess.
Jump to solution
Apache TinkerPop banner
Apache TinkerPopJoin
Apache TinkerPop is an open source graph computing framework and the home of the Gremlin graph query language.
1,376Members
Resources
Was this page helpful?

Similar Threads

Recent Announcements

Similar Threads

Gremlin with AWS Neptune
Apache TinkerPopATApache TinkerPop / questions
2y ago
Hiring a Neptune/Gremlin Administrator
Apache TinkerPopATApache TinkerPop / questions
10mo ago
gremlin-go, MergeE, and Neptune
Apache TinkerPopATApache TinkerPop / questions
3y ago
AWS Neptune and gremlin-javascript versions
Apache TinkerPopATApache TinkerPop / questions
3y ago