Skip to content

test(parity): 003_span.test — span regression mirror#13

Merged
nhungoc1508 merged 1 commit into
mainfrom
feat/parity-span
May 4, 2026
Merged

test(parity): 003_span.test — span regression mirror#13
nhungoc1508 merged 1 commit into
mainfrom
feat/parity-span

Conversation

@estebanzimanyi

Copy link
Copy Markdown
Member

Summary

Ports mobilitydb/test/temporal/queries/003_span.test.sql to test/sql/parity/003_span.test in DuckDB sqllogic format. Same shape as PR #6's 001_set.test: active queries reflect MobilityDuck's display format; queries that hit a missing binding, naming divergence, or DuckDB/PG syntax-portability boundary are wrapped in mode skip with a short technical note.

Active coverage:

  • I/O parse errors, asText (incl. negative-digits error),
  • two-arg + four-arg span() constructors and the two error cases (empty span, lower > upper),
  • span(date), span(timestamptz), span(date::timestamptz),
  • canonicalize round-trips for intspan / datespan,
  • accessors: lower, upper, lowerInc, upperInc, duration, span_cmp,
  • comparison operators (=, <>, <, <=, >, >=),
  • transforms: expand (incl. NULL-on-collapse), shift, scale, shiftScale for int/date/tstz,
  • floor / ceil / round for floatspan (incl. -inf / inf rounding).

Skipped — each with a one-line technical note in the file:

Section Reason
range(<span>) / span(<range>) PG daterange / tstzrange types are not part of DuckDB; SQL surface not portable
date::datespan / timestamptz::tstzspan casts Not registered in src/temporal/span.cpp (only Value_to_span scalar exists)
span_hash / span_hash_extended Not registered. MEOS symbols: span_hash, span_hash_extended
Position predicates <<, >>, &<, &>, `- -, <<#, #>>, &<#, #&>`

Test plan

  • make release then TZ=UTC ./build/release/test/unittest "<proj>/test/*" — full suite passes (758 assertions across 14 test cases).

Drafted because it sits adjacent to the in-flight queue (#8/#9/#10/#11/#12) on main; mark ready when those land or merge it independently.

Ports mobilitydb/test/temporal/queries/003_span.test.sql to
test/sql/parity/003_span.test in DuckDB sqllogic format. Active
queries cover I/O parse errors, asText, two-arg / four-arg span()
constructors, span(date), span(timestamptz), span(date::timestamptz),
canonicalize round-trips, accessors (lower/upper/lowerInc/upperInc/
duration/span_cmp), comparison operators, expand / shift / scale /
shiftScale, floor / ceil / round (incl. -inf/inf), and DuckDB-native
behavior on the rest of the source file.

Skipped sections, each with a technical note:

- range(<span>) / span(<range>) — PG daterange / tstzrange types are
  not part of DuckDB; the SQL surface for these conversions is not
  portable.
- date::datespan / timestamptz::tstzspan casts not registered in
  src/temporal/span.cpp (Value_to_span exists as a scalar only).
- span_hash / span_hash_extended not registered. MEOS symbols:
  span_hash, span_hash_extended.
- Position operators (<<, >>, &<, &>, -|-, <<#, #>>, &<#, #&>)
  between spans and scalar values: src/temporal/span.cpp registers
  them with return type SpanType rather than BOOLEAN. They should be
  predicate scalars returning BOOLEAN.
@estebanzimanyi

Copy link
Copy Markdown
Member Author

Refreshed against current main: removed mode skip blocks for now-landed bindings — date::datespan cast, timestamptz::tstzspan cast (#16), span_hash / span_hash_extended (#15), and span × value position predicates returning BOOLEAN (#14). Kept skip block for the <<#/#>>/&<#/#&> time-position operators since DuckDB's parser doesn't accept # inside operator names — that's a parser limitation, not a binding gap. Net change: -22 lines, all 11 query assertions pass locally with TZ=UTC.

estebanzimanyi added a commit that referenced this pull request Apr 28, 2026
Single-file inventory of MobilityDB's mobilitydb/test/geo/queries/
surface. Rather than one parity file per upstream regression file,
this lists what each file covers, what's bound in MobilityDuck
today, and what's missing.

Bound surface (per direct audit of src/geo/tgeompoint.cpp):
- tgeompoint / tgeometry I/O for instant / discrete / continuous /
  sequence-set
- asText / asEWKT / memSize / interp / round / transform
- Constructors (TGEOMPOINT, tgeompointInst, tgeompointSeq,
  tgeompointSeqSet)
- Spatial accessors: getX/Y/Z, length, cumulativeLength, speed,
  direction, azimuth, angularDifference, trajectory
- Topological predicates: e/a/t variants of Contains, Disjoint,
  Dwithin, Intersects, Touches
- Set ops: makeSimple, isSimple, stops
- Restrictions: atGeometry, atStbox, atValues, atTime and the
  matching minus*
- Modification: appendInstant, appendSequence, insert, update,
  deleteTime, merge
- Comparison: temporal_eq / temporal_ne / etc.
- twCentroid, shortestLine, distance_gs, collect_gs

Unbound surface (per upstream regression file, with cross-references
to the temporal-side parity-batch PRs that cover the same gap):
- 051_stbox: stbox tests (whole file currently skipped in
  test/sql/stbox.test for DuckDB 1.4 signature issues).
- 052_tgeo / 052_tpoint: mostly bound — per-type ports would mirror
  PRs #13 / #17 / #18 patterns.
- 053_*_inout: asMFJSON / asWKB / asHexWKB / asGeoJSON — verify
  which are bound.
- 054_*_compops: same parser blocker as PR #24's 030 (?= / #=).
- 056_*_spatialfuncs: bulk bound; setSRID-on-temporal and
  reference-system accessors missing.
- 058_*_tile: same gap as PR #23's 025 but for tspatial.
- 060_*_topops: same pattern as PR #25's 032_temporal_topops.
- 062_*_posops: same pattern as PR #24's 034_temporal_posops plus
  spatial-direction operators.
- 064_*_distance: <-> for tgeo / tpoint; partially bound
  (shortestLine, distance_gs).
- 066_tpoint_similarity: specialisation of PR #23's 038.
- 068_*_aggfuncs: same architectural blocker as PR #21 (no
  AggregateFunction infra).

Suite: 747 assertions, 23 test cases.
@estebanzimanyi estebanzimanyi marked this pull request as ready for review May 1, 2026 19:13
@nhungoc1508 nhungoc1508 merged commit 5a8252c into main May 4, 2026
17 checks passed
nhungoc1508 pushed a commit that referenced this pull request May 4, 2026
Single-file inventory of MobilityDB's mobilitydb/test/geo/queries/
surface. Rather than one parity file per upstream regression file,
this lists what each file covers, what's bound in MobilityDuck
today, and what's missing.

Bound surface (per direct audit of src/geo/tgeompoint.cpp):
- tgeompoint / tgeometry I/O for instant / discrete / continuous /
  sequence-set
- asText / asEWKT / memSize / interp / round / transform
- Constructors (TGEOMPOINT, tgeompointInst, tgeompointSeq,
  tgeompointSeqSet)
- Spatial accessors: getX/Y/Z, length, cumulativeLength, speed,
  direction, azimuth, angularDifference, trajectory
- Topological predicates: e/a/t variants of Contains, Disjoint,
  Dwithin, Intersects, Touches
- Set ops: makeSimple, isSimple, stops
- Restrictions: atGeometry, atStbox, atValues, atTime and the
  matching minus*
- Modification: appendInstant, appendSequence, insert, update,
  deleteTime, merge
- Comparison: temporal_eq / temporal_ne / etc.
- twCentroid, shortestLine, distance_gs, collect_gs

Unbound surface (per upstream regression file, with cross-references
to the temporal-side parity-batch PRs that cover the same gap):
- 051_stbox: stbox tests (whole file currently skipped in
  test/sql/stbox.test for DuckDB 1.4 signature issues).
- 052_tgeo / 052_tpoint: mostly bound — per-type ports would mirror
  PRs #13 / #17 / #18 patterns.
- 053_*_inout: asMFJSON / asWKB / asHexWKB / asGeoJSON — verify
  which are bound.
- 054_*_compops: same parser blocker as PR #24's 030 (?= / #=).
- 056_*_spatialfuncs: bulk bound; setSRID-on-temporal and
  reference-system accessors missing.
- 058_*_tile: same gap as PR #23's 025 but for tspatial.
- 060_*_topops: same pattern as PR #25's 032_temporal_topops.
- 062_*_posops: same pattern as PR #24's 034_temporal_posops plus
  spatial-direction operators.
- 064_*_distance: <-> for tgeo / tpoint; partially bound
  (shortestLine, distance_gs).
- 066_tpoint_similarity: specialisation of PR #23's 038.
- 068_*_aggfuncs: same architectural blocker as PR #21 (no
  AggregateFunction infra).

Suite: 747 assertions, 23 test cases.
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.

2 participants