[ 
https://issues.apache.org/jira/browse/TINKERPOP-3261?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18094434#comment-18094434
 ] 

ASF GitHub Bot commented on TINKERPOP-3261:
-------------------------------------------

Cole-Greer commented on code in PR #3483:
URL: https://github.com/apache/tinkerpop/pull/3483#discussion_r3540339794


##########
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalSourceSpawnMethodVisitor.java:
##########
@@ -75,12 +77,29 @@ public GraphTraversal 
visitTraversalSourceSpawnMethod_addE(final GremlinParser.T
      */
     @Override
     public GraphTraversal visitTraversalSourceSpawnMethod_addV(final 
GremlinParser.TraversalSourceSpawnMethod_addVContext ctx) {
-        if (ctx.stringArgument() != null) {
-            final Object literalOrVar = 
antlr.argumentVisitor.visitStringArgument(ctx.stringArgument());
-            if (GValue.valueInstanceOf(literalOrVar, String.class)) {
-                return this.traversalSource.addV((GValue<String>) 
literalOrVar);
+        final List<GremlinParser.StringArgumentContext> stringArgs = 
ctx.stringArgument();
+        if (stringArgs != null && !stringArgs.isEmpty()) {
+            if (stringArgs.size() == 1) {
+                final Object literalOrVar = 
antlr.argumentVisitor.visitStringArgument(stringArgs.get(0));
+                if (GValue.valueInstanceOf(literalOrVar, String.class)) {
+                    return this.traversalSource.addV((GValue<String>) 
literalOrVar);
+                } else {
+                    return this.traversalSource.addV((String) literalOrVar);
+                }
             } else {
-                return this.traversalSource.addV((String) literalOrVar);
+                // Multi-label: addV("a", "b", ...)
+                final Object firstLiteralOrVar = 
antlr.argumentVisitor.visitStringArgument(stringArgs.get(0));
+                final String firstLabel = firstLiteralOrVar instanceof String 
? (String) firstLiteralOrVar : ((GValue<String>) firstLiteralOrVar).get();
+                // Create vertex with first label, then add remaining labels
+                GraphTraversal t = this.traversalSource.addV(firstLabel);
+                final Object secondLiteralOrVar = 
antlr.argumentVisitor.visitStringArgument(stringArgs.get(1));
+                final String secondLabel = secondLiteralOrVar instanceof 
String ? (String) secondLiteralOrVar : ((GValue<String>) 
secondLiteralOrVar).get();
+                final String[] moreLabels = new String[stringArgs.size() - 2];
+                for (int i = 2; i < stringArgs.size(); i++) {
+                    final Object literalOrVar = 
antlr.argumentVisitor.visitStringArgument(stringArgs.get(i));
+                    moreLabels[i - 2] = literalOrVar instanceof String ? 
(String) literalOrVar : ((GValue<String>) literalOrVar).get();
+                }
+                return t.addLabel(secondLabel, moreLabels);

Review Comment:
   This has been reworked to directly recreate the steps as seen in the 
original script.





> Enable multiple label support on vertex with configurable label cardinality
> ---------------------------------------------------------------------------
>
>                 Key: TINKERPOP-3261
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-3261
>             Project: TinkerPop
>          Issue Type: Task
>    Affects Versions: 4.0.0
>            Reporter: Yang Xia
>            Priority: Major
>
> Vertices are currently limited to a single immutable label assigned at 
> creation. This prevents modeling common real-world scenarios where entities 
> naturally belong to multiple categories (e.g., a person who is both an 
> employee and a manager).
>   
> Introduce a configurable LabelCardinality that controls how many labels a 
> vertex may have and whether they can be mutated after creation. Three 
> proposed modes: ONE (current behavior, default), ONE_OR_MORE (mutable, 
> minimum one), ZERO_OR_MORE (fully flexible).
>   
> New steps:
>   
> - labels() — flatMap step emitting each label as a traverser
> - addLabel(String, String...) — add labels to a vertex
> - dropLabel(String, String...) — remove specific labels
> - dropLabels() — remove all labels
> Edge labels remain at cardinality ONE. The infrastructure would support 
> future edge multi-label enablement without wire format changes.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to