[
https://issues.apache.org/jira/browse/TINKERPOP-3035?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17841266#comment-17841266
]
ASF GitHub Bot commented on TINKERPOP-3035:
-------------------------------------------
FlorianHockmann commented on PR #2565:
URL: https://github.com/apache/tinkerpop/pull/2565#issuecomment-2079581200
The problem is however that the Gherkin tests already include this step but
they already passed before my change here as @spmallette noted in the issue
description.
This got me curious however as I was wondering how this could actually work
without an overload taking a dictionary in C# since I couldn't get it to work
in C# without my change here. (I did write a test case when I implemented this.
I only deleted it before committing to not impact other tests.)
Stephens assumption was:
> It works because it probably piggybacks on property(object?, object?,
objects[]?) which has all nullable arguments.
Turns out that this is not the case. The `DotNetTranslator` produces a C#
traversal with individual `Property` steps for each map entry:
https://github.com/apache/tinkerpop/blob/e3ced38b2108f3edb29f11fbfa4f6950427bcbd9/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs#L539
So, as a next attempt I wanted to change the translator to instead produce a
C# traversal using the new `Dictionary` overload.
But then I learned that that's now even possible since Gremlin-Java already
produces Bytecode without this overload:
https://github.com/apache/tinkerpop/blob/e3ced38b2108f3edb29f11fbfa4f6950427bcbd9/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java#L3221-L3234
and the translator only gets the Bytecode produced from the traversal.
So I don't see any elegant way to test this using Gherkin tests without
changing the Gremlin-Java overload (which is a bigger change than what makes
sense here in my opinion). We could add a hard-coded translation for one
feature test to ensure that the traversal in C# will use the new overload, but
I don't really like maintaining such hard-coded translations.
However, this got me to the idea to instead use the translation from C# to
Groovy for a test. I just pushed an updated commit with such a test. The test
does not compile without the added overload and the translation also includes
the successful construction of Bytecode from the traversal as the translator
also uses the Bytecode.
> Add explicit property(IDictionary) for .NET
> -------------------------------------------
>
> Key: TINKERPOP-3035
> URL: https://issues.apache.org/jira/browse/TINKERPOP-3035
> Project: TinkerPop
> Issue Type: Bug
> Components: dotnet
> Affects Versions: 3.6.6
> Reporter: Stephen Mallette
> Priority: Minor
>
> There is no {{property(IDictionary<object,object>)}} method for .NET to
> accompany the {{property(Map)}} step. It works because it probably piggybacks
> on {{property(object?, object?, objects[]?)}} which has all nullable
> arguments. The explicit overload with the {{IDictionary}} should be added.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)