Skip to content

26.11.1.post1 prep: JVM to_json_list float parity (#320) and native columnar reads (#321) on the 26.11.1 tag - #326

Draft
tae898 wants to merge 2 commits into
release/26.11.1from
release/26.11.1.post1-prep
Draft

tae898 wants to merge 2 commits into
release/26.11.1from
release/26.11.1.post1-prep

Conversation

@tae898

@tae898 tae898 commented Nov 9, 2026

Copy link
Copy Markdown
Collaborator

This is the preparation PR for 26.11.1.post1. The base release/26.11.1 is the tag 26.11.1 (2f28a32) and nothing else, so the release differs from 26.11.1 only in the bindings glue I chose to fix. I do not merge this PR and I do not tag anything from it.

In, as git cherry-pick -x of the squash commits of main, in this order:

The whole diff against the tag is 6 files: src/arcadedb/_native/columns.py, src/arcadedb/_native/database.py, src/java/com/arcadedb/python/RowBatcher.java, tests/conftest.py, tests/test_cross_wheel_golden.py and tests/test_native_columns_reference.py. No workflow, no script, no pyproject.toml, setup.py, native/ build file, jar list or engine pin is touched.

No workflow or script commit was needed to accept .post1. At the tag, release-jvm.yml and release-native.yml already validate ^[0-9]+\.[0-9]+\.[0-9]+(\.(dev|post)[0-9]+)?$, scripts/check_version.py has the postN rule, test-native.yml resolves engine = base for a post version, and scripts/after_tag_verify.sh strips .postN. scripts/verify_wheel_engine_pin.py does not exist at the tag, so there is nothing to adapt.

Left out on purpose, all in main since 26.11.1: the facets API (#299, #301), COLUMNAR index reflection (#300), Document.get_type_name() returning str on the JVM build (#287), the docs commits, the dev-release engine pin (#305, #308, #310), the native lane against the 26.12.1-SNAPSHOT engine (#298), the CI and release workflow changes, and the Dependabot bump (#311). The ingest fixes #318, #324 and #325 are not here yet: each comes as its own PR into release/26.11.1.

Engine source of a tag build of 26.11.1.post1 with this branch: JVM jars come from the image arcadedata/arcadedb:26.11.1 (the tag minus .post1, and the build fails when the image holds another version), the native library is built from the Maven Central 26.11.1 engine. No snapshot path exists at the tag. The guard post1_identity_check.py (engine jar sha256 and engine commit stamp a3a5d12457 against the released 26.11.1 wheels) runs on the wheels of the release, not here.

CI note: the pull_request workflows have no base branch filter, so they run for this base. A pull request run of test-jvm.yml takes the jars from arcadedata/arcadedb:latest, not 26.11.1, and a draft skips the platform legs. The evidence on the 26.11.1 engine therefore comes from workflow_dispatch runs on this branch with arcadedb-tag=26.11.1 (JVM and examples) and version=26.11.1.post1 (native), linked in a comment below.

🤖 Generated with Claude Code

tae898 and others added 2 commits November 9, 2026 18:27
…ouble, as on the native wheel (refs #314) (#320)

RowBatcher.keepNonFinite now widens a Float to a Double and a float[] to a double[] before the engine's JSONObject writes
it, so the JSON text is the exact float64 widening of the float32 (0.10000000149011612, not the shortest float32 text 0.1).
NaN and infinity keep their tag.

tests/test_cross_wheel_golden.py is one fixed table with committed golden literals for to_list, to_json_list and
to_columns (FLOAT, DOUBLE, float32 float[] of 3 and 9, DECIMAL, LONG beyond 2**53, DATE, DATETIME, NULL, embedded list),
run unchanged on both wheels.

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit 551dee9)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…r-row steps, one _kind per column (refs #312) (#321)

* Native columnar readers: infer Arrow types first, skip per-key and per-row steps, one _kind per column (refs #312)

Bindings-only, Python in arcadedb._native, no image rebuild. Output is meant to be identical to before:
- columns.to_arrow tries pa.array(values) first and keeps the old per-value rules for a column that inference cannot type
  (ArrowInvalid, ArrowTypeError) or types differently (temporal types, unsigned ints).
- columns._names tests each row's keys against the known ones in C instead of a Python step per key.
- columns.to_columns calls _kind once per column instead of twice.
- NativeResultSet._fill can hand a reply's rows straight to _drain_dicts, which no longer builds a tuple and a generator step
  per row.
The float32-tail view in codec.loads_tagged is not done: a vector must stay a list of floats for the row API.

tests/test_native_columns_reference.py keeps the old rules as a private reference and compares tables, columns, names and
the drain on mixed, null-heavy, ragged and vector inputs. No speed is claimed here.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* Native columns: a failed inference of any kind falls to the old rules; tests compare NaN tables by value (refs #312)

pa.array([2**63]) raises OverflowError, not ArrowInvalid, so an int above int64 next to floats would have raised where
the old explicit-type call fell back to exact text. _inferred now leaves every failed inference to the rules, so the
outcome of such a column is decided by the old code. Four reference cases cover it. Table.equals is False for a NaN next to
the same NaN, so the comparison is the schema plus the repr of the values.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
(cherry picked from commit 6c6a5a1)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant