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 <[email protected]> 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 <[email protected]> > 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 > > >
