Skip to content
Open
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
28 changes: 16 additions & 12 deletions .github/workflows/MainDistributionPipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,14 @@ jobs:
extension_name: mobilityduck
ci_tools_version: v1.4.4
vcpkg_commit: c27eeddba73f608f10605d80bc0144c1166f8fb7
# Windows is excluded because the MEOS vcpkg port does not currently
# build under MSVC or MinGW: it pulls in PostgreSQL-derived sources
# that depend on POSIX-only headers (e.g. <dirent.h>) and GCC-only
# attribute syntax (`__attribute__((unused))`). Re-enable once the
# MEOS port grows Windows support.
exclude_archs: windows_amd64;windows_amd64_mingw;linux_amd64_musl
# Windows / linux_amd64_musl / wasm_* are excluded because the
# MEOS vcpkg port does not currently build there: Windows pulls in
# POSIX-only headers (e.g. <dirent.h>) and GCC-only attribute syntax,
# and the Wasm/emscripten targets fail to compile PostgreSQL's port
# code (`pg_bitutils.h` cannot pick an integer type matching
# `uint64_t` under the emscripten ABI). Re-enable once the MEOS
# port grows targets for those toolchains.
exclude_archs: windows_amd64;windows_amd64_mingw;linux_amd64_musl;wasm_mvp;wasm_eh;wasm_threads

duckdb-latest-deploy:
needs: duckdb-latest-build
Expand All @@ -52,9 +54,11 @@ jobs:
ci_tools_version: v1.4.4
extension_name: mobilityduck
deploy_latest: ${{ startsWith(github.ref, 'refs/heads/v') || github.ref == 'refs/heads/main' }}
# Windows is excluded because the MEOS vcpkg port does not currently
# build under MSVC or MinGW: it pulls in PostgreSQL-derived sources
# that depend on POSIX-only headers (e.g. <dirent.h>) and GCC-only
# attribute syntax (`__attribute__((unused))`). Re-enable once the
# MEOS port grows Windows support.
exclude_archs: windows_amd64;windows_amd64_mingw;linux_amd64_musl
# Windows / linux_amd64_musl / wasm_* are excluded because the
# MEOS vcpkg port does not currently build there: Windows pulls in
# POSIX-only headers (e.g. <dirent.h>) and GCC-only attribute syntax,
# and the Wasm/emscripten targets fail to compile PostgreSQL's port
# code (`pg_bitutils.h` cannot pick an integer type matching
# `uint64_t` under the emscripten ABI). Re-enable once the MEOS
# port grows targets for those toolchains.
exclude_archs: windows_amd64;windows_amd64_mingw;linux_amd64_musl;wasm_mvp;wasm_eh;wasm_threads
10 changes: 3 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,9 @@ EXT_CONFIG=${PROJ_DIR}extension_config.cmake
# Include the Makefile from extension-ci-tools
include extension-ci-tools/makefiles/duckdb_extension.Makefile

# Single-timezone model (PGTZ-style): the extension's LoadInternal forces
# both MEOS (meos_initialize_timezone) and DuckDB (DBConfig::SetOptionByName
# "TimeZone") to Europe/Brussels. Tests pass on any OS timezone β€” the
# extension is the single source of truth, no TZ env var needed.
test_release_internal:
./build/release/$(TEST_PATH) "$(PROJ_DIR)test/*"
TZ=UTC ./build/release/$(TEST_PATH) "$(PROJ_DIR)test/*"
test_debug_internal:
./build/debug/$(TEST_PATH) "$(PROJ_DIR)test/*"
TZ=UTC ./build/debug/$(TEST_PATH) "$(PROJ_DIR)test/*"
test_reldebug_internal:
./build/reldebug/$(TEST_PATH) "$(PROJ_DIR)test/*"
TZ=UTC ./build/reldebug/$(TEST_PATH) "$(PROJ_DIR)test/*"
229 changes: 56 additions & 173 deletions docs/parity-status.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# MobilityDuck parity status β€” surface-level audit

Generated 2026-05-10. **Active addressable scope** (temporal + geo, excluding PG-only helpers): 867/960 names covered (90.3%).
Generated 2026-05-11. **Active addressable scope** (temporal + geo, excluding PG-only helpers): 929/943 names covered (98.5%).

**Out of scope** (PG-only β€” no DuckDB equivalent exists): 303 names skipped β€” 84 from PG-only sections (GiST/SPGiST opclasses, set/span/spanset index files, `019_geo_constructors.in.sql` PG geometric types, `999_oid_cache.in.sql`) plus 219 PG helper functions inside active sections (`*_in/_out/_recv/_send`, `*_transfn/_combinefn/_finalfn/_serialize/_deserialize`, `*_sel/_joinsel/_supportfn/_analyze`, `*_typmod_in/_typmod_out`). Listed in appendix B; not counted in the headline.
**Out of scope** (PG-only β€” no DuckDB equivalent exists): 315 names skipped β€” 84 from PG-only sections (GiST/SPGiST opclasses, set/span/spanset index files, `019_geo_constructors.in.sql` PG geometric types, `999_oid_cache.in.sql`) plus 231 PG helper functions inside active sections (`*_in/_out/_recv/_send`, `*_transfn/_combinefn/_finalfn/_serialize/_deserialize`, `*_sel/_joinsel/_supportfn/_analyze`, `*_typmod_in/_typmod_out`). Listed in appendix B; not counted in the headline.

**Deferred families** (cbuffer, npoint, pose, rgeo) appear in appendix C and are also excluded from the headline.

Expand All @@ -20,45 +20,45 @@ Per-section counts: `Addressable` = MDB names minus PG-only helpers (see appendi

| Section | Addressable | Covered | Missing | Coverage | OOS | MDB operators |
|---|---:|---:|---:|---:|---:|---:|
| `geo/050_geoset.in.sql` | 43 | 31 | 12 | 72% | 13 | 46 |
| `geo/051_stbox.in.sql` | 75 | 59 | 16 | 79% | 8 | 29 |
| `geo/052_tgeo.in.sql` | 70 | 64 | 6 | 91% | 10 | 12 |
| `geo/052_tpoint.in.sql` | 70 | 66 | 4 | 94% | 8 | 12 |
| `geo/050_geoset.in.sql` | 42 | 41 | 1 | 98% | 13 | 46 |
| `geo/051_stbox.in.sql` | 73 | 70 | 3 | 96% | 10 | 29 |
| `geo/052_tgeo.in.sql` | 68 | 68 | 0 | 100% | 11 | 12 |
| `geo/052_tpoint.in.sql` | 69 | 69 | 0 | 100% | 9 | 12 |
| `geo/053_tgeo_inout.in.sql` | 18 | 18 | 0 | 100% | 0 | 0 |
| `geo/053_tpoint_inout.in.sql` | 18 | 18 | 0 | 100% | 0 | 0 |
| `geo/054_tgeo_compops.in.sql` | 6 | 6 | 0 | 100% | 1 | 36 |
| `geo/054_tpoint_compops.in.sql` | 6 | 6 | 0 | 100% | 0 | 36 |
| `geo/056_tgeo_spatialfuncs.in.sql` | 17 | 15 | 2 | 88% | 0 | 0 |
| `geo/056_tpoint_spatialfuncs.in.sql` | 30 | 24 | 6 | 80% | 0 | 0 |
| `geo/058_tgeo_tile.in.sql` | 5 | 2 | 3 | 40% | 0 | 0 |
| `geo/058_tpoint_tile.in.sql` | 11 | 8 | 3 | 73% | 0 | 0 |
| `geo/060_tgeo_boxops.in.sql` | 13 | 10 | 3 | 77% | 0 | 50 |
| `geo/060_tpoint_boxops.in.sql` | 13 | 10 | 3 | 77% | 0 | 50 |
| `geo/056_tgeo_spatialfuncs.in.sql` | 16 | 15 | 1 | 94% | 0 | 0 |
| `geo/056_tpoint_spatialfuncs.in.sql` | 28 | 27 | 1 | 96% | 1 | 0 |
| `geo/058_tgeo_tile.in.sql` | 5 | 4 | 1 | 80% | 0 | 0 |
| `geo/058_tpoint_tile.in.sql` | 11 | 10 | 1 | 91% | 0 | 0 |
| `geo/060_tgeo_boxops.in.sql` | 13 | 13 | 0 | 100% | 0 | 50 |
| `geo/060_tpoint_boxops.in.sql` | 13 | 13 | 0 | 100% | 0 | 50 |
| `geo/062_tgeo_posops.in.sql` | 16 | 16 | 0 | 100% | 0 | 76 |
| `geo/062_tpoint_posops.in.sql` | 16 | 16 | 0 | 100% | 0 | 76 |
| `geo/064_tgeo_distance.in.sql` | 4 | 4 | 0 | 100% | 0 | 16 |
| `geo/064_tpoint_distance.in.sql` | 4 | 4 | 0 | 100% | 0 | 21 |
| `geo/066_tpoint_similarity.in.sql` | 5 | 5 | 0 | 100% | 0 | 0 |
| `geo/068_tgeo_aggfuncs.in.sql` | 0 | 0 | 0 | 0% | 9 | 0 |
| `geo/068_tpoint_aggfuncs.in.sql` | 0 | 0 | 0 | 0% | 12 | 0 |
| `geo/070_tgeo_spatialrels.in.sql` | 14 | 11 | 3 | 79% | 0 | 0 |
| `geo/070_tpoint_spatialrels.in.sql` | 12 | 11 | 1 | 92% | 0 | 0 |
| `geo/072_tgeo_tempspatialrels.in.sql` | 6 | 5 | 1 | 83% | 0 | 0 |
| `geo/070_tgeo_spatialrels.in.sql` | 13 | 13 | 0 | 100% | 1 | 0 |
| `geo/070_tpoint_spatialrels.in.sql` | 11 | 11 | 0 | 100% | 1 | 0 |
| `geo/072_tgeo_tempspatialrels.in.sql` | 6 | 6 | 0 | 100% | 0 | 0 |
| `geo/072_tpoint_tempspatialrels.in.sql` | 5 | 5 | 0 | 100% | 0 | 0 |
| `geo/076_tgeo_analytics.in.sql` | 13 | 13 | 0 | 100% | 0 | 0 |
| `geo/076_tgeo_analytics.in.sql` | 12 | 12 | 0 | 100% | 0 | 0 |
| `geo/076_tpoint_analytics.in.sql` | 18 | 17 | 1 | 94% | 0 | 0 |
| `geo/078_tpoint_datagen.in.sql` | 1 | 0 | 1 | 0% | 0 | 0 |
| `temporal/001_set.in.sql` | 48 | 47 | 1 | 98% | 34 | 38 |
| `geo/078_tpoint_datagen.in.sql` | 0 | 0 | 0 | 0% | 1 | 0 |
| `temporal/001_set.in.sql` | 47 | 47 | 0 | 100% | 35 | 38 |
| `temporal/002_set_ops.in.sql` | 11 | 11 | 0 | 100% | 0 | 176 |
| `temporal/003_span.in.sql` | 46 | 45 | 1 | 98% | 22 | 30 |
| `temporal/003_span.in.sql` | 45 | 45 | 0 | 100% | 23 | 30 |
| `temporal/005_span_ops.in.sql` | 12 | 12 | 0 | 100% | 0 | 160 |
| `temporal/007_spanset.in.sql` | 61 | 60 | 1 | 98% | 20 | 30 |
| `temporal/009_spanset_ops.in.sql` | 14 | 13 | 1 | 93% | 0 | 280 |
| `temporal/007_spanset.in.sql` | 60 | 60 | 0 | 100% | 21 | 30 |
| `temporal/009_spanset_ops.in.sql` | 14 | 14 | 0 | 100% | 0 | 280 |
| `temporal/015_span_aggfuncs.in.sql` | 0 | 0 | 0 | 0% | 10 | 0 |
| `temporal/021_tbox.in.sql` | 52 | 52 | 0 | 100% | 8 | 21 |
| `temporal/022_temporal.in.sql` | 102 | 84 | 18 | 82% | 15 | 24 |
| `temporal/022_temporal.in.sql` | 101 | 101 | 0 | 100% | 16 | 24 |
| `temporal/023_temporal_inout.in.sql` | 16 | 16 | 0 | 100% | 0 | 0 |
| `temporal/025_temporal_tile.in.sql` | 16 | 10 | 6 | 62% | 0 | 0 |
| `temporal/025_temporal_tile.in.sql` | 16 | 11 | 5 | 69% | 0 | 0 |
| `temporal/026_tnumber_mathfuncs.in.sql` | 17 | 17 | 0 | 100% | 0 | 24 |
| `temporal/028_tbool_boolops.in.sql` | 4 | 4 | 0 | 100% | 0 | 7 |
| `temporal/029_ttext_textfuncs.in.sql` | 4 | 4 | 0 | 100% | 0 | 3 |
Expand All @@ -70,164 +70,46 @@ Per-section counts: `Addressable` = MDB names minus PG-only helpers (see appendi
| `temporal/040_temporal_aggfuncs.in.sql` | 0 | 0 | 0 | 0% | 40 | 0 |
| `temporal/042_temporal_waggfuncs.in.sql` | 0 | 0 | 0 | 0% | 8 | 0 |
| `temporal/046_temporal_analytics.in.sql` | 4 | 4 | 0 | 100% | 0 | 0 |
| **TOTAL (active)** | **960** | **867** | **93** | **90%** | **219** | β€” |
| **TOTAL (active)** | **943** | **929** | **14** | **99%** | **231** | β€” |

## Missing function names per active section

### `geo/050_geoset.in.sql` β€” 12 missing of 43 addressable (72% covered)

- `geogsetFromBinary`
- `geogsetFromEWKB`
- `geogsetFromEWKT`
- `geogsetFromHexWKB`
- `geogsetFromText`
- `geomsetFromBinary`
- `geomsetFromEWKB`
- `geomsetFromEWKT`
- `geomsetFromHexWKB`
- `geomsetFromText`
### `geo/050_geoset.in.sql` β€” 1 missing of 42 addressable (98% covered)

- `transformPipeline` (2 overloads)
- `unnest` (2 overloads)

### `geo/051_stbox.in.sql` β€” 16 missing of 75 addressable (79% covered)
### `geo/051_stbox.in.sql` β€” 3 missing of 73 addressable (96% covered)

- `box2d`
- `box3d`
- `geodstboxT` (2 overloads)
- `geodstboxZ`
- `geodstboxZT` (2 overloads)
- `geography`
- `perimeter`
- `quadSplit`
- `stboxFromHexWKB`
- `stboxT` (2 overloads)
- `stboxX`
- `stboxXT` (2 overloads)
- `stboxZ`
- `stboxZT` (2 overloads)
- `stbox_hash`
- `stbox_hash_extended`

### `geo/052_tgeo.in.sql` β€” 6 missing of 70 addressable (91% covered)

- `temporal_hash` (2 overloads)
- `tgeographySeqSet` (3 overloads)
- `tgeographySeqSetGaps`
- `tgeometrySeqSet` (3 overloads)
- `tgeometrySeqSetGaps`
- `unnest` (2 overloads)

### `geo/052_tpoint.in.sql` β€” 4 missing of 70 addressable (94% covered)

- `temporal_hash` (2 overloads)
- `tgeogpointSeqSetGaps`
- `tgeompointSeqSetGaps`
- `unnest` (2 overloads)

### `geo/056_tgeo_spatialfuncs.in.sql` β€” 2 missing of 17 addressable (88% covered)

- `tCentroid`

### `geo/056_tgeo_spatialfuncs.in.sql` β€” 1 missing of 16 addressable (94% covered)

- `transformPipeline` (2 overloads)

### `geo/056_tpoint_spatialfuncs.in.sql` β€” 6 missing of 30 addressable (80% covered)
### `geo/056_tpoint_spatialfuncs.in.sql` β€” 1 missing of 28 addressable (96% covered)

- `atElevation`
- `bearing` (8 overloads)
- `minusElevation`
- `tdirection` (2 overloads)
- `transformPipeline` (3 overloads)
- `transform_gk` (2 overloads)

### `geo/058_tgeo_tile.in.sql` β€” 3 missing of 5 addressable (40% covered)
### `geo/058_tgeo_tile.in.sql` β€” 1 missing of 5 addressable (80% covered)

- `spaceSplit` (3 overloads)
- `spaceTimeSplit` (3 overloads)
- `timeBoxes`

### `geo/058_tpoint_tile.in.sql` β€” 3 missing of 11 addressable (73% covered)
### `geo/058_tpoint_tile.in.sql` β€” 1 missing of 11 addressable (91% covered)

- `spaceSplit` (3 overloads)
- `spaceTimeSplit` (3 overloads)
- `timeBoxes`

### `geo/060_tgeo_boxops.in.sql` β€” 3 missing of 13 addressable (77% covered)

- `splitEachNStboxes` (2 overloads)
- `splitNStboxes` (2 overloads)
- `stboxes` (2 overloads)

### `geo/060_tpoint_boxops.in.sql` β€” 3 missing of 13 addressable (77% covered)

- `splitEachNStboxes` (4 overloads)
- `splitNStboxes` (4 overloads)
- `stboxes` (4 overloads)

### `geo/070_tgeo_spatialrels.in.sql` β€” 3 missing of 14 addressable (79% covered)

- `_edisjoint` (6 overloads)
- `aCovers` (3 overloads)
- `eCovers` (3 overloads)

### `geo/070_tpoint_spatialrels.in.sql` β€” 1 missing of 12 addressable (92% covered)

- `_edisjoint` (6 overloads)

### `geo/072_tgeo_tempspatialrels.in.sql` β€” 1 missing of 6 addressable (83% covered)

- `tCovers` (3 overloads)

### `geo/076_tpoint_analytics.in.sql` β€” 1 missing of 18 addressable (94% covered)

- `geography` (2 overloads)

### `geo/078_tpoint_datagen.in.sql` β€” 1 missing of 1 addressable (0% covered)

- `create_trip`

### `temporal/001_set.in.sql` β€” 1 missing of 48 addressable (98% covered)

- `unnest` (6 overloads)

### `temporal/003_span.in.sql` β€” 1 missing of 46 addressable (98% covered)

- `range` (4 overloads)

### `temporal/007_spanset.in.sql` β€” 1 missing of 61 addressable (98% covered)

- `multirange` (4 overloads)

### `temporal/009_spanset_ops.in.sql` β€” 1 missing of 14 addressable (93% covered)

- `time_distance` (5 overloads)

### `temporal/022_temporal.in.sql` β€” 18 missing of 102 addressable (82% covered)

- `tboolInst`
- `tboolSeq` (2 overloads)
- `tboolSeqSet` (2 overloads)
- `tboolSeqSetGaps`
- `temporal_hash` (4 overloads)
- `tfloatInst`
- `tfloatSeq` (2 overloads)
- `tfloatSeqSet` (2 overloads)
- `tfloatSeqSetGaps`
- `tintInst`
- `tintSeq` (2 overloads)
- `tintSeqSet` (2 overloads)
- `tintSeqSetGaps`
- `ttextInst`
- `ttextSeq` (2 overloads)
- `ttextSeqSet` (2 overloads)
- `ttextSeqSetGaps`
- `unnest` (3 overloads)

### `temporal/025_temporal_tile.in.sql` β€” 6 missing of 16 addressable (62% covered)
### `temporal/025_temporal_tile.in.sql` β€” 5 missing of 16 addressable (69% covered)

- `timeBins` (4 overloads)
- `timeBoxes` (2 overloads)
- `valueBins` (2 overloads)
- `valueBoxes` (2 overloads)
- `valueSplit` (2 overloads)
- `valueTimeBoxes` (2 overloads)

## Appendix B β€” Out of scope (PG-only, no DuckDB equivalent)
Expand All @@ -254,18 +136,22 @@ These entries are PG-specific helpers β€” index opclasses, aggregate transition/
| Section | PG helpers |
|---|---:|
| `geo/050_geoset.in.sql` | 13 |
| `geo/051_stbox.in.sql` | 8 |
| `geo/052_tgeo.in.sql` | 10 |
| `geo/052_tpoint.in.sql` | 8 |
| `geo/051_stbox.in.sql` | 10 |
| `geo/052_tgeo.in.sql` | 11 |
| `geo/052_tpoint.in.sql` | 9 |
| `geo/054_tgeo_compops.in.sql` | 1 |
| `geo/056_tpoint_spatialfuncs.in.sql` | 1 |
| `geo/068_tgeo_aggfuncs.in.sql` | 9 |
| `geo/068_tpoint_aggfuncs.in.sql` | 12 |
| `temporal/001_set.in.sql` | 34 |
| `temporal/003_span.in.sql` | 22 |
| `temporal/007_spanset.in.sql` | 20 |
| `geo/070_tgeo_spatialrels.in.sql` | 1 |
| `geo/070_tpoint_spatialrels.in.sql` | 1 |
| `geo/078_tpoint_datagen.in.sql` | 1 |
| `temporal/001_set.in.sql` | 35 |
| `temporal/003_span.in.sql` | 23 |
| `temporal/007_spanset.in.sql` | 21 |
| `temporal/015_span_aggfuncs.in.sql` | 10 |
| `temporal/021_tbox.in.sql` | 8 |
| `temporal/022_temporal.in.sql` | 15 |
| `temporal/022_temporal.in.sql` | 16 |
| `temporal/030_temporal_compops.in.sql` | 1 |
| `temporal/040_temporal_aggfuncs.in.sql` | 40 |
| `temporal/042_temporal_waggfuncs.in.sql` | 8 |
Expand All @@ -278,19 +164,19 @@ These families (cbuffer, npoint, pose, rgeo) are deferred until the active tempo
|---|---:|---:|---:|---:|
| `cbuffer/150_cbuffer.in.sql` | 31 | 7 | 24 | 23% |
| `cbuffer/151_cbufferset.in.sql` | 42 | 32 | 10 | 76% |
| `cbuffer/152_tcbuffer.in.sql` | 84 | 65 | 19 | 77% |
| `cbuffer/152_tcbuffer.in.sql` | 84 | 66 | 18 | 79% |
| `cbuffer/154_tcbuffer_compops.in.sql` | 6 | 6 | 0 | 100% |
| `cbuffer/155_tcbuffer_spatialfuncs.in.sql` | 11 | 8 | 3 | 73% |
| `cbuffer/155_tcbuffer_spatialfuncs.in.sql` | 9 | 6 | 3 | 67% |
| `cbuffer/158_tcbuffer_topops.in.sql` | 7 | 7 | 0 | 100% |
| `cbuffer/159_tcbuffer_posops.in.sql` | 12 | 12 | 0 | 100% |
| `cbuffer/160_tcbuffer_distance.in.sql` | 5 | 4 | 1 | 80% |
| `cbuffer/161_tcbuffer_aggfuncs.in.sql` | 7 | 0 | 7 | 0% |
| `cbuffer/162_tcbuffer_spatialrels.in.sql` | 13 | 11 | 2 | 85% |
| `cbuffer/164_tcbuffer_tempspatialrels.in.sql` | 6 | 5 | 1 | 83% |
| `cbuffer/162_tcbuffer_spatialrels.in.sql` | 13 | 13 | 0 | 100% |
| `cbuffer/164_tcbuffer_tempspatialrels.in.sql` | 6 | 6 | 0 | 100% |
| `cbuffer/166_tcbuffer_indexes.in.sql` | 1 | 0 | 1 | 0% |
| `npoint/081_npoint.in.sql` | 41 | 8 | 33 | 20% |
| `npoint/082_npointset.in.sql` | 43 | 30 | 13 | 70% |
| `npoint/083_tnpoint.in.sql` | 77 | 61 | 16 | 79% |
| `npoint/083_tnpoint.in.sql` | 77 | 62 | 15 | 81% |
| `npoint/085_tnpoint_compops.in.sql` | 6 | 6 | 0 | 100% |
| `npoint/087_tnpoint_spatialfuncs.in.sql` | 12 | 11 | 1 | 92% |
| `npoint/089_tnpoint_topops.in.sql` | 7 | 7 | 0 | 100% |
Expand All @@ -302,25 +188,22 @@ These families (cbuffer, npoint, pose, rgeo) are deferred until the active tempo
| `npoint/098_tnpoint_indexes.in.sql` | 1 | 0 | 1 | 0% |
| `pose/100_pose.in.sql` | 34 | 10 | 24 | 29% |
| `pose/101_poseset.in.sql` | 46 | 33 | 13 | 72% |
| `pose/102_tpose.in.sql` | 85 | 64 | 21 | 75% |
| `pose/102_tpose.in.sql` | 84 | 65 | 19 | 77% |
| `pose/104_tpose_compops.in.sql` | 6 | 6 | 0 | 100% |
| `pose/105_tpose_spatialfuncs.in.sql` | 8 | 7 | 1 | 88% |
| `pose/108_tpose_topops.in.sql` | 7 | 7 | 0 | 100% |
| `pose/109_tpose_posops.in.sql` | 16 | 16 | 0 | 100% |
| `pose/111_tpose_aggfuncs.in.sql` | 7 | 0 | 7 | 0% |
| `pose/113_tpose_distance.in.sql` | 4 | 4 | 0 | 100% |
| `pose/114_tpose_indexes.in.sql` | 1 | 0 | 1 | 0% |
| `rgeo/122_trgeo.in.sql` | 95 | 75 | 20 | 79% |
| `rgeo/122_trgeo.in.sql` | 83 | 65 | 18 | 78% |
| `rgeo/124_trgeo_compops.in.sql` | 6 | 6 | 0 | 100% |
| `rgeo/125_trgeo_spatialfuncs.in.sql` | 8 | 7 | 1 | 88% |
| `rgeo/126_trgeo_tile.in.sql` | 3 | 3 | 0 | 100% |
| `rgeo/127_trgeo_boxops.in.sql` | 13 | 8 | 5 | 62% |
| `rgeo/125_trgeo_spatialfuncs.in.sql` | 4 | 3 | 1 | 75% |
| `rgeo/128_trgeo_topops.in.sql` | 5 | 5 | 0 | 100% |
| `rgeo/129_trgeo_posops.in.sql` | 16 | 16 | 0 | 100% |
| `rgeo/131_trgeo_aggfuncs.in.sql` | 8 | 0 | 8 | 0% |
| `rgeo/132_trgeo_similarity.in.sql` | 5 | 5 | 0 | 100% |
| `rgeo/129_trgeo_posops.in.sql` | 12 | 12 | 0 | 100% |
| `rgeo/131_trgeo_aggfuncs.in.sql` | 7 | 0 | 7 | 0% |
| `rgeo/133_trgeo_distance.in.sql` | 4 | 4 | 0 | 100% |
| `rgeo/133_trgeo_vclip.in.sql` | 6 | 0 | 6 | 0% |
| `rgeo/134_trgeo_indexes.in.sql` | 1 | 0 | 1 | 0% |
| **TOTAL (deferred)** | **827** | **572** | **255** | **69%** |
| **TOTAL (deferred)** | **782** | **542** | **240** | **69%** |

Loading
Loading