This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit a892813dcdf0bd8d2d7ae5d716a0c3c37fa8afa1
Merge: 7c3a7ecd17 750f0811d1
Author: Stephen Mallette <[email protected]>
AuthorDate: Fri Mar 13 13:45:10 2026 -0400

    Merge branch '3.8-dev'

 CHANGELOG.asciidoc                                 |   1 +
 docs/src/dev/provider/gremlin-semantics.asciidoc   |  10 +-
 docs/src/upgrade/release-3.7.x.asciidoc            |  22 ++++
 .../map/AbstractMergeElementStepPlaceholder.java   |   2 +
 .../step/map/MergeEdgeStepPlaceholder.java         |   5 +-
 .../traversal/step/map/MergeElementStep.java       |  40 +++++-
 .../step/map/MergeVertexStepPlaceholder.java       |   5 +-
 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs |  10 +-
 gremlin-go/driver/cucumber/gremlin.go              |  10 +-
 .../io/binary/internals/ArraySerializer.js         |   4 +-
 .../io/binary/internals/EnumSerializer.js          |   5 +-
 .../structure/io/binary/internals/SetSerializer.js |   6 +-
 .../gremlin-javascript/test/cucumber/gremlin.js    |  10 +-
 .../src/main/python/tests/feature/gremlin.py       |  10 +-
 .../gremlin/test/features/map/MergeEdge.feature    | 137 ++++++++++++++++++++-
 .../gremlin/test/features/map/MergeVertex.feature  |  12 ++
 .../tinkerpop/gremlin/tinkergraph/TinkerWorld.java |  22 +++-
 17 files changed, 292 insertions(+), 19 deletions(-)

diff --cc CHANGELOG.asciidoc
index 4bf395cff6,918a1820ba..8163211650
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -289,7 -208,10 +289,8 @@@ image::https://raw.githubusercontent.co
  * Integrated Python driver examples into automated build process to ensure 
examples remain functional.
  * Fixed bug in `SubgraphStrategy` where specifying `edges` and `vertices` 
filters that had `map`-type steps could generate an error.
  * Fixed bug in `ReservedKeysVerificationStrategy` where `AddPropertyStep` was 
not triggering proper validations.
+ * Fixed bug in `mergeE` where `onCreate` validation of invalid static 
argument overrides did not trigger until traversal runtime.
  * Added `closeSessionPostGraphOp` to the Gremlin Server settings to indicate 
that the `Session` should be closed on either a successful commit or rollback.
 -* Added `SessionedChildClient` that borrows connections from a different 
`Client` for use with `Sessions`.
 -* Added `reuseConnectionsForSessions` to Java GLV settings to decide whether 
to use `SessionedChildClient` for remote transactions.
  
  [[release-3-7-5]]
  === TinkerPop 3.7.5 (Release Date: November 12, 2025)
diff --cc 
gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/ArraySerializer.js
index 758575f342,77aabd4cec..5aaae1dcfe
--- 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/ArraySerializer.js
+++ 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/ArraySerializer.js
@@@ -127,21 -126,7 +127,21 @@@ export default class ArraySerializer 
            throw err;
          }
          cursor = cursor.slice(value_len);
-         
 -        v.push(value);
++
 +        if (isBulked) {
 +          if (cursor.length < 8) {
 +            throw new Error(`{item_${i}}: bulk count is missing`);
 +          }
 +          const bulkCount = cursor.readBigInt64BE();
 +          len += 8;
 +          cursor = cursor.slice(8);
-           
++
 +          for (let j = 0n; j < bulkCount; j++) {
 +            v.push(value);
 +          }
 +        } else {
 +          v.push(value);
 +        }
        }
  
        return { v, len };
diff --cc 
gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/EnumSerializer.js
index 76f72234e5,ab36841ec6..f8c27dfd56
--- 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/EnumSerializer.js
+++ 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/EnumSerializer.js
@@@ -48,7 -62,14 +48,10 @@@ export default class EnumSerializer 
    }
  
    canBeUsedFor(value) {
-     return value instanceof EnumValue && (value.typeName === 'Direction' || 
value.typeName === 'Merge' || value.typeName === 'T');
 -    if (!(value instanceof t.EnumValue)) {
 -      return false;
 -    }
 -    if (!this.byname[value.typeName]) {
 -      throw new Error(`EnumSerializer.serialize: typeName=${value.typeName} 
is not supported.`);
 -    }
 -
 -    return true;
++    return (
++      value instanceof EnumValue &&
++      (value.typeName === 'Direction' || value.typeName === 'Merge' || 
value.typeName === 'T')
++    );
    }
  
    serialize(item, fullyQualifiedFormat = true) {
diff --cc 
gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/SetSerializer.js
index 623b5ebd11,3ae518ab0a..0b7f5f275b
--- 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/SetSerializer.js
+++ 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/io/binary/internals/SetSerializer.js
@@@ -124,20 -123,7 +124,20 @@@ export default class SetSerializer 
            throw err;
          }
          cursor = cursor.slice(valueLen);
-         
 -        v.add(value);
++
 +        if (isBulked) {
 +          if (cursor.length < 8) {
 +            throw new Error(`{item_${i}}: bulk count is missing`);
 +          }
-           const bulkCount = cursor.readBigInt64BE();
++          cursor.readBigInt64BE();
 +          len += 8;
 +          cursor = cursor.slice(8);
-           
++
 +          // Set.add is idempotent; bulk count only affects cardinality, not 
Set membership
 +          v.add(value);
 +        } else {
 +          v.add(value);
 +        }
        }
  
        return { v, len };

Reply via email to