You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by va...@apache.org on 2024/05/24 21:05:52 UTC
(tinkerpop) branch valentyn/bytecode-poc created (now 94945faf4f)
This is an automated email from the ASF dual-hosted git repository.
valentyn pushed a change to branch valentyn/bytecode-poc
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
at 94945faf4f draft
This branch includes the following new commits:
new 94945faf4f draft
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(tinkerpop) 01/01: draft
Posted by va...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
valentyn pushed a commit to branch valentyn/bytecode-poc
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 94945faf4f1a4109f99e5b4b9a647660b4d7db2c
Author: Valentyn Kahamlyk <Va...@improving.com>
AuthorDate: Fri May 24 14:05:43 2024 -0700
draft
---
.../gremlin/process/traversal/Bytecode.java | 34 ++++++++++++++++++++
.../gremlin/process/traversal/BytecodeV4test.java | 36 ++++++++++++++++++++++
2 files changed, 70 insertions(+)
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
index 5b88cea5fc..37535765df 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Bytecode.java
@@ -54,10 +54,40 @@ public class Bytecode implements Cloneable, Serializable {
private List<Instruction> sourceInstructions = new ArrayList<>();
private List<Instruction> stepInstructions = new ArrayList<>();
+ private final StringBuilder gremlin = new StringBuilder();
+
public Bytecode() {}
public Bytecode(final String sourceName, final Object... arguments) {
this.sourceInstructions.add(new Instruction(sourceName, flattenArguments(arguments)));
+ addToGremlin(sourceName, arguments);
+ }
+
+ private void addToGremlin(final String name, final Object... arguments) {
+ gremlin.append(".").append(name).append('(');
+
+ final Object[] flattenedArguments = flattenArguments(arguments);
+ for (int i = 0; i < flattenedArguments.length; i++) {
+ if (i != 0) {
+ gremlin.append(',');
+ }
+ gremlin.append(argAsString(flattenedArguments[i]));
+ }
+
+ gremlin.append(')');
+ }
+
+ private String argAsString(final Object arg) {
+ if (arg instanceof String)
+ return "\"" + arg + "\"";
+ if (arg instanceof Integer)
+ return arg.toString();
+
+ return null;
+ }
+
+ public String getGremlin(final String g) {
+ return g + gremlin;
}
/**
@@ -82,6 +112,8 @@ public class Bytecode implements Cloneable, Serializable {
} else
this.sourceInstructions.add(new Instruction(sourceName, flattenArguments(arguments)));
Bindings.clear();
+
+ addToGremlin(sourceName, arguments);
}
/**
@@ -92,6 +124,8 @@ public class Bytecode implements Cloneable, Serializable {
*/
public void addStep(final String stepName, final Object... arguments) {
this.stepInstructions.add(new Instruction(stepName, flattenArguments(arguments)));
+
+ addToGremlin(stepName, arguments);
}
/**
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeV4test.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeV4test.java
new file mode 100644
index 0000000000..dbc66b8a7d
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/BytecodeV4test.java
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process.traversal;
+
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class BytecodeV4test {
+
+ @Test
+ public void shouldWork() {
+ assertEquals("g.V().count()",
+ EmptyGraph.instance().traversal().V().count().asAdmin().getBytecode().getGremlin("g"));
+ assertEquals("g.addV(\"test\")",
+ EmptyGraph.instance().traversal().addV("test").asAdmin().getBytecode().getGremlin("g"));
+ }
+}