Thank you for the fixes Valentyn, I've incorporated that PR. The list I proposed here was a minimum number of functions, so we can definitely see what it would take to include something like a string formatting function.
Dave On Thu, Feb 16, 2023 at 8:36 AM Valentyn Kahamlyk <valent...@bitquilltech.com.invalid> wrote: > Hi, > > Dave, thank you for the detailed proposal! > > I made small PR with naming fixes: > https://github.com/apache/tinkerpop/pull/1973, please take a look. > > Also I would propose to consider adding `startWith`, `endWith` and > maybe `contains` string functions. > > Another interesting feature to keep in mind is string formatting. > for example > `g.V(1).values('first_name').concat(' ').concat(V(1).values('last_name')` > can be simplified as > `g.V(1).asString('%s %s', values('first_name'), values('last_name'))` > > Regards, Valentyn > > > On Tue, Feb 14, 2023 at 8:47 AM David Bechberger <d...@bechberger.com> > wrote: > > > My apologies, I just saw that I didn't include a link in that email. The > > proposal is here: > > > > > > > https://github.com/apache/tinkerpop/blob/proposal_3/docs/src/dev/future/proposal-3-remove-closures.asciidoc > > > > Dave > > > > On Tue, Feb 14, 2023 at 7:09 AM David Bechberger <d...@bechberger.com> > > wrote: > > > > > Hi All, > > > > > > There are a number of useful operations that Gremlin users often wish > to > > > perform that are not provided today in the form of traversal steps or > > > predicates (P/TextP). For historical reasons these functions were > omitted > > > and users were able to accomplish these tasks by specifying anonymous > > code > > > blocks or “closures” to perform these tasks. For example, below is an > > > example of how you can achieve a case-insensitive search for any cities > > > that contain “Miami”. > > > > > > g.V().hasLabel('city'). > > > > > > > > > has('name',filter{it.get().toLowerCase().contains('Miami'.toLowerCase())}) > > > > > > While this is a powerful fallback mechanism in Gremlin to handle use > > cases > > > where there is no functionality within the Gremlin language to meet the > > > requirements. However, for a variety of reasons such as security and > > > performance, many/most remote providers of TinkerPop do not allow users > > to > > > execute closures as part of a query. This leaves users with a problem, > as > > > the mechanism provided to solve these sorts of use cases is not > allowed. > > I > > > have come up with a proposed framework for removing the need for > closures > > > by adding the most commonly requested functions as new Gremlin steps. > > > Below is a proposal to highlight this and propose a first set of these > > > steps for string manipulation, list manipulation, and data > manipulation. > > > > > > What are your thoughts on this approach? > > > Any items we missed? > > > Concerns? > > > > > > Thanks, > > > Dave > > > > > >