Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
288 commits
Select commit Hold shift + click to select a range
419782a
feat(nebula): W30 — windowed value-union set-collect aggregates (304-…
estebanzimanyi May 23, 2026
57f0da7
feat(nebula): durable query-literal round-trip for parameterized aggr…
estebanzimanyi May 23, 2026
1aff635
feat(nebula): MEOS function library composes over VARSIZED WKB values
estebanzimanyi May 23, 2026
b2d0570
feat(nebula): TRAJECTORY_WKB — windowed mini-trip trajectory as a hex…
estebanzimanyi May 23, 2026
772a45d
feat(nebula): expandable-Temporal* streaming aggregate substrate (309…
estebanzimanyi May 23, 2026
64a766b
feat(nebula): value-output windowed aggregates (Temporal->hex-WKB) (3…
estebanzimanyi May 23, 2026
5934abf
feat(nebula): tnumber value-output windowed aggregates (316->324)
estebanzimanyi May 24, 2026
acbaed5
fix(nebula): make windowed-aggregate query plans deserialize and run
estebanzimanyi May 24, 2026
b1835f7
feat(nebula): tnpoint network-constrained windowed aggregates (324->327)
estebanzimanyi May 24, 2026
8fd0162
fix(nebula): unqualify computed sink field in tpoint_length_wkb systest
estebanzimanyi May 24, 2026
5306363
fix(harness): resolve systest tokens for every operator family in pro…
estebanzimanyi May 24, 2026
995dc35
docs(nebula): measured NebulaStream surface — 327 wired, 38 callable
estebanzimanyi May 24, 2026
40d6c5a
feat(nebula): unary temporal-transform value-output aggregates (327->…
estebanzimanyi May 24, 2026
c45f580
docs(nebula): NebulaStream surface 332 wired, 43 callable
estebanzimanyi May 24, 2026
d071271
fix(nebula): initialize MEOS per worker thread (thread-local session …
estebanzimanyi May 24, 2026
35d2919
feat(nebula): geometry value-output windowed aggregates (332->336)
estebanzimanyi May 24, 2026
22dc61a
docs(nebula): NebulaStream surface 336 wired, 47 callable
estebanzimanyi May 24, 2026
d71f46b
docs(nebula): document the cross-stream (pairwise) tier and its boundary
estebanzimanyi May 24, 2026
16a2e64
docs(nebula): cross-stream tier follows per-vehicle grouping
estebanzimanyi May 24, 2026
6f04b03
feat(nebula): cross-vehicle STBox predicates as per-event functions (…
estebanzimanyi May 24, 2026
d331fcb
docs(nebula): NebulaStream 365 wired, 49 callable; STBox cross-vehicl…
estebanzimanyi May 24, 2026
44da865
perf(nebula): TSPATIAL_EXTENT folds an incremental STBox slot, not a …
estebanzimanyi May 24, 2026
ee4c241
perf(nebula): TNUMBER_EXTENT folds an incremental TBox slot, not a Pa…
estebanzimanyi May 24, 2026
e2e47b9
perf(nebula): span-extent aggregates fold an incremental Span slot, n…
estebanzimanyi May 24, 2026
5033ee8
perf(nebula): set-union aggregates fold an incremental Set slot, not …
estebanzimanyi May 24, 2026
9b4aeaf
docs(nebula): aggregates use one incremental MEOS-accumulator slot
estebanzimanyi May 24, 2026
86410ca
feat(nebula): cross-vehicle tnumber-vs-tnumber predicates (per-event,…
estebanzimanyi May 24, 2026
b77ad15
docs(nebula): NebulaStream 384 wired, 57 callable; tnumber cross-vehi…
estebanzimanyi May 24, 2026
d424c05
feat(nebula): wire tnpoint/tpose binary scalar cross-vehicle predicat…
estebanzimanyi May 24, 2026
5b210f2
feat(nebula): wire cross-vehicle f(trajA,trajB)->Temporal* combinator…
estebanzimanyi May 24, 2026
738d315
measure(nebula): 61 proven / 345 wired of 1949 streamable (56/56 green)
estebanzimanyi May 25, 2026
47c9a07
test(nebula): systests for sub/mult/div_tnumber_tnumber (L2->L3, 63 p…
estebanzimanyi May 25, 2026
50ea0dd
test(nebula): systests for 11 *_tnumber_tnumber bbox predicates (74 p…
estebanzimanyi May 25, 2026
fae13ac
test(nebula): systests for 6 tgeo_tgeo bool spatial-rels (L2->L3)
estebanzimanyi May 25, 2026
11a2396
test(nebula): systests for 7 tgeo_geo bool spatial-rels (86 proven)
estebanzimanyi May 25, 2026
da848d6
test(nebula): systests for 19 stbox_stbox bbox predicates (105 proven)
estebanzimanyi May 25, 2026
36b44a5
test(nebula): systests for 17 tspatial_tspatial bbox predicates (122 …
estebanzimanyi May 25, 2026
74893ba
test(nebula): systests for 17 tspatial_stbox bbox predicates (139 pro…
estebanzimanyi May 25, 2026
245755b
test(nebula): systests for 17 stbox_tspatial bbox predicates (156 pro…
estebanzimanyi May 25, 2026
202f965
test(nebula): systests for 13 tnumber_tbox bbox predicates (169 proven)
estebanzimanyi May 25, 2026
29e15a6
test(nebula): systests for 13 tbox_tnumber bbox predicates
estebanzimanyi May 25, 2026
d96c66d
test(nebula): systests for 9 tcbuffer_geo bool spatial-rels
estebanzimanyi May 25, 2026
51c7d2e
test(nebula): systests for 9 tcbuffer_cbuffer bool spatial-rels (tcbu…
estebanzimanyi May 25, 2026
f3047a8
test(nebula): systests for 5 tcbuffer_tcbuffer bool spatial-rels (8-a…
estebanzimanyi May 25, 2026
07ab094
test(nebula): systests for temporal_temporal bbox-time predicates (21…
estebanzimanyi May 25, 2026
ebe8179
test(nebula): systests for 24 tfloat/float comparison predicates (238…
estebanzimanyi May 25, 2026
d961d26
test(nebula): systests for 24 tint/int comparison predicates (262 pro…
estebanzimanyi May 25, 2026
d801fcc
test(nebula): eq/ne for tgeo/tcbuffer + spatial stragglers (279 proven)
estebanzimanyi May 25, 2026
8ebf747
test(nebula): systests for 5 dwithin predicates (283 proven)
estebanzimanyi May 25, 2026
c834c0d
test(nebula): a/edwithin_tcbuffer_cbuffer via safe inputs (285 proven)
estebanzimanyi May 25, 2026
8f287dc
measure(flink/kafka): reconcile trgeo->trgeometry rename -> 99.8%
estebanzimanyi May 25, 2026
f40405c
test(nebula): tcontains/tcovers_tgeo_tgeo + tdistance_tnumber_tnumber…
estebanzimanyi May 25, 2026
ec72bdd
Record 22 wired comparison operators as proven systests (288->310, 15…
estebanzimanyi May 25, 2026
f695cb4
Record 4 more wired operators as proven systests (310->315, 16.2%)
estebanzimanyi May 25, 2026
7038e56
Record 4 windowed-aggregation operators as proven systests (315->319,…
estebanzimanyi May 25, 2026
55fc968
Record 5 windowed-aggregation accessors as proven systests (319->324)
estebanzimanyi May 25, 2026
4cd46bc
Record 3 more wired operators as proven systests (324->326)
estebanzimanyi May 25, 2026
bb33e02
Record 18 FLOAT64-return operators as proven systests (326->344, 17.7%)
estebanzimanyi May 25, 2026
2563b15
Record 7 distance/derivative operators as proven systests (344->350)
estebanzimanyi May 25, 2026
9b95f0d
Record 13 comparison/similarity/transform operators as proven systest…
estebanzimanyi May 25, 2026
c2ff127
Use the direct-call NAD_TPOSE_GEO token so nad_tpose_geo credits (363…
estebanzimanyi May 25, 2026
aba4253
Credit MEOSWrapper-method MEOS calls in the streaming-parity adapter
estebanzimanyi May 25, 2026
d87f68e
build: activate the MQTT plugins only when PahoMqttCpp is present
estebanzimanyi May 25, 2026
0305499
build: install Paho MQTT into the dev image (Dockerfile.paho -> v5)
estebanzimanyi May 25, 2026
df7f66d
tools: add record_tests.py to auto-record systest expected blocks
estebanzimanyi May 25, 2026
bc6eab1
Record the 11 hex-WKB combinator systests (proven 365 -> 376, 19.3%)
estebanzimanyi May 25, 2026
af3c8c7
Record nad_tpose_tpose, nad_tnpoint_tnpoint, tnpoint_length (proven 3…
estebanzimanyi May 25, 2026
be11fcc
Record atouches_tpoint_geo and etouches_tpoint_geo (proven 379 -> 381)
estebanzimanyi May 25, 2026
714b0b3
Add the span-algebra codegen shape and the 8 span topology predicates
estebanzimanyi May 26, 2026
fb3b34e
Add the set and spanset topology predicates on the span-algebra shape
estebanzimanyi May 26, 2026
7ad4bd4
Add the VARSIZED-return set-algebra union/intersection/minus operators
estebanzimanyi May 26, 2026
9b0fc5a
Extend the algebra codegen to the span/set/spanset/box subtype matrix
estebanzimanyi May 27, 2026
94429e2
Realign adjacent_temporal_temporal with set-theoretic bbox adjacency
estebanzimanyi May 27, 2026
6d01282
Rename the temporal multiplication operator from mult to mul
estebanzimanyi May 27, 2026
8f50d8e
Add the span/set/spanset/box algebra operators (165 ops)
estebanzimanyi May 27, 2026
e8096ff
Add the date and timestamptz topology and position predicates (71 ops)
estebanzimanyi May 27, 2026
454df4b
Add the span/set/spanset scalar accessors (37 ops)
estebanzimanyi May 27, 2026
c9778ac
Add the scalar comparison, distance, and accessor operators (105 ops)
estebanzimanyi May 27, 2026
393f74a
Add the temporal-number scalar operators (43 ops)
estebanzimanyi May 27, 2026
e36a79a
Add the always/ever temporal reductions and tint distance (25 ops)
estebanzimanyi May 28, 2026
63774b3
Add the ttext temporal operators (40 ops)
estebanzimanyi May 28, 2026
8ee3f61
Add the geo-base temporal operators (21 ops)
estebanzimanyi May 28, 2026
07a6ec7
Add the cbuffer/npoint/pose/bool temporal relation operators (31 ops)
estebanzimanyi May 28, 2026
82e7459
Prove the cbuffer/pose geo temporal relations with a planar base (14 …
estebanzimanyi May 28, 2026
0e17d2b
Add the temporal restriction operators (14 ops)
estebanzimanyi May 28, 2026
9f565bd
Add the temporal-temporal comparison operators (6 ops)
estebanzimanyi May 28, 2026
f609d17
Add the tgeo/tcbuffer/ttext two-temporal operators (7 ops)
estebanzimanyi May 28, 2026
e02b12f
Decouple operator compilation from the plugin registrar (fast builds)
estebanzimanyi May 28, 2026
b655816
Fix systest result-print crash on suites with >999 queries
estebanzimanyi May 28, 2026
b8303ba
Enforce regular SQL-token naming for catalog-driven codegen
estebanzimanyi May 28, 2026
9ad64fe
Speed up local builds with a persistent ccache and mold
estebanzimanyi May 28, 2026
3f223b1
Regularize 92 SQL tokens and their operator classes to the MEOS symbol
estebanzimanyi May 28, 2026
f84710b
Collapse duplicate composition operators onto their canonical names
estebanzimanyi May 29, 2026
bbadef6
Prove eight wired MEOS operators and fix two cast operators
estebanzimanyi May 29, 2026
409b683
Make MEOS operators a compile-time toggleable type-family architecture
estebanzimanyi May 29, 2026
d049af0
Add the temporal/tnumber time-and-value topological operators (12 ops)
estebanzimanyi May 29, 2026
d7d5441
Make the aggregation codegen family-aware (no hand special-cases)
estebanzimanyi May 29, 2026
ccd407d
Add the spanset width accessors (3 ops)
estebanzimanyi May 29, 2026
cbdc70f
Add the number-subtype span/set/spanset shift_scale operators (9 ops)
estebanzimanyi May 29, 2026
eaeb453
Add the base-value to span/set/spanset constructors (15 ops)
estebanzimanyi May 29, 2026
309be5e
Add the value-mixed set/span/spanset algebra operators (39 ops)
estebanzimanyi May 29, 2026
9a81403
Add the date/timestamptz span/set/spanset shift_scale operators (6 ops)
estebanzimanyi May 29, 2026
212d668
Add the TBox/STBox scalar accessor operators (10 ops)
estebanzimanyi May 29, 2026
2727697
Add the X-to-box/span conversion constructor operators (10 ops)
estebanzimanyi May 29, 2026
0c43b53
Add the box out-param accessor operators (16 ops)
estebanzimanyi May 29, 2026
5f86c70
Add the value_n out-param accessor operators (8 ops)
estebanzimanyi May 29, 2026
734f28a
Add the span/spanset conversion and accessor operators (8 ops)
estebanzimanyi May 29, 2026
d2d7423
Add the base/numspan with time to TBox constructors (6 ops)
estebanzimanyi May 29, 2026
854a6da
Add the object-to-STBox conversion constructors (4 ops)
estebanzimanyi May 29, 2026
0524d22
Add the ttext transform and value-accessor operators (7 ops)
estebanzimanyi May 29, 2026
87b356a
Add the text value_n out-param accessors (2 ops)
estebanzimanyi May 29, 2026
4453154
Add the object value_n out-param accessors (2 ops)
estebanzimanyi May 29, 2026
90432be
Add the temporal time/value span accessors (3 ops)
estebanzimanyi May 29, 2026
c5b05fa
Add the hash and srid scalar accessors (12 ops)
estebanzimanyi May 29, 2026
e16e5d2
Add the round accessors (10 ops)
estebanzimanyi May 29, 2026
db74cac
Add the duration accessors (5 ops)
estebanzimanyi May 29, 2026
f9b3a4b
Add span/box conversions and box accessors (26 ops)
estebanzimanyi May 29, 2026
693e378
Add the object-set start/end/value_n accessors (12 ops)
estebanzimanyi May 29, 2026
bd9e777
Add the geometry-primary unary accessors (15 ops)
estebanzimanyi May 29, 2026
8e95bfc
Add the at_value and minus_value temporal restrictions (5 ops)
estebanzimanyi May 29, 2026
39dbeb5
Add the Interval-consuming algebra operators (8 ops)
estebanzimanyi May 29, 2026
120f6f9
Add the object-set algebra and predicate operators (36 ops)
estebanzimanyi May 29, 2026
b482ae3
Add the temporal-span bbox predicate operators (24 ops)
estebanzimanyi May 29, 2026
877e80a
Add the nearest-approach and shortest-line operators (22 ops)
estebanzimanyi May 29, 2026
6a9c3fd
Add unary object/temporal accessors and fix temporal-subtype mapping …
estebanzimanyi May 29, 2026
384ccf8
Add spatial temporal restriction operators (16 ops)
estebanzimanyi May 29, 2026
a316b8e
Add arity-3 STBox temporal restriction operators (5 ops)
estebanzimanyi May 29, 2026
8b3cd57
Add object/box scalar distance operators (6 ops)
estebanzimanyi May 29, 2026
812c35e
Add span constructor operators (5 ops)
estebanzimanyi May 29, 2026
6c79dac
Add instant and object constructor operators (9 ops)
estebanzimanyi May 29, 2026
c835319
Add pure-geometry binary operators (18 ops)
estebanzimanyi May 29, 2026
e3bae4a
Add value-array accessors and the array-output assembler (6 ops)
estebanzimanyi May 30, 2026
53d3e00
Add set value-array accessors and temporal_timestamps (8 ops)
estebanzimanyi May 30, 2026
b1d50ba
Add more value-array accessors (4 ops)
estebanzimanyi May 30, 2026
9e04ce0
Add tdwithin temporal operators (5 ops)
estebanzimanyi May 30, 2026
81a29e9
Add numeric get_bin and box shift_scale_time operators (5 ops)
estebanzimanyi May 30, 2026
4c31cde
Add time get_bin and tprecision operators (6 ops)
estebanzimanyi May 30, 2026
4f1a355
Add temporal delete/after/before operators (6 ops)
estebanzimanyi May 30, 2026
dfc6f03
Add split-array operators (10 ops)
estebanzimanyi May 30, 2026
fd90606
Add numeric bin-array operators (6 ops)
estebanzimanyi May 30, 2026
fd11131
Add value/time box-array and time-bin operators (6 ops)
estebanzimanyi May 30, 2026
f04c013
Add bigint bins, STBox tiles and tgeo space boxes (6 ops)
estebanzimanyi May 30, 2026
6ca3758
Fix temporal_spans and tbox_make, previously mis-deferred (2 ops)
estebanzimanyi May 30, 2026
ec50971
Prove geom_to_geog and geog_dwithin, previously mis-deferred (2 ops)
estebanzimanyi May 30, 2026
7fc5eb9
Regenerate the Z-dimension predicates with a 3D builder (12 ops)
estebanzimanyi May 30, 2026
4f1ae08
Add set transforms, conversions and geog_to_geom (12 ops)
estebanzimanyi May 30, 2026
dc20023
Unblock trgeometry: refresh MEOS snapshot, enable RGEO, add 15 ops
estebanzimanyi May 30, 2026
fa4da04
Add trgeometry conversions and rotation (4 ops)
estebanzimanyi May 30, 2026
22e750b
Add trgeometry instant accessors and nai_trgeometry_geo (3 ops)
estebanzimanyi May 30, 2026
402627d
Add trgeometry time restrictions (4 ops)
estebanzimanyi May 30, 2026
ddf6606
Add tspatial_srid accessor (1 op)
estebanzimanyi May 30, 2026
24232bd
Add date_extent_transfn windowed aggregate (1 op)
estebanzimanyi May 30, 2026
18d842b
Add date_union_transfn windowed aggregate (1 op)
estebanzimanyi May 30, 2026
2e1f71e
Add trgeometry two-temporal eq/ne reductions (4 ops)
estebanzimanyi May 30, 2026
130b019
Add floatspan/floatspanset ceil/floor/radians transforms (6 ops)
estebanzimanyi May 30, 2026
0c1de57
Add floatset/floatspan/floatspanset degrees transforms (3 ops)
estebanzimanyi May 30, 2026
f443611
Add scalar float math: exp/ln/log10/degrees/angular_difference (5 ops)
estebanzimanyi May 30, 2026
cdb07e8
Add int/bigint/float span_expand transforms (3 ops)
estebanzimanyi May 30, 2026
e17c881
Add cbuffer/npoint/pose/geo to_set conversions (4 ops)
estebanzimanyi May 30, 2026
fbd34aa
Add geo/set/object to_stbox conversions (6 ops)
estebanzimanyi May 30, 2026
185b29c
Add geo/npoint/pose/cbuffer timestamptz_to_stbox (4 ops)
estebanzimanyi May 30, 2026
7eac34e
Add windowed temporal aggregates: tint/tfloat tSum/tMin/tMax + tAvg (…
estebanzimanyi May 30, 2026
b00890f
Add windowed tbool tAnd/tOr + temporal tCount aggregates (3 ops)
estebanzimanyi May 30, 2026
1c2a7e6
Add windowed w-aggregates: tint/tfloat wMin/wMax/wSum + wAvg (7 ops)
estebanzimanyi May 30, 2026
fa712e5
Add windowed tpoint_tcentroid aggregate (1 op + finalfn)
estebanzimanyi May 31, 2026
e8446c9
Add windowed ttext tMin/tMax aggregates (2 ops)
estebanzimanyi May 31, 2026
623804d
Add windowed container extent/union aggregates (11 ops + finalfn)
estebanzimanyi May 31, 2026
198a61c
Add remaining windowed aggregates: temporal_merge, tcount variants, t…
estebanzimanyi May 31, 2026
5f6752e
Add scale_value, trgeometry_value_n, tpose/tcbuffer point conversions…
estebanzimanyi May 31, 2026
23090a9
Add text string transforms: lower/upper/initcap/copy (4 ops)
estebanzimanyi May 31, 2026
bcd4b22
Add datespanset_dates + npointset_routes accessors (2 ops)
estebanzimanyi May 31, 2026
23fc8b7
Add temporal point/route Set accessors (4 ops)
estebanzimanyi May 31, 2026
730577d
Add tpose_rotation (1 op)
estebanzimanyi May 31, 2026
a9d2a7f
Add trgeometry_round (1 op)
estebanzimanyi May 31, 2026
8458482
Add shift_scale_value/time + temporal_tprecision (4 ops)
estebanzimanyi May 31, 2026
b0b8985
Add temporal_simplify_dp + temporal_simplify_max_dist (2 ops)
estebanzimanyi May 31, 2026
96a24f6
Add _n element accessors: temporal/tstzspanset_timestamptz_n, datespa…
estebanzimanyi May 31, 2026
ecf6606
Add trgeometry delete/after/before time-restriction ops (6 ops)
estebanzimanyi May 31, 2026
68ae9f4
Family-gate the SQL grammar + parser so -DCBUFFER=0 etc. drops the to…
estebanzimanyi May 31, 2026
8680232
Unify codegen glue markers + share one family-guard across both gener…
estebanzimanyi May 31, 2026
b36a403
Add temporal_insert + temporal_update (2 ops)
estebanzimanyi May 31, 2026
4cb6867
Add tgeo_stboxes array-split op (1 op)
estebanzimanyi May 31, 2026
2db0baa
Add scalar date/time conversions (4 ops)
estebanzimanyi May 31, 2026
dc49b96
Reconcile trgeometry feed entries to catalog trgeo names (+48 credited)
estebanzimanyi Jun 1, 2026
36e8a0d
Add temporal instant accessors (5 ops)
estebanzimanyi Jun 1, 2026
3e58866
Add geodetic measurement ops (5 ops)
estebanzimanyi Jun 1, 2026
69abf0d
Add geometry ops with fixed args: SRID, dwithin, buffer, relate (7 ops)
estebanzimanyi Jun 1, 2026
a7f79bf
Add SRID set/transform ops for spatial primaries (6 ops)
estebanzimanyi Jun 1, 2026
10ec3a3
Add tnumber_tboxes array-out op (1 op)
estebanzimanyi Jun 1, 2026
2fc281d
Add temporal geometry/geography cross-conversions (5 ops)
estebanzimanyi Jun 1, 2026
5be61a3
Add temporal_instant_n + tpoint_get_z (2 ops)
estebanzimanyi Jun 1, 2026
1bb01a5
Add time-span bins + value-time TBox boxes (5 ops)
estebanzimanyi Jun 1, 2026
5bf836f
Handoff: request MEOS promote binding-needed internals to public meos.h
estebanzimanyi Jun 1, 2026
f3310c4
Add public hash_extended ops (4 ops)
estebanzimanyi Jun 1, 2026
183f726
Add internal-declared hash_extended ops (4 ops)
estebanzimanyi Jun 1, 2026
fc88eb1
Add type-dispatch predicates, data-bound (32 ops)
estebanzimanyi Jun 1, 2026
7993648
Add comparator ops (3 ops)
estebanzimanyi Jun 1, 2026
76462d0
Add NebulaStream C-library integration friction note + proposals
estebanzimanyi Jun 1, 2026
85539a8
Add tbool/ttext instant constructors (2 ops)
estebanzimanyi Jun 1, 2026
c2fa3f9
Add nsegment/pose/interval constructors + box-space accessors (7 ops)
estebanzimanyi Jun 1, 2026
fe6ee5c
Add value-at-timestamp accessors (6 ops)
estebanzimanyi Jun 1, 2026
016dd76
Add box value shift-scale + geometry azimuth/bearing (4 ops)
estebanzimanyi Jun 1, 2026
c8e5a3f
Add PROJ-pipeline reprojection transforms (5 ops)
estebanzimanyi Jun 1, 2026
7995396
Add space/time tiling + temporal geometry scaling (3 ops)
estebanzimanyi Jun 1, 2026
7150565
Add temporal span splits + STBox quad split (3 ops)
estebanzimanyi Jun 1, 2026
e16d8f4
Add temporal time-shift/scale, restrict, and sequence casts (6 ops)
estebanzimanyi Jun 1, 2026
aef5b8a
Add temporal set-interpolation and min-delta simplify (2 ops)
estebanzimanyi Jun 2, 2026
41fcad8
Add value/time split into temporal fragments (3 ops)
estebanzimanyi Jun 2, 2026
1a957cb
Add value-and-time split into temporal fragments (2 ops)
estebanzimanyi Jun 2, 2026
48a8e95
Add geo space and space-time split into fragments (2 ops)
estebanzimanyi Jun 2, 2026
64830ae
Add array-input rounding for cbuffer/pose/temporal (3 ops)
estebanzimanyi Jun 2, 2026
b278424
Add geometry clustering by intersection and distance (2 ops)
estebanzimanyi Jun 2, 2026
508af1c
Add geometry kmeans and DBSCAN clustering (2 ops)
estebanzimanyi Jun 2, 2026
e5aa384
Drop stale trgeo_ ghost entries from the streaming-parity feed
estebanzimanyi Jun 2, 2026
21689d8
Add stboxarr_round and tnpoint_positions operators (2 ops)
estebanzimanyi Jun 2, 2026
1ac12cd
Resync the MEOS operator surface to the corrected ecosystem pin
estebanzimanyi Jun 4, 2026
14bdf53
Refresh the streaming-parity measurement to the corrected pin
estebanzimanyi Jun 4, 2026
b98a5b1
Close the tdistance _geo gaps left by the pin rename
estebanzimanyi Jun 5, 2026
9c793ea
Fix the phantom tpose_to_tgeompoint codegen symbol
estebanzimanyi Jun 5, 2026
9ad3d29
Record MEOS value literals and timestamps in record_tests.py
estebanzimanyi Jun 5, 2026
a21bf17
Add tnpoint at/minus geom/stbox operators (wave 13)
estebanzimanyi Jun 5, 2026
8190cfc
Refresh the streaming-parity measurement after wave 13
estebanzimanyi Jun 5, 2026
e5c8067
Prove the tnpoint and trgeometry nearest-approach operators (wave 14)
estebanzimanyi Jun 5, 2026
08eb73b
Add text, box-expand and temporal-buffer operators (wave 14b)
estebanzimanyi Jun 5, 2026
921b7fb
Add trgeometry-STBox distance, traversed-area and bbox operators (wav…
estebanzimanyi Jun 5, 2026
bcc5ab8
Add windowed set constructors via a new array-make aggregation (wave 16)
estebanzimanyi Jun 5, 2026
4566025
Add the STBox-to-PostGIS-box conversions stbox_to_box3d / stbox_to_gb…
estebanzimanyi Jun 5, 2026
945b3b8
Add the PostGIS-box-to-STBox conversions box3d_to_stbox / gbox_to_stb…
estebanzimanyi Jun 5, 2026
bc2d39c
Add the catalog type-reflection accessors temporal_subtype / temporal…
estebanzimanyi Jun 5, 2026
550119c
Add the catalog type-reflection predicates and name accessors (wave 21)
estebanzimanyi Jun 5, 2026
396b492
Add sequence accessors and trgeometry/npoint algebra (wave 22)
estebanzimanyi Jun 5, 2026
31cba6e
Add windowed object-set constructors via the array-make aggregation (…
estebanzimanyi Jun 5, 2026
0ee7b32
Add windowed geometry-array constructors via the array-make aggregati…
estebanzimanyi Jun 5, 2026
50af733
Preserve the SRID in temporal hex-WKB output (use EWKB)
estebanzimanyi Jun 6, 2026
7df244d
Add scalar/box/temporal constructors and date-time arithmetic (wave 25)
estebanzimanyi Jun 6, 2026
95e9506
Add date arithmetic, span-array accessors and the first static-object…
estebanzimanyi Jun 6, 2026
3cb5ff3
Add the circular-buffer/pose SRID setters and pose orientation (wave 27)
estebanzimanyi Jun 6, 2026
173a00f
Add single-temporal conversions/restrictions and regularize tgeompoin…
estebanzimanyi Jun 6, 2026
0ce854d
Add base+temporal constructors, geometry array accessors and spanset_…
estebanzimanyi Jun 6, 2026
dfd32e8
Add trgeometry_instant_n and textcat_text_textset (wave 30)
estebanzimanyi Jun 6, 2026
8abb52f
Add temporal_segments and tpoint_make_simple via the array-of-tempora…
estebanzimanyi Jun 6, 2026
2b40b3a
Reroute temporal_sequences to the array-of-temporal aggregation (wave…
estebanzimanyi Jun 6, 2026
7e6a33c
Add the trgeometry sequence accessors via a windowed tpose builder (w…
estebanzimanyi Jun 6, 2026
d5f40a0
Reroute the single trgeometry sequence accessors to the tpose builder…
estebanzimanyi Jun 6, 2026
b852263
Add tpoint_direction via a bool-gated out-param scalar finalize (wave…
estebanzimanyi Jun 6, 2026
adb5024
Add windowed-aggregation constant arguments; close temporal_simplify_…
estebanzimanyi Jun 6, 2026
7b62c79
Close temporal_tsample, temporal_stops and temporal_segm_duration (wa…
estebanzimanyi Jun 6, 2026
0d9bdb5
Close trgeometry_sequence_n and trgeometry_set_interp via a tpose+con…
estebanzimanyi Jun 6, 2026
c241e79
Close the windowed array-constructor aggregates (wave 40)
estebanzimanyi Jun 10, 2026
3e5fc76
Close the STBox constructor stbox_make (wave 41)
estebanzimanyi Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
28 changes: 28 additions & 0 deletions .github/workflows/streaming_parity_gate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Streaming-parity gate — the measured-not-guessed guard (Path-to-100 step 6).
# Pure-Python, path-filtered to the parity tooling: it does NOT build NebulaStream
# and never runs on a normal C++ PR. It checks the committed feed for an L3
# callability regression and an over-claim (a "100%" callability statement while
# the gap list is non-empty). Re-measuring the full surface needs the JMEOS jar +
# libmeos and is run out-of-band (see tools/streaming_parity/feeds/README.md).
name: streaming-parity gate

on:
pull_request:
paths:
- 'tools/streaming_parity/**'
- 'doc/methodology/streaming_parity*'
push:
paths:
- 'tools/streaming_parity/**'
- 'doc/methodology/streaming_parity*'

jobs:
gate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: streaming-parity gate (no L3 regression, no over-claim)
run: python3 tools/streaming_parity/ci_gate.py
25 changes: 25 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,16 @@ option(NES_LOG_WITH_STACKTRACE "Log exceptions with stacktrace" ON)
option(ENABLE_LARGE_TESTS "Runs testcases with larger input data" OFF)
option(NES_DEBUG_TUPLE_BUFFER_LEAKS "Heavyweight instrumentation for Tuplebuffer debugging" OFF)

# MEOS type-family compile flags. Mirror MobilityDB/MEOS selective compilation
# (CBUFFER/NPOINT/POSE/RGEO): a family OFF drops its generated MEOS operators from
# the build entirely (per-family add_subdirectory gated below) so the binary links
# cleanly against a libmeos built with the same family disabled. Defaults match the
# families enabled in the libmeos that the dev image links.
option(CBUFFER "Include circular-buffer (tcbuffer) MEOS operators" ON)
option(NPOINT "Include network-point (tnpoint) MEOS operators" ON)
option(POSE "Include geopose (tpose) MEOS operators" ON)
CMAKE_DEPENDENT_OPTION(RGEO "Include rigid-geometry (trgeometry) MEOS operators" ON "POSE" OFF)


if (CMAKE_BUILD_TYPE STREQUAL "Benchmark")
add_compile_definitions(NO_ASSERT)
Expand Down Expand Up @@ -62,6 +72,21 @@ set(CMAKE_THREAD_LIBS_INIT "-lpthread")
include(cmake/Sanitizers.cmake)
include(cmake/ImportDependencies.cmake)
project(NES LANGUAGES C CXX)

# MEOS family flags as a reusable define list (NAME=1|0), exactly as MobilityDB/MEOS
# uses -DCBUFFER=1|0 etc. Applied with file/target scope where an #if <FAMILY> guard
# actually appears (currently only the windowed-aggregation lowering) rather than
# globally: a global add_compile_definitions would change every TU's compile command
# and blow the whole ccache on any flag change. Keeping it scoped means toggling a
# family recompiles only the guard file, and unrelated TUs keep hitting the cache.
set(MEOS_FAMILY_COMPILE_DEFS "")
foreach(_meos_family CBUFFER NPOINT POSE RGEO)
if(${_meos_family})
list(APPEND MEOS_FAMILY_COMPILE_DEFS ${_meos_family}=1)
else()
list(APPEND MEOS_FAMILY_COMPILE_DEFS ${_meos_family}=0)
endif()
endforeach()
set(VCPKG_POLICY_ALLOW_RESTRICTED_HEADERS enabled)
message(STATUS "Going to use ${CMAKE_CXX_COMPILER}")

Expand Down
60 changes: 60 additions & 0 deletions Dockerfile.paho
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# Adds Eclipse Paho MQTT (C + C++) to the NebulaStream dev image so that
# find_package(PahoMqttCpp CONFIG) succeeds and the optional MQTT source/sink
# plugins build. The base dev image's vcpkg ships no upstream ports tree and its
# build attempted a non-existent port (paho-mqttcpp), so paho was never present.
#
# Paho is built with the SAME toolchain NebulaStream uses (clang-19, libc++,
# c++23, static, -fPIC) so the C++ wrapper is ABI-compatible with the rest of
# the build and the MQTT plugin links against PahoMqttCpp::paho-mqttpp3-static.
#
# docker build -f Dockerfile.paho -t localhost/nes-development:mobilitynebula-v5 .
ARG BASE_IMAGE=localhost/nes-development:mobilitynebula-v4
FROM ${BASE_IMAGE}

ARG PAHO_C_TAG=v1.3.14
ARG PAHO_CPP_TAG=v1.4.1
ENV CC=clang-19 CXX=clang++-19

# 1) Paho MQTT C client (static, SSL, PIC) — pure C, no libc++ concern.
RUN set -eux; \
cd /tmp; \
git clone --depth 1 --branch ${PAHO_C_TAG} https://github.com/eclipse-paho/paho.mqtt.c.git; \
cmake -S paho.mqtt.c -B paho.mqtt.c/build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DPAHO_BUILD_STATIC=ON -DPAHO_BUILD_SHARED=OFF \
-DPAHO_WITH_SSL=ON -DPAHO_HIGH_PERFORMANCE=ON \
-DPAHO_ENABLE_TESTING=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_INSTALL_PREFIX=/usr/local; \
cmake --build paho.mqtt.c/build --target install; \
rm -rf /tmp/paho.mqtt.c

# libc++ char_traits<unsigned char> shim (see header for rationale). Installed
# where find_package(PahoMqttCpp) adds it to the include path, and pulled into
# the installed mqtt/types.h so the NebulaStream MQTT plugin compiles too.
COPY docker/paho_uchar_char_traits.h /usr/local/include/paho_uchar_char_traits.h

# 2) Paho MQTT C++ wrapper, built with the project's clang/libc++/c++23 toolchain
# so it is ABI-compatible. libc++ provides no std::char_traits<unsigned char>,
# which Paho's std::basic_string<unsigned char> buffers require; pull the
# char_traits shim into the installed mqtt/types.h (so the NebulaStream MQTT
# plugin gets it too) and force-include it, and pin Paho to c++23 so it
# matches the project's libc++ standard library.
RUN set -eux; \
cd /tmp; \
git clone --depth 1 --branch ${PAHO_CPP_TAG} https://github.com/eclipse-paho/paho.mqtt.cpp.git; \
sed -i '1i #include <paho_uchar_char_traits.h>' paho.mqtt.cpp/include/mqtt/types.h; \
find paho.mqtt.cpp -name CMakeLists.txt -exec sed -i 's/CXX_STANDARD 11/CXX_STANDARD 23/g' {} +; \
cmake -S paho.mqtt.cpp -B paho.mqtt.cpp/build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DPAHO_BUILD_STATIC=ON -DPAHO_BUILD_SHARED=OFF \
-DPAHO_WITH_SSL=ON \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
-DCMAKE_CXX_COMPILER=clang++-19 -DCMAKE_C_COMPILER=clang-19 \
-DCMAKE_CXX_STANDARD=23 -DCMAKE_CXX_STANDARD_REQUIRED=ON \
-DCMAKE_CXX_FLAGS="-stdlib=libc++ -fPIC -include paho_uchar_char_traits.h" \
-DCMAKE_INSTALL_PREFIX=/usr/local; \
cmake --build paho.mqtt.cpp/build --target install; \
test -f /usr/local/lib/cmake/PahoMqttCpp/PahoMqttCppConfig.cmake; \
ldconfig; \
rm -rf /tmp/paho.mqtt.cpp
21 changes: 21 additions & 0 deletions Input/input_berlinmod.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
1735711200,100,4.3517,50.8503
1735711200,300,4.2000,50.7500
1735711201,200,4.3060,50.8270
1735711202,100,4.3517,50.8503
1735711202,300,4.2000,50.7500
1735711203,200,4.3060,50.8270
1735711204,100,4.3517,50.8503
1735711204,300,4.2000,50.7500
1735711205,200,4.3060,50.8270
1735711206,100,4.3517,50.8503
1735711206,300,4.2000,50.7500
1735711207,200,4.3060,50.8270
1735711208,100,4.3517,50.8503
1735711208,300,4.2000,50.7500
1735711209,200,4.3060,50.8270
1735711210,100,4.3517,50.8503
1735711210,300,4.2000,50.7500
1735711211,200,4.3060,50.8270
1735711212,100,4.3517,50.8503
1735711212,300,4.2000,50.7500
1735711213,200,4.3060,50.8270
47 changes: 47 additions & 0 deletions Queries/berlinmod/q1_continuous.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# BerlinMOD-Q1 — continuous form
# "Which vehicles have appeared in the stream?"
# Per 1-second sliding bucket: emit (start, end, vehicle_id, event-count-in-bucket).
# Reading N rows over consecutive buckets enumerates the distinct-vehicles-seen set.

query: |
SELECT start,
end,
vehicle_id,
COUNT(time_utc) AS events
FROM berlinmod_stream
GROUP BY vehicle_id
WINDOW SLIDING(time_utc, SIZE 1 SEC, ADVANCE BY 1 SEC)
INTO file_sink;

sinks:
- name: FILE_SINK
type: File
schema:
- { name: BERLINMOD_STREAM$START, type: UINT64 }
- { name: BERLINMOD_STREAM$END, type: UINT64 }
- { name: BERLINMOD_STREAM$VEHICLE_ID, type: UINT64 }
- { name: BERLINMOD_STREAM$EVENTS, type: UINT64 }
config:
file_path: "/workspace/Output/output_berlinmod_q1_continuous.csv"
input_format: CSV

logical:
- name: BERLINMOD_STREAM
schema:
- { name: TIME_UTC, type: UINT64 }
- { name: VEHICLE_ID, type: UINT64 }
- { name: GPS_LON, type: FLOAT64 }
- { name: GPS_LAT, type: FLOAT64 }

physical:
- logical: BERLINMOD_STREAM
type: TCP
parser_config:
type: CSV
field_delimiter: ","
tuple_delimiter: "\n"
source_config:
socket_host: "host.docker.internal"
socket_port: "32325"
socket_type: "SOCK_STREAM"
socket_domain: "AF_INET"
46 changes: 46 additions & 0 deletions Queries/berlinmod/q1_snapshot.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# BerlinMOD-Q1 — snapshot form
# "At each 5-second tick, list of distinct vehicles seen in the tick window."
# Streaming approximation of the batch BerlinMOD-Q1 snapshot at time T.

query: |
SELECT start,
end,
vehicle_id,
COUNT(time_utc) AS events
FROM berlinmod_stream
GROUP BY vehicle_id
WINDOW TUMBLING(time_utc, SIZE 5 SEC)
INTO file_sink;

sinks:
- name: FILE_SINK
type: File
schema:
- { name: BERLINMOD_STREAM$START, type: UINT64 }
- { name: BERLINMOD_STREAM$END, type: UINT64 }
- { name: BERLINMOD_STREAM$VEHICLE_ID, type: UINT64 }
- { name: BERLINMOD_STREAM$EVENTS, type: UINT64 }
config:
file_path: "/workspace/Output/output_berlinmod_q1_snapshot.csv"
input_format: CSV

logical:
- name: BERLINMOD_STREAM
schema:
- { name: TIME_UTC, type: UINT64 }
- { name: VEHICLE_ID, type: UINT64 }
- { name: GPS_LON, type: FLOAT64 }
- { name: GPS_LAT, type: FLOAT64 }

physical:
- logical: BERLINMOD_STREAM
type: TCP
parser_config:
type: CSV
field_delimiter: ","
tuple_delimiter: "\n"
source_config:
socket_host: "host.docker.internal"
socket_port: "32325"
socket_type: "SOCK_STREAM"
socket_domain: "AF_INET"
46 changes: 46 additions & 0 deletions Queries/berlinmod/q1_windowed.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# BerlinMOD-Q1 — windowed form
# "Per 10-second tumbling window, distinct vehicles seen."
# Emits one row per (window, vehicle) seen; reading N rows per window = distinctCount.

query: |
SELECT start,
end,
vehicle_id,
COUNT(time_utc) AS events
FROM berlinmod_stream
GROUP BY vehicle_id
WINDOW TUMBLING(time_utc, SIZE 10 SEC)
INTO file_sink;

sinks:
- name: FILE_SINK
type: File
schema:
- { name: BERLINMOD_STREAM$START, type: UINT64 }
- { name: BERLINMOD_STREAM$END, type: UINT64 }
- { name: BERLINMOD_STREAM$VEHICLE_ID, type: UINT64 }
- { name: BERLINMOD_STREAM$EVENTS, type: UINT64 }
config:
file_path: "/workspace/Output/output_berlinmod_q1_windowed.csv"
input_format: CSV

logical:
- name: BERLINMOD_STREAM
schema:
- { name: TIME_UTC, type: UINT64 }
- { name: VEHICLE_ID, type: UINT64 }
- { name: GPS_LON, type: FLOAT64 }
- { name: GPS_LAT, type: FLOAT64 }

physical:
- logical: BERLINMOD_STREAM
type: TCP
parser_config:
type: CSV
field_delimiter: ","
tuple_delimiter: "\n"
source_config:
socket_host: "host.docker.internal"
socket_port: "32325"
socket_type: "SOCK_STREAM"
socket_domain: "AF_INET"
44 changes: 44 additions & 0 deletions Queries/berlinmod/q2_continuous.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# BerlinMOD-Q2 — continuous form
# "Where is vehicle X (= 200) right now?"
# Per 1-second sliding bucket, emit a trajectory snippet for vehicle X.

query: |
SELECT start,
end,
TEMPORAL_SEQUENCE(gps_lon, gps_lat, time_utc) AS trajectory
FROM berlinmod_stream
WHERE vehicle_id = UINT64(200)
WINDOW SLIDING(time_utc, SIZE 1 SEC, ADVANCE BY 1 SEC)
INTO file_sink;

sinks:
- name: FILE_SINK
type: File
schema:
- { name: BERLINMOD_STREAM$START, type: UINT64 }
- { name: BERLINMOD_STREAM$END, type: UINT64 }
- { name: BERLINMOD_STREAM$TRAJECTORY, type: VARSIZED }
config:
file_path: "/workspace/Output/output_berlinmod_q2_continuous.csv"
input_format: CSV

logical:
- name: BERLINMOD_STREAM
schema:
- { name: TIME_UTC, type: UINT64 }
- { name: VEHICLE_ID, type: UINT64 }
- { name: GPS_LON, type: FLOAT64 }
- { name: GPS_LAT, type: FLOAT64 }

physical:
- logical: BERLINMOD_STREAM
type: TCP
parser_config:
type: CSV
field_delimiter: ","
tuple_delimiter: "\n"
source_config:
socket_host: "host.docker.internal"
socket_port: "32325"
socket_type: "SOCK_STREAM"
socket_domain: "AF_INET"
43 changes: 43 additions & 0 deletions Queries/berlinmod/q2_snapshot.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# BerlinMOD-Q2 — snapshot form
# "At each 5-second tick, snapshot of vehicle X's (= 200) trajectory in the tick."

query: |
SELECT start,
end,
TEMPORAL_SEQUENCE(gps_lon, gps_lat, time_utc) AS trajectory
FROM berlinmod_stream
WHERE vehicle_id = UINT64(200)
WINDOW TUMBLING(time_utc, SIZE 5 SEC)
INTO file_sink;

sinks:
- name: FILE_SINK
type: File
schema:
- { name: BERLINMOD_STREAM$START, type: UINT64 }
- { name: BERLINMOD_STREAM$END, type: UINT64 }
- { name: BERLINMOD_STREAM$TRAJECTORY, type: VARSIZED }
config:
file_path: "/workspace/Output/output_berlinmod_q2_snapshot.csv"
input_format: CSV

logical:
- name: BERLINMOD_STREAM
schema:
- { name: TIME_UTC, type: UINT64 }
- { name: VEHICLE_ID, type: UINT64 }
- { name: GPS_LON, type: FLOAT64 }
- { name: GPS_LAT, type: FLOAT64 }

physical:
- logical: BERLINMOD_STREAM
type: TCP
parser_config:
type: CSV
field_delimiter: ","
tuple_delimiter: "\n"
source_config:
socket_host: "host.docker.internal"
socket_port: "32325"
socket_type: "SOCK_STREAM"
socket_domain: "AF_INET"
Loading
Loading