northwesternmutual / grammes

A Go package built to communicate with Apache TinkerPop™ Graph computing framework using Gremlin; a graph traversal language used by graph databases such as JanusGraph®, MS Cosmos DB, AWS Neptune, and DataStax® Enterprise Graph.
Apache License 2.0
125 stars 45 forks source link

Escaping input in queries #15

Open ghost opened 4 years ago

ghost commented 4 years ago

I find that running Gremlin queries with grammes, that the library requires the query to be escaped already.

Could it be an idea to sanity check the input or should this be left to the user?

This is just a quick and dirty variant, but something like this seems to work for me:

func escape(w string) string {
   w = strings.Replace(w, "\\","\\\\",-1)
       w = strings.Replace(w, "\n","\\\n",-1)
   w = strings.Replace(w, "@","\\\\@",-1)
   w = strings.Replace(w, "$","\\$",-1)
   w = strings.Replace(w, "[","\\\\[",-1)
   w = strings.Replace(w, "]","\\\\]",-1)
   w = strings.Replace(w, "!","\\\\!",-1)
   w = strings.Replace(w, "'","\\\\'",-1)
   //w = strings.Replace(w, "(","\\\\(",-1)
   //w = strings.Replace(w, ")","\\\\)",-1)
   w = strings.Replace(w, "*","\\\\*",-1)
   w = strings.Replace(w, "\"","\\\"",-1)
   return w
}