Skip to content

TruffleData 0.1.0

Choose a tag to compare

@sgammon sgammon released this 03 Nov 18:05
ccfd951

TruffleData 0.1.0 provides shared, contract-aware data access for Truffle languages, including static and dynamic records, JDBC integration, and lossless protobuf rows.

Lossless protobuf and generated contracts

  • ProtoPlan exposes immutable protobuf field metadata: wire types, unsigned widths, enum names/numbers, defaults, repeated/map shape, and nested message identities.
  • ProtoRow.has() preserves protobuf presence separately from readable defaults. Bytes use compact storage; enums retain numeric values, including unknown open-enum numbers.
  • Construct and decode native rows without retaining a protobuf Message or DynamicMessage. The bounded Java wire codec supports schema-backed and schemaless binary input on JVM and Native Image.
  • Supply schemas at runtime through descriptors/descriptor sets, or generate descriptor-free Java contracts at build time with protoc-gen-truffledata and the Bazel proto_contract_library rule.
  • Ingest MessageOrBuilder, ProtoJSON, and protobuf text format. Text ingestion uses protobuf-java host parsers and temporary builders; generated contracts and binary decoding do not require runtime descriptor initialization.

Validation

The shared JVM/Native Image matrix covers 453 operations: 400 successful compiled cases and 53 expected rejections. Both build-time JIT negative controls verify that violations are rejected. All 13 local targets passed, including native execution, allocation gates, and publication validation. Codecov receives LCOV and JVM/native JUnit reports; executable-method coverage is required for the access surfaces, including ProtoRow.

Static protobuf reads measured 0.000064 bytes/read. Decoding a 65,540-byte message allocated 66,632 bytes with static storage, within the enforced payload-plus-16-KiB budget. These measurements and compilation guarantees apply to the tested operation matrix and pinned runtime.

Release-source CI includes coverage, CodSpeed simulation, native JIT checks, real MySQL/PostgreSQL acceptance, and an isolated Maven consumer. The publisher reruns checks with the release version and verifies public jars, source jars, and POMs against staged bytes.

Consumption

Repository: https://maven.elide.dev

All six libraries and the BOM use version 0.1.0:

  • dev.elide:truffledata-core:0.1.0
  • dev.elide:truffledata-protobuf:0.1.0
  • dev.elide:truffledata-jdbc:0.1.0
  • dev.elide:truffledata-jdbc-sqlite:0.1.0
  • dev.elide:truffledata-jdbc-mysql:0.1.0
  • dev.elide:truffledata-jdbc-postgresql:0.1.0
  • dev.elide:truffledata-bom:0.1.0 (POM import)

Java 25 and Elide GraalVM 25.5.5-elide.5 are required. Gradle/Bazel consumers must also configure https://maven.elide.dev/gvm-elide/25.5.5-elide.5 for the pinned runtime artifacts.

Scope

This release addresses the API gaps in #1 without changing the existing generic tabular protobuf adapter. Lossless plan compilation explicitly rejects Editions, extension ranges, and MessageSet. Schemaless input preserves wire data without guessing declared field types; named text formats require a schema. Buffa/Myna is not bundled. Any future native backend must support static linkage on SVM and preserve Java-only fallback on both SVM and JVM.