Skip to content

feat(bindings): extent(tgeompoint) -> stbox aggregate#57

Closed
estebanzimanyi wants to merge 1 commit into
feat/aggregate-fn-windowfrom
feat/aggregate-fn-extent-tspatial
Closed

feat(bindings): extent(tgeompoint) -> stbox aggregate#57
estebanzimanyi wants to merge 1 commit into
feat/aggregate-fn-windowfrom
feat/aggregate-fn-extent-tspatial

Conversation

@estebanzimanyi

Copy link
Copy Markdown
Member

Summary

Adds the spatial branch of `extent()` — aggregates a column of `tgeompoint` values into the spatiotemporal bounding box (`STBox`) over all values.

```sql
SELECT extent(t) FROM (VALUES (tgeompoint 'Point(1 1)@2000-01-01'),
(tgeompoint 'Point(5 5)@2000-01-05')) tt(t);
-- STBOX XT(((1,1),(5,5)),[2000-01-01 00:00:00+00, 2000-01-05 00:00:00+00])
```

Implementation

New module: `src/geo/spatial_aggregates.cpp` + `src/include/geo/spatial_aggregates.hpp`.

Component What it does
`StboxExtentState` Inline `STBox box` + `bool isset` — fixed-size POD struct (time period + x/y/z bounds + SRID + flags).
`TspatialExtentFunction::Operation` Copies the input Temporal blob and calls MEOS `tspatial_extent_transfn`. First call returns a palloc'd STBox which gets memcpy'd into state and freed; subsequent calls expand state in place.
`Combine` Merges two STBox states via `stbox_expand`.
`Finalize` Returns the box blob or NULL.

`SpatialAggregates::AddExtentOverloads` is wired into the same `extent()` `AggregateFunctionSet` that already carries span / spanset / set / tnumber / scalar overloads.

Test plan

  • `extent(tgeompoint)` produces correct STBOX XT for instants and sequences
  • No segfault on simple input

Adds the spatial branch of extent() — aggregates a column of tgeompoint
values into the spatiotemporal bounding box (STBox) over all values.

State holds an inline STBox (fixed-size POD: time period, x/y/z bounds,
SRID, flags). Operation copies the input Temporal blob, calls MEOS
tspatial_extent_transfn, and assigns or expands state.box. Combine
merges via stbox_expand. Finalize returns the box blob or NULL.

The new SpatialAggregates::AddExtentOverloads is wired into the same
extent() AggregateFunctionSet that already carries span / spanset /
set / tnumber / scalar overloads.
@estebanzimanyi

Copy link
Copy Markdown
Member Author

Consolidated into #60 (aggregate cluster squash). The full chain of aggregate work is now reviewable as a single PR; this branch's commits are preserved in #60's history. Closing to minimize the review queue.

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