Cole-Greer opened a new pull request, #3433:
URL: https://github.com/apache/tinkerpop/pull/3433
Add CompositePDT (0xF0) support enabling graph providers to define custom
types that serialize/deserialize seamlessly across all GLVs without driver-side
configuration. Replaces the TP3 CustomTypeSerializer mechanism.
Core (gremlin-core):
- Add @ProviderDefined annotation and immutable ProviderDefinedType POJO
- Add ProviderDefinedTypeSerializer for GraphBinary with wire format:
fully-qualified type string + fully-qualified fields map
- Add PdtGraphSONSerializersV4 with g:CompositePdt type tag
- Add ProviderDefinedTypeAdapter<T> and ProviderDefinedTypeRegistry with
ServiceLoader discovery, recursive hydration, and graceful degradation on
adapter failure
- Integrate auto-hydration into GraphBinaryReader and GraphSONMapper
- Add GraphBinaryWriter auto-conversion for @ProviderDefined objects
- Cache reflection metadata per class for performance
- Support inherited fields via superclass walking
- Remove legacy CUSTOM(0x00) type mechanism entirely
Gremlin-lang:
- Add PDT("name", ["key":value]) literal to ANTLR grammar
- Server-side parser constructs ProviderDefinedType from PDT literals
- All GLV translators emit PDT literal syntax
- Registry-based and annotation-based auto-dehydration in translators
- All TranslateVisitors handle PDT for cross-language translation
GLV support (all languages):
- Python: ProviderDefinedType, serializer, registry with @provider_defined
decorator, entry_points auto-discovery, registry wired through
Client/DriverRemoteConnection
- JavaScript: ProviderDefinedType, CompositePDTSerializer, registry with
explicit function pair registration, client options wiring
- Go: ProviderDefinedType struct, serializer/deserializer, PDTRegistry with
struct tags, RegisterFuncs, PDTProvider interface, client wiring
- .NET: ProviderDefinedType, CompositePDTSerializer, registry with
IProviderDefinedTypeAdapter<T>, [ProviderDefined] attribute with
IncludedFields/ExcludedFields, assembly scanning, IMessageSerializer
.SetPdtRegistry() interface method, client/connection wiring
Server and testing:
- PDT flows end-to-end through gremlin-server with TinkerGraph storing
original objects and conversion at serialization boundary
- Test-jar with Point, Address, Person test types for Docker server
- Integration tests in all GLVs using gremlin-lang PDT literals
- Traversal API tests covering raw PDT, registry hydration, and
annotation-based auto-dehydration round-trips
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]