Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 10 additions & 9 deletions flink-processor/docs/parity-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Generated 2026-05-29 by `tools/parity/parity_audit.py`.

The MobilityFlink MEOS facade (`org.mobilitydb.flink.meos.MeosOps*`) exposes MEOS C functions to Flink through JMEOS. This audit measures, per type family, the share of the **MEOS public C API** that the facade exposes and that JMEOS binds.

**Headline.** The facade exposes **2158 of 2158 public MEOS functions (100.0%)**. The MEOS public surface (`meos/include/meos*.h`, excluding internal headers) is 2158 functions; JMEOS binds 2158 of them. 0 bindable functions are not exposed (listed in §3).
**Headline.** The facade exposes **2296 of 2296 public MEOS functions (100.0%)**. The MEOS public surface (`meos/include/meos*.h`, excluding internal headers) is 2297 functions; JMEOS binds 2296 of them. 0 bindable functions are not exposed (listed in §3).

Coverage is **static**: a function counts as covered when the facade declares a method of the same name and arity that delegates to a JMEOS export.

Expand All @@ -16,19 +16,20 @@ Per-family runtime behaviour is asserted by `src/test/java/org/mobilitydb/flink/

- **Numerator**: `public static` methods on the generated `MeosOps*` facade whose name is also a `functions.GeneratedFunctions` export in the bundled JMEOS jar.

- **JMEOS jar**: jar/JMEOS.jar exports 2743 static methods.
- **JMEOS jar**: jar/JMEOS.jar exports 2916 static methods.

## 2. Per-family coverage of the public MEOS surface

| Family (header) | Public ∩ JMEOS | Exposed | Missing | Coverage |
|---|---:|---:|---:|---:|
| core temporal / set / span / spanset / tbox (`meos.h`) | 1279 | 1279 | 0 | 100.0% |
| geo (tgeo / tpoint / stbox) (`meos_geo.h`) | 419 | 419 | 0 | 100.0% |
| cbuffer (`meos_cbuffer.h`) | 173 | 173 | 0 | 100.0% |
| npoint (`meos_npoint.h`) | 118 | 118 | 0 | 100.0% |
| core temporal / set / span / spanset / tbox (`meos.h`) | 1343 | 1343 | 0 | 100.0% |
| geo (tgeo / tpoint / stbox) (`meos_geo.h`) | 421 | 421 | 0 | 100.0% |
| cbuffer (`meos_cbuffer.h`) | 175 | 175 | 0 | 100.0% |
| npoint (`meos_npoint.h`) | 119 | 119 | 0 | 100.0% |
| pose (`meos_pose.h`) | 101 | 101 | 0 | 100.0% |
| rgeo (`meos_rgeo.h`) | 68 | 68 | 0 | 100.0% |
| **total** | **2158** | **2158** | **0** | **100.0%** |
| h3 / th3index (`meos_h3.h`) | 69 | 69 | 0 | 100.0% |
| **total** | **2296** | **2296** | **0** | **100.0%** |

## 3. Bindable MEOS functions not exposed by the facade

Expand All @@ -39,7 +40,7 @@ Per-family runtime behaviour is asserted by `src/test/java/org/mobilitydb/flink/

The facade is also matched against the underlying MEOS C symbol of each addressable `CREATE FUNCTION` in `mobilitydb/sql/**/*.in.sql` (PG-only sections and helper symbols bucketed out; 876 out-of-scope, 113 SQL/plpgsql-composed functions with no single C symbol). Functions the SQL layer implements through the internal MEOS headers (`meos_internal*.h`) are exposed via `MeosOpsSqlSurface`.

- Addressable distinct C symbols: **1336**; bound by JMEOS: **1066**; exposed by the facade: **1066** (100.0% of the JMEOS-bindable SQL surface).
- Addressable distinct C symbols: **1336**; bound by JMEOS: **1068**; exposed by the facade: **1068** (100.0% of the JMEOS-bindable SQL surface).

- The remaining **270** addressable C symbols are not exported by JMEOS under the name the SQL layer's extension wrapper uses; the wrapper names differ from the MEOS function names they call.
- The remaining **268** addressable C symbols are not exported by JMEOS under the name the SQL layer's extension wrapper uses; the wrapper names differ from the MEOS function names they call.

Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,27 @@ public final class MeosOpsParityGaps {

private MeosOpsParityGaps() { /* utility */ }

/** MEOS {@code acovers_geo_tgeo} — meos_geo.h · scalar / stateless. */
public static int acovers_geo_tgeo(jnr.ffi.Pointer arg0, jnr.ffi.Pointer arg1) {
if (!MeosOpsRuntime.MEOS_AVAILABLE)
throw new UnsupportedOperationException("acovers_geo_tgeo requires libmeos — set -Dmobilityflink.meos.enabled=true");
return functions.GeneratedFunctions.acovers_geo_tgeo(arg0, arg1);
}

/** MEOS {@code acovers_tcbuffer_tcbuffer} — meos_cbuffer.h · scalar / stateless. */
public static int acovers_tcbuffer_tcbuffer(jnr.ffi.Pointer arg0, jnr.ffi.Pointer arg1) {
if (!MeosOpsRuntime.MEOS_AVAILABLE)
throw new UnsupportedOperationException("acovers_tcbuffer_tcbuffer requires libmeos — set -Dmobilityflink.meos.enabled=true");
return functions.GeneratedFunctions.acovers_tcbuffer_tcbuffer(arg0, arg1);
}

/** MEOS {@code acovers_tgeo_geo} — meos_geo.h · scalar / stateless. */
public static int acovers_tgeo_geo(jnr.ffi.Pointer arg0, jnr.ffi.Pointer arg1) {
if (!MeosOpsRuntime.MEOS_AVAILABLE)
throw new UnsupportedOperationException("acovers_tgeo_geo requires libmeos — set -Dmobilityflink.meos.enabled=true");
return functions.GeneratedFunctions.acovers_tgeo_geo(arg0, arg1);
}

/** MEOS {@code bearing_tpoint_point} — meos_geo.h · scalar / stateless. */
public static jnr.ffi.Pointer bearing_tpoint_point(jnr.ffi.Pointer arg0, jnr.ffi.Pointer arg1, boolean arg2) {
if (!MeosOpsRuntime.MEOS_AVAILABLE)
Expand All @@ -24,6 +45,27 @@ public static jnr.ffi.Pointer bearing_tpoint_tpoint(jnr.ffi.Pointer arg0, jnr.ff
return functions.GeneratedFunctions.bearing_tpoint_tpoint(arg0, arg1);
}

/** MEOS {@code bigintspan_to_floatspan} — meos.h · scalar / stateless. */
public static jnr.ffi.Pointer bigintspan_to_floatspan(jnr.ffi.Pointer arg0) {
if (!MeosOpsRuntime.MEOS_AVAILABLE)
throw new UnsupportedOperationException("bigintspan_to_floatspan requires libmeos — set -Dmobilityflink.meos.enabled=true");
return functions.GeneratedFunctions.bigintspan_to_floatspan(arg0);
}

/** MEOS {@code bigintspan_to_intspan} — meos.h · scalar / stateless. */
public static jnr.ffi.Pointer bigintspan_to_intspan(jnr.ffi.Pointer arg0) {
if (!MeosOpsRuntime.MEOS_AVAILABLE)
throw new UnsupportedOperationException("bigintspan_to_intspan requires libmeos — set -Dmobilityflink.meos.enabled=true");
return functions.GeneratedFunctions.bigintspan_to_intspan(arg0);
}

/** MEOS {@code floatspan_to_bigintspan} — meos.h · scalar / stateless. */
public static jnr.ffi.Pointer floatspan_to_bigintspan(jnr.ffi.Pointer arg0) {
if (!MeosOpsRuntime.MEOS_AVAILABLE)
throw new UnsupportedOperationException("floatspan_to_bigintspan requires libmeos — set -Dmobilityflink.meos.enabled=true");
return functions.GeneratedFunctions.floatspan_to_bigintspan(arg0);
}

/** MEOS {@code geogpoint_make2d} — meos_geo.h · scalar / stateless. */
public static jnr.ffi.Pointer geogpoint_make2d(int arg0, double arg1, double arg2) {
if (!MeosOpsRuntime.MEOS_AVAILABLE)
Expand Down Expand Up @@ -87,6 +129,13 @@ public static jnr.ffi.Pointer intersection_pose_set(jnr.ffi.Pointer arg0, jnr.ff
return functions.GeneratedFunctions.intersection_pose_set(arg0, arg1);
}

/** MEOS {@code intspan_to_bigintspan} — meos.h · scalar / stateless. */
public static jnr.ffi.Pointer intspan_to_bigintspan(jnr.ffi.Pointer arg0) {
if (!MeosOpsRuntime.MEOS_AVAILABLE)
throw new UnsupportedOperationException("intspan_to_bigintspan requires libmeos — set -Dmobilityflink.meos.enabled=true");
return functions.GeneratedFunctions.intspan_to_bigintspan(arg0);
}

/** MEOS {@code line_interpolate_point} — meos_geo.h · scalar / stateless. */
public static jnr.ffi.Pointer line_interpolate_point(jnr.ffi.Pointer arg0, double arg1, boolean arg2) {
if (!MeosOpsRuntime.MEOS_AVAILABLE)
Expand Down Expand Up @@ -115,6 +164,13 @@ public static jnr.ffi.Pointer line_substring(jnr.ffi.Pointer arg0, double arg1,
return functions.GeneratedFunctions.line_substring(arg0, arg1, arg2);
}

/** MEOS {@code meos_initialize_noexit_error_handler} — meos.h · scalar / stateless. */
public static void meos_initialize_noexit_error_handler() {
if (!MeosOpsRuntime.MEOS_AVAILABLE)
throw new UnsupportedOperationException("meos_initialize_noexit_error_handler requires libmeos — set -Dmobilityflink.meos.enabled=true");
functions.GeneratedFunctions.meos_initialize_noexit_error_handler();
}

/** MEOS {@code mindistance_tgeo_tgeo} — meos_geo.h · scalar / stateless. */
public static double mindistance_tgeo_tgeo(jnr.ffi.Pointer arg0, jnr.ffi.Pointer arg1, double arg2) {
if (!MeosOpsRuntime.MEOS_AVAILABLE)
Expand Down Expand Up @@ -241,6 +297,13 @@ public static jnr.ffi.Pointer tboolseqset_from_base_tstzspanset(boolean arg0, jn
return functions.GeneratedFunctions.tboolseqset_from_base_tstzspanset(arg0, arg1);
}

/** MEOS {@code tbox_to_bigintspan} — meos.h · scalar / stateless. */
public static jnr.ffi.Pointer tbox_to_bigintspan(jnr.ffi.Pointer arg0) {
if (!MeosOpsRuntime.MEOS_AVAILABLE)
throw new UnsupportedOperationException("tbox_to_bigintspan requires libmeos — set -Dmobilityflink.meos.enabled=true");
return functions.GeneratedFunctions.tbox_to_bigintspan(arg0);
}

/** MEOS {@code tfloatbox_time_tiles} — meos.h · multidimensional tiling (windowed). */
public static jnr.ffi.Pointer tfloatbox_time_tiles(jnr.ffi.Pointer arg0, jnr.ffi.Pointer arg1, java.time.OffsetDateTime arg2, jnr.ffi.Pointer arg3) {
if (!MeosOpsRuntime.MEOS_AVAILABLE)
Expand Down
Loading