[
https://issues.apache.org/jira/browse/TINKERPOP-2995?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17776642#comment-17776642
]
ASF GitHub Bot commented on TINKERPOP-2995:
-------------------------------------------
FlorianHockmann commented on code in PR #2298:
URL: https://github.com/apache/tinkerpop/pull/2298#discussion_r1363815625
##########
gremlin-dotnet/example/Example.cs:
##########
@@ -0,0 +1,133 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+
+using Gremlin;
+using Gremlin.Net.Driver;
+using Gremlin.Net.Driver.Remote;
+using Gremlin.Net.Structure.IO.GraphSON;
+using Gremlin.Net.Process.Traversal;
+
+// Common imports
+using static Gremlin.Net.Process.Traversal.AnonymousTraversalSource;
+using static Gremlin.Net.Process.Traversal.__;
+using static Gremlin.Net.Process.Traversal.P;
+using static Gremlin.Net.Process.Traversal.Order;
+using static Gremlin.Net.Process.Traversal.Operator;
+using static Gremlin.Net.Process.Traversal.Pop;
+using static Gremlin.Net.Process.Traversal.Scope;
+using static Gremlin.Net.Process.Traversal.TextP;
+using static Gremlin.Net.Process.Traversal.Column;
+using static Gremlin.Net.Process.Traversal.Direction;
+using static Gremlin.Net.Process.Traversal.Cardinality;
+using static Gremlin.Net.Process.Traversal.CardinalityValue;
+using static Gremlin.Net.Process.Traversal.T;
+
+
+ConnectionExample();
+BasicGremlinExample();
+ModernTraversalExample();
+
+static void ConnectionExample()
+{
+ var server = new GremlinServer("localhost", 8182);
+
+ // Connecting to the server
+ // using var remoteConnection = new DriverRemoteConnection(new
GremlinClient(server), "g");
+
+ // Connecting to the server with customized configurations
+ using var remoteConnection = new DriverRemoteConnection(new GremlinClient(
+ new GremlinServer(hostname:"localhost", port:8182, enableSsl:false,
username:"", password:"")), "g");
+
+ // Specifying a serializer
+ var client = new GremlinClient(server, new GraphSON3MessageSerializer());
+
+ // Creating the graph traversal
+ var g = Traversal().WithRemote(remoteConnection);
+}
+
+static void BasicGremlinExample()
+{
+ var server = new GremlinServer("localhost", 8182);
+ using var remoteConnection = new DriverRemoteConnection(new
GremlinClient(server), "g");
+ var g = Traversal().WithRemote(remoteConnection);
+
+ // Basic Gremlin: adding and retrieving data
+ var v1 = g.AddV("person").Property("name", "marko").Next();
+ var v2 = g.AddV("person").Property("name", "stephen").Next();
+ var v3 = g.AddV("person").Property("name", "vadas").Next();
+
+ // Be sure to use a terminating step like next() or iterate() so that the
traversal "executes"
+ // Iterate() does not return any data and is used to just generate
side-effects (i.e. write data to the database)
+ g.V(v1).AddE("knows").To(v2).Property("weight", 0.75).Iterate();
+ g.V(v1).AddE("knows").To(v3).Property("weight", 0.75).Iterate();
+
+ // Retrieve the data from the "marko" vertex
+ var marko =
g.V().Has("person","name","marko").Values<string>("name").Next();
+ Console.WriteLine("name: " + marko);
+
+ // Find the "marko" vertex and then traverse to the people he "knows" and
return their data
+ var peopleMarkoKnows =
g.V().Has("person","name","marko").Out("knows").Values<string>("name").ToList();
+ foreach (var person in peopleMarkoKnows)
+ {
+ Console.WriteLine("marko knows " + person);
+ }
+}
+
+static void ModernTraversalExample()
+{
+ var server = new GremlinServer("localhost", 8182);
+ using var remoteConnection = new DriverRemoteConnection(new
GremlinClient(server), "g");
+ var g = Traversal().WithRemote(remoteConnection);
+
+ /*
+ This example requires the Modern toy graph to be preloaded upon launching
the Gremlin server.
+ For details, see
https://tinkerpop.apache.org/docs/current/reference/#gremlin-server-docker-image
and use
+ conf/gremlin-server-modern.yaml.
+ */
+ var e1 = g.V(1).BothE().ToList(); // (1)
+ var e2 = g.V(1).BothE().Where(OtherV().HasId(2)).ToList(); // (2)
+ var v1 = g.V(1).Next();
+ var v2 = g.V(2).Next();
+ var e3 = g.V(v1).BothE().Where(OtherV().Is(v2)).ToList(); // (3)
+ var e4 = g.V(v1).OutE().Where(InV().Is(v2)).ToList(); // (4)
+ var e5 = g.V(1).OutE().Where(InV().Has(T.Id, Within(2, 3))).ToList(); //
(5)
Review Comment:
(nitpick) Any reason why this can't be `HasId(Within(2, 3))` instead?
##########
gremlin-dotnet/example/Example.cs:
##########
@@ -0,0 +1,133 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+
+using Gremlin;
+using Gremlin.Net.Driver;
+using Gremlin.Net.Driver.Remote;
+using Gremlin.Net.Structure.IO.GraphSON;
+using Gremlin.Net.Process.Traversal;
+
+// Common imports
+using static Gremlin.Net.Process.Traversal.AnonymousTraversalSource;
+using static Gremlin.Net.Process.Traversal.__;
+using static Gremlin.Net.Process.Traversal.P;
+using static Gremlin.Net.Process.Traversal.Order;
+using static Gremlin.Net.Process.Traversal.Operator;
+using static Gremlin.Net.Process.Traversal.Pop;
+using static Gremlin.Net.Process.Traversal.Scope;
+using static Gremlin.Net.Process.Traversal.TextP;
+using static Gremlin.Net.Process.Traversal.Column;
+using static Gremlin.Net.Process.Traversal.Direction;
+using static Gremlin.Net.Process.Traversal.Cardinality;
+using static Gremlin.Net.Process.Traversal.CardinalityValue;
+using static Gremlin.Net.Process.Traversal.T;
+
+
+ConnectionExample();
+BasicGremlinExample();
+ModernTraversalExample();
Review Comment:
I think it would be good to add one async example as many modern C#
applications use async/await and Gremlin.Net is also built completely
asynchronously internally.
So at least something like:
```c#
var marko = await g.V().Has("person", "name",
"marko").Values<string>("name").Promise(t => t.Next());
```
##########
gremlin-dotnet/example/.gitignore:
##########
@@ -0,0 +1 @@
+/Gremlin.Net.3.7.0/
Review Comment:
I'm a bit confused by this `.gitgnore`. How is this directory created and
won't we have to change the entry for every version of TinkerPop?
> Create Sample Applications in each GLV
> --------------------------------------
>
> Key: TINKERPOP-2995
> URL: https://issues.apache.org/jira/browse/TINKERPOP-2995
> Project: TinkerPop
> Issue Type: Improvement
> Components: dotnet, go, javascript, python
> Affects Versions: 3.5.7
> Reporter: Yang Xia
> Priority: Major
>
> It would be great to have working example applications for each GLV, with
> basic traversal examples and common connection settings.
> Currently we have an `example.py` for python, but it is very minimal. There
> is also an `example.go` for golang, but that appears to be outdated. As far
> as I know, dotnet only has templates and javascript doesn't have any examples
> at all.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)