From fb4222b53fa33b3ed461f2301b55dd8fd5a78d1a Mon Sep 17 00:00:00 2001 From: recon Date: Wed, 2 Sep 2026 13:58:01 +0200 Subject: [PATCH] Answer a generated registration in the type the SQL surface declares A registration takes its return type from the C kernel rather than from the CREATE FUNCTION the catalog reads, so one SQL name served by several typed kernels registers several return types: nad_tint_tint, nad_tbigint_tbigint and nad_tfloat_tfloat return int, int64 and double against nearestApproachDistance(...) RETURNS float for every one of them, and the six integer-operand signatures of that name and their |=| operator forms answer INTEGER and BIGINT where MobilityDB answers float. The registration type and the type its executor writes are now one decision per shape - scalar_ret4 for a by-value return, outprim_ret3 for a scalar out-parameter, box_ret3 for a temporal against a box - so a registration cannot declare one type while its executor writes another, which DuckDB reports as Expected vector of type X, but found vector of type Y. scalar_ret_duck and scalar_emit3 are projections of the first, and the other two shapes read theirs at both sites. Three returns keep the type the kernel states. An unsigned one does because PostgreSQL has no unsigned SQL type and declares a uint32 hash integer for want of one, and registering that signed makes DuckDB range-check the cast and flip the sign of every hash at or above 2**31. A return needing a marshaller rather than a cast does because its branch already answers the declared type through TakeText, FromMeosDate or TakeTimestamp. And the no-distance sentinel is the maximum of the type MEOS returns, so the test for it precedes the conversion. The registration set holds 6121 entries on either side, of which 12 change and none is added or removed: the six nearestApproachDistance signatures over a temporal integer or big integer and their six |=| forms. 081_nearest_approach_box states the type MobilityDB declares for a temporal integer against an integer box, which resolves to the one NAD_tnumber_tbox wrapper that declares float for the temporal float too. The suite reads 2695 assertions in 102 test cases. --- src/generated/generated_temporal_udfs_0.cpp | 265 ++-- src/generated/generated_temporal_udfs_1.cpp | 929 +++++++------ src/generated/generated_temporal_udfs_2.cpp | 936 +++++++------ src/generated/generated_temporal_udfs_3.cpp | 1108 +++++++-------- src/generated/generated_temporal_udfs_4.cpp | 677 ++++----- src/generated/generated_temporal_udfs_5.cpp | 451 +++--- src/generated/generated_temporal_udfs_6.cpp | 1034 ++++++-------- src/generated/generated_temporal_udfs_7.cpp | 1210 +++++++++-------- test/sql/parity/081_nearest_approach_box.test | 13 +- tools/codegen_duck_udfs.py | 151 +- 10 files changed, 3430 insertions(+), 3344 deletions(-) diff --git a/src/generated/generated_temporal_udfs_0.cpp b/src/generated/generated_temporal_udfs_0.cpp index 1ab97956..879126e5 100644 --- a/src/generated/generated_temporal_udfs_0.cpp +++ b/src/generated/generated_temporal_udfs_0.cpp @@ -353,7 +353,7 @@ static void Gen_above_tspatial_tspatial(DataChunk &args, ExpressionState &, Vect Temporal *t2 = BlobToTemporal(in2); bool r = above_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -365,7 +365,7 @@ static void Gen_after_tspatial_tspatial(DataChunk &args, ExpressionState &, Vect Temporal *t2 = BlobToTemporal(in2); bool r = after_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -377,7 +377,7 @@ static void Gen_back_tspatial_tspatial(DataChunk &args, ExpressionState &, Vecto Temporal *t2 = BlobToTemporal(in2); bool r = back_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -389,7 +389,7 @@ static void Gen_before_tspatial_tspatial(DataChunk &args, ExpressionState &, Vec Temporal *t2 = BlobToTemporal(in2); bool r = before_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -401,7 +401,7 @@ static void Gen_below_tspatial_tspatial(DataChunk &args, ExpressionState &, Vect Temporal *t2 = BlobToTemporal(in2); bool r = below_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -413,7 +413,7 @@ static void Gen_front_tspatial_tspatial(DataChunk &args, ExpressionState &, Vect Temporal *t2 = BlobToTemporal(in2); bool r = front_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -425,7 +425,7 @@ static void Gen_left_tspatial_tspatial(DataChunk &args, ExpressionState &, Vecto Temporal *t2 = BlobToTemporal(in2); bool r = left_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -437,7 +437,7 @@ static void Gen_overabove_tspatial_tspatial(DataChunk &args, ExpressionState &, Temporal *t2 = BlobToTemporal(in2); bool r = overabove_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -449,7 +449,7 @@ static void Gen_overafter_tspatial_tspatial(DataChunk &args, ExpressionState &, Temporal *t2 = BlobToTemporal(in2); bool r = overafter_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -461,7 +461,7 @@ static void Gen_overback_tspatial_tspatial(DataChunk &args, ExpressionState &, V Temporal *t2 = BlobToTemporal(in2); bool r = overback_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -473,7 +473,7 @@ static void Gen_overbefore_tspatial_tspatial(DataChunk &args, ExpressionState &, Temporal *t2 = BlobToTemporal(in2); bool r = overbefore_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -485,7 +485,7 @@ static void Gen_overbelow_tspatial_tspatial(DataChunk &args, ExpressionState &, Temporal *t2 = BlobToTemporal(in2); bool r = overbelow_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -497,7 +497,7 @@ static void Gen_overfront_tspatial_tspatial(DataChunk &args, ExpressionState &, Temporal *t2 = BlobToTemporal(in2); bool r = overfront_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -509,7 +509,7 @@ static void Gen_overleft_tspatial_tspatial(DataChunk &args, ExpressionState &, V Temporal *t2 = BlobToTemporal(in2); bool r = overleft_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -521,7 +521,7 @@ static void Gen_overright_tspatial_tspatial(DataChunk &args, ExpressionState &, Temporal *t2 = BlobToTemporal(in2); bool r = overright_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -533,7 +533,7 @@ static void Gen_right_tspatial_tspatial(DataChunk &args, ExpressionState &, Vect Temporal *t2 = BlobToTemporal(in2); bool r = right_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -545,7 +545,7 @@ static void Gen_above_stbox_tspatial(DataChunk &args, ExpressionState &, Vector Temporal *t = BlobToTemporal(b); bool r = above_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -557,7 +557,7 @@ static void Gen_above_tspatial_stbox(DataChunk &args, ExpressionState &, Vector STBox *bx = BlobToStbox(b); bool r = above_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -569,7 +569,7 @@ static void Gen_after_stbox_tspatial(DataChunk &args, ExpressionState &, Vector Temporal *t = BlobToTemporal(b); bool r = after_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -581,7 +581,7 @@ static void Gen_after_tspatial_stbox(DataChunk &args, ExpressionState &, Vector STBox *bx = BlobToStbox(b); bool r = after_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -593,7 +593,7 @@ static void Gen_back_stbox_tspatial(DataChunk &args, ExpressionState &, Vector & Temporal *t = BlobToTemporal(b); bool r = back_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -605,7 +605,7 @@ static void Gen_back_tspatial_stbox(DataChunk &args, ExpressionState &, Vector & STBox *bx = BlobToStbox(b); bool r = back_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -617,7 +617,7 @@ static void Gen_before_stbox_tspatial(DataChunk &args, ExpressionState &, Vector Temporal *t = BlobToTemporal(b); bool r = before_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -629,7 +629,7 @@ static void Gen_before_tspatial_stbox(DataChunk &args, ExpressionState &, Vector STBox *bx = BlobToStbox(b); bool r = before_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -641,7 +641,7 @@ static void Gen_below_stbox_tspatial(DataChunk &args, ExpressionState &, Vector Temporal *t = BlobToTemporal(b); bool r = below_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -653,7 +653,7 @@ static void Gen_below_tspatial_stbox(DataChunk &args, ExpressionState &, Vector STBox *bx = BlobToStbox(b); bool r = below_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -665,7 +665,7 @@ static void Gen_front_stbox_tspatial(DataChunk &args, ExpressionState &, Vector Temporal *t = BlobToTemporal(b); bool r = front_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -677,7 +677,7 @@ static void Gen_front_tspatial_stbox(DataChunk &args, ExpressionState &, Vector STBox *bx = BlobToStbox(b); bool r = front_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -689,7 +689,7 @@ static void Gen_left_stbox_tspatial(DataChunk &args, ExpressionState &, Vector & Temporal *t = BlobToTemporal(b); bool r = left_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -701,7 +701,7 @@ static void Gen_left_tspatial_stbox(DataChunk &args, ExpressionState &, Vector & STBox *bx = BlobToStbox(b); bool r = left_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -713,7 +713,7 @@ static void Gen_overabove_stbox_tspatial(DataChunk &args, ExpressionState &, Vec Temporal *t = BlobToTemporal(b); bool r = overabove_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -725,7 +725,7 @@ static void Gen_overabove_tspatial_stbox(DataChunk &args, ExpressionState &, Vec STBox *bx = BlobToStbox(b); bool r = overabove_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -737,7 +737,7 @@ static void Gen_overafter_stbox_tspatial(DataChunk &args, ExpressionState &, Vec Temporal *t = BlobToTemporal(b); bool r = overafter_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -749,7 +749,7 @@ static void Gen_overafter_tspatial_stbox(DataChunk &args, ExpressionState &, Vec STBox *bx = BlobToStbox(b); bool r = overafter_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -761,7 +761,7 @@ static void Gen_overback_stbox_tspatial(DataChunk &args, ExpressionState &, Vect Temporal *t = BlobToTemporal(b); bool r = overback_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -773,7 +773,7 @@ static void Gen_overback_tspatial_stbox(DataChunk &args, ExpressionState &, Vect STBox *bx = BlobToStbox(b); bool r = overback_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -785,7 +785,7 @@ static void Gen_overbefore_stbox_tspatial(DataChunk &args, ExpressionState &, Ve Temporal *t = BlobToTemporal(b); bool r = overbefore_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -797,7 +797,7 @@ static void Gen_overbefore_tspatial_stbox(DataChunk &args, ExpressionState &, Ve STBox *bx = BlobToStbox(b); bool r = overbefore_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -809,7 +809,7 @@ static void Gen_overbelow_stbox_tspatial(DataChunk &args, ExpressionState &, Vec Temporal *t = BlobToTemporal(b); bool r = overbelow_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -821,7 +821,7 @@ static void Gen_overbelow_tspatial_stbox(DataChunk &args, ExpressionState &, Vec STBox *bx = BlobToStbox(b); bool r = overbelow_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -833,7 +833,7 @@ static void Gen_overfront_stbox_tspatial(DataChunk &args, ExpressionState &, Vec Temporal *t = BlobToTemporal(b); bool r = overfront_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -845,7 +845,7 @@ static void Gen_overfront_tspatial_stbox(DataChunk &args, ExpressionState &, Vec STBox *bx = BlobToStbox(b); bool r = overfront_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -857,7 +857,7 @@ static void Gen_overleft_stbox_tspatial(DataChunk &args, ExpressionState &, Vect Temporal *t = BlobToTemporal(b); bool r = overleft_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -869,7 +869,7 @@ static void Gen_overleft_tspatial_stbox(DataChunk &args, ExpressionState &, Vect STBox *bx = BlobToStbox(b); bool r = overleft_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -881,7 +881,7 @@ static void Gen_overright_stbox_tspatial(DataChunk &args, ExpressionState &, Vec Temporal *t = BlobToTemporal(b); bool r = overright_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -893,7 +893,7 @@ static void Gen_overright_tspatial_stbox(DataChunk &args, ExpressionState &, Vec STBox *bx = BlobToStbox(b); bool r = overright_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -905,7 +905,7 @@ static void Gen_right_stbox_tspatial(DataChunk &args, ExpressionState &, Vector Temporal *t = BlobToTemporal(b); bool r = right_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -917,7 +917,7 @@ static void Gen_right_tspatial_stbox(DataChunk &args, ExpressionState &, Vector STBox *bx = BlobToStbox(b); bool r = right_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -1484,127 +1484,106 @@ static void Gen_th3index_is_valid_vertex(DataChunk &args, ExpressionState &, Vec } -// ===== @ingroup meos_pose_accessor ===== -static void Gen_tpose_end_value(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_rgeo_modif ===== +static void Gen_trgeometry_delete_timestamptz(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + TernaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], args.data[2], result, args.size(), + [&](string_t in, timestamp_tz_t a2, bool a3, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Pose * r = tpose_end_value(t); + Temporal *r = trgeometry_delete_timestamptz(t, DuckDBToMeosTimestamp(a2).value, a3); free(t); - return PoseToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tpose_start_value(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Pose * r = tpose_start_value(t); - free(t); - return PoseToBlobN(result, r, mask, idx); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpose_trajectory(DataChunk &args, ExpressionState &state, Vector &result) { +static void Gen_trgeometry_merge(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - GSERIALIZED * r = tpose_trajectory(t); - free(t); - if (!r) { mask.SetInvalid(idx); return string_t(); } - string_t out = GSerializedToGeometry(r, state, result); - free(r); - return out; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + Temporal *r = trgeometry_merge(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_npoint_restrict ===== -static void Gen_tnpoint_at_npointset(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_posechain_comp_temp ===== +static void Gen_teq_tposechain_posechain(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(a); - Set *cc = BlobToSet(b); - Temporal *r = tnpoint_at_npointset(t, cc); - free(t); free(cc); + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + PoseChain *a2p = BlobToPosechain(a2); + Temporal *r = teq_tposechain_posechain(t, a2p); + free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tnpoint_minus_npointset(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tne_tposechain_posechain(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(a); - Set *cc = BlobToSet(b); - Temporal *r = tnpoint_minus_npointset(t, cc); - free(t); free(cc); + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + PoseChain *a2p = BlobToPosechain(a2); + Temporal *r = tne_tposechain_posechain(t, a2p); + free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_geo_box_accessor ===== -static void Gen_stbox_hash(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pose_conversion ===== +static void Gen_tpose_make(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - STBox *s = BlobToStbox(in); - uint32_t r = stbox_hash(s); - free(s); - return r; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + Temporal *r = tpose_make(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_stbox_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_to_tpoint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, uint64_t a2) { - STBox *s = BlobToStbox(in); - uint64_t r = stbox_hash_extended(s, a2); - free(s); - return r; + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tpose_to_tpoint(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_pose_base_accessor ===== -static void Gen_pose_hash(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Pose *v = BlobToPose(in); - uint32_t r = pose_hash(v); - free(v); - return r; - }); -} - -static void Gen_pose_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_h3_comp ===== +static void Gen_ever_eq_h3indexset_th3index(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, uint64_t a2) { - Pose *s = BlobToPose(in); - uint64_t r = pose_hash_extended(s, a2); - free(s); - return r; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in_s, string_t in_t, ValidityMask &mask, idx_t idx) { + Set *s = BlobToSet(in_s); + Temporal *t = BlobToTemporal(in_t); + int r = ever_eq_h3indexset_th3index(s, t); + free(s); free(t); + if (r < 0) { mask.SetInvalid(idx); return false; } + return r != 0; }); } -// ===== @ingroup meos_cbuffer_transf ===== -static void Gen_tcbuffer_expand(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_posechain_accessor ===== +static void Gen_tposechain_num_poses(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, double a2, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { Temporal *t = BlobToTemporal(in); - Temporal *r = tcbuffer_expand(t, a2); + int32_t r = tposechain_num_poses(t); free(t); - return TemporalToBlobN(result, r, mask, idx); + return (int32_t) r; }); } @@ -2749,29 +2728,29 @@ void RegisterGenerated_meos_h3_vertex(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("isValidVertex", {H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_th3index_is_valid_vertex)); } -void RegisterGenerated_meos_pose_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {PoseTypes::tpose()}, PoseTypes::pose(), Gen_tpose_end_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {PoseTypes::tpose()}, PoseTypes::pose(), Gen_tpose_start_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("trajectory", {PoseTypes::tpose()}, MobilityDuckGeometryType(), Gen_tpose_trajectory)); +void RegisterGenerated_meos_rgeo_modif(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("deleteTime", {TrgeometryTypes::trgeometry(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, TrgeometryTypes::trgeometry(), Gen_trgeometry_delete_timestamptz)); + RegisterSerializedScalarFunction(loader, ScalarFunction("merge", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, TrgeometryTypes::trgeometry(), Gen_trgeometry_merge)); } -void RegisterGenerated_meos_npoint_restrict(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("atValues", {NpointTypes::tnpoint(), SetTypes::npointset()}, NpointTypes::tnpoint(), Gen_tnpoint_at_npointset)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minusValues", {NpointTypes::tnpoint(), SetTypes::npointset()}, NpointTypes::tnpoint(), Gen_tnpoint_minus_npointset)); +void RegisterGenerated_meos_posechain_comp_temp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, TemporalTypes::tbool(), Gen_teq_tposechain_posechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, TemporalTypes::tbool(), Gen_tne_tposechain_posechain)); } -void RegisterGenerated_meos_geo_box_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("hash", {StboxType::stbox()}, LogicalType::UINTEGER, Gen_stbox_hash)); - RegisterSerializedScalarFunction(loader, ScalarFunction("hashExtended", {StboxType::stbox(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_stbox_hash_extended)); +void RegisterGenerated_meos_pose_conversion(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tpose", {PoseTypes::tpose(), PoseTypes::tpose()}, PoseTypes::tpose(), Gen_tpose_make)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tgeompoint", {PoseTypes::tpose()}, PoseTypes::tpose(), Gen_tpose_to_tpoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {PoseTypes::tpose()}, PoseTypes::tpose(), Gen_tpose_to_tpoint)); } -void RegisterGenerated_meos_pose_base_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("hash", {PoseTypes::pose()}, LogicalType::UINTEGER, Gen_pose_hash)); - RegisterSerializedScalarFunction(loader, ScalarFunction("hashExtended", {PoseTypes::pose(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_pose_hash_extended)); +void RegisterGenerated_meos_h3_comp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {H3indexTypes::h3indexset(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_ever_eq_h3indexset_th3index)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {H3indexTypes::h3indexset(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_ever_eq_h3indexset_th3index)); } -void RegisterGenerated_meos_cbuffer_transf(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("expand", {CbufferTypes::tcbuffer(), LogicalType::DOUBLE}, CbufferTypes::tcbuffer(), Gen_tcbuffer_expand)); +void RegisterGenerated_meos_posechain_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("numPoses", {PosechainTypes::tposechain()}, LogicalType::INTEGER, Gen_tposechain_num_poses)); } } // namespace duckdb diff --git a/src/generated/generated_temporal_udfs_1.cpp b/src/generated/generated_temporal_udfs_1.cpp index f727a329..aa10b0fb 100644 --- a/src/generated/generated_temporal_udfs_1.cpp +++ b/src/generated/generated_temporal_udfs_1.cpp @@ -3178,256 +3178,305 @@ static void Gen_always_ne_tquadbin_tquadbin(DataChunk &args, ExpressionState &, } -// ===== @ingroup meos_rgeo_analytics_similarity ===== -static void Gen_trgeometry_hausdorff_distance(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_geo_accessor ===== +static void Gen_tgeo_centroid(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2) { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - double r = trgeometry_hausdorff_distance(t1, t2); - free(t1); free(t2); - return r; + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tgeo_centroid(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_trgeometry_frechet_distance(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpoint_angular_difference(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2) { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - double r = trgeometry_frechet_distance(t1, t2); - free(t1); free(t2); - return r; + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tpoint_angular_difference(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_trgeometry_dyntimewarp_distance(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpoint_azimuth(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2) { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - double r = trgeometry_dyntimewarp_distance(t1, t2); - free(t1); free(t2); - return r; + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tpoint_azimuth(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -struct PathBind_trgeometry_frechet_path : public TableFunctionData { string_t a, b; }; -struct PathState_trgeometry_frechet_path : public GlobalTableFunctionState { - idx_t idx = 0; - std::vector col0; - std::vector col1; -}; -static unique_ptr PathBindFn_trgeometry_frechet_path(ClientContext &, TableFunctionBindInput &input, - vector &return_types, vector &names) { - if (input.inputs.size() != 2 || input.inputs[0].IsNull() || input.inputs[1].IsNull()) - throw BinderException("frechetDistancePath: expects two non-null temporal arguments"); - auto bind = make_uniq(); - bind->a = StringValue::Get(input.inputs[0]); - bind->b = StringValue::Get(input.inputs[1]); - return_types = {LogicalType::INTEGER, LogicalType::INTEGER}; - names = {"i", "j"}; - return std::move(bind); -} -static unique_ptr PathInit_trgeometry_frechet_path(ClientContext &, TableFunctionInitInput &input) { - EnsureMeosThreadInitialized(); - auto &bind = input.bind_data->Cast(); - auto state = make_uniq(); - Temporal *t1 = BlobToTemporal(bind.a); - Temporal *t2 = BlobToTemporal(bind.b); - int count = 0; - Match *path = trgeometry_frechet_path(t1, t2, &count); - free(t1); free(t2); - if (path) { - state->col0.reserve(count); - state->col1.reserve(count); - for (int k = 0; k < count; k++) { - state->col0.push_back(path[k].i); - state->col1.push_back(path[k].j); - } - free(path); - } - return std::move(state); -} -static void PathExec_trgeometry_frechet_path(ClientContext &, TableFunctionInput &input, DataChunk &output) { - auto &state = input.global_state->Cast(); - idx_t total = state.col0.size(); - idx_t count = MinValue(STANDARD_VECTOR_SIZE, total - state.idx); - auto out0 = FlatVector::GetData(output.data[0]); - auto out1 = FlatVector::GetData(output.data[1]); - for (idx_t k = 0; k < count; k++) { - out0[k] = state.col0[state.idx + k]; - out1[k] = state.col1[state.idx + k]; - } - state.idx += count; - output.SetCardinality(count); -} - -struct PathBind_trgeometry_dyntimewarp_path : public TableFunctionData { string_t a, b; }; -struct PathState_trgeometry_dyntimewarp_path : public GlobalTableFunctionState { - idx_t idx = 0; - std::vector col0; - std::vector col1; -}; -static unique_ptr PathBindFn_trgeometry_dyntimewarp_path(ClientContext &, TableFunctionBindInput &input, - vector &return_types, vector &names) { - if (input.inputs.size() != 2 || input.inputs[0].IsNull() || input.inputs[1].IsNull()) - throw BinderException("dynTimeWarpPath: expects two non-null temporal arguments"); - auto bind = make_uniq(); - bind->a = StringValue::Get(input.inputs[0]); - bind->b = StringValue::Get(input.inputs[1]); - return_types = {LogicalType::INTEGER, LogicalType::INTEGER}; - names = {"i", "j"}; - return std::move(bind); -} -static unique_ptr PathInit_trgeometry_dyntimewarp_path(ClientContext &, TableFunctionInitInput &input) { - EnsureMeosThreadInitialized(); - auto &bind = input.bind_data->Cast(); - auto state = make_uniq(); - Temporal *t1 = BlobToTemporal(bind.a); - Temporal *t2 = BlobToTemporal(bind.b); - int count = 0; - Match *path = trgeometry_dyntimewarp_path(t1, t2, &count); - free(t1); free(t2); - if (path) { - state->col0.reserve(count); - state->col1.reserve(count); - for (int k = 0; k < count; k++) { - state->col0.push_back(path[k].i); - state->col1.push_back(path[k].j); - } - free(path); - } - return std::move(state); -} -static void PathExec_trgeometry_dyntimewarp_path(ClientContext &, TableFunctionInput &input, DataChunk &output) { - auto &state = input.global_state->Cast(); - idx_t total = state.col0.size(); - idx_t count = MinValue(STANDARD_VECTOR_SIZE, total - state.idx); - auto out0 = FlatVector::GetData(output.data[0]); - auto out1 = FlatVector::GetData(output.data[1]); - for (idx_t k = 0; k < count; k++) { - out0[k] = state.col0[state.idx + k]; - out1[k] = state.col1[state.idx + k]; - } - state.idx += count; - output.SetCardinality(count); +static void Gen_tpoint_cumulative_length(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tpoint_cumulative_length(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); + }); } +static void Gen_tpoint_get_x(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tpoint_get_x(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); + }); +} -// ===== @ingroup meos_rgeo_dist ===== -static void Gen_tdistance_trgeometry_geo(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpoint_get_y(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in_t); - GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); - if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { - GSERIALIZED *gs_geog = geom_to_geog(gs); - free(gs); gs = gs_geog; - } - Temporal *r = tdistance_trgeometry_geo(t, gs); - free(t); free(gs); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tpoint_get_y(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tdistance_trgeometry_tpoint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpoint_get_z(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = tdistance_trgeometry_tpoint(t1, t2); - free(t1); free(t2); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tpoint_get_z(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tdistance_trgeometry_trgeometry(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpoint_is_simple(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = tdistance_trgeometry_trgeometry(t1, t2); - free(t1); free(t2); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Temporal *t = BlobToTemporal(in); + bool r = tpoint_is_simple(t); + free(t); + return (bool) r; + }); +} + +static void Gen_tpoint_length(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Temporal *t = BlobToTemporal(in); + double r = tpoint_length(t); + free(t); + return (double) r; + }); +} + +static void Gen_tpoint_speed(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tpoint_speed(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_nad_trgeometry_tpoint(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_posechain_base_comp ===== +static void Gen_posechain_eq(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2) { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - double r = nad_trgeometry_tpoint(t1, t2); - free(t1); free(t2); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + PoseChain *s1 = BlobToPosechain(a); + PoseChain *s2 = BlobToPosechain(b); + bool r = posechain_eq(s1, s2); + free(s1); free(s2); return r; }); } -static void Gen_nad_trgeometry_trgeometry(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_ne(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2) { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - double r = nad_trgeometry_trgeometry(t1, t2); - free(t1); free(t2); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + PoseChain *s1 = BlobToPosechain(a); + PoseChain *s2 = BlobToPosechain(b); + bool r = posechain_ne(s1, s2); + free(s1); free(s2); return r; }); } -static void Gen_nad_trgeometry_stbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_same(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> double { - Temporal *t = BlobToTemporal(a); - STBox *bx = BlobToStbox(b); - double r = nad_trgeometry_stbox(t, bx); - free(t); free(bx); - if (r == std::numeric_limits::max()) { mask.SetInvalid(idx); return double(); } + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + PoseChain *s1 = BlobToPosechain(a); + PoseChain *s2 = BlobToPosechain(b); + bool r = posechain_same(s1, s2); + free(s1); free(s2); return r; }); } +static void Gen_posechain_lt(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + PoseChain *s1 = BlobToPosechain(a); + PoseChain *s2 = BlobToPosechain(b); + bool r = posechain_lt(s1, s2); + free(s1); free(s2); + return r; + }); +} -// ===== @ingroup meos_setspan_inout ===== -static void Gen_set_from_hexwkb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_le(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Set *r = set_from_hexwkb(in.GetString().c_str()); - return SetToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + PoseChain *s1 = BlobToPosechain(a); + PoseChain *s2 = BlobToPosechain(b); + bool r = posechain_le(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_span_from_hexwkb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_gt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Span *r = span_from_hexwkb(in.GetString().c_str()); - if (!r) { mask.SetInvalid(idx); return string_t(); } - return SpanToBlob(result, r); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + PoseChain *s1 = BlobToPosechain(a); + PoseChain *s2 = BlobToPosechain(b); + bool r = posechain_gt(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_spanset_from_hexwkb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_ge(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - SpanSet *r = spanset_from_hexwkb(in.GetString().c_str()); - if (!r) { mask.SetInvalid(idx); return string_t(); } - return SpanSetToBlob(result, r); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + PoseChain *s1 = BlobToPosechain(a); + PoseChain *s2 = BlobToPosechain(b); + bool r = posechain_ge(s1, s2); + free(s1); free(s2); + return r; }); } +// ===== @ingroup meos_rgeo_bbox_split ===== +static void Gen_trgeometry_stboxes(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + auto &in_vec = args.data[0]; + idx_t row_count = args.size(); + in_vec.Flatten(row_count); + auto &result_validity = FlatVector::Validity(result); + auto list_entries = FlatVector::GetData(result); + idx_t off = 0; + for (idx_t i = 0; i < row_count; ++i) { + if (in_vec.GetValue(i).IsNull()) { result_validity.SetInvalid(i); continue; } + string_t blob = FlatVector::GetData(in_vec)[i]; + Temporal *in = BlobToTemporal(blob); + int count = 0; + STBox * arr = trgeometry_stboxes(in, &count); + free(in); + int n = (arr && count > 0) ? count : 0; + ListVector::Reserve(result, off + n); + ListVector::SetListSize(result, off + n); + list_entries[i] = list_entry_t{off, (uint64_t) n}; + if (n > 0) { + auto &child_vector = ListVector::GetEntry(result); + child_vector.SetVectorType(VectorType::FLAT_VECTOR); + auto *cd = FlatVector::GetData(child_vector); + for (int j = 0; j < n; ++j) { cd[off + j] = StringVector::AddStringOrBlob(child_vector, (const char *) &arr[j], sizeof(STBox)); } + off += n; + } + if (arr) free(arr); + result_validity.SetValid(i); + } +} + +static void Gen_trgeometry_split_n_stboxes(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + auto &in_vec = args.data[0]; + idx_t row_count = args.size(); + in_vec.Flatten(row_count); + auto &n_vec = args.data[1]; + n_vec.Flatten(row_count); + auto &result_validity = FlatVector::Validity(result); + auto list_entries = FlatVector::GetData(result); + idx_t off = 0; + for (idx_t i = 0; i < row_count; ++i) { + if (in_vec.GetValue(i).IsNull() || n_vec.GetValue(i).IsNull()) { result_validity.SetInvalid(i); continue; } + string_t blob = FlatVector::GetData(in_vec)[i]; + int32_t n_arg = FlatVector::GetData(n_vec)[i]; + Temporal *in = BlobToTemporal(blob); + int count = 0; + STBox * arr = trgeometry_split_n_stboxes(in, n_arg, &count); + free(in); + int n = (arr && count > 0) ? count : 0; + ListVector::Reserve(result, off + n); + ListVector::SetListSize(result, off + n); + list_entries[i] = list_entry_t{off, (uint64_t) n}; + if (n > 0) { + auto &child_vector = ListVector::GetEntry(result); + child_vector.SetVectorType(VectorType::FLAT_VECTOR); + auto *cd = FlatVector::GetData(child_vector); + for (int j = 0; j < n; ++j) { cd[off + j] = StringVector::AddStringOrBlob(child_vector, (const char *) &arr[j], sizeof(STBox)); } + off += n; + } + if (arr) free(arr); + result_validity.SetValid(i); + } +} + +static void Gen_trgeometry_split_each_n_stboxes(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + auto &in_vec = args.data[0]; + idx_t row_count = args.size(); + in_vec.Flatten(row_count); + auto &n_vec = args.data[1]; + n_vec.Flatten(row_count); + auto &result_validity = FlatVector::Validity(result); + auto list_entries = FlatVector::GetData(result); + idx_t off = 0; + for (idx_t i = 0; i < row_count; ++i) { + if (in_vec.GetValue(i).IsNull() || n_vec.GetValue(i).IsNull()) { result_validity.SetInvalid(i); continue; } + string_t blob = FlatVector::GetData(in_vec)[i]; + int32_t n_arg = FlatVector::GetData(n_vec)[i]; + Temporal *in = BlobToTemporal(blob); + int count = 0; + STBox * arr = trgeometry_split_each_n_stboxes(in, n_arg, &count); + free(in); + int n = (arr && count > 0) ? count : 0; + ListVector::Reserve(result, off + n); + ListVector::SetListSize(result, off + n); + list_entries[i] = list_entry_t{off, (uint64_t) n}; + if (n > 0) { + auto &child_vector = ListVector::GetEntry(result); + child_vector.SetVectorType(VectorType::FLAT_VECTOR); + auto *cd = FlatVector::GetData(child_vector); + for (int j = 0; j < n; ++j) { cd[off + j] = StringVector::AddStringOrBlob(child_vector, (const char *) &arr[j], sizeof(STBox)); } + off += n; + } + if (arr) free(arr); + result_validity.SetValid(i); + } +} + + // ===== @ingroup meos_h3_edges ===== static void Gen_th3index_are_neighbor_cells(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); @@ -3498,226 +3547,206 @@ static void Gen_th3index_directed_edge_to_boundary(DataChunk &args, ExpressionSt } -// ===== @ingroup meos_pose_geopose_accessor ===== -static void Gen_tpose_apply_geo(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pointcloud_box_topo ===== +static void Gen_contains_tpcbox_tpcbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in_t); - GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); - if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { - GSERIALIZED *gs_geog = geom_to_geog(gs); - free(gs); gs = gs_geog; - } - Temporal *r = tpose_apply_geo(t, gs); - free(t); free(gs); - return TemporalToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = contains_tpcbox_tpcbox(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_tpose_yaw(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_contained_tpcbox_tpcbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tpose_yaw(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = contained_tpcbox_tpcbox(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_tpose_pitch(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_overlaps_tpcbox_tpcbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tpose_pitch(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = overlaps_tpcbox_tpcbox(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_tpose_roll(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_same_tpcbox_tpcbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tpose_roll(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = same_tpcbox_tpcbox(s1, s2); + free(s1); free(s2); + return r; + }); +} + +static void Gen_adjacent_tpcbox_tpcbox(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = adjacent_tpcbox_tpcbox(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_tpose_speed(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_json_accessor ===== +static void Gen_tjsonb_end_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tpose_speed(t); + Jsonb * r = tjsonb_end_value(t); free(t); - return TemporalToBlobN(result, r, mask, idx); + return JsonbToBlobN(result, r, mask, idx); }); } -static void Gen_tpose_angular_speed(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tjsonb_start_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tpose_angular_speed(t); + Jsonb * r = tjsonb_start_value(t); free(t); - return TemporalToBlobN(result, r, mask, idx); + return JsonbToBlobN(result, r, mask, idx); }); } - -// ===== @ingroup meos_pointcloud_restrict ===== -static void Gen_tpcpoint_at_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tjsonb_value_at_timestamptz(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + auto rc = args.size(); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, rc, + [&](string_t in, timestamp_tz_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Pcpoint *a2p = BlobToPcpoint(a2); - Temporal *r = tpcpoint_at_value(t, a2p); - free(a2p); free(t); - return TemporalToBlobN(result, r, mask, idx); + Jsonb *o = NULL; + bool ok = tjsonb_value_at_timestamptz(t, DuckDBToMeosTimestamp(a2).value, true, &o); + free(t); + if (! ok) { mask.SetInvalid(idx); return string_t(); } + return JsonbToBlob(result, o); }); } -static void Gen_tpcpoint_minus_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tjsonb_value_n(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + auto rc = args.size(); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, rc, + [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Pcpoint *a2p = BlobToPcpoint(a2); - Temporal *r = tpcpoint_minus_value(t, a2p); - free(a2p); free(t); - return TemporalToBlobN(result, r, mask, idx); + Jsonb *o = NULL; + bool ok = tjsonb_value_n(t, a2, &o); + free(t); + if (! ok) { mask.SetInvalid(idx); return string_t(); } + return JsonbToBlob(result, o); }); } -static void Gen_tpcpatch_at_value(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_h3_latlng ===== +static void Gen_tgeogpoint_to_th3index(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Pcpatch *a2p = BlobToPcpatch(a2); - Temporal *r = tpcpatch_at_value(t, a2p); - free(a2p); free(t); + Temporal *r = tgeogpoint_to_th3index(t, a2); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpcpatch_minus_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tgeompoint_to_th3index(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Pcpatch *a2p = BlobToPcpatch(a2); - Temporal *r = tpcpatch_minus_value(t, a2p); - free(a2p); free(t); + Temporal *r = tgeompoint_to_th3index(t, a2); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } - -// ===== @ingroup meos_npoint_base_accessor ===== -static void Gen_npoint_position(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Npoint *v = BlobToNpoint(in); - double r = npoint_position(v); - free(v); - return r; - }); -} - -static void Gen_npoint_route(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_to_tgeogpoint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Npoint *v = BlobToNpoint(in); - int64_t r = npoint_route(v); - free(v); - return r; - }); -} - -static void Gen_nsegment_end_position(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Nsegment *v = BlobToNsegment(in); - double r = nsegment_end_position(v); - free(v); - return r; - }); -} - -static void Gen_nsegment_route(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Nsegment *v = BlobToNsegment(in); - int64_t r = nsegment_route(v); - free(v); - return r; + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = th3index_to_tgeogpoint(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_nsegment_start_position(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_to_tgeompoint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Nsegment *v = BlobToNsegment(in); - double r = nsegment_start_position(v); - free(v); - return r; + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = th3index_to_tgeompoint(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_pose_base_inout ===== -static void Gen_pose_as_ewkt(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_cbuffer_base_inout ===== +static void Gen_cbuffer_as_ewkt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, int32_t a2) { - Pose *s = BlobToPose(a); - char *r = pose_as_ewkt(s, a2); + Cbuffer *s = BlobToCbuffer(a); + char *r = cbuffer_as_ewkt(s, a2); free(s); return TakeCString(result, r); }); } -static void Gen_pose_as_ewkt_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_as_ewkt_d(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t a) { - Pose *s = BlobToPose(a); - char *r = pose_as_ewkt(s, 15); + Cbuffer *s = BlobToCbuffer(a); + char *r = cbuffer_as_ewkt(s, 15); free(s); return TakeCString(result, r); }); } -static void Gen_pose_as_text(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_as_text(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, int32_t a2) { - Pose *s = BlobToPose(a); - char *r = pose_as_text(s, a2); + Cbuffer *s = BlobToCbuffer(a); + char *r = cbuffer_as_text(s, a2); free(s); return TakeCString(result, r); }); } -static void Gen_pose_as_text_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_as_text_d(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t a) { - Pose *s = BlobToPose(a); - char *r = pose_as_text(s, 15); + Cbuffer *s = BlobToCbuffer(a); + char *r = cbuffer_as_text(s, 15); free(s); return TakeCString(result, r); }); @@ -3759,87 +3788,89 @@ static void Gen_trgeometry_to_tgeometry(DataChunk &args, ExpressionState &, Vect } -// ===== @ingroup meos_json_conversion ===== -static void Gen_tjsonb_to_ttext(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_npoint_restrict ===== +static void Gen_tnpoint_at_npointset(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tjsonb_to_ttext(t); - free(t); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(a); + Set *cc = BlobToSet(b); + Temporal *r = tnpoint_at_npointset(t, cc); + free(t); free(cc); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_ttext_to_tjsonb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tnpoint_minus_npointset(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = ttext_to_tjsonb(t); - free(t); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(a); + Set *cc = BlobToSet(b); + Temporal *r = tnpoint_minus_npointset(t, cc); + free(t); free(cc); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_posechain_inout ===== -static void Gen_tposechain_as_geopose(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_geo_box_accessor ===== +static void Gen_stbox_hash(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, int32_t a2) { - Temporal *t = BlobToTemporal(in); - char * r = tposechain_as_geopose(t, a2); - free(t); - return TakeCString(result, r); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + STBox *s = BlobToStbox(in); + uint32_t r = stbox_hash(s); + free(s); + return r; }); } -static void Gen_tposechain_as_geopose_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_stbox_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Temporal *t = BlobToTemporal(in); - char * r = tposechain_as_geopose(t, -1); - free(t); - return TakeCString(result, r); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, uint64_t a2) { + STBox *s = BlobToStbox(in); + uint64_t r = stbox_hash_extended(s, a2); + free(s); + return r; }); } -// ===== @ingroup meos_box_accessor ===== -static void Gen_tbox_hash(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pose_base_accessor ===== +static void Gen_pose_hash(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t in) { - TBox *s = BlobToTbox(in); - uint32_t r = tbox_hash(s); - free(s); + Pose *v = BlobToPose(in); + uint32_t r = pose_hash(v); + free(v); return r; }); } -static void Gen_tbox_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pose_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in, uint64_t a2) { - TBox *s = BlobToTbox(in); - uint64_t r = tbox_hash_extended(s, a2); + Pose *s = BlobToPose(in); + uint64_t r = pose_hash_extended(s, a2); free(s); return r; }); } -// ===== @ingroup meos_npoint_set_accessor ===== -static void Gen_npointset_routes(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_cbuffer_transf ===== +static void Gen_tcbuffer_expand(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Set *s = BlobToSet(in); - Set *r = npointset_routes(s); - free(s); - return SetToBlobN(result, r, mask, idx); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, double a2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tcbuffer_expand(t, a2); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } @@ -4371,55 +4402,52 @@ void RegisterGenerated_meos_quadbin_comp_ever(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_always_ne_tquadbin_tquadbin)); } -void RegisterGenerated_meos_rgeo_analytics_similarity(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("hausdorffDistance", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::DOUBLE, Gen_trgeometry_hausdorff_distance)); - RegisterSerializedScalarFunction(loader, ScalarFunction("frechetDistance", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::DOUBLE, Gen_trgeometry_frechet_distance)); - RegisterSerializedScalarFunction(loader, ScalarFunction("dynTimeWarpDistance", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::DOUBLE, Gen_trgeometry_dyntimewarp_distance)); - loader.RegisterFunction(TableFunction("frechetDistancePath", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, PathExec_trgeometry_frechet_path, PathBindFn_trgeometry_frechet_path, PathInit_trgeometry_frechet_path)); - loader.RegisterFunction(TableFunction("dynTimeWarpPath", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, PathExec_trgeometry_dyntimewarp_path, PathBindFn_trgeometry_dyntimewarp_path, PathInit_trgeometry_dyntimewarp_path)); -} - -void RegisterGenerated_meos_rgeo_dist(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TrgeometryTypes::trgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_trgeometry_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TrgeometryTypes::trgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_trgeometry_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, TemporalTypes::tfloat(), Gen_tdistance_trgeometry_tpoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, TemporalTypes::tfloat(), Gen_tdistance_trgeometry_tpoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, TemporalTypes::tfloat(), Gen_tdistance_trgeometry_trgeometry)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, TemporalTypes::tfloat(), Gen_tdistance_trgeometry_trgeometry)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::DOUBLE, Gen_nad_trgeometry_tpoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::DOUBLE, Gen_nad_trgeometry_tpoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::DOUBLE, Gen_nad_trgeometry_trgeometry)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::DOUBLE, Gen_nad_trgeometry_trgeometry)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TrgeometryTypes::trgeometry(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_trgeometry_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TrgeometryTypes::trgeometry(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_trgeometry_stbox)); -} - -void RegisterGenerated_meos_setspan_inout(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("cbuffersetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::cbufferset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("jsonbsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::jsonbset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("npointsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::npointset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("pcpointsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::pcpointset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("pcpatchsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::pcpatchset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("posesetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::poseset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("posechainsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::posechainset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("quadbinsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::quadbinset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("s2cellsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::s2cellset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("intsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::intset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("bigintsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::bigintset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("floatsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::floatset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("textsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::textset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("datesetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::dateset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tstzsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::tstzset(), Gen_set_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("intspanFromHexWKB", {LogicalType::VARCHAR}, SpanTypes::intspan(), Gen_span_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("bigintspanFromHexWKB", {LogicalType::VARCHAR}, SpanTypes::bigintspan(), Gen_span_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("floatspanFromHexWKB", {LogicalType::VARCHAR}, SpanTypes::floatspan(), Gen_span_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tstzspanFromHexWKB", {LogicalType::VARCHAR}, SpanTypes::tstzspan(), Gen_span_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("datespanFromHexWKB", {LogicalType::VARCHAR}, SpanTypes::datespan(), Gen_span_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("intspansetFromHexWKB", {LogicalType::VARCHAR}, SpansetTypes::intspanset(), Gen_spanset_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("bigintspansetFromHexWKB", {LogicalType::VARCHAR}, SpansetTypes::bigintspanset(), Gen_spanset_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("floatspansetFromHexWKB", {LogicalType::VARCHAR}, SpansetTypes::floatspanset(), Gen_spanset_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("datespansetFromHexWKB", {LogicalType::VARCHAR}, SpansetTypes::datespanset(), Gen_spanset_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tstzspansetFromHexWKB", {LogicalType::VARCHAR}, SpansetTypes::tstzspanset(), Gen_spanset_from_hexwkb)); +void RegisterGenerated_meos_geo_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("centroid", {TgeompointType::tgeompoint()}, TgeompointType::tgeompoint(), Gen_tgeo_centroid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("centroid", {TgeogpointType::tgeogpoint()}, TgeogpointType::tgeogpoint(), Gen_tgeo_centroid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("centroid", {TGeometryTypes::tgeometry()}, TgeompointType::tgeompoint(), Gen_tgeo_centroid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("centroid", {TGeographyTypes::tgeography()}, TgeogpointType::tgeogpoint(), Gen_tgeo_centroid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("angularDifference", {TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tpoint_angular_difference)); + RegisterSerializedScalarFunction(loader, ScalarFunction("angularDifference", {TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tpoint_angular_difference)); + RegisterSerializedScalarFunction(loader, ScalarFunction("azimuth", {TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tpoint_azimuth)); + RegisterSerializedScalarFunction(loader, ScalarFunction("azimuth", {TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tpoint_azimuth)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cumulativeLength", {TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tpoint_cumulative_length)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cumulativeLength", {TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tpoint_cumulative_length)); + RegisterSerializedScalarFunction(loader, ScalarFunction("getX", {TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tpoint_get_x)); + RegisterSerializedScalarFunction(loader, ScalarFunction("getX", {TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tpoint_get_x)); + RegisterSerializedScalarFunction(loader, ScalarFunction("getY", {TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tpoint_get_y)); + RegisterSerializedScalarFunction(loader, ScalarFunction("getY", {TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tpoint_get_y)); + RegisterSerializedScalarFunction(loader, ScalarFunction("getZ", {TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tpoint_get_z)); + RegisterSerializedScalarFunction(loader, ScalarFunction("getZ", {TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tpoint_get_z)); + RegisterSerializedScalarFunction(loader, ScalarFunction("isSimple", {TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_tpoint_is_simple)); + RegisterSerializedScalarFunction(loader, ScalarFunction("isSimple", {TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_tpoint_is_simple)); + RegisterSerializedScalarFunction(loader, ScalarFunction("length", {TgeompointType::tgeompoint()}, LogicalType::DOUBLE, Gen_tpoint_length)); + RegisterSerializedScalarFunction(loader, ScalarFunction("length", {TgeogpointType::tgeogpoint()}, LogicalType::DOUBLE, Gen_tpoint_length)); + RegisterSerializedScalarFunction(loader, ScalarFunction("speed", {TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tpoint_speed)); + RegisterSerializedScalarFunction(loader, ScalarFunction("speed", {TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tpoint_speed)); +} + +void RegisterGenerated_meos_posechain_base_comp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("=", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_ne)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_ne)); + RegisterSerializedScalarFunction(loader, ScalarFunction("same", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_same)); + RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_same)); + RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("le", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_ge)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_ge)); +} + +void RegisterGenerated_meos_rgeo_bbox_split(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {TrgeometryTypes::trgeometry()}, LogicalType::LIST(StboxType::stbox()), Gen_trgeometry_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_trgeometry_split_n_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_trgeometry_split_each_n_stboxes)); } void RegisterGenerated_meos_h3_edges(ExtensionLoader &loader) { @@ -4431,35 +4459,38 @@ void RegisterGenerated_meos_h3_edges(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("th3DirectedEdgeToBoundary", {H3indexTypes::th3index()}, TGeographyTypes::tgeography(), Gen_th3index_directed_edge_to_boundary)); } -void RegisterGenerated_meos_pose_geopose_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("applyPose", {PoseTypes::tpose(), MobilityDuckGeometryType()}, TgeompointType::tgeompoint(), Gen_tpose_apply_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("yaw", {PoseTypes::tpose()}, TemporalTypes::tfloat(), Gen_tpose_yaw)); - RegisterSerializedScalarFunction(loader, ScalarFunction("pitch", {PoseTypes::tpose()}, TemporalTypes::tfloat(), Gen_tpose_pitch)); - RegisterSerializedScalarFunction(loader, ScalarFunction("roll", {PoseTypes::tpose()}, TemporalTypes::tfloat(), Gen_tpose_roll)); - RegisterSerializedScalarFunction(loader, ScalarFunction("speed", {PoseTypes::tpose()}, TemporalTypes::tfloat(), Gen_tpose_speed)); - RegisterSerializedScalarFunction(loader, ScalarFunction("angularSpeed", {PoseTypes::tpose()}, TemporalTypes::tfloat(), Gen_tpose_angular_speed)); +void RegisterGenerated_meos_pointcloud_box_topo(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_contains_tpcbox_tpcbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_contains_tpcbox_tpcbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_contained_tpcbox_tpcbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_contained_tpcbox_tpcbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_overlaps_tpcbox_tpcbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_overlaps_tpcbox_tpcbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("same", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_same_tpcbox_tpcbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_same_tpcbox_tpcbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_adjacent_tpcbox_tpcbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_adjacent_tpcbox_tpcbox)); } -void RegisterGenerated_meos_pointcloud_restrict(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("atValue", {TPcpointTypes::tpcpoint(), TPcpointTypes::pcpoint()}, TPcpointTypes::tpcpoint(), Gen_tpcpoint_at_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minusValue", {TPcpointTypes::tpcpoint(), TPcpointTypes::pcpoint()}, TPcpointTypes::tpcpoint(), Gen_tpcpoint_minus_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("atValue", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::pcpatch()}, TPcpatchTypes::tpcpatch(), Gen_tpcpatch_at_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minusValue", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::pcpatch()}, TPcpatchTypes::tpcpatch(), Gen_tpcpatch_minus_value)); +void RegisterGenerated_meos_json_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {TJsonbTypes::tjsonb()}, TJsonbTypes::jsonb(), Gen_tjsonb_end_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {TJsonbTypes::tjsonb()}, TJsonbTypes::jsonb(), Gen_tjsonb_start_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("valueAtTimestamp", {TJsonbTypes::tjsonb(), LogicalType::TIMESTAMP_TZ}, TJsonbTypes::jsonb(), Gen_tjsonb_value_at_timestamptz)); + RegisterSerializedScalarFunction(loader, ScalarFunction("valueN", {TJsonbTypes::tjsonb(), LogicalType::INTEGER}, TJsonbTypes::jsonb(), Gen_tjsonb_value_n)); } -void RegisterGenerated_meos_npoint_base_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("getPosition", {NpointTypes::npoint()}, LogicalType::DOUBLE, Gen_npoint_position)); - RegisterSerializedScalarFunction(loader, ScalarFunction("route", {NpointTypes::npoint()}, LogicalType::BIGINT, Gen_npoint_route)); - RegisterSerializedScalarFunction(loader, ScalarFunction("endPosition", {NpointTypes::nsegment()}, LogicalType::DOUBLE, Gen_nsegment_end_position)); - RegisterSerializedScalarFunction(loader, ScalarFunction("route", {NpointTypes::nsegment()}, LogicalType::BIGINT, Gen_nsegment_route)); - RegisterSerializedScalarFunction(loader, ScalarFunction("startPosition", {NpointTypes::nsegment()}, LogicalType::DOUBLE, Gen_nsegment_start_position)); +void RegisterGenerated_meos_h3_latlng(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("th3index", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_tgeogpoint_to_th3index)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3index", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_tgeompoint_to_th3index)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cellToPoint", {H3indexTypes::th3index()}, TgeogpointType::tgeogpoint(), Gen_th3index_to_tgeogpoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tgeompoint", {H3indexTypes::th3index()}, TgeompointType::tgeompoint(), Gen_th3index_to_tgeompoint)); } -void RegisterGenerated_meos_pose_base_inout(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PoseTypes::pose(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_pose_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PoseTypes::pose()}, LogicalType::VARCHAR, Gen_pose_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PoseTypes::pose(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_pose_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PoseTypes::pose()}, LogicalType::VARCHAR, Gen_pose_as_text_d)); +void RegisterGenerated_meos_cbuffer_base_inout(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {CbufferTypes::cbuffer(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_cbuffer_as_ewkt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {CbufferTypes::cbuffer()}, LogicalType::VARCHAR, Gen_cbuffer_as_ewkt_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {CbufferTypes::cbuffer(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_cbuffer_as_text)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {CbufferTypes::cbuffer()}, LogicalType::VARCHAR, Gen_cbuffer_as_text_d)); } void RegisterGenerated_meos_rgeo_conversion(ExtensionLoader &loader) { @@ -4468,25 +4499,23 @@ void RegisterGenerated_meos_rgeo_conversion(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("tgeometry", {TrgeometryTypes::trgeometry()}, TGeometryTypes::tgeometry(), Gen_trgeometry_to_tgeometry)); } -void RegisterGenerated_meos_json_conversion(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("ttext", {TJsonbTypes::tjsonb()}, TemporalTypes::ttext(), Gen_tjsonb_to_ttext)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TJsonbTypes::tjsonb()}, TemporalTypes::ttext(), Gen_tjsonb_to_ttext)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tjsonb", {TemporalTypes::ttext()}, TJsonbTypes::tjsonb(), Gen_ttext_to_tjsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TemporalTypes::ttext()}, TJsonbTypes::tjsonb(), Gen_ttext_to_tjsonb)); +void RegisterGenerated_meos_npoint_restrict(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("atValues", {NpointTypes::tnpoint(), SetTypes::npointset()}, NpointTypes::tnpoint(), Gen_tnpoint_at_npointset)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minusValues", {NpointTypes::tnpoint(), SetTypes::npointset()}, NpointTypes::tnpoint(), Gen_tnpoint_minus_npointset)); } -void RegisterGenerated_meos_posechain_inout(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("asGeoPose", {PosechainTypes::tposechain(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tposechain_as_geopose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asGeoPose", {PosechainTypes::tposechain()}, LogicalType::VARCHAR, Gen_tposechain_as_geopose_d)); +void RegisterGenerated_meos_geo_box_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("hash", {StboxType::stbox()}, LogicalType::UINTEGER, Gen_stbox_hash)); + RegisterSerializedScalarFunction(loader, ScalarFunction("hashExtended", {StboxType::stbox(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_stbox_hash_extended)); } -void RegisterGenerated_meos_box_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("hash", {TboxType::tbox()}, LogicalType::UINTEGER, Gen_tbox_hash)); - RegisterSerializedScalarFunction(loader, ScalarFunction("hashExtended", {TboxType::tbox(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_tbox_hash_extended)); +void RegisterGenerated_meos_pose_base_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("hash", {PoseTypes::pose()}, LogicalType::UINTEGER, Gen_pose_hash)); + RegisterSerializedScalarFunction(loader, ScalarFunction("hashExtended", {PoseTypes::pose(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_pose_hash_extended)); } -void RegisterGenerated_meos_npoint_set_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("routes", {SetTypes::npointset()}, SetTypes::npointset(), Gen_npointset_routes)); +void RegisterGenerated_meos_cbuffer_transf(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("expand", {CbufferTypes::tcbuffer(), LogicalType::DOUBLE}, CbufferTypes::tcbuffer(), Gen_tcbuffer_expand)); } } // namespace duckdb diff --git a/src/generated/generated_temporal_udfs_2.cpp b/src/generated/generated_temporal_udfs_2.cpp index b1881978..e1bf589d 100644 --- a/src/generated/generated_temporal_udfs_2.cpp +++ b/src/generated/generated_temporal_udfs_2.cpp @@ -3072,20 +3072,118 @@ static void Gen_tsequenceset_make_gaps(DataChunk &args, ExpressionState &, Vecto } -// ===== @ingroup meos_cbuffer_dist ===== -static void Gen_tdistance_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_json_comp_ever ===== +static void Gen_always_eq_tjsonb_jsonb(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2) { + Temporal *t = BlobToTemporal(in); + Jsonb *a2p = BlobToJsonb(a2); + int32_t r = always_eq_tjsonb_jsonb(t, a2p); + free(a2p); free(t); + return (r != 0); + }); +} + +static void Gen_always_eq_tjsonb_tjsonb(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2) { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + int32_t r = always_eq_tjsonb_tjsonb(t1, t2); + free(t1); free(t2); + return (r != 0); + }); +} + +static void Gen_always_ne_tjsonb_jsonb(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2) { + Temporal *t = BlobToTemporal(in); + Jsonb *a2p = BlobToJsonb(a2); + int32_t r = always_ne_tjsonb_jsonb(t, a2p); + free(a2p); free(t); + return (r != 0); + }); +} + +static void Gen_always_ne_tjsonb_tjsonb(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2) { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + int32_t r = always_ne_tjsonb_tjsonb(t1, t2); + free(t1); free(t2); + return (r != 0); + }); +} + +static void Gen_ever_eq_tjsonb_jsonb(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2) { + Temporal *t = BlobToTemporal(in); + Jsonb *a2p = BlobToJsonb(a2); + int32_t r = ever_eq_tjsonb_jsonb(t, a2p); + free(a2p); free(t); + return (r != 0); + }); +} + +static void Gen_ever_eq_tjsonb_tjsonb(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2) { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + int32_t r = ever_eq_tjsonb_tjsonb(t1, t2); + free(t1); free(t2); + return (r != 0); + }); +} + +static void Gen_ever_ne_tjsonb_jsonb(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2) { + Temporal *t = BlobToTemporal(in); + Jsonb *a2p = BlobToJsonb(a2); + int32_t r = ever_ne_tjsonb_jsonb(t, a2p); + free(a2p); free(t); + return (r != 0); + }); +} + +static void Gen_ever_ne_tjsonb_tjsonb(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2) { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + int32_t r = ever_ne_tjsonb_tjsonb(t1, t2); + free(t1); free(t2); + return (r != 0); + }); +} + + +// ===== @ingroup meos_pose_dist ===== +static void Gen_tdistance_tpose_pose(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Cbuffer *a2p = BlobToCbuffer(a2); - Temporal *r = tdistance_tcbuffer_cbuffer(t, a2p); + Pose *a2p = BlobToPose(a2); + Temporal *r = tdistance_tpose_pose(t, a2p); free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tdistance_tcbuffer_geo(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tdistance_tpose_geo(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { @@ -3095,333 +3193,218 @@ static void Gen_tdistance_tcbuffer_geo(DataChunk &args, ExpressionState &, Vecto GSERIALIZED *gs_geog = geom_to_geog(gs); free(gs); gs = gs_geog; } - Temporal *r = tdistance_tcbuffer_geo(t, gs); + Temporal *r = tdistance_tpose_geo(t, gs); free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tdistance_tcbuffer_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tdistance_tpose_tpose(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - Temporal *r = tdistance_tcbuffer_tcbuffer(t1, t2); + Temporal *r = tdistance_tpose_tpose(t1, t2); free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_nad_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_tpose_pose(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in, string_t a2) { Temporal *t = BlobToTemporal(in); - Cbuffer *a2p = BlobToCbuffer(a2); - double r = nad_tcbuffer_cbuffer(t, a2p); + Pose *a2p = BlobToPose(a2); + double r = nad_tpose_pose(t, a2p); free(a2p); free(t); - return r; + return (double) r; }); } -static void Gen_nad_tcbuffer_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_tpose_tpose(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in1, string_t in2) { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - double r = nad_tcbuffer_tcbuffer(t1, t2); + double r = nad_tpose_tpose(t1, t2); free(t1); free(t2); - return r; + return (double) r; }); } -static void Gen_nai_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nai_tpose_pose(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Cbuffer *a2p = BlobToCbuffer(a2); - Temporal *r = (Temporal *) nai_tcbuffer_cbuffer(t, a2p); + Pose *a2p = BlobToPose(a2); + Temporal *r = (Temporal *) nai_tpose_pose(t, a2p); free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_nad_tcbuffer_stbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_tpose_stbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> double { Temporal *t = BlobToTemporal(a); STBox *bx = BlobToStbox(b); - double r = nad_tcbuffer_stbox(t, bx); + double r = nad_tpose_stbox(t, bx); free(t); free(bx); if (r == std::numeric_limits::max()) { mask.SetInvalid(idx); return double(); } - return r; + return (double) r; }); } -// ===== @ingroup meos_temporal_bool ===== -static void Gen_tand_bool_tbool(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_geo_conversion ===== +static void Gen_tgeogpoint_to_tgeography(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](bool a1, string_t in, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tand_bool_tbool(a1, t); + Temporal *r = tgeogpoint_to_tgeography(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tand_tbool_bool(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tgeography_to_tgeogpoint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, bool a2, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tand_tbool_bool(t, a2); + Temporal *r = tgeography_to_tgeogpoint(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tand_tbool_tbool(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = tand_tbool_tbool(t1, t2); - free(t1); free(t2); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tnot_tbool(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tgeography_to_tgeometry(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tnot_tbool(t); + Temporal *r = tgeography_to_tgeometry(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tor_bool_tbool(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tgeometry_to_tgeography(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](bool a1, string_t in, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tor_bool_tbool(a1, t); + Temporal *r = tgeometry_to_tgeography(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tor_tbool_bool(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tgeometry_to_tgeompoint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, bool a2, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tor_tbool_bool(t, a2); + Temporal *r = tgeometry_to_tgeompoint(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tor_tbool_tbool(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tgeompoint_to_tgeometry(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = tor_tbool_tbool(t1, t2); - free(t1); free(t2); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tgeompoint_to_tgeometry(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_cbuffer_base_comp ===== -static void Gen_cbuffer_eq(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_geo_box_comp ===== +static void Gen_stbox_eq(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - Cbuffer *s1 = BlobToCbuffer(a); - Cbuffer *s2 = BlobToCbuffer(b); - bool r = cbuffer_eq(s1, s2); + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = stbox_eq(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_cbuffer_ge(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_stbox_ge(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - Cbuffer *s1 = BlobToCbuffer(a); - Cbuffer *s2 = BlobToCbuffer(b); - bool r = cbuffer_ge(s1, s2); + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = stbox_ge(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_cbuffer_gt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_stbox_gt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - Cbuffer *s1 = BlobToCbuffer(a); - Cbuffer *s2 = BlobToCbuffer(b); - bool r = cbuffer_gt(s1, s2); + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = stbox_gt(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_cbuffer_le(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_stbox_le(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - Cbuffer *s1 = BlobToCbuffer(a); - Cbuffer *s2 = BlobToCbuffer(b); - bool r = cbuffer_le(s1, s2); + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = stbox_le(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_cbuffer_lt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_stbox_lt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - Cbuffer *s1 = BlobToCbuffer(a); - Cbuffer *s2 = BlobToCbuffer(b); - bool r = cbuffer_lt(s1, s2); + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = stbox_lt(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_cbuffer_ne(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_stbox_ne(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - Cbuffer *s1 = BlobToCbuffer(a); - Cbuffer *s2 = BlobToCbuffer(b); - bool r = cbuffer_ne(s1, s2); + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = stbox_ne(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_cbuffer_same(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - Cbuffer *s1 = BlobToCbuffer(a); - Cbuffer *s2 = BlobToCbuffer(b); - bool r = cbuffer_same(s1, s2); - free(s1); free(s2); - return r; - }); -} - - -// ===== @ingroup meos_box_comp ===== -static void Gen_tbox_eq(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = tbox_eq(s1, s2); - free(s1); free(s2); - return r; - }); -} -static void Gen_tbox_ge(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = tbox_ge(s1, s2); - free(s1); free(s2); - return r; - }); -} - -static void Gen_tbox_gt(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = tbox_gt(s1, s2); - free(s1); free(s2); - return r; - }); -} - -static void Gen_tbox_le(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = tbox_le(s1, s2); - free(s1); free(s2); - return r; - }); -} - -static void Gen_tbox_lt(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = tbox_lt(s1, s2); - free(s1); free(s2); - return r; - }); -} - -static void Gen_tbox_ne(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = tbox_ne(s1, s2); - free(s1); free(s2); - return r; - }); -} - - -// ===== @ingroup meos_rgeo_comp_temp ===== -static void Gen_teq_geo_trgeometry(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in_g, string_t in_t, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in_t); - GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); - if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { - GSERIALIZED *gs_geog = geom_to_geog(gs); - free(gs); gs = gs_geog; - } - Temporal *r = teq_geo_trgeometry(gs, t); - free(t); free(gs); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_teq_trgeometry_geo(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pose_geopose_accessor ===== +static void Gen_tpose_apply_geo(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { @@ -3431,319 +3414,326 @@ static void Gen_teq_trgeometry_geo(DataChunk &args, ExpressionState &, Vector &r GSERIALIZED *gs_geog = geom_to_geog(gs); free(gs); gs = gs_geog; } - Temporal *r = teq_trgeometry_geo(t, gs); + Temporal *r = tpose_apply_geo(t, gs); free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_geo_trgeometry(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_yaw(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in_g, string_t in_t, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in_t); - GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); - if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { - GSERIALIZED *gs_geog = geom_to_geog(gs); - free(gs); gs = gs_geog; - } - Temporal *r = tne_geo_trgeometry(gs, t); - free(t); free(gs); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tpose_yaw(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_trgeometry_geo(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_pitch(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in_t); - GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); - if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { - GSERIALIZED *gs_geog = geom_to_geog(gs); - free(gs); gs = gs_geog; - } - Temporal *r = tne_trgeometry_geo(t, gs); - free(t); free(gs); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tpose_pitch(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } - -// ===== @ingroup meos_h3_accessor ===== -static void Gen_th3index_start_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_roll(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) -> int64_t { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - int64_t r = (int64_t) th3index_start_value(t); + Temporal *r = tpose_roll(t); free(t); - return r; + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_th3index_end_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_speed(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) -> int64_t { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - int64_t r = (int64_t) th3index_end_value(t); + Temporal *r = tpose_speed(t); free(t); - return r; + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_th3index_value_n(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_angular_speed(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> int64_t { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - uint64_t v; - bool ok = th3index_value_n(t, a2, &v); + Temporal *r = tpose_angular_speed(t); free(t); - if (!ok) { mask.SetInvalid(idx); return int64_t(); } - return (int64_t) v; + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_th3index_values(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - auto &in_vec = args.data[0]; - idx_t row_count = args.size(); - in_vec.Flatten(row_count); - auto &result_validity = FlatVector::Validity(result); - auto list_entries = FlatVector::GetData(result); - idx_t off = 0; - for (idx_t i = 0; i < row_count; ++i) { - if (in_vec.GetValue(i).IsNull()) { result_validity.SetInvalid(i); continue; } - string_t blob = FlatVector::GetData(in_vec)[i]; - Temporal *in = BlobToTemporal(blob); - int count = 0; - uint64_t * arr = th3index_values(in, &count); - free(in); - int n = (arr && count > 0) ? count : 0; - ListVector::Reserve(result, off + n); - ListVector::SetListSize(result, off + n); - list_entries[i] = list_entry_t{off, (uint64_t) n}; - if (n > 0) { - auto &child_vector = ListVector::GetEntry(result); - child_vector.SetVectorType(VectorType::FLAT_VECTOR); - auto *cd = FlatVector::GetData(child_vector); - for (int j = 0; j < n; ++j) { cd[off + j] = (int64_t) arr[j]; } - off += n; - } - if (arr) free(arr); - result_validity.SetValid(i); - } -} - -// ===== @ingroup meos_pointcloud_box_accessor ===== -static void Gen_tpcbox_hasx(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pointcloud_base_accessor ===== +static void Gen_pcpoint_get_pcid(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), + UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t in) { - TPCBox *v = BlobToTpcbox(in); - bool r = tpcbox_hasx(v); + Pcpoint *v = BlobToPcpoint(in); + uint32_t r = pcpoint_get_pcid(v); free(v); return r; }); } -static void Gen_tpcbox_hasz(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pcpoint_hash(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), + UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t in) { - TPCBox *v = BlobToTpcbox(in); - bool r = tpcbox_hasz(v); + Pcpoint *v = BlobToPcpoint(in); + uint32_t r = pcpoint_hash(v); free(v); return r; }); } -static void Gen_tpcbox_hast(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pcpatch_get_pcid(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), + UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t in) { - TPCBox *v = BlobToTpcbox(in); - bool r = tpcbox_hast(v); + Pcpatch *v = BlobToPcpatch(in); + uint32_t r = pcpatch_get_pcid(v); free(v); return r; }); } -static void Gen_tpcbox_srid(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pcpatch_hash(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), + UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t in) { - TPCBox *v = BlobToTpcbox(in); - int32_t r = tpcbox_srid(v); + Pcpatch *v = BlobToPcpatch(in); + uint32_t r = pcpatch_hash(v); free(v); return r; }); } -static void Gen_tpcbox_pcid(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pcpoint_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - TPCBox *v = BlobToTpcbox(in); - uint32_t r = tpcbox_pcid(v); - free(v); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, uint64_t a2) { + Pcpoint *s = BlobToPcpoint(in); + uint64_t r = pcpoint_hash_extended(s, a2); + free(s); + return r; + }); +} + +static void Gen_pcpatch_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, uint64_t a2) { + Pcpatch *s = BlobToPcpatch(in); + uint64_t r = pcpatch_hash_extended(s, a2); + free(s); return r; }); } -// ===== @ingroup meos_cbuffer_accessor ===== -static void Gen_tcbuffer_end_value(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_cbuffer_conversion ===== +static void Gen_tcbuffer_to_tfloat(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Cbuffer * r = tcbuffer_end_value(t); + Temporal *r = tcbuffer_to_tfloat(t); free(t); - return CbufferToBlobN(result, r, mask, idx); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tcbuffer_convex_hull(DataChunk &args, ExpressionState &state, Vector &result) { +static void Gen_tcbuffer_to_tgeompoint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - GSERIALIZED * r = tcbuffer_convex_hull(t); + Temporal *r = tcbuffer_to_tgeompoint(t); free(t); - if (!r) { mask.SetInvalid(idx); return string_t(); } - string_t out = GSerializedToGeometry(r, state, result); - free(r); - return out; + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tcbuffer_start_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tgeometry_to_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Cbuffer * r = tcbuffer_start_value(t); + Temporal *r = tgeometry_to_tcbuffer(t); free(t); - return CbufferToBlobN(result, r, mask, idx); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_rgeo_transf ===== -static void Gen_trgeometry_round(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_npoint_base_inout ===== +static void Gen_npoint_as_ewkt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = trgeometry_round(t, a2); - free(t); - return TemporalToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, int32_t a2) { + Npoint *s = BlobToNpoint(a); + char *r = npoint_as_ewkt(s, a2); + free(s); + return TakeCString(result, r); }); } -static void Gen_trgeometry_round_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_npoint_as_ewkt_d(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = trgeometry_round(t, 0); - free(t); - return TemporalToBlobN(result, r, mask, idx); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t a) { + Npoint *s = BlobToNpoint(a); + char *r = npoint_as_ewkt(s, 15); + free(s); + return TakeCString(result, r); }); } -static void Gen_trgeometry_as_tinstant(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_npoint_as_text(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = (Temporal *) trgeometry_as_tinstant(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, int32_t a2) { + Npoint *s = BlobToNpoint(a); + char *r = npoint_as_text(s, a2); + free(s); + return TakeCString(result, r); + }); +} + +static void Gen_npoint_as_text_d(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t a) { + Npoint *s = BlobToNpoint(a); + char *r = npoint_as_text(s, 15); + free(s); + return TakeCString(result, r); }); } -// ===== @ingroup meos_s2cell_comp_temp ===== -static void Gen_teq_ts2cell_ts2cell(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_posechain_base_accessor ===== +static void Gen_posechain_num_poses(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = teq_ts2cell_ts2cell(t1, t2); - free(t1); free(t2); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + PoseChain *v = BlobToPosechain(in); + int32_t r = posechain_num_poses(v); + free(v); + return r; + }); +} + +static void Gen_posechain_hash(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + PoseChain *v = BlobToPosechain(in); + uint32_t r = posechain_hash(v); + free(v); + return r; + }); +} + +static void Gen_posechain_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, uint64_t a2) { + PoseChain *s = BlobToPosechain(in); + uint64_t r = posechain_hash_extended(s, a2); + free(s); + return r; + }); +} + + +// ===== @ingroup meos_quadbin_conversion ===== +static void Gen_tbigint_to_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tbigint_to_tquadbin(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_ts2cell_ts2cell(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tquadbin_to_tbigint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = tne_ts2cell_ts2cell(t1, t2); - free(t1); free(t2); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tquadbin_to_tbigint(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_pose_comp_temp ===== -static void Gen_teq_tpose_pose(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_json_comp_temp ===== +static void Gen_teq_tjsonb_jsonb(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Pose *a2p = BlobToPose(a2); - Temporal *r = teq_tpose_pose(t, a2p); + Jsonb *a2p = BlobToJsonb(a2); + Temporal *r = teq_tjsonb_jsonb(t, a2p); free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_tpose_pose(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tne_tjsonb_jsonb(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Pose *a2p = BlobToPose(a2); - Temporal *r = tne_tpose_pose(t, a2p); + Jsonb *a2p = BlobToJsonb(a2); + Temporal *r = tne_tjsonb_jsonb(t, a2p); free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_box_set ===== -static void Gen_intersection_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_geo_box_set ===== +static void Gen_intersection_stbox_stbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> string_t { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - TBox *r = intersection_tbox_tbox(s1, s2); + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + STBox *r = intersection_stbox_stbox(s1, s2); free(s1); free(s2); if (!r) { mask.SetInvalid(idx); return string_t(); } - return TboxToBlob(result, r); + return StboxToBlob(result, r); }); } -// ===== @ingroup meos_posechain_accessor ===== -static void Gen_tposechain_num_poses(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_s2 ===== +static void Gen_ts2cell_cell_to_token(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - int32_t r = tposechain_num_poses(t); + Temporal *r = ts2cell_cell_to_token(t); free(t); - return r; + return TemporalToBlobN(result, r, mask, idx); }); } @@ -4361,122 +4351,130 @@ void RegisterGenerated_meos_temporal_constructor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("ttextSeqSetGaps", {LogicalType::LIST(TemporalTypes::ttext()), LogicalType::INTERVAL}, TemporalTypes::ttext(), Gen_tsequenceset_make_gaps)); } -void RegisterGenerated_meos_cbuffer_dist(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, TemporalTypes::tfloat(), Gen_tdistance_tcbuffer_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, TemporalTypes::tfloat(), Gen_tdistance_tcbuffer_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {CbufferTypes::tcbuffer(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tcbuffer_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {CbufferTypes::tcbuffer(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tcbuffer_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, TemporalTypes::tfloat(), Gen_tdistance_tcbuffer_tcbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, TemporalTypes::tfloat(), Gen_tdistance_tcbuffer_tcbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::DOUBLE, Gen_nad_tcbuffer_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::DOUBLE, Gen_nad_tcbuffer_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::DOUBLE, Gen_nad_tcbuffer_tcbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::DOUBLE, Gen_nad_tcbuffer_tcbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachInstant", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, CbufferTypes::tcbuffer(), Gen_nai_tcbuffer_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {CbufferTypes::tcbuffer(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tcbuffer_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {CbufferTypes::tcbuffer(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tcbuffer_stbox)); -} - -void RegisterGenerated_meos_temporal_bool(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tAnd", {LogicalType::BOOLEAN, TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tand_bool_tbool)); - RegisterSerializedScalarFunction(loader, ScalarFunction("&", {LogicalType::BOOLEAN, TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tand_bool_tbool)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tAnd", {TemporalTypes::tbool(), LogicalType::BOOLEAN}, TemporalTypes::tbool(), Gen_tand_tbool_bool)); - RegisterSerializedScalarFunction(loader, ScalarFunction("&", {TemporalTypes::tbool(), LogicalType::BOOLEAN}, TemporalTypes::tbool(), Gen_tand_tbool_bool)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tAnd", {TemporalTypes::tbool(), TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tand_tbool_tbool)); - RegisterSerializedScalarFunction(loader, ScalarFunction("&", {TemporalTypes::tbool(), TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tand_tbool_tbool)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNot", {TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tnot_tbool)); - RegisterSerializedScalarFunction(loader, ScalarFunction("~", {TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tnot_tbool)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tOr", {LogicalType::BOOLEAN, TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tor_bool_tbool)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|", {LogicalType::BOOLEAN, TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tor_bool_tbool)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tOr", {TemporalTypes::tbool(), LogicalType::BOOLEAN}, TemporalTypes::tbool(), Gen_tor_tbool_bool)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|", {TemporalTypes::tbool(), LogicalType::BOOLEAN}, TemporalTypes::tbool(), Gen_tor_tbool_bool)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tOr", {TemporalTypes::tbool(), TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tor_tbool_tbool)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|", {TemporalTypes::tbool(), TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tor_tbool_tbool)); -} - -void RegisterGenerated_meos_cbuffer_base_comp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_eq)); - RegisterSerializedScalarFunction(loader, ScalarFunction("=", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_eq)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_ge)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_ge)); - RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_gt)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_gt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("le", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_le)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_le)); - RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_lt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_lt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_ne)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_ne)); - RegisterSerializedScalarFunction(loader, ScalarFunction("same", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_same)); - RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_same)); -} - -void RegisterGenerated_meos_box_comp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_eq)); - RegisterSerializedScalarFunction(loader, ScalarFunction("=", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_eq)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_ge)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_ge)); - RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_gt)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_gt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("le", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_le)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_le)); - RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_lt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_lt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_ne)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_ne)); -} - -void RegisterGenerated_meos_rgeo_comp_temp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {MobilityDuckGeometryType(), TrgeometryTypes::trgeometry()}, TemporalTypes::tbool(), Gen_teq_geo_trgeometry)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TrgeometryTypes::trgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_teq_trgeometry_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {MobilityDuckGeometryType(), TrgeometryTypes::trgeometry()}, TemporalTypes::tbool(), Gen_tne_geo_trgeometry)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TrgeometryTypes::trgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_tne_trgeometry_geo)); -} - -void RegisterGenerated_meos_h3_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {H3indexTypes::th3index()}, H3indexTypes::h3index(), Gen_th3index_start_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {H3indexTypes::th3index()}, H3indexTypes::h3index(), Gen_th3index_end_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("valueN", {H3indexTypes::th3index(), LogicalType::INTEGER}, H3indexTypes::h3index(), Gen_th3index_value_n)); - RegisterSerializedScalarFunction(loader, ScalarFunction("getValues", {H3indexTypes::th3index()}, LogicalType::LIST(H3indexTypes::h3index()), Gen_th3index_values)); -} - -void RegisterGenerated_meos_pointcloud_box_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("hasX", {TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_hasx)); - RegisterSerializedScalarFunction(loader, ScalarFunction("hasZ", {TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_hasz)); - RegisterSerializedScalarFunction(loader, ScalarFunction("hasT", {TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_hast)); - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TpcboxType::tpcbox()}, LogicalType::INTEGER, Gen_tpcbox_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("pcid", {TpcboxType::tpcbox()}, LogicalType::UINTEGER, Gen_tpcbox_pcid)); -} - -void RegisterGenerated_meos_cbuffer_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {CbufferTypes::tcbuffer()}, CbufferTypes::cbuffer(), Gen_tcbuffer_end_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("convexHull", {CbufferTypes::tcbuffer()}, MobilityDuckGeometryType(), Gen_tcbuffer_convex_hull)); - RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {CbufferTypes::tcbuffer()}, CbufferTypes::cbuffer(), Gen_tcbuffer_start_value)); -} - -void RegisterGenerated_meos_rgeo_transf(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("round", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, TrgeometryTypes::trgeometry(), Gen_trgeometry_round)); - RegisterSerializedScalarFunction(loader, ScalarFunction("round", {TrgeometryTypes::trgeometry()}, TrgeometryTypes::trgeometry(), Gen_trgeometry_round_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("trgeometryInst", {TrgeometryTypes::trgeometry()}, TrgeometryTypes::trgeometry(), Gen_trgeometry_as_tinstant)); -} - -void RegisterGenerated_meos_s2cell_comp_temp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, TemporalTypes::tbool(), Gen_teq_ts2cell_ts2cell)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, TemporalTypes::tbool(), Gen_tne_ts2cell_ts2cell)); -} - -void RegisterGenerated_meos_pose_comp_temp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {PoseTypes::tpose(), PoseTypes::pose()}, TemporalTypes::tbool(), Gen_teq_tpose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {PoseTypes::tpose(), PoseTypes::pose()}, TemporalTypes::tbool(), Gen_tne_tpose_pose)); -} - -void RegisterGenerated_meos_box_set(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tboxIntersection", {TboxType::tbox(), TboxType::tbox()}, TboxType::tbox(), Gen_intersection_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("*", {TboxType::tbox(), TboxType::tbox()}, TboxType::tbox(), Gen_intersection_tbox_tbox)); -} - -void RegisterGenerated_meos_posechain_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("numPoses", {PosechainTypes::tposechain()}, LogicalType::INTEGER, Gen_tposechain_num_poses)); +void RegisterGenerated_meos_json_comp_ever(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_always_eq_tjsonb_jsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_always_eq_tjsonb_jsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_always_eq_tjsonb_tjsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_always_eq_tjsonb_tjsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_always_ne_tjsonb_jsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_always_ne_tjsonb_jsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_always_ne_tjsonb_tjsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_always_ne_tjsonb_tjsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_ever_eq_tjsonb_jsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_ever_eq_tjsonb_jsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_ever_eq_tjsonb_tjsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_ever_eq_tjsonb_tjsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_ever_ne_tjsonb_jsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_ever_ne_tjsonb_jsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_ever_ne_tjsonb_tjsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_ever_ne_tjsonb_tjsonb)); +} + +void RegisterGenerated_meos_pose_dist(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {PoseTypes::tpose(), PoseTypes::pose()}, TemporalTypes::tfloat(), Gen_tdistance_tpose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {PoseTypes::tpose(), PoseTypes::pose()}, TemporalTypes::tfloat(), Gen_tdistance_tpose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {PoseTypes::tpose(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tpose_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {PoseTypes::tpose(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tpose_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {PoseTypes::tpose(), PoseTypes::tpose()}, TemporalTypes::tfloat(), Gen_tdistance_tpose_tpose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {PoseTypes::tpose(), PoseTypes::tpose()}, TemporalTypes::tfloat(), Gen_tdistance_tpose_tpose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::DOUBLE, Gen_nad_tpose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::DOUBLE, Gen_nad_tpose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::DOUBLE, Gen_nad_tpose_tpose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::DOUBLE, Gen_nad_tpose_tpose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachInstant", {PoseTypes::tpose(), PoseTypes::pose()}, PoseTypes::tpose(), Gen_nai_tpose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {PoseTypes::tpose(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tpose_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {PoseTypes::tpose(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tpose_stbox)); +} + +void RegisterGenerated_meos_geo_conversion(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tgeometry", {TgeogpointType::tgeogpoint()}, TGeographyTypes::tgeography(), Gen_tgeogpoint_to_tgeography)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TgeogpointType::tgeogpoint()}, TGeographyTypes::tgeography(), Gen_tgeogpoint_to_tgeography)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tgeompoint", {TGeographyTypes::tgeography()}, TgeogpointType::tgeogpoint(), Gen_tgeography_to_tgeogpoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TGeographyTypes::tgeography()}, TgeogpointType::tgeogpoint(), Gen_tgeography_to_tgeogpoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tgeometry", {TGeographyTypes::tgeography()}, TGeometryTypes::tgeometry(), Gen_tgeography_to_tgeometry)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TGeographyTypes::tgeography()}, TGeometryTypes::tgeometry(), Gen_tgeography_to_tgeometry)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tgeography", {TGeometryTypes::tgeometry()}, TGeographyTypes::tgeography(), Gen_tgeometry_to_tgeography)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TGeometryTypes::tgeometry()}, TGeographyTypes::tgeography(), Gen_tgeometry_to_tgeography)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tgeompoint", {TGeometryTypes::tgeometry()}, TgeompointType::tgeompoint(), Gen_tgeometry_to_tgeompoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TGeometryTypes::tgeometry()}, TgeompointType::tgeompoint(), Gen_tgeometry_to_tgeompoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tgeometry", {TgeompointType::tgeompoint()}, TGeometryTypes::tgeometry(), Gen_tgeompoint_to_tgeometry)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TgeompointType::tgeompoint()}, TGeometryTypes::tgeometry(), Gen_tgeompoint_to_tgeometry)); +} + +void RegisterGenerated_meos_geo_box_comp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("=", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_ge)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_ge)); + RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("le", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_ne)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_ne)); +} + +void RegisterGenerated_meos_pose_geopose_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("applyPose", {PoseTypes::tpose(), MobilityDuckGeometryType()}, TgeompointType::tgeompoint(), Gen_tpose_apply_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("yaw", {PoseTypes::tpose()}, TemporalTypes::tfloat(), Gen_tpose_yaw)); + RegisterSerializedScalarFunction(loader, ScalarFunction("pitch", {PoseTypes::tpose()}, TemporalTypes::tfloat(), Gen_tpose_pitch)); + RegisterSerializedScalarFunction(loader, ScalarFunction("roll", {PoseTypes::tpose()}, TemporalTypes::tfloat(), Gen_tpose_roll)); + RegisterSerializedScalarFunction(loader, ScalarFunction("speed", {PoseTypes::tpose()}, TemporalTypes::tfloat(), Gen_tpose_speed)); + RegisterSerializedScalarFunction(loader, ScalarFunction("angularSpeed", {PoseTypes::tpose()}, TemporalTypes::tfloat(), Gen_tpose_angular_speed)); +} + +void RegisterGenerated_meos_pointcloud_base_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("pcid", {TPcpointTypes::pcpoint()}, LogicalType::UINTEGER, Gen_pcpoint_get_pcid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("hash", {TPcpointTypes::pcpoint()}, LogicalType::UINTEGER, Gen_pcpoint_hash)); + RegisterSerializedScalarFunction(loader, ScalarFunction("pcid", {TPcpatchTypes::pcpatch()}, LogicalType::UINTEGER, Gen_pcpatch_get_pcid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("hash", {TPcpatchTypes::pcpatch()}, LogicalType::UINTEGER, Gen_pcpatch_hash)); + RegisterSerializedScalarFunction(loader, ScalarFunction("hashExtended", {TPcpointTypes::pcpoint(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_pcpoint_hash_extended)); + RegisterSerializedScalarFunction(loader, ScalarFunction("hashExtended", {TPcpatchTypes::pcpatch(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_pcpatch_hash_extended)); +} + +void RegisterGenerated_meos_cbuffer_conversion(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tfloat", {CbufferTypes::tcbuffer()}, TemporalTypes::tfloat(), Gen_tcbuffer_to_tfloat)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {CbufferTypes::tcbuffer()}, TemporalTypes::tfloat(), Gen_tcbuffer_to_tfloat)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tgeompoint", {CbufferTypes::tcbuffer()}, TgeompointType::tgeompoint(), Gen_tcbuffer_to_tgeompoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {CbufferTypes::tcbuffer()}, TgeompointType::tgeompoint(), Gen_tcbuffer_to_tgeompoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tcbuffer", {TGeometryTypes::tgeometry()}, CbufferTypes::tcbuffer(), Gen_tgeometry_to_tcbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TGeometryTypes::tgeometry()}, CbufferTypes::tcbuffer(), Gen_tgeometry_to_tcbuffer)); +} + +void RegisterGenerated_meos_npoint_base_inout(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {NpointTypes::npoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_npoint_as_ewkt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {NpointTypes::npoint()}, LogicalType::VARCHAR, Gen_npoint_as_ewkt_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {NpointTypes::npoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_npoint_as_text)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {NpointTypes::npoint()}, LogicalType::VARCHAR, Gen_npoint_as_text_d)); +} + +void RegisterGenerated_meos_posechain_base_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("numPoses", {PosechainTypes::posechain()}, LogicalType::INTEGER, Gen_posechain_num_poses)); + RegisterSerializedScalarFunction(loader, ScalarFunction("hash", {PosechainTypes::posechain()}, LogicalType::UINTEGER, Gen_posechain_hash)); + RegisterSerializedScalarFunction(loader, ScalarFunction("hashExtended", {PosechainTypes::posechain(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_posechain_hash_extended)); +} + +void RegisterGenerated_meos_quadbin_conversion(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tquadbin", {TemporalTypes::tbigint()}, QuadbinTypes::tquadbin(), Gen_tbigint_to_tquadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TemporalTypes::tbigint()}, QuadbinTypes::tquadbin(), Gen_tbigint_to_tquadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tbigint", {QuadbinTypes::tquadbin()}, TemporalTypes::tbigint(), Gen_tquadbin_to_tbigint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {QuadbinTypes::tquadbin()}, TemporalTypes::tbigint(), Gen_tquadbin_to_tbigint)); +} + +void RegisterGenerated_meos_json_comp_temp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, TemporalTypes::tbool(), Gen_teq_tjsonb_jsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, TemporalTypes::tbool(), Gen_tne_tjsonb_jsonb)); +} + +void RegisterGenerated_meos_geo_box_set(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("stboxIntersection", {StboxType::stbox(), StboxType::stbox()}, StboxType::stbox(), Gen_intersection_stbox_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("*", {StboxType::stbox(), StboxType::stbox()}, StboxType::stbox(), Gen_intersection_stbox_stbox)); +} + +void RegisterGenerated_meos_s2(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("ts2CellToToken", {S2cellTypes::ts2cell()}, TemporalTypes::ttext(), Gen_ts2cell_cell_to_token)); } } // namespace duckdb diff --git a/src/generated/generated_temporal_udfs_3.cpp b/src/generated/generated_temporal_udfs_3.cpp index d6c7fec8..abd233f6 100644 --- a/src/generated/generated_temporal_udfs_3.cpp +++ b/src/generated/generated_temporal_udfs_3.cpp @@ -353,7 +353,7 @@ static void Gen_adjacent_temporal_temporal(DataChunk &args, ExpressionState &, V Temporal *t2 = BlobToTemporal(in2); bool r = adjacent_temporal_temporal(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -365,7 +365,7 @@ static void Gen_adjacent_tnumber_tnumber(DataChunk &args, ExpressionState &, Vec Temporal *t2 = BlobToTemporal(in2); bool r = adjacent_tnumber_tnumber(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -377,7 +377,7 @@ static void Gen_contained_temporal_temporal(DataChunk &args, ExpressionState &, Temporal *t2 = BlobToTemporal(in2); bool r = contained_temporal_temporal(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -389,7 +389,7 @@ static void Gen_contained_tnumber_tnumber(DataChunk &args, ExpressionState &, Ve Temporal *t2 = BlobToTemporal(in2); bool r = contained_tnumber_tnumber(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -401,7 +401,7 @@ static void Gen_contains_temporal_temporal(DataChunk &args, ExpressionState &, V Temporal *t2 = BlobToTemporal(in2); bool r = contains_temporal_temporal(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -413,7 +413,7 @@ static void Gen_contains_tnumber_tnumber(DataChunk &args, ExpressionState &, Vec Temporal *t2 = BlobToTemporal(in2); bool r = contains_tnumber_tnumber(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -425,7 +425,7 @@ static void Gen_overlaps_temporal_temporal(DataChunk &args, ExpressionState &, V Temporal *t2 = BlobToTemporal(in2); bool r = overlaps_temporal_temporal(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -437,7 +437,7 @@ static void Gen_overlaps_tnumber_tnumber(DataChunk &args, ExpressionState &, Vec Temporal *t2 = BlobToTemporal(in2); bool r = overlaps_tnumber_tnumber(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -449,7 +449,7 @@ static void Gen_same_temporal_temporal(DataChunk &args, ExpressionState &, Vecto Temporal *t2 = BlobToTemporal(in2); bool r = same_temporal_temporal(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -461,7 +461,7 @@ static void Gen_same_tnumber_tnumber(DataChunk &args, ExpressionState &, Vector Temporal *t2 = BlobToTemporal(in2); bool r = same_tnumber_tnumber(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -473,7 +473,7 @@ static void Gen_adjacent_tbox_tnumber(DataChunk &args, ExpressionState &, Vector Temporal *t = BlobToTemporal(b); bool r = adjacent_tbox_tnumber(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -485,7 +485,7 @@ static void Gen_adjacent_tnumber_tbox(DataChunk &args, ExpressionState &, Vector TBox *bx = BlobToTbox(b); bool r = adjacent_tnumber_tbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -497,7 +497,7 @@ static void Gen_contained_tbox_tnumber(DataChunk &args, ExpressionState &, Vecto Temporal *t = BlobToTemporal(b); bool r = contained_tbox_tnumber(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -509,7 +509,7 @@ static void Gen_contained_tnumber_tbox(DataChunk &args, ExpressionState &, Vecto TBox *bx = BlobToTbox(b); bool r = contained_tnumber_tbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -521,7 +521,7 @@ static void Gen_contains_tbox_tnumber(DataChunk &args, ExpressionState &, Vector Temporal *t = BlobToTemporal(b); bool r = contains_tbox_tnumber(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -533,7 +533,7 @@ static void Gen_contains_tnumber_tbox(DataChunk &args, ExpressionState &, Vector TBox *bx = BlobToTbox(b); bool r = contains_tnumber_tbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -545,7 +545,7 @@ static void Gen_overlaps_tbox_tnumber(DataChunk &args, ExpressionState &, Vector Temporal *t = BlobToTemporal(b); bool r = overlaps_tbox_tnumber(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -557,7 +557,7 @@ static void Gen_overlaps_tnumber_tbox(DataChunk &args, ExpressionState &, Vector TBox *bx = BlobToTbox(b); bool r = overlaps_tnumber_tbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -569,7 +569,7 @@ static void Gen_same_tbox_tnumber(DataChunk &args, ExpressionState &, Vector &re Temporal *t = BlobToTemporal(b); bool r = same_tbox_tnumber(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -581,7 +581,7 @@ static void Gen_same_tnumber_tbox(DataChunk &args, ExpressionState &, Vector &re TBox *bx = BlobToTbox(b); bool r = same_tnumber_tbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -835,7 +835,7 @@ static void Gen_temporal_cmp(DataChunk &args, ExpressionState &, Vector &result) Temporal *t2 = BlobToTemporal(in2); int32_t r = temporal_cmp(t1, t2); free(t1); free(t2); - return r; + return (int32_t) r; }); } @@ -847,7 +847,7 @@ static void Gen_temporal_eq(DataChunk &args, ExpressionState &, Vector &result) Temporal *t2 = BlobToTemporal(in2); bool r = temporal_eq(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -859,7 +859,7 @@ static void Gen_temporal_ge(DataChunk &args, ExpressionState &, Vector &result) Temporal *t2 = BlobToTemporal(in2); bool r = temporal_ge(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -871,7 +871,7 @@ static void Gen_temporal_gt(DataChunk &args, ExpressionState &, Vector &result) Temporal *t2 = BlobToTemporal(in2); bool r = temporal_gt(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -883,7 +883,7 @@ static void Gen_temporal_le(DataChunk &args, ExpressionState &, Vector &result) Temporal *t2 = BlobToTemporal(in2); bool r = temporal_le(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -895,7 +895,7 @@ static void Gen_temporal_lt(DataChunk &args, ExpressionState &, Vector &result) Temporal *t2 = BlobToTemporal(in2); bool r = temporal_lt(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -907,7 +907,7 @@ static void Gen_temporal_ne(DataChunk &args, ExpressionState &, Vector &result) Temporal *t2 = BlobToTemporal(in2); bool r = temporal_ne(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -1630,7 +1630,7 @@ static void Gen_trgeometry_length(DataChunk &args, ExpressionState &, Vector &re Temporal *t = BlobToTemporal(in); double r = trgeometry_length(t); free(t); - return r; + return (double) r; }); } @@ -1824,136 +1824,148 @@ static void Gen_tstzspanset_to_datespanset(DataChunk &args, ExpressionState &, V } -// ===== @ingroup meos_geo_accessor ===== -static void Gen_tgeo_centroid(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_rgeo_analytics_similarity ===== +static void Gen_trgeometry_hausdorff_distance(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tgeo_centroid(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tpoint_angular_difference(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tpoint_angular_difference(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tpoint_azimuth(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tpoint_azimuth(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tpoint_cumulative_length(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tpoint_cumulative_length(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tpoint_get_x(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tpoint_get_x(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tpoint_get_y(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tpoint_get_y(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tpoint_get_z(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tpoint_get_z(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tpoint_is_simple(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Temporal *t = BlobToTemporal(in); - bool r = tpoint_is_simple(t); - free(t); - return r; + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2) { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + double r = trgeometry_hausdorff_distance(t1, t2); + free(t1); free(t2); + return (double) r; }); } -static void Gen_tpoint_length(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_trgeometry_frechet_distance(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Temporal *t = BlobToTemporal(in); - double r = tpoint_length(t); - free(t); - return r; + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2) { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + double r = trgeometry_frechet_distance(t1, t2); + free(t1); free(t2); + return (double) r; }); } -static void Gen_tpoint_speed(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_trgeometry_dyntimewarp_distance(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tpoint_speed(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2) { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + double r = trgeometry_dyntimewarp_distance(t1, t2); + free(t1); free(t2); + return (double) r; + }); +} + +struct PathBind_trgeometry_frechet_path : public TableFunctionData { string_t a, b; }; +struct PathState_trgeometry_frechet_path : public GlobalTableFunctionState { + idx_t idx = 0; + std::vector col0; + std::vector col1; +}; +static unique_ptr PathBindFn_trgeometry_frechet_path(ClientContext &, TableFunctionBindInput &input, + vector &return_types, vector &names) { + if (input.inputs.size() != 2 || input.inputs[0].IsNull() || input.inputs[1].IsNull()) + throw BinderException("frechetDistancePath: expects two non-null temporal arguments"); + auto bind = make_uniq(); + bind->a = StringValue::Get(input.inputs[0]); + bind->b = StringValue::Get(input.inputs[1]); + return_types = {LogicalType::INTEGER, LogicalType::INTEGER}; + names = {"i", "j"}; + return std::move(bind); +} +static unique_ptr PathInit_trgeometry_frechet_path(ClientContext &, TableFunctionInitInput &input) { + EnsureMeosThreadInitialized(); + auto &bind = input.bind_data->Cast(); + auto state = make_uniq(); + Temporal *t1 = BlobToTemporal(bind.a); + Temporal *t2 = BlobToTemporal(bind.b); + int count = 0; + Match *path = trgeometry_frechet_path(t1, t2, &count); + free(t1); free(t2); + if (path) { + state->col0.reserve(count); + state->col1.reserve(count); + for (int k = 0; k < count; k++) { + state->col0.push_back(path[k].i); + state->col1.push_back(path[k].j); + } + free(path); + } + return std::move(state); +} +static void PathExec_trgeometry_frechet_path(ClientContext &, TableFunctionInput &input, DataChunk &output) { + auto &state = input.global_state->Cast(); + idx_t total = state.col0.size(); + idx_t count = MinValue(STANDARD_VECTOR_SIZE, total - state.idx); + auto out0 = FlatVector::GetData(output.data[0]); + auto out1 = FlatVector::GetData(output.data[1]); + for (idx_t k = 0; k < count; k++) { + out0[k] = state.col0[state.idx + k]; + out1[k] = state.col1[state.idx + k]; + } + state.idx += count; + output.SetCardinality(count); +} + +struct PathBind_trgeometry_dyntimewarp_path : public TableFunctionData { string_t a, b; }; +struct PathState_trgeometry_dyntimewarp_path : public GlobalTableFunctionState { + idx_t idx = 0; + std::vector col0; + std::vector col1; +}; +static unique_ptr PathBindFn_trgeometry_dyntimewarp_path(ClientContext &, TableFunctionBindInput &input, + vector &return_types, vector &names) { + if (input.inputs.size() != 2 || input.inputs[0].IsNull() || input.inputs[1].IsNull()) + throw BinderException("dynTimeWarpPath: expects two non-null temporal arguments"); + auto bind = make_uniq(); + bind->a = StringValue::Get(input.inputs[0]); + bind->b = StringValue::Get(input.inputs[1]); + return_types = {LogicalType::INTEGER, LogicalType::INTEGER}; + names = {"i", "j"}; + return std::move(bind); +} +static unique_ptr PathInit_trgeometry_dyntimewarp_path(ClientContext &, TableFunctionInitInput &input) { + EnsureMeosThreadInitialized(); + auto &bind = input.bind_data->Cast(); + auto state = make_uniq(); + Temporal *t1 = BlobToTemporal(bind.a); + Temporal *t2 = BlobToTemporal(bind.b); + int count = 0; + Match *path = trgeometry_dyntimewarp_path(t1, t2, &count); + free(t1); free(t2); + if (path) { + state->col0.reserve(count); + state->col1.reserve(count); + for (int k = 0; k < count; k++) { + state->col0.push_back(path[k].i); + state->col1.push_back(path[k].j); + } + free(path); + } + return std::move(state); +} +static void PathExec_trgeometry_dyntimewarp_path(ClientContext &, TableFunctionInput &input, DataChunk &output) { + auto &state = input.global_state->Cast(); + idx_t total = state.col0.size(); + idx_t count = MinValue(STANDARD_VECTOR_SIZE, total - state.idx); + auto out0 = FlatVector::GetData(output.data[0]); + auto out1 = FlatVector::GetData(output.data[1]); + for (idx_t k = 0; k < count; k++) { + out0[k] = state.col0[state.idx + k]; + out1[k] = state.col1[state.idx + k]; + } + state.idx += count; + output.SetCardinality(count); } -// ===== @ingroup meos_geo_comp_temp ===== -static void Gen_teq_geo_tgeo(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in_g, string_t in_t, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in_t); - GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); - if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { - GSERIALIZED *gs_geog = geom_to_geog(gs); - free(gs); gs = gs_geog; - } - Temporal *r = teq_geo_tgeo(gs, t); - free(t); free(gs); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_teq_tgeo_geo(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_rgeo_dist ===== +static void Gen_tdistance_trgeometry_geo(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { @@ -1963,508 +1975,540 @@ static void Gen_teq_tgeo_geo(DataChunk &args, ExpressionState &, Vector &result) GSERIALIZED *gs_geog = geom_to_geog(gs); free(gs); gs = gs_geog; } - Temporal *r = teq_tgeo_geo(t, gs); + Temporal *r = tdistance_trgeometry_geo(t, gs); free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_geo_tgeo(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tdistance_trgeometry_tpoint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in_g, string_t in_t, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in_t); - GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); - if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { - GSERIALIZED *gs_geog = geom_to_geog(gs); - free(gs); gs = gs_geog; - } - Temporal *r = tne_geo_tgeo(gs, t); - free(t); free(gs); + [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + Temporal *r = tdistance_trgeometry_tpoint(t1, t2); + free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_tgeo_geo(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tdistance_trgeometry_trgeometry(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in_t); - GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); - if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { - GSERIALIZED *gs_geog = geom_to_geog(gs); - free(gs); gs = gs_geog; - } - Temporal *r = tne_tgeo_geo(t, gs); - free(t); free(gs); - return TemporalToBlobN(result, r, mask, idx); - }); -} - - -// ===== @ingroup meos_geo_conversion ===== -static void Gen_tgeogpoint_to_tgeography(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tgeogpoint_to_tgeography(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tgeography_to_tgeogpoint(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tgeography_to_tgeogpoint(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tgeography_to_tgeometry(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tgeography_to_tgeometry(t); - free(t); + [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + Temporal *r = tdistance_trgeometry_trgeometry(t1, t2); + free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tgeometry_to_tgeography(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_trgeometry_tpoint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tgeometry_to_tgeography(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2) { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + double r = nad_trgeometry_tpoint(t1, t2); + free(t1); free(t2); + return (double) r; }); } -static void Gen_tgeometry_to_tgeompoint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_trgeometry_trgeometry(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tgeometry_to_tgeompoint(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2) { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + double r = nad_trgeometry_trgeometry(t1, t2); + free(t1); free(t2); + return (double) r; }); } -static void Gen_tgeompoint_to_tgeometry(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_trgeometry_stbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tgeompoint_to_tgeometry(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> double { + Temporal *t = BlobToTemporal(a); + STBox *bx = BlobToStbox(b); + double r = nad_trgeometry_stbox(t, bx); + free(t); free(bx); + if (r == std::numeric_limits::max()) { mask.SetInvalid(idx); return double(); } + return (double) r; }); } -// ===== @ingroup meos_geo_box_comp ===== -static void Gen_stbox_eq(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_npoint_base_comp ===== +static void Gen_npoint_eq(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = stbox_eq(s1, s2); + Npoint *s1 = BlobToNpoint(a); + Npoint *s2 = BlobToNpoint(b); + bool r = npoint_eq(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_stbox_ge(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_npoint_ge(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = stbox_ge(s1, s2); + Npoint *s1 = BlobToNpoint(a); + Npoint *s2 = BlobToNpoint(b); + bool r = npoint_ge(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_stbox_gt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_npoint_gt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = stbox_gt(s1, s2); + Npoint *s1 = BlobToNpoint(a); + Npoint *s2 = BlobToNpoint(b); + bool r = npoint_gt(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_stbox_le(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_npoint_le(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = stbox_le(s1, s2); + Npoint *s1 = BlobToNpoint(a); + Npoint *s2 = BlobToNpoint(b); + bool r = npoint_le(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_stbox_lt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_npoint_lt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = stbox_lt(s1, s2); + Npoint *s1 = BlobToNpoint(a); + Npoint *s2 = BlobToNpoint(b); + bool r = npoint_lt(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_stbox_ne(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_npoint_ne(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = stbox_ne(s1, s2); + Npoint *s1 = BlobToNpoint(a); + Npoint *s2 = BlobToNpoint(b); + bool r = npoint_ne(s1, s2); free(s1); free(s2); return r; }); } - -// ===== @ingroup meos_pointcloud_box_topo ===== -static void Gen_contains_tpcbox_tpcbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_npoint_same(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = contains_tpcbox_tpcbox(s1, s2); + Npoint *s1 = BlobToNpoint(a); + Npoint *s2 = BlobToNpoint(b); + bool r = npoint_same(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_contained_tpcbox_tpcbox(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_quadbin_comp_temp ===== +static void Gen_teq_quadbin_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = contained_tpcbox_tpcbox(s1, s2); - free(s1); free(s2); - return r; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](int64_t a1, string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = teq_quadbin_tquadbin((uint64_t) a1, t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_overlaps_tpcbox_tpcbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_teq_tquadbin_quadbin(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = overlaps_tpcbox_tpcbox(s1, s2); - free(s1); free(s2); - return r; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int64_t a2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = teq_tquadbin_quadbin(t, (uint64_t) a2); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_same_tpcbox_tpcbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_teq_tquadbin_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = same_tpcbox_tpcbox(s1, s2); - free(s1); free(s2); - return r; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + Temporal *r = teq_tquadbin_tquadbin(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_adjacent_tpcbox_tpcbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tne_quadbin_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = adjacent_tpcbox_tpcbox(s1, s2); - free(s1); free(s2); - return r; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](int64_t a1, string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tne_quadbin_tquadbin((uint64_t) a1, t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } - -// ===== @ingroup meos_json_accessor ===== -static void Gen_tjsonb_end_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tne_tquadbin_quadbin(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int64_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Jsonb * r = tjsonb_end_value(t); + Temporal *r = tne_tquadbin_quadbin(t, (uint64_t) a2); free(t); - return JsonbToBlobN(result, r, mask, idx); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tjsonb_start_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tne_tquadbin_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + Temporal *r = tne_tquadbin_tquadbin(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); + }); +} + + +// ===== @ingroup meos_temporal_analytics_simplify ===== +static void Gen_temporal_simplify_dp(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + TernaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], args.data[2], result, args.size(), + [&](string_t in, double a2, bool a3, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Jsonb * r = tjsonb_start_value(t); + Temporal *r = temporal_simplify_dp(t, a2, a3); free(t); - return JsonbToBlobN(result, r, mask, idx); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tjsonb_value_at_timestamptz(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_temporal_simplify_max_dist(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - auto rc = args.size(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, rc, - [&](string_t in, timestamp_tz_t a2, ValidityMask &mask, idx_t idx) -> string_t { + TernaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], args.data[2], result, args.size(), + [&](string_t in, double a2, bool a3, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Jsonb *o = NULL; - bool ok = tjsonb_value_at_timestamptz(t, DuckDBToMeosTimestamp(a2).value, true, &o); + Temporal *r = temporal_simplify_max_dist(t, a2, a3); free(t); - if (! ok) { mask.SetInvalid(idx); return string_t(); } - return JsonbToBlob(result, o); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tjsonb_value_n(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_temporal_simplify_min_dist(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - auto rc = args.size(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, rc, - [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, double a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Jsonb *o = NULL; - bool ok = tjsonb_value_n(t, a2, &o); + Temporal *r = temporal_simplify_min_dist(t, a2); free(t); - if (! ok) { mask.SetInvalid(idx); return string_t(); } - return JsonbToBlob(result, o); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_h3_latlng ===== -static void Gen_tgeogpoint_to_th3index(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pointcloud_restrict ===== +static void Gen_tpcpoint_at_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tgeogpoint_to_th3index(t, a2); - free(t); + Pcpoint *a2p = BlobToPcpoint(a2); + Temporal *r = tpcpoint_at_value(t, a2p); + free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tgeompoint_to_th3index(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcpoint_minus_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tgeompoint_to_th3index(t, a2); - free(t); + Pcpoint *a2p = BlobToPcpoint(a2); + Temporal *r = tpcpoint_minus_value(t, a2p); + free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_th3index_to_tgeogpoint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcpatch_at_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = th3index_to_tgeogpoint(t); - free(t); + Pcpatch *a2p = BlobToPcpatch(a2); + Temporal *r = tpcpatch_at_value(t, a2p); + free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_th3index_to_tgeompoint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcpatch_minus_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = th3index_to_tgeompoint(t); - free(t); + Pcpatch *a2p = BlobToPcpatch(a2); + Temporal *r = tpcpatch_minus_value(t, a2p); + free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_cbuffer_base_inout ===== -static void Gen_cbuffer_as_ewkt(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_npoint_base_accessor ===== +static void Gen_npoint_position(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Npoint *v = BlobToNpoint(in); + double r = npoint_position(v); + free(v); + return r; + }); +} + +static void Gen_npoint_route(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Npoint *v = BlobToNpoint(in); + int64_t r = npoint_route(v); + free(v); + return r; + }); +} + +static void Gen_nsegment_end_position(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Nsegment *v = BlobToNsegment(in); + double r = nsegment_end_position(v); + free(v); + return r; + }); +} + +static void Gen_nsegment_route(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Nsegment *v = BlobToNsegment(in); + int64_t r = nsegment_route(v); + free(v); + return r; + }); +} + +static void Gen_nsegment_start_position(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Nsegment *v = BlobToNsegment(in); + double r = nsegment_start_position(v); + free(v); + return r; + }); +} + + +// ===== @ingroup meos_pose_base_inout ===== +static void Gen_pose_as_ewkt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, int32_t a2) { - Cbuffer *s = BlobToCbuffer(a); - char *r = cbuffer_as_ewkt(s, a2); + Pose *s = BlobToPose(a); + char *r = pose_as_ewkt(s, a2); free(s); return TakeCString(result, r); }); } -static void Gen_cbuffer_as_ewkt_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pose_as_ewkt_d(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t a) { - Cbuffer *s = BlobToCbuffer(a); - char *r = cbuffer_as_ewkt(s, 15); + Pose *s = BlobToPose(a); + char *r = pose_as_ewkt(s, 15); free(s); return TakeCString(result, r); }); } -static void Gen_cbuffer_as_text(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pose_as_text(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, int32_t a2) { - Cbuffer *s = BlobToCbuffer(a); - char *r = cbuffer_as_text(s, a2); + Pose *s = BlobToPose(a); + char *r = pose_as_text(s, a2); free(s); return TakeCString(result, r); }); } -static void Gen_cbuffer_as_text_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pose_as_text_d(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t a) { - Cbuffer *s = BlobToCbuffer(a); - char *r = cbuffer_as_text(s, 15); + Pose *s = BlobToPose(a); + char *r = pose_as_text(s, 15); free(s); return TakeCString(result, r); }); } -// ===== @ingroup meos_cbuffer_base_accessor ===== -static void Gen_cbuffer_hash(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pose_accessor ===== +static void Gen_tpose_end_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Cbuffer *v = BlobToCbuffer(in); - uint32_t r = cbuffer_hash(v); - free(v); - return r; + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Pose * r = tpose_end_value(t); + free(t); + return PoseToBlobN(result, r, mask, idx); }); } -static void Gen_cbuffer_radius(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_start_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Cbuffer *v = BlobToCbuffer(in); - double r = cbuffer_radius(v); - free(v); - return r; + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Pose * r = tpose_start_value(t); + free(t); + return PoseToBlobN(result, r, mask, idx); }); } -static void Gen_cbuffer_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_trajectory(DataChunk &args, ExpressionState &state, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, uint64_t a2) { - Cbuffer *s = BlobToCbuffer(in); - uint64_t r = cbuffer_hash_extended(s, a2); - free(s); - return r; + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + GSERIALIZED * r = tpose_trajectory(t); + free(t); + if (!r) { mask.SetInvalid(idx); return string_t(); } + string_t out = GSerializedToGeometry(r, state, result); + free(r); + return out; }); } -// ===== @ingroup meos_quadbin_conversion ===== -static void Gen_tbigint_to_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_json_conversion ===== +static void Gen_tjsonb_to_ttext(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tbigint_to_tquadbin(t); + Temporal *r = tjsonb_to_ttext(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tquadbin_to_tbigint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_ttext_to_tjsonb(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tquadbin_to_tbigint(t); + Temporal *r = ttext_to_tjsonb(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_json_restrict ===== -static void Gen_tjsonb_at_value(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_posechain_inout ===== +static void Gen_tposechain_as_geopose(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int32_t a2) { Temporal *t = BlobToTemporal(in); - Jsonb *a2p = BlobToJsonb(a2); - Temporal *r = tjsonb_at_value(t, a2p); - free(a2p); free(t); - return TemporalToBlobN(result, r, mask, idx); + char * r = tposechain_as_geopose(t, a2); + free(t); + return TakeCString(result, r); }); } -static void Gen_tjsonb_minus_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tposechain_as_geopose_d(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { Temporal *t = BlobToTemporal(in); - Jsonb *a2p = BlobToJsonb(a2); - Temporal *r = tjsonb_minus_value(t, a2p); - free(a2p); free(t); - return TemporalToBlobN(result, r, mask, idx); + char * r = tposechain_as_geopose(t, -1); + free(t); + return TakeCString(result, r); }); } -// ===== @ingroup meos_rgeo_spatialfuncs ===== -static void Gen_trgeometry_body_point_trajectory(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_box_accessor ===== +static void Gen_tbox_hash(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in_t); - GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); - if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { - GSERIALIZED *gs_geog = geom_to_geog(gs); - free(gs); gs = gs_geog; - } - Temporal *r = trgeometry_body_point_trajectory(t, gs); - free(t); free(gs); - return TemporalToBlobN(result, r, mask, idx); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + TBox *s = BlobToTbox(in); + uint32_t r = tbox_hash(s); + free(s); + return r; }); } - -// ===== @ingroup meos_posechain_base_srid ===== -static void Gen_posechain_srid(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tbox_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - PoseChain *v = BlobToPosechain(in); - int32_t r = posechain_srid(v); - free(v); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, uint64_t a2) { + TBox *s = BlobToTbox(in); + uint64_t r = tbox_hash_extended(s, a2); + free(s); return r; }); } + +// ===== @ingroup meos_npoint_set_accessor ===== +static void Gen_npointset_routes(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Set *s = BlobToSet(in); + Set *r = npointset_routes(s); + free(s); + return SetToBlobN(result, r, mask, idx); + }); +} + } // anonymous void RegisterGenerated_meos_temporal_bbox_topo(ExtensionLoader &loader) { @@ -3314,138 +3358,116 @@ void RegisterGenerated_meos_setspan_conversion(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("::", {SpansetTypes::tstzspanset()}, SpansetTypes::datespanset(), Gen_tstzspanset_to_datespanset)); } -void RegisterGenerated_meos_geo_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("centroid", {TgeompointType::tgeompoint()}, TgeompointType::tgeompoint(), Gen_tgeo_centroid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("centroid", {TgeogpointType::tgeogpoint()}, TgeogpointType::tgeogpoint(), Gen_tgeo_centroid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("centroid", {TGeometryTypes::tgeometry()}, TgeompointType::tgeompoint(), Gen_tgeo_centroid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("centroid", {TGeographyTypes::tgeography()}, TgeogpointType::tgeogpoint(), Gen_tgeo_centroid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("angularDifference", {TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tpoint_angular_difference)); - RegisterSerializedScalarFunction(loader, ScalarFunction("angularDifference", {TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tpoint_angular_difference)); - RegisterSerializedScalarFunction(loader, ScalarFunction("azimuth", {TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tpoint_azimuth)); - RegisterSerializedScalarFunction(loader, ScalarFunction("azimuth", {TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tpoint_azimuth)); - RegisterSerializedScalarFunction(loader, ScalarFunction("cumulativeLength", {TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tpoint_cumulative_length)); - RegisterSerializedScalarFunction(loader, ScalarFunction("cumulativeLength", {TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tpoint_cumulative_length)); - RegisterSerializedScalarFunction(loader, ScalarFunction("getX", {TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tpoint_get_x)); - RegisterSerializedScalarFunction(loader, ScalarFunction("getX", {TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tpoint_get_x)); - RegisterSerializedScalarFunction(loader, ScalarFunction("getY", {TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tpoint_get_y)); - RegisterSerializedScalarFunction(loader, ScalarFunction("getY", {TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tpoint_get_y)); - RegisterSerializedScalarFunction(loader, ScalarFunction("getZ", {TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tpoint_get_z)); - RegisterSerializedScalarFunction(loader, ScalarFunction("getZ", {TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tpoint_get_z)); - RegisterSerializedScalarFunction(loader, ScalarFunction("isSimple", {TgeompointType::tgeompoint()}, LogicalType::BOOLEAN, Gen_tpoint_is_simple)); - RegisterSerializedScalarFunction(loader, ScalarFunction("isSimple", {TgeogpointType::tgeogpoint()}, LogicalType::BOOLEAN, Gen_tpoint_is_simple)); - RegisterSerializedScalarFunction(loader, ScalarFunction("length", {TgeompointType::tgeompoint()}, LogicalType::DOUBLE, Gen_tpoint_length)); - RegisterSerializedScalarFunction(loader, ScalarFunction("length", {TgeogpointType::tgeogpoint()}, LogicalType::DOUBLE, Gen_tpoint_length)); - RegisterSerializedScalarFunction(loader, ScalarFunction("speed", {TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tpoint_speed)); - RegisterSerializedScalarFunction(loader, ScalarFunction("speed", {TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tpoint_speed)); -} - -void RegisterGenerated_meos_geo_comp_temp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {MobilityDuckGeometryType(), TgeompointType::tgeompoint()}, TemporalTypes::tbool(), Gen_teq_geo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {MobilityDuckGeometryType(), TgeogpointType::tgeogpoint()}, TemporalTypes::tbool(), Gen_teq_geo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {MobilityDuckGeometryType(), TGeometryTypes::tgeometry()}, TemporalTypes::tbool(), Gen_teq_geo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {MobilityDuckGeometryType(), TGeographyTypes::tgeography()}, TemporalTypes::tbool(), Gen_teq_geo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TgeompointType::tgeompoint(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_teq_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TgeogpointType::tgeogpoint(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_teq_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TGeometryTypes::tgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_teq_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TGeographyTypes::tgeography(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_teq_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {MobilityDuckGeometryType(), TgeompointType::tgeompoint()}, TemporalTypes::tbool(), Gen_tne_geo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {MobilityDuckGeometryType(), TgeogpointType::tgeogpoint()}, TemporalTypes::tbool(), Gen_tne_geo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {MobilityDuckGeometryType(), TGeometryTypes::tgeometry()}, TemporalTypes::tbool(), Gen_tne_geo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {MobilityDuckGeometryType(), TGeographyTypes::tgeography()}, TemporalTypes::tbool(), Gen_tne_geo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TgeompointType::tgeompoint(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_tne_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TgeogpointType::tgeogpoint(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_tne_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TGeometryTypes::tgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_tne_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TGeographyTypes::tgeography(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_tne_tgeo_geo)); -} - -void RegisterGenerated_meos_geo_conversion(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tgeometry", {TgeogpointType::tgeogpoint()}, TGeographyTypes::tgeography(), Gen_tgeogpoint_to_tgeography)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TgeogpointType::tgeogpoint()}, TGeographyTypes::tgeography(), Gen_tgeogpoint_to_tgeography)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tgeompoint", {TGeographyTypes::tgeography()}, TgeogpointType::tgeogpoint(), Gen_tgeography_to_tgeogpoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TGeographyTypes::tgeography()}, TgeogpointType::tgeogpoint(), Gen_tgeography_to_tgeogpoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tgeometry", {TGeographyTypes::tgeography()}, TGeometryTypes::tgeometry(), Gen_tgeography_to_tgeometry)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TGeographyTypes::tgeography()}, TGeometryTypes::tgeometry(), Gen_tgeography_to_tgeometry)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tgeography", {TGeometryTypes::tgeometry()}, TGeographyTypes::tgeography(), Gen_tgeometry_to_tgeography)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TGeometryTypes::tgeometry()}, TGeographyTypes::tgeography(), Gen_tgeometry_to_tgeography)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tgeompoint", {TGeometryTypes::tgeometry()}, TgeompointType::tgeompoint(), Gen_tgeometry_to_tgeompoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TGeometryTypes::tgeometry()}, TgeompointType::tgeompoint(), Gen_tgeometry_to_tgeompoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tgeometry", {TgeompointType::tgeompoint()}, TGeometryTypes::tgeometry(), Gen_tgeompoint_to_tgeometry)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TgeompointType::tgeompoint()}, TGeometryTypes::tgeometry(), Gen_tgeompoint_to_tgeometry)); -} - -void RegisterGenerated_meos_geo_box_comp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_eq)); - RegisterSerializedScalarFunction(loader, ScalarFunction("=", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_eq)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_ge)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_ge)); - RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_gt)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_gt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("le", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_le)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_le)); - RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_lt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_lt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_ne)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_stbox_ne)); -} - -void RegisterGenerated_meos_pointcloud_box_topo(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_contains_tpcbox_tpcbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_contains_tpcbox_tpcbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_contained_tpcbox_tpcbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_contained_tpcbox_tpcbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_overlaps_tpcbox_tpcbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_overlaps_tpcbox_tpcbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("same", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_same_tpcbox_tpcbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_same_tpcbox_tpcbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_adjacent_tpcbox_tpcbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_adjacent_tpcbox_tpcbox)); -} - -void RegisterGenerated_meos_json_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {TJsonbTypes::tjsonb()}, TJsonbTypes::jsonb(), Gen_tjsonb_end_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {TJsonbTypes::tjsonb()}, TJsonbTypes::jsonb(), Gen_tjsonb_start_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("valueAtTimestamp", {TJsonbTypes::tjsonb(), LogicalType::TIMESTAMP_TZ}, TJsonbTypes::jsonb(), Gen_tjsonb_value_at_timestamptz)); - RegisterSerializedScalarFunction(loader, ScalarFunction("valueN", {TJsonbTypes::tjsonb(), LogicalType::INTEGER}, TJsonbTypes::jsonb(), Gen_tjsonb_value_n)); -} - -void RegisterGenerated_meos_h3_latlng(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("th3index", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_tgeogpoint_to_th3index)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3index", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_tgeompoint_to_th3index)); - RegisterSerializedScalarFunction(loader, ScalarFunction("cellToPoint", {H3indexTypes::th3index()}, TgeogpointType::tgeogpoint(), Gen_th3index_to_tgeogpoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tgeompoint", {H3indexTypes::th3index()}, TgeompointType::tgeompoint(), Gen_th3index_to_tgeompoint)); -} - -void RegisterGenerated_meos_cbuffer_base_inout(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {CbufferTypes::cbuffer(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_cbuffer_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {CbufferTypes::cbuffer()}, LogicalType::VARCHAR, Gen_cbuffer_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {CbufferTypes::cbuffer(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_cbuffer_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {CbufferTypes::cbuffer()}, LogicalType::VARCHAR, Gen_cbuffer_as_text_d)); -} - -void RegisterGenerated_meos_cbuffer_base_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("hash", {CbufferTypes::cbuffer()}, LogicalType::UINTEGER, Gen_cbuffer_hash)); - RegisterSerializedScalarFunction(loader, ScalarFunction("radius", {CbufferTypes::cbuffer()}, LogicalType::DOUBLE, Gen_cbuffer_radius)); - RegisterSerializedScalarFunction(loader, ScalarFunction("hashExtended", {CbufferTypes::cbuffer(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_cbuffer_hash_extended)); -} - -void RegisterGenerated_meos_quadbin_conversion(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tquadbin", {TemporalTypes::tbigint()}, QuadbinTypes::tquadbin(), Gen_tbigint_to_tquadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TemporalTypes::tbigint()}, QuadbinTypes::tquadbin(), Gen_tbigint_to_tquadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tbigint", {QuadbinTypes::tquadbin()}, TemporalTypes::tbigint(), Gen_tquadbin_to_tbigint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {QuadbinTypes::tquadbin()}, TemporalTypes::tbigint(), Gen_tquadbin_to_tbigint)); -} - -void RegisterGenerated_meos_json_restrict(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("atValue", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, TJsonbTypes::tjsonb(), Gen_tjsonb_at_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minusValue", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, TJsonbTypes::tjsonb(), Gen_tjsonb_minus_value)); -} - -void RegisterGenerated_meos_rgeo_spatialfuncs(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("bodyPointTrajectory", {TrgeometryTypes::trgeometry(), MobilityDuckGeometryType()}, TgeompointType::tgeompoint(), Gen_trgeometry_body_point_trajectory)); -} - -void RegisterGenerated_meos_posechain_base_srid(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {PosechainTypes::posechain()}, LogicalType::INTEGER, Gen_posechain_srid)); +void RegisterGenerated_meos_rgeo_analytics_similarity(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("hausdorffDistance", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::DOUBLE, Gen_trgeometry_hausdorff_distance)); + RegisterSerializedScalarFunction(loader, ScalarFunction("frechetDistance", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::DOUBLE, Gen_trgeometry_frechet_distance)); + RegisterSerializedScalarFunction(loader, ScalarFunction("dynTimeWarpDistance", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::DOUBLE, Gen_trgeometry_dyntimewarp_distance)); + loader.RegisterFunction(TableFunction("frechetDistancePath", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, PathExec_trgeometry_frechet_path, PathBindFn_trgeometry_frechet_path, PathInit_trgeometry_frechet_path)); + loader.RegisterFunction(TableFunction("dynTimeWarpPath", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, PathExec_trgeometry_dyntimewarp_path, PathBindFn_trgeometry_dyntimewarp_path, PathInit_trgeometry_dyntimewarp_path)); +} + +void RegisterGenerated_meos_rgeo_dist(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TrgeometryTypes::trgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_trgeometry_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TrgeometryTypes::trgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_trgeometry_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, TemporalTypes::tfloat(), Gen_tdistance_trgeometry_tpoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, TemporalTypes::tfloat(), Gen_tdistance_trgeometry_tpoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, TemporalTypes::tfloat(), Gen_tdistance_trgeometry_trgeometry)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, TemporalTypes::tfloat(), Gen_tdistance_trgeometry_trgeometry)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::DOUBLE, Gen_nad_trgeometry_tpoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::DOUBLE, Gen_nad_trgeometry_tpoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::DOUBLE, Gen_nad_trgeometry_trgeometry)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::DOUBLE, Gen_nad_trgeometry_trgeometry)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TrgeometryTypes::trgeometry(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_trgeometry_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TrgeometryTypes::trgeometry(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_trgeometry_stbox)); +} + +void RegisterGenerated_meos_npoint_base_comp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("=", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_ge)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_ge)); + RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("le", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_ne)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_ne)); + RegisterSerializedScalarFunction(loader, ScalarFunction("same", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_same)); + RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_same)); +} + +void RegisterGenerated_meos_quadbin_comp_temp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {QuadbinTypes::quadbin(), QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_teq_quadbin_tquadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {QuadbinTypes::tquadbin(), QuadbinTypes::quadbin()}, TemporalTypes::tbool(), Gen_teq_tquadbin_quadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_teq_tquadbin_tquadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {QuadbinTypes::quadbin(), QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_tne_quadbin_tquadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {QuadbinTypes::tquadbin(), QuadbinTypes::quadbin()}, TemporalTypes::tbool(), Gen_tne_tquadbin_quadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_tne_tquadbin_tquadbin)); +} + +void RegisterGenerated_meos_temporal_analytics_simplify(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("douglasPeuckerSimplify", {TemporalTypes::tfloat(), LogicalType::DOUBLE, LogicalType::BOOLEAN}, TemporalTypes::tfloat(), Gen_temporal_simplify_dp)); + RegisterSerializedScalarFunction(loader, ScalarFunction("douglasPeuckerSimplify", {TgeompointType::tgeompoint(), LogicalType::DOUBLE, LogicalType::BOOLEAN}, TgeompointType::tgeompoint(), Gen_temporal_simplify_dp)); + RegisterSerializedScalarFunction(loader, ScalarFunction("douglasPeuckerSimplify", {TGeometryTypes::tgeometry(), LogicalType::DOUBLE, LogicalType::BOOLEAN}, TGeometryTypes::tgeometry(), Gen_temporal_simplify_dp)); + RegisterSerializedScalarFunction(loader, ScalarFunction("maxDistSimplify", {TemporalTypes::tfloat(), LogicalType::DOUBLE, LogicalType::BOOLEAN}, TemporalTypes::tfloat(), Gen_temporal_simplify_max_dist)); + RegisterSerializedScalarFunction(loader, ScalarFunction("maxDistSimplify", {TgeompointType::tgeompoint(), LogicalType::DOUBLE, LogicalType::BOOLEAN}, TgeompointType::tgeompoint(), Gen_temporal_simplify_max_dist)); + RegisterSerializedScalarFunction(loader, ScalarFunction("maxDistSimplify", {TGeometryTypes::tgeometry(), LogicalType::DOUBLE, LogicalType::BOOLEAN}, TGeometryTypes::tgeometry(), Gen_temporal_simplify_max_dist)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minDistSimplify", {TemporalTypes::tfloat(), LogicalType::DOUBLE}, TemporalTypes::tfloat(), Gen_temporal_simplify_min_dist)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minDistSimplify", {TgeompointType::tgeompoint(), LogicalType::DOUBLE}, TgeompointType::tgeompoint(), Gen_temporal_simplify_min_dist)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minDistSimplify", {TgeogpointType::tgeogpoint(), LogicalType::DOUBLE}, TgeompointType::tgeompoint(), Gen_temporal_simplify_min_dist)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minDistSimplify", {TGeometryTypes::tgeometry(), LogicalType::DOUBLE}, TGeometryTypes::tgeometry(), Gen_temporal_simplify_min_dist)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minDistSimplify", {TGeographyTypes::tgeography(), LogicalType::DOUBLE}, TGeometryTypes::tgeometry(), Gen_temporal_simplify_min_dist)); +} + +void RegisterGenerated_meos_pointcloud_restrict(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("atValue", {TPcpointTypes::tpcpoint(), TPcpointTypes::pcpoint()}, TPcpointTypes::tpcpoint(), Gen_tpcpoint_at_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minusValue", {TPcpointTypes::tpcpoint(), TPcpointTypes::pcpoint()}, TPcpointTypes::tpcpoint(), Gen_tpcpoint_minus_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("atValue", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::pcpatch()}, TPcpatchTypes::tpcpatch(), Gen_tpcpatch_at_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minusValue", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::pcpatch()}, TPcpatchTypes::tpcpatch(), Gen_tpcpatch_minus_value)); +} + +void RegisterGenerated_meos_npoint_base_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("getPosition", {NpointTypes::npoint()}, LogicalType::DOUBLE, Gen_npoint_position)); + RegisterSerializedScalarFunction(loader, ScalarFunction("route", {NpointTypes::npoint()}, LogicalType::BIGINT, Gen_npoint_route)); + RegisterSerializedScalarFunction(loader, ScalarFunction("endPosition", {NpointTypes::nsegment()}, LogicalType::DOUBLE, Gen_nsegment_end_position)); + RegisterSerializedScalarFunction(loader, ScalarFunction("route", {NpointTypes::nsegment()}, LogicalType::BIGINT, Gen_nsegment_route)); + RegisterSerializedScalarFunction(loader, ScalarFunction("startPosition", {NpointTypes::nsegment()}, LogicalType::DOUBLE, Gen_nsegment_start_position)); +} + +void RegisterGenerated_meos_pose_base_inout(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PoseTypes::pose(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_pose_as_ewkt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PoseTypes::pose()}, LogicalType::VARCHAR, Gen_pose_as_ewkt_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PoseTypes::pose(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_pose_as_text)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PoseTypes::pose()}, LogicalType::VARCHAR, Gen_pose_as_text_d)); +} + +void RegisterGenerated_meos_pose_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {PoseTypes::tpose()}, PoseTypes::pose(), Gen_tpose_end_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {PoseTypes::tpose()}, PoseTypes::pose(), Gen_tpose_start_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("trajectory", {PoseTypes::tpose()}, MobilityDuckGeometryType(), Gen_tpose_trajectory)); +} + +void RegisterGenerated_meos_json_conversion(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("ttext", {TJsonbTypes::tjsonb()}, TemporalTypes::ttext(), Gen_tjsonb_to_ttext)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TJsonbTypes::tjsonb()}, TemporalTypes::ttext(), Gen_tjsonb_to_ttext)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tjsonb", {TemporalTypes::ttext()}, TJsonbTypes::tjsonb(), Gen_ttext_to_tjsonb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TemporalTypes::ttext()}, TJsonbTypes::tjsonb(), Gen_ttext_to_tjsonb)); +} + +void RegisterGenerated_meos_posechain_inout(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("asGeoPose", {PosechainTypes::tposechain(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tposechain_as_geopose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asGeoPose", {PosechainTypes::tposechain()}, LogicalType::VARCHAR, Gen_tposechain_as_geopose_d)); +} + +void RegisterGenerated_meos_box_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("hash", {TboxType::tbox()}, LogicalType::UINTEGER, Gen_tbox_hash)); + RegisterSerializedScalarFunction(loader, ScalarFunction("hashExtended", {TboxType::tbox(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_tbox_hash_extended)); +} + +void RegisterGenerated_meos_npoint_set_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("routes", {SetTypes::npointset()}, SetTypes::npointset(), Gen_npointset_routes)); } } // namespace duckdb diff --git a/src/generated/generated_temporal_udfs_4.cpp b/src/generated/generated_temporal_udfs_4.cpp index 00e592bb..e9fab56c 100644 --- a/src/generated/generated_temporal_udfs_4.cpp +++ b/src/generated/generated_temporal_udfs_4.cpp @@ -352,7 +352,7 @@ static void Gen_tbool_end_value(DataChunk &args, ExpressionState &, Vector &resu Temporal *t = BlobToTemporal(in); bool r = tbool_end_value(t); free(t); - return r; + return (bool) r; }); } @@ -363,7 +363,7 @@ static void Gen_tbool_start_value(DataChunk &args, ExpressionState &, Vector &re Temporal *t = BlobToTemporal(in); bool r = tbool_start_value(t); free(t); - return r; + return (bool) r; }); } @@ -486,7 +486,7 @@ static void Gen_temporal_lower_inc(DataChunk &args, ExpressionState &, Vector &r Temporal *t = BlobToTemporal(in); bool r = temporal_lower_inc(t); free(t); - return r; + return (bool) r; }); } @@ -519,7 +519,7 @@ static void Gen_temporal_num_instants(DataChunk &args, ExpressionState &, Vector Temporal *t = BlobToTemporal(in); int32_t r = temporal_num_instants(t); free(t); - return r; + return (int32_t) r; }); } @@ -530,7 +530,7 @@ static void Gen_temporal_num_sequences(DataChunk &args, ExpressionState &, Vecto Temporal *t = BlobToTemporal(in); int32_t r = temporal_num_sequences(t); free(t); - return r; + return (int32_t) r; }); } @@ -541,7 +541,7 @@ static void Gen_temporal_num_timestamps(DataChunk &args, ExpressionState &, Vect Temporal *t = BlobToTemporal(in); int32_t r = temporal_num_timestamps(t); free(t); - return r; + return (int32_t) r; }); } @@ -618,7 +618,7 @@ static void Gen_temporal_upper_inc(DataChunk &args, ExpressionState &, Vector &r Temporal *t = BlobToTemporal(in); bool r = temporal_upper_inc(t); free(t); - return r; + return (bool) r; }); } @@ -629,7 +629,7 @@ static void Gen_tfloat_end_value(DataChunk &args, ExpressionState &, Vector &res Temporal *t = BlobToTemporal(in); double r = tfloat_end_value(t); free(t); - return r; + return (double) r; }); } @@ -640,7 +640,7 @@ static void Gen_tfloat_min_value(DataChunk &args, ExpressionState &, Vector &res Temporal *t = BlobToTemporal(in); double r = tfloat_min_value(t); free(t); - return r; + return (double) r; }); } @@ -651,7 +651,7 @@ static void Gen_tfloat_max_value(DataChunk &args, ExpressionState &, Vector &res Temporal *t = BlobToTemporal(in); double r = tfloat_max_value(t); free(t); - return r; + return (double) r; }); } @@ -662,7 +662,7 @@ static void Gen_tfloat_start_value(DataChunk &args, ExpressionState &, Vector &r Temporal *t = BlobToTemporal(in); double r = tfloat_start_value(t); free(t); - return r; + return (double) r; }); } @@ -686,7 +686,7 @@ static void Gen_tint_end_value(DataChunk &args, ExpressionState &, Vector &resul Temporal *t = BlobToTemporal(in); int32_t r = tint_end_value(t); free(t); - return r; + return (int32_t) r; }); } @@ -697,7 +697,7 @@ static void Gen_tbigint_end_value(DataChunk &args, ExpressionState &, Vector &re Temporal *t = BlobToTemporal(in); int64_t r = tbigint_end_value(t); free(t); - return r; + return (int64_t) r; }); } @@ -708,7 +708,7 @@ static void Gen_tint_max_value(DataChunk &args, ExpressionState &, Vector &resul Temporal *t = BlobToTemporal(in); int32_t r = tint_max_value(t); free(t); - return r; + return (int32_t) r; }); } @@ -719,7 +719,7 @@ static void Gen_tbigint_max_value(DataChunk &args, ExpressionState &, Vector &re Temporal *t = BlobToTemporal(in); int64_t r = tbigint_max_value(t); free(t); - return r; + return (int64_t) r; }); } @@ -730,7 +730,7 @@ static void Gen_tint_min_value(DataChunk &args, ExpressionState &, Vector &resul Temporal *t = BlobToTemporal(in); int32_t r = tint_min_value(t); free(t); - return r; + return (int32_t) r; }); } @@ -741,7 +741,7 @@ static void Gen_tbigint_min_value(DataChunk &args, ExpressionState &, Vector &re Temporal *t = BlobToTemporal(in); int64_t r = tbigint_min_value(t); free(t); - return r; + return (int64_t) r; }); } @@ -752,7 +752,7 @@ static void Gen_tint_start_value(DataChunk &args, ExpressionState &, Vector &res Temporal *t = BlobToTemporal(in); int32_t r = tint_start_value(t); free(t); - return r; + return (int32_t) r; }); } @@ -763,7 +763,7 @@ static void Gen_tbigint_start_value(DataChunk &args, ExpressionState &, Vector & Temporal *t = BlobToTemporal(in); int64_t r = tbigint_start_value(t); free(t); - return r; + return (int64_t) r; }); } @@ -800,7 +800,7 @@ static void Gen_tnumber_integral(DataChunk &args, ExpressionState &, Vector &res Temporal *t = BlobToTemporal(in); double r = tnumber_integral(t); free(t); - return r; + return (double) r; }); } @@ -811,7 +811,7 @@ static void Gen_tnumber_twavg(DataChunk &args, ExpressionState &, Vector &result Temporal *t = BlobToTemporal(in); double r = tnumber_twavg(t); free(t); - return r; + return (double) r; }); } @@ -2518,177 +2518,167 @@ static void Gen_ever_ne_tposechain_tposechain(DataChunk &args, ExpressionState & } -// ===== @ingroup meos_pose_dist ===== -static void Gen_tdistance_tpose_pose(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_temporal_bool ===== +static void Gen_tand_bool_tbool(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](bool a1, string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Pose *a2p = BlobToPose(a2); - Temporal *r = tdistance_tpose_pose(t, a2p); - free(a2p); free(t); + Temporal *r = tand_bool_tbool(a1, t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tdistance_tpose_geo(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tand_tbool_bool(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in_t); - GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); - if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { - GSERIALIZED *gs_geog = geom_to_geog(gs); - free(gs); gs = gs_geog; - } - Temporal *r = tdistance_tpose_geo(t, gs); - free(t); free(gs); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, bool a2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tand_tbool_bool(t, a2); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tdistance_tpose_tpose(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tand_tbool_tbool(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - Temporal *r = tdistance_tpose_tpose(t1, t2); + Temporal *r = tand_tbool_tbool(t1, t2); free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_nad_tpose_pose(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tnot_tbool(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2) { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Pose *a2p = BlobToPose(a2); - double r = nad_tpose_pose(t, a2p); - free(a2p); free(t); - return r; + Temporal *r = tnot_tbool(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_nad_tpose_tpose(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tor_bool_tbool(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2) { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - double r = nad_tpose_tpose(t1, t2); - free(t1); free(t2); - return r; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](bool a1, string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tor_bool_tbool(a1, t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_nai_tpose_pose(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tor_tbool_bool(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, bool a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Pose *a2p = BlobToPose(a2); - Temporal *r = (Temporal *) nai_tpose_pose(t, a2p); - free(a2p); free(t); + Temporal *r = tor_tbool_bool(t, a2); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_nad_tpose_stbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tor_tbool_tbool(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> double { - Temporal *t = BlobToTemporal(a); - STBox *bx = BlobToStbox(b); - double r = nad_tpose_stbox(t, bx); - free(t); free(bx); - if (r == std::numeric_limits::max()) { mask.SetInvalid(idx); return double(); } - return r; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + Temporal *r = tor_tbool_tbool(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_pose_base_comp ===== -static void Gen_pose_eq(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_cbuffer_base_comp ===== +static void Gen_cbuffer_eq(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - Pose *s1 = BlobToPose(a); - Pose *s2 = BlobToPose(b); - bool r = pose_eq(s1, s2); + Cbuffer *s1 = BlobToCbuffer(a); + Cbuffer *s2 = BlobToCbuffer(b); + bool r = cbuffer_eq(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_pose_ge(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_ge(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - Pose *s1 = BlobToPose(a); - Pose *s2 = BlobToPose(b); - bool r = pose_ge(s1, s2); + Cbuffer *s1 = BlobToCbuffer(a); + Cbuffer *s2 = BlobToCbuffer(b); + bool r = cbuffer_ge(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_pose_gt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_gt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - Pose *s1 = BlobToPose(a); - Pose *s2 = BlobToPose(b); - bool r = pose_gt(s1, s2); + Cbuffer *s1 = BlobToCbuffer(a); + Cbuffer *s2 = BlobToCbuffer(b); + bool r = cbuffer_gt(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_pose_le(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_le(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - Pose *s1 = BlobToPose(a); - Pose *s2 = BlobToPose(b); - bool r = pose_le(s1, s2); + Cbuffer *s1 = BlobToCbuffer(a); + Cbuffer *s2 = BlobToCbuffer(b); + bool r = cbuffer_le(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_pose_lt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_lt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - Pose *s1 = BlobToPose(a); - Pose *s2 = BlobToPose(b); - bool r = pose_lt(s1, s2); + Cbuffer *s1 = BlobToCbuffer(a); + Cbuffer *s2 = BlobToCbuffer(b); + bool r = cbuffer_lt(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_pose_ne(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_ne(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - Pose *s1 = BlobToPose(a); - Pose *s2 = BlobToPose(b); - bool r = pose_ne(s1, s2); + Cbuffer *s1 = BlobToCbuffer(a); + Cbuffer *s2 = BlobToCbuffer(b); + bool r = cbuffer_ne(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_pose_same(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_same(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - Pose *s1 = BlobToPose(a); - Pose *s2 = BlobToPose(b); - bool r = pose_same(s1, s2); + Cbuffer *s1 = BlobToCbuffer(a); + Cbuffer *s2 = BlobToCbuffer(b); + bool r = cbuffer_same(s1, s2); free(s1); free(s2); return r; }); @@ -2764,105 +2754,101 @@ static void Gen_h3_uncompact_cells(DataChunk &args, ExpressionState &, Vector &r } -// ===== @ingroup meos_box_bbox_topo ===== -static void Gen_adjacent_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = adjacent_tbox_tbox(s1, s2); - free(s1); free(s2); - return r; - }); -} - -static void Gen_contained_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_cbuffer_restrict ===== +static void Gen_tcbuffer_at_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = contained_tbox_tbox(s1, s2); - free(s1); free(s2); - return r; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Cbuffer *a2p = BlobToCbuffer(a2); + Temporal *r = tcbuffer_at_cbuffer(t, a2p); + free(a2p); free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_contains_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tcbuffer_at_geom(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = contains_tbox_tbox(s1, s2); - free(s1); free(s2); - return r; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in_t); + GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); + if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { + GSERIALIZED *gs_geog = geom_to_geog(gs); + free(gs); gs = gs_geog; + } + Temporal *r = tcbuffer_at_geom(t, gs); + free(t); free(gs); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_overlaps_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tcbuffer_minus_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = overlaps_tbox_tbox(s1, s2); - free(s1); free(s2); - return r; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Cbuffer *a2p = BlobToCbuffer(a2); + Temporal *r = tcbuffer_minus_cbuffer(t, a2p); + free(a2p); free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_same_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tcbuffer_minus_geom(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = same_tbox_tbox(s1, s2); - free(s1); free(s2); - return r; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in_t); + GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); + if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { + GSERIALIZED *gs_geog = geom_to_geog(gs); + free(gs); gs = gs_geog; + } + Temporal *r = tcbuffer_minus_geom(t, gs); + free(t); free(gs); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_s2cell_accessor ===== -static void Gen_ts2cell_start_value(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_quadbin_accessor ===== +static void Gen_tquadbin_start_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t in) -> int64_t { Temporal *t = BlobToTemporal(in); - int64_t r = (int64_t) ts2cell_start_value(t); + int64_t r = (int64_t) tquadbin_start_value(t); free(t); return r; }); } -static void Gen_ts2cell_end_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tquadbin_end_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t in) -> int64_t { Temporal *t = BlobToTemporal(in); - int64_t r = (int64_t) ts2cell_end_value(t); + int64_t r = (int64_t) tquadbin_end_value(t); free(t); return r; }); } -static void Gen_ts2cell_value_n(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tquadbin_value_n(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> int64_t { Temporal *t = BlobToTemporal(in); uint64_t v; - bool ok = ts2cell_value_n(t, a2, &v); + bool ok = tquadbin_value_n(t, a2, &v); free(t); if (!ok) { mask.SetInvalid(idx); return int64_t(); } return (int64_t) v; }); } -static void Gen_ts2cell_values(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tquadbin_values(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); auto &in_vec = args.data[0]; idx_t row_count = args.size(); @@ -2875,7 +2861,7 @@ static void Gen_ts2cell_values(DataChunk &args, ExpressionState &, Vector &resul string_t blob = FlatVector::GetData(in_vec)[i]; Temporal *in = BlobToTemporal(blob); int count = 0; - uint64_t * arr = ts2cell_values(in, &count); + uint64_t * arr = tquadbin_values(in, &count); free(in); int n = (arr && count > 0) ? count : 0; ListVector::Reserve(result, off + n); @@ -2894,171 +2880,221 @@ static void Gen_ts2cell_values(DataChunk &args, ExpressionState &, Vector &resul } -// ===== @ingroup meos_pointcloud_accessor ===== -static void Gen_tpcpoint_start_value(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_h3_traversal ===== +static void Gen_th3index_grid_distance(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Pcpoint * r = tpcpoint_start_value(t); - free(t); - return PcpointToBlobN(result, r, mask, idx); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + Temporal *r = th3index_grid_distance(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpcpoint_end_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_cell_to_local_ij(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Pcpoint * r = tpcpoint_end_value(t); - free(t); - return PcpointToBlobN(result, r, mask, idx); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + Temporal *r = th3index_cell_to_local_ij(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpcpatch_start_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_local_ij_to_cell(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Pcpatch * r = tpcpatch_start_value(t); - free(t); - return PcpatchToBlobN(result, r, mask, idx); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + Temporal *r = th3index_local_ij_to_cell(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpcpatch_end_value(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_posechain_base_inout ===== +static void Gen_posechain_as_text(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Pcpatch * r = tpcpatch_end_value(t); - free(t); - return PcpatchToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, int32_t a2) { + PoseChain *s = BlobToPosechain(a); + char *r = posechain_as_text(s, a2); + free(s); + return TakeCString(result, r); }); } +static void Gen_posechain_as_text_d(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t a) { + PoseChain *s = BlobToPosechain(a); + char *r = posechain_as_text(s, 15); + free(s); + return TakeCString(result, r); + }); +} -// ===== @ingroup meos_geo_set_srid ===== -static void Gen_spatialset_set_srid(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_as_ewkt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t a, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { - Set *s = BlobToSet(a); - Set *r = spatialset_set_srid(s, a2); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, int32_t a2) { + PoseChain *s = BlobToPosechain(a); + char *r = posechain_as_ewkt(s, a2); free(s); - return SetToBlobN(result, r, mask, idx); + return TakeCString(result, r); }); } -static void Gen_spatialset_transform(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_as_ewkt_d(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t a, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { - Set *s = BlobToSet(a); - Set *r = spatialset_transform(s, a2); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t a) { + PoseChain *s = BlobToPosechain(a); + char *r = posechain_as_ewkt(s, 15); free(s); - return SetToBlobN(result, r, mask, idx); + return TakeCString(result, r); }); } -// ===== @ingroup meos_h3_inspection ===== -static void Gen_th3index_get_base_cell_number(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_cbuffer_base_accessor ===== +static void Gen_cbuffer_hash(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = th3index_get_base_cell_number(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Cbuffer *v = BlobToCbuffer(in); + uint32_t r = cbuffer_hash(v); + free(v); + return r; + }); +} + +static void Gen_cbuffer_radius(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Cbuffer *v = BlobToCbuffer(in); + double r = cbuffer_radius(v); + free(v); + return r; + }); +} + +static void Gen_cbuffer_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, uint64_t a2) { + Cbuffer *s = BlobToCbuffer(in); + uint64_t r = cbuffer_hash_extended(s, a2); + free(s); + return r; }); } -static void Gen_th3index_is_res_class_iii(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_npoint_conversion ===== +static void Gen_tgeompoint_to_tnpoint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = th3index_is_res_class_iii(t); + Temporal *r = tgeompoint_to_tnpoint(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_th3index_is_pentagon(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tnpoint_to_tgeompoint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = th3index_is_pentagon(t); + Temporal *r = tnpoint_to_tgeompoint(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_s2cell_conversion ===== -static void Gen_tbigint_to_ts2cell(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_json_restrict ===== +static void Gen_tjsonb_at_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tbigint_to_ts2cell(t); - free(t); + Jsonb *a2p = BlobToJsonb(a2); + Temporal *r = tjsonb_at_value(t, a2p); + free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_ts2cell_to_tbigint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tjsonb_minus_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = ts2cell_to_tbigint(t); - free(t); + Jsonb *a2p = BlobToJsonb(a2); + Temporal *r = tjsonb_minus_value(t, a2p); + free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_internal_temporal_inout ===== -static void Gen_temporal_from_mfjson(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_npoint_base_srid ===== +static void Gen_npoint_srid(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - MeosType temptype = TemporalHelpers::GetTemptypeFromAlias(result.GetType().GetAlias().c_str()); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *r = temporal_from_mfjson(in.GetString().c_str(), temptype); - return TemporalToBlobN(result, r, mask, idx); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Npoint *v = BlobToNpoint(in); + int32_t r = npoint_srid(v); + free(v); + return r; + }); +} + +static void Gen_nsegment_srid(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Nsegment *v = BlobToNsegment(in); + int32_t r = nsegment_srid(v); + free(v); + return r; }); } -// ===== @ingroup meos_geo_box_set ===== -static void Gen_intersection_stbox_stbox(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_cbuffer_base_srid ===== +static void Gen_cbuffer_srid(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> string_t { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - STBox *r = intersection_stbox_stbox(s1, s2); - free(s1); free(s2); - if (!r) { mask.SetInvalid(idx); return string_t(); } - return StboxToBlob(result, r); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Cbuffer *v = BlobToCbuffer(in); + int32_t r = cbuffer_srid(v); + free(v); + return r; }); } -// ===== @ingroup meos_pointcloud_conversion ===== -static void Gen_tpcpatch_to_tgeometry(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pose_base_srid ===== +static void Gen_pose_srid(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tpcpatch_to_tgeometry(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Pose *v = BlobToPose(in); + int32_t r = pose_srid(v); + free(v); + return r; }); } @@ -3777,37 +3813,38 @@ void RegisterGenerated_meos_posechain_comp_ever(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_ever_ne_tposechain_tposechain)); } -void RegisterGenerated_meos_pose_dist(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {PoseTypes::tpose(), PoseTypes::pose()}, TemporalTypes::tfloat(), Gen_tdistance_tpose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {PoseTypes::tpose(), PoseTypes::pose()}, TemporalTypes::tfloat(), Gen_tdistance_tpose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {PoseTypes::tpose(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tpose_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {PoseTypes::tpose(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tpose_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {PoseTypes::tpose(), PoseTypes::tpose()}, TemporalTypes::tfloat(), Gen_tdistance_tpose_tpose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {PoseTypes::tpose(), PoseTypes::tpose()}, TemporalTypes::tfloat(), Gen_tdistance_tpose_tpose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::DOUBLE, Gen_nad_tpose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::DOUBLE, Gen_nad_tpose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::DOUBLE, Gen_nad_tpose_tpose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::DOUBLE, Gen_nad_tpose_tpose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachInstant", {PoseTypes::tpose(), PoseTypes::pose()}, PoseTypes::tpose(), Gen_nai_tpose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {PoseTypes::tpose(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tpose_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {PoseTypes::tpose(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tpose_stbox)); -} - -void RegisterGenerated_meos_pose_base_comp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_eq)); - RegisterSerializedScalarFunction(loader, ScalarFunction("=", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_eq)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_ge)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_ge)); - RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_gt)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_gt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("le", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_le)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_le)); - RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_lt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_lt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_ne)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_ne)); - RegisterSerializedScalarFunction(loader, ScalarFunction("same", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_same)); - RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_same)); +void RegisterGenerated_meos_temporal_bool(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tAnd", {LogicalType::BOOLEAN, TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tand_bool_tbool)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&", {LogicalType::BOOLEAN, TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tand_bool_tbool)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tAnd", {TemporalTypes::tbool(), LogicalType::BOOLEAN}, TemporalTypes::tbool(), Gen_tand_tbool_bool)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&", {TemporalTypes::tbool(), LogicalType::BOOLEAN}, TemporalTypes::tbool(), Gen_tand_tbool_bool)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tAnd", {TemporalTypes::tbool(), TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tand_tbool_tbool)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&", {TemporalTypes::tbool(), TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tand_tbool_tbool)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNot", {TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tnot_tbool)); + RegisterSerializedScalarFunction(loader, ScalarFunction("~", {TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tnot_tbool)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tOr", {LogicalType::BOOLEAN, TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tor_bool_tbool)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|", {LogicalType::BOOLEAN, TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tor_bool_tbool)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tOr", {TemporalTypes::tbool(), LogicalType::BOOLEAN}, TemporalTypes::tbool(), Gen_tor_tbool_bool)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|", {TemporalTypes::tbool(), LogicalType::BOOLEAN}, TemporalTypes::tbool(), Gen_tor_tbool_bool)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tOr", {TemporalTypes::tbool(), TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tor_tbool_tbool)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|", {TemporalTypes::tbool(), TemporalTypes::tbool()}, TemporalTypes::tbool(), Gen_tor_tbool_tbool)); +} + +void RegisterGenerated_meos_cbuffer_base_comp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("=", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_ge)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_ge)); + RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("le", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_ne)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_ne)); + RegisterSerializedScalarFunction(loader, ScalarFunction("same", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_same)); + RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {CbufferTypes::cbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_cbuffer_same)); } void RegisterGenerated_meos_h3_hierarchy(ExtensionLoader &loader) { @@ -3819,70 +3856,64 @@ void RegisterGenerated_meos_h3_hierarchy(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("h3UncompactCells", {SetTypes::intset(), LogicalType::INTEGER}, SetTypes::intset(), Gen_h3_uncompact_cells)); } -void RegisterGenerated_meos_box_bbox_topo(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_adjacent_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_adjacent_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_contained_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_contained_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_contains_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_contains_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overlaps_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overlaps_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("same", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_same_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_same_tbox_tbox)); +void RegisterGenerated_meos_cbuffer_restrict(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("atValue", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, CbufferTypes::tcbuffer(), Gen_tcbuffer_at_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("atGeometry", {CbufferTypes::tcbuffer(), MobilityDuckGeometryType()}, CbufferTypes::tcbuffer(), Gen_tcbuffer_at_geom)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minusValue", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, CbufferTypes::tcbuffer(), Gen_tcbuffer_minus_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minusGeometry", {CbufferTypes::tcbuffer(), MobilityDuckGeometryType()}, CbufferTypes::tcbuffer(), Gen_tcbuffer_minus_geom)); +} + +void RegisterGenerated_meos_quadbin_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {QuadbinTypes::tquadbin()}, QuadbinTypes::quadbin(), Gen_tquadbin_start_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {QuadbinTypes::tquadbin()}, QuadbinTypes::quadbin(), Gen_tquadbin_end_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("valueN", {QuadbinTypes::tquadbin(), LogicalType::INTEGER}, QuadbinTypes::quadbin(), Gen_tquadbin_value_n)); + RegisterSerializedScalarFunction(loader, ScalarFunction("getValues", {QuadbinTypes::tquadbin()}, LogicalType::LIST(QuadbinTypes::quadbin()), Gen_tquadbin_values)); } -void RegisterGenerated_meos_s2cell_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {S2cellTypes::ts2cell()}, S2cellTypes::s2cell(), Gen_ts2cell_start_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {S2cellTypes::ts2cell()}, S2cellTypes::s2cell(), Gen_ts2cell_end_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("valueN", {S2cellTypes::ts2cell(), LogicalType::INTEGER}, S2cellTypes::s2cell(), Gen_ts2cell_value_n)); - RegisterSerializedScalarFunction(loader, ScalarFunction("getValues", {S2cellTypes::ts2cell()}, LogicalType::LIST(S2cellTypes::s2cell()), Gen_ts2cell_values)); +void RegisterGenerated_meos_h3_traversal(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("th3GridDistance", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbigint(), Gen_th3index_grid_distance)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbigint(), Gen_th3index_grid_distance)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbigint(), Gen_th3index_grid_distance)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellToLocalIj", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TgeompointType::tgeompoint(), Gen_th3index_cell_to_local_ij)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3LocalIjToCell", {H3indexTypes::th3index(), H3indexTypes::th3index()}, H3indexTypes::th3index(), Gen_th3index_local_ij_to_cell)); } -void RegisterGenerated_meos_pointcloud_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {TPcpointTypes::tpcpoint()}, TPcpointTypes::pcpoint(), Gen_tpcpoint_start_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {TPcpointTypes::tpcpoint()}, TPcpointTypes::pcpoint(), Gen_tpcpoint_end_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {TPcpatchTypes::tpcpatch()}, TPcpatchTypes::pcpatch(), Gen_tpcpatch_start_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {TPcpatchTypes::tpcpatch()}, TPcpatchTypes::pcpatch(), Gen_tpcpatch_end_value)); +void RegisterGenerated_meos_posechain_base_inout(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PosechainTypes::posechain(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_posechain_as_text)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PosechainTypes::posechain()}, LogicalType::VARCHAR, Gen_posechain_as_text_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PosechainTypes::posechain(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_posechain_as_ewkt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PosechainTypes::posechain()}, LogicalType::VARCHAR, Gen_posechain_as_ewkt_d)); } -void RegisterGenerated_meos_geo_set_srid(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {SetTypes::cbufferset(), LogicalType::INTEGER}, SetTypes::cbufferset(), Gen_spatialset_set_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {SetTypes::poseset(), LogicalType::INTEGER}, SetTypes::poseset(), Gen_spatialset_set_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {SetTypes::posechainset(), LogicalType::INTEGER}, SetTypes::posechainset(), Gen_spatialset_set_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {SetTypes::cbufferset(), LogicalType::INTEGER}, SetTypes::cbufferset(), Gen_spatialset_transform)); - RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {SetTypes::poseset(), LogicalType::INTEGER}, SetTypes::poseset(), Gen_spatialset_transform)); - RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {SetTypes::posechainset(), LogicalType::INTEGER}, SetTypes::posechainset(), Gen_spatialset_transform)); +void RegisterGenerated_meos_cbuffer_base_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("hash", {CbufferTypes::cbuffer()}, LogicalType::UINTEGER, Gen_cbuffer_hash)); + RegisterSerializedScalarFunction(loader, ScalarFunction("radius", {CbufferTypes::cbuffer()}, LogicalType::DOUBLE, Gen_cbuffer_radius)); + RegisterSerializedScalarFunction(loader, ScalarFunction("hashExtended", {CbufferTypes::cbuffer(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_cbuffer_hash_extended)); } -void RegisterGenerated_meos_h3_inspection(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("th3GetBaseCellNumber", {H3indexTypes::th3index()}, TemporalTypes::tint(), Gen_th3index_get_base_cell_number)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3IsResClassIii", {H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_th3index_is_res_class_iii)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3IsPentagon", {H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_th3index_is_pentagon)); +void RegisterGenerated_meos_npoint_conversion(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tnpoint", {TgeompointType::tgeompoint()}, NpointTypes::tnpoint(), Gen_tgeompoint_to_tnpoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TgeompointType::tgeompoint()}, NpointTypes::tnpoint(), Gen_tgeompoint_to_tnpoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tgeompoint", {NpointTypes::tnpoint()}, TgeompointType::tgeompoint(), Gen_tnpoint_to_tgeompoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {NpointTypes::tnpoint()}, TgeompointType::tgeompoint(), Gen_tnpoint_to_tgeompoint)); } -void RegisterGenerated_meos_s2cell_conversion(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("ts2cell", {TemporalTypes::tbigint()}, S2cellTypes::ts2cell(), Gen_tbigint_to_ts2cell)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TemporalTypes::tbigint()}, S2cellTypes::ts2cell(), Gen_tbigint_to_ts2cell)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tbigint", {S2cellTypes::ts2cell()}, TemporalTypes::tbigint(), Gen_ts2cell_to_tbigint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {S2cellTypes::ts2cell()}, TemporalTypes::tbigint(), Gen_ts2cell_to_tbigint)); +void RegisterGenerated_meos_json_restrict(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("atValue", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, TJsonbTypes::tjsonb(), Gen_tjsonb_at_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minusValue", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, TJsonbTypes::tjsonb(), Gen_tjsonb_minus_value)); } -void RegisterGenerated_meos_internal_temporal_inout(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tboolFromMFJSON", {LogicalType::VARCHAR}, TemporalTypes::tbool(), Gen_temporal_from_mfjson)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tintFromMFJSON", {LogicalType::VARCHAR}, TemporalTypes::tint(), Gen_temporal_from_mfjson)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tbigintFromMFJSON", {LogicalType::VARCHAR}, TemporalTypes::tbigint(), Gen_temporal_from_mfjson)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tfloatFromMFJSON", {LogicalType::VARCHAR}, TemporalTypes::tfloat(), Gen_temporal_from_mfjson)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ttextFromMFJSON", {LogicalType::VARCHAR}, TemporalTypes::ttext(), Gen_temporal_from_mfjson)); +void RegisterGenerated_meos_npoint_base_srid(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {NpointTypes::npoint()}, LogicalType::INTEGER, Gen_npoint_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {NpointTypes::nsegment()}, LogicalType::INTEGER, Gen_nsegment_srid)); } -void RegisterGenerated_meos_geo_box_set(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("stboxIntersection", {StboxType::stbox(), StboxType::stbox()}, StboxType::stbox(), Gen_intersection_stbox_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("*", {StboxType::stbox(), StboxType::stbox()}, StboxType::stbox(), Gen_intersection_stbox_stbox)); +void RegisterGenerated_meos_cbuffer_base_srid(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {CbufferTypes::cbuffer()}, LogicalType::INTEGER, Gen_cbuffer_srid)); } -void RegisterGenerated_meos_pointcloud_conversion(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tgeometry", {TPcpatchTypes::tpcpatch()}, TGeometryTypes::tgeometry(), Gen_tpcpatch_to_tgeometry)); +void RegisterGenerated_meos_pose_base_srid(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {PoseTypes::pose()}, LogicalType::INTEGER, Gen_pose_srid)); } } // namespace duckdb diff --git a/src/generated/generated_temporal_udfs_5.cpp b/src/generated/generated_temporal_udfs_5.cpp index 2c3eb96f..b4511de2 100644 --- a/src/generated/generated_temporal_udfs_5.cpp +++ b/src/generated/generated_temporal_udfs_5.cpp @@ -3156,193 +3156,158 @@ static void Gen_ever_ne_tpose_tpose(DataChunk &args, ExpressionState &, Vector & } -// ===== @ingroup meos_posechain_base_comp ===== -static void Gen_posechain_eq(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_geo_comp_temp ===== +static void Gen_teq_geo_tgeo(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in_g, string_t in_t, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in_t); + GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); + if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { + GSERIALIZED *gs_geog = geom_to_geog(gs); + free(gs); gs = gs_geog; + } + Temporal *r = teq_geo_tgeo(gs, t); + free(t); free(gs); + return TemporalToBlobN(result, r, mask, idx); + }); +} + +static void Gen_teq_tgeo_geo(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in_t); + GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); + if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { + GSERIALIZED *gs_geog = geom_to_geog(gs); + free(gs); gs = gs_geog; + } + Temporal *r = teq_tgeo_geo(t, gs); + free(t); free(gs); + return TemporalToBlobN(result, r, mask, idx); + }); +} + +static void Gen_tne_geo_tgeo(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in_g, string_t in_t, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in_t); + GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); + if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { + GSERIALIZED *gs_geog = geom_to_geog(gs); + free(gs); gs = gs_geog; + } + Temporal *r = tne_geo_tgeo(gs, t); + free(t); free(gs); + return TemporalToBlobN(result, r, mask, idx); + }); +} + +static void Gen_tne_tgeo_geo(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in_t); + GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); + if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { + GSERIALIZED *gs_geog = geom_to_geog(gs); + free(gs); gs = gs_geog; + } + Temporal *r = tne_tgeo_geo(t, gs); + free(t); free(gs); + return TemporalToBlobN(result, r, mask, idx); + }); +} + + +// ===== @ingroup meos_pose_base_comp ===== +static void Gen_pose_eq(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - PoseChain *s1 = BlobToPosechain(a); - PoseChain *s2 = BlobToPosechain(b); - bool r = posechain_eq(s1, s2); + Pose *s1 = BlobToPose(a); + Pose *s2 = BlobToPose(b); + bool r = pose_eq(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_posechain_ne(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pose_ge(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - PoseChain *s1 = BlobToPosechain(a); - PoseChain *s2 = BlobToPosechain(b); - bool r = posechain_ne(s1, s2); + Pose *s1 = BlobToPose(a); + Pose *s2 = BlobToPose(b); + bool r = pose_ge(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_posechain_same(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pose_gt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - PoseChain *s1 = BlobToPosechain(a); - PoseChain *s2 = BlobToPosechain(b); - bool r = posechain_same(s1, s2); + Pose *s1 = BlobToPose(a); + Pose *s2 = BlobToPose(b); + bool r = pose_gt(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_posechain_lt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pose_le(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - PoseChain *s1 = BlobToPosechain(a); - PoseChain *s2 = BlobToPosechain(b); - bool r = posechain_lt(s1, s2); + Pose *s1 = BlobToPose(a); + Pose *s2 = BlobToPose(b); + bool r = pose_le(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_posechain_le(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pose_lt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - PoseChain *s1 = BlobToPosechain(a); - PoseChain *s2 = BlobToPosechain(b); - bool r = posechain_le(s1, s2); + Pose *s1 = BlobToPose(a); + Pose *s2 = BlobToPose(b); + bool r = pose_lt(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_posechain_gt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pose_ne(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - PoseChain *s1 = BlobToPosechain(a); - PoseChain *s2 = BlobToPosechain(b); - bool r = posechain_gt(s1, s2); + Pose *s1 = BlobToPose(a); + Pose *s2 = BlobToPose(b); + bool r = pose_ne(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_posechain_ge(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pose_same(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - PoseChain *s1 = BlobToPosechain(a); - PoseChain *s2 = BlobToPosechain(b); - bool r = posechain_ge(s1, s2); + Pose *s1 = BlobToPose(a); + Pose *s2 = BlobToPose(b); + bool r = pose_same(s1, s2); free(s1); free(s2); return r; }); } -// ===== @ingroup meos_rgeo_bbox_split ===== -static void Gen_trgeometry_stboxes(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - auto &in_vec = args.data[0]; - idx_t row_count = args.size(); - in_vec.Flatten(row_count); - auto &result_validity = FlatVector::Validity(result); - auto list_entries = FlatVector::GetData(result); - idx_t off = 0; - for (idx_t i = 0; i < row_count; ++i) { - if (in_vec.GetValue(i).IsNull()) { result_validity.SetInvalid(i); continue; } - string_t blob = FlatVector::GetData(in_vec)[i]; - Temporal *in = BlobToTemporal(blob); - int count = 0; - STBox * arr = trgeometry_stboxes(in, &count); - free(in); - int n = (arr && count > 0) ? count : 0; - ListVector::Reserve(result, off + n); - ListVector::SetListSize(result, off + n); - list_entries[i] = list_entry_t{off, (uint64_t) n}; - if (n > 0) { - auto &child_vector = ListVector::GetEntry(result); - child_vector.SetVectorType(VectorType::FLAT_VECTOR); - auto *cd = FlatVector::GetData(child_vector); - for (int j = 0; j < n; ++j) { cd[off + j] = StringVector::AddStringOrBlob(child_vector, (const char *) &arr[j], sizeof(STBox)); } - off += n; - } - if (arr) free(arr); - result_validity.SetValid(i); - } -} - -static void Gen_trgeometry_split_n_stboxes(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - auto &in_vec = args.data[0]; - idx_t row_count = args.size(); - in_vec.Flatten(row_count); - auto &n_vec = args.data[1]; - n_vec.Flatten(row_count); - auto &result_validity = FlatVector::Validity(result); - auto list_entries = FlatVector::GetData(result); - idx_t off = 0; - for (idx_t i = 0; i < row_count; ++i) { - if (in_vec.GetValue(i).IsNull() || n_vec.GetValue(i).IsNull()) { result_validity.SetInvalid(i); continue; } - string_t blob = FlatVector::GetData(in_vec)[i]; - int32_t n_arg = FlatVector::GetData(n_vec)[i]; - Temporal *in = BlobToTemporal(blob); - int count = 0; - STBox * arr = trgeometry_split_n_stboxes(in, n_arg, &count); - free(in); - int n = (arr && count > 0) ? count : 0; - ListVector::Reserve(result, off + n); - ListVector::SetListSize(result, off + n); - list_entries[i] = list_entry_t{off, (uint64_t) n}; - if (n > 0) { - auto &child_vector = ListVector::GetEntry(result); - child_vector.SetVectorType(VectorType::FLAT_VECTOR); - auto *cd = FlatVector::GetData(child_vector); - for (int j = 0; j < n; ++j) { cd[off + j] = StringVector::AddStringOrBlob(child_vector, (const char *) &arr[j], sizeof(STBox)); } - off += n; - } - if (arr) free(arr); - result_validity.SetValid(i); - } -} - -static void Gen_trgeometry_split_each_n_stboxes(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - auto &in_vec = args.data[0]; - idx_t row_count = args.size(); - in_vec.Flatten(row_count); - auto &n_vec = args.data[1]; - n_vec.Flatten(row_count); - auto &result_validity = FlatVector::Validity(result); - auto list_entries = FlatVector::GetData(result); - idx_t off = 0; - for (idx_t i = 0; i < row_count; ++i) { - if (in_vec.GetValue(i).IsNull() || n_vec.GetValue(i).IsNull()) { result_validity.SetInvalid(i); continue; } - string_t blob = FlatVector::GetData(in_vec)[i]; - int32_t n_arg = FlatVector::GetData(n_vec)[i]; - Temporal *in = BlobToTemporal(blob); - int count = 0; - STBox * arr = trgeometry_split_each_n_stboxes(in, n_arg, &count); - free(in); - int n = (arr && count > 0) ? count : 0; - ListVector::Reserve(result, off + n); - ListVector::SetListSize(result, off + n); - list_entries[i] = list_entry_t{off, (uint64_t) n}; - if (n > 0) { - auto &child_vector = ListVector::GetEntry(result); - child_vector.SetVectorType(VectorType::FLAT_VECTOR); - auto *cd = FlatVector::GetData(child_vector); - for (int j = 0; j < n; ++j) { cd[off + j] = StringVector::AddStringOrBlob(child_vector, (const char *) &arr[j], sizeof(STBox)); } - off += n; - } - if (arr) free(arr); - result_validity.SetValid(i); - } -} - - // ===== @ingroup meos_h3_comp_temp ===== static void Gen_teq_h3index_th3index(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); @@ -3413,37 +3378,64 @@ static void Gen_tne_th3index_th3index(DataChunk &args, ExpressionState &, Vector } -// ===== @ingroup meos_temporal_analytics_simplify ===== -static void Gen_temporal_simplify_dp(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_geo_box_topo ===== +static void Gen_adjacent_stbox_stbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - TernaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], args.data[2], result, args.size(), - [&](string_t in, double a2, bool a3, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = temporal_simplify_dp(t, a2, a3); - free(t); - return TemporalToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = adjacent_stbox_stbox(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_temporal_simplify_max_dist(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_contained_stbox_stbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - TernaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], args.data[2], result, args.size(), - [&](string_t in, double a2, bool a3, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = temporal_simplify_max_dist(t, a2, a3); - free(t); - return TemporalToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = contained_stbox_stbox(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_temporal_simplify_min_dist(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_contains_stbox_stbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, double a2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = temporal_simplify_min_dist(t, a2); - free(t); - return TemporalToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = contains_stbox_stbox(s1, s2); + free(s1); free(s2); + return r; + }); +} + +static void Gen_overlaps_stbox_stbox(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = overlaps_stbox_stbox(s1, s2); + free(s1); free(s2); + return r; + }); +} + +static void Gen_same_stbox_stbox(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = same_stbox_stbox(s1, s2); + free(s1); free(s2); + return r; }); } @@ -3654,55 +3646,56 @@ static void Gen_tne_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector } -// ===== @ingroup meos_h3_metrics ===== -static void Gen_th3index_edge_length(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pose_comp_temp ===== +static void Gen_teq_tpose_pose(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = th3index_edge_length(t); - free(t); + Pose *a2p = BlobToPose(a2); + Temporal *r = teq_tpose_pose(t, a2p); + free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tgeogpoint_great_circle_distance(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tne_tpose_pose(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = tgeogpoint_great_circle_distance(t1, t2); - free(t1); free(t2); - return TemporalToBlobN(result, r, mask, idx); - }); -} - - -// ===== @ingroup meos_posechain_conversion ===== -static void Gen_tposechain_to_tpose(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tposechain_to_tpose(t); - free(t); + Pose *a2p = BlobToPose(a2); + Temporal *r = tne_tpose_pose(t, a2p); + free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_pose_base_transf ===== -static void Gen_pose_compose(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_box_set ===== +static void Gen_intersection_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> string_t { - Pose *s1 = BlobToPose(a); - Pose *s2 = BlobToPose(b); - Pose *r = pose_compose(s1, s2); + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + TBox *r = intersection_tbox_tbox(s1, s2); free(s1); free(s2); if (!r) { mask.SetInvalid(idx); return string_t(); } - return PoseToBlob(result, r); + return TboxToBlob(result, r); + }); +} + + +// ===== @ingroup meos_pointcloud_conversion ===== +static void Gen_tpcpatch_to_tgeometry(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tpcpatch_to_tgeometry(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } @@ -4255,27 +4248,40 @@ void RegisterGenerated_meos_pose_comp_ever(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_ever_ne_tpose_tpose)); } -void RegisterGenerated_meos_posechain_base_comp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_eq)); - RegisterSerializedScalarFunction(loader, ScalarFunction("=", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_eq)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_ne)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_ne)); - RegisterSerializedScalarFunction(loader, ScalarFunction("same", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_same)); - RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_same)); - RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_lt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_lt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("le", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_le)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_le)); - RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_gt)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_gt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_ge)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_ge)); -} - -void RegisterGenerated_meos_rgeo_bbox_split(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {TrgeometryTypes::trgeometry()}, LogicalType::LIST(StboxType::stbox()), Gen_trgeometry_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_trgeometry_split_n_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_trgeometry_split_each_n_stboxes)); +void RegisterGenerated_meos_geo_comp_temp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {MobilityDuckGeometryType(), TgeompointType::tgeompoint()}, TemporalTypes::tbool(), Gen_teq_geo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {MobilityDuckGeometryType(), TgeogpointType::tgeogpoint()}, TemporalTypes::tbool(), Gen_teq_geo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {MobilityDuckGeometryType(), TGeometryTypes::tgeometry()}, TemporalTypes::tbool(), Gen_teq_geo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {MobilityDuckGeometryType(), TGeographyTypes::tgeography()}, TemporalTypes::tbool(), Gen_teq_geo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TgeompointType::tgeompoint(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_teq_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TgeogpointType::tgeogpoint(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_teq_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TGeometryTypes::tgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_teq_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TGeographyTypes::tgeography(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_teq_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {MobilityDuckGeometryType(), TgeompointType::tgeompoint()}, TemporalTypes::tbool(), Gen_tne_geo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {MobilityDuckGeometryType(), TgeogpointType::tgeogpoint()}, TemporalTypes::tbool(), Gen_tne_geo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {MobilityDuckGeometryType(), TGeometryTypes::tgeometry()}, TemporalTypes::tbool(), Gen_tne_geo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {MobilityDuckGeometryType(), TGeographyTypes::tgeography()}, TemporalTypes::tbool(), Gen_tne_geo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TgeompointType::tgeompoint(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_tne_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TgeogpointType::tgeogpoint(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_tne_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TGeometryTypes::tgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_tne_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TGeographyTypes::tgeography(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_tne_tgeo_geo)); +} + +void RegisterGenerated_meos_pose_base_comp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("=", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_ge)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_ge)); + RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("le", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_ne)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_ne)); + RegisterSerializedScalarFunction(loader, ScalarFunction("same", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_same)); + RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_same)); } void RegisterGenerated_meos_h3_comp_temp(ExtensionLoader &loader) { @@ -4287,18 +4293,17 @@ void RegisterGenerated_meos_h3_comp_temp(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_tne_th3index_th3index)); } -void RegisterGenerated_meos_temporal_analytics_simplify(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("douglasPeuckerSimplify", {TemporalTypes::tfloat(), LogicalType::DOUBLE, LogicalType::BOOLEAN}, TemporalTypes::tfloat(), Gen_temporal_simplify_dp)); - RegisterSerializedScalarFunction(loader, ScalarFunction("douglasPeuckerSimplify", {TgeompointType::tgeompoint(), LogicalType::DOUBLE, LogicalType::BOOLEAN}, TgeompointType::tgeompoint(), Gen_temporal_simplify_dp)); - RegisterSerializedScalarFunction(loader, ScalarFunction("douglasPeuckerSimplify", {TGeometryTypes::tgeometry(), LogicalType::DOUBLE, LogicalType::BOOLEAN}, TGeometryTypes::tgeometry(), Gen_temporal_simplify_dp)); - RegisterSerializedScalarFunction(loader, ScalarFunction("maxDistSimplify", {TemporalTypes::tfloat(), LogicalType::DOUBLE, LogicalType::BOOLEAN}, TemporalTypes::tfloat(), Gen_temporal_simplify_max_dist)); - RegisterSerializedScalarFunction(loader, ScalarFunction("maxDistSimplify", {TgeompointType::tgeompoint(), LogicalType::DOUBLE, LogicalType::BOOLEAN}, TgeompointType::tgeompoint(), Gen_temporal_simplify_max_dist)); - RegisterSerializedScalarFunction(loader, ScalarFunction("maxDistSimplify", {TGeometryTypes::tgeometry(), LogicalType::DOUBLE, LogicalType::BOOLEAN}, TGeometryTypes::tgeometry(), Gen_temporal_simplify_max_dist)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minDistSimplify", {TemporalTypes::tfloat(), LogicalType::DOUBLE}, TemporalTypes::tfloat(), Gen_temporal_simplify_min_dist)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minDistSimplify", {TgeompointType::tgeompoint(), LogicalType::DOUBLE}, TgeompointType::tgeompoint(), Gen_temporal_simplify_min_dist)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minDistSimplify", {TgeogpointType::tgeogpoint(), LogicalType::DOUBLE}, TgeompointType::tgeompoint(), Gen_temporal_simplify_min_dist)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minDistSimplify", {TGeometryTypes::tgeometry(), LogicalType::DOUBLE}, TGeometryTypes::tgeometry(), Gen_temporal_simplify_min_dist)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minDistSimplify", {TGeographyTypes::tgeography(), LogicalType::DOUBLE}, TGeometryTypes::tgeometry(), Gen_temporal_simplify_min_dist)); +void RegisterGenerated_meos_geo_box_topo(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_adjacent_stbox_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_adjacent_stbox_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contained_stbox_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contained_stbox_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contains_stbox_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contains_stbox_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overlaps_stbox_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overlaps_stbox_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("same", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_same_stbox_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_same_stbox_stbox)); } void RegisterGenerated_meos_pointcloud_comp_temp(ExtensionLoader &loader) { @@ -4332,18 +4337,18 @@ void RegisterGenerated_meos_cbuffer_comp_temp(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, TemporalTypes::tbool(), Gen_tne_tcbuffer_cbuffer)); } -void RegisterGenerated_meos_h3_metrics(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("th3EdgeLength", {H3indexTypes::th3index()}, TemporalTypes::tfloat(), Gen_th3index_edge_length)); - RegisterSerializedScalarFunction(loader, ScalarFunction("greatCircleDistance", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tgeogpoint_great_circle_distance)); +void RegisterGenerated_meos_pose_comp_temp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {PoseTypes::tpose(), PoseTypes::pose()}, TemporalTypes::tbool(), Gen_teq_tpose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {PoseTypes::tpose(), PoseTypes::pose()}, TemporalTypes::tbool(), Gen_tne_tpose_pose)); } -void RegisterGenerated_meos_posechain_conversion(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tpose", {PosechainTypes::tposechain()}, PoseTypes::tpose(), Gen_tposechain_to_tpose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {PosechainTypes::tposechain()}, PoseTypes::tpose(), Gen_tposechain_to_tpose)); +void RegisterGenerated_meos_box_set(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tboxIntersection", {TboxType::tbox(), TboxType::tbox()}, TboxType::tbox(), Gen_intersection_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("*", {TboxType::tbox(), TboxType::tbox()}, TboxType::tbox(), Gen_intersection_tbox_tbox)); } -void RegisterGenerated_meos_pose_base_transf(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("applyPose", {PoseTypes::pose(), PoseTypes::pose()}, PoseTypes::pose(), Gen_pose_compose)); +void RegisterGenerated_meos_pointcloud_conversion(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tgeometry", {TPcpatchTypes::tpcpatch()}, TGeometryTypes::tgeometry(), Gen_tpcpatch_to_tgeometry)); } } // namespace duckdb diff --git a/src/generated/generated_temporal_udfs_6.cpp b/src/generated/generated_temporal_udfs_6.cpp index 66c80725..66f7d354 100644 --- a/src/generated/generated_temporal_udfs_6.cpp +++ b/src/generated/generated_temporal_udfs_6.cpp @@ -2340,497 +2340,339 @@ static void Gen_ever_ne_trgeometry_trgeometry(DataChunk &args, ExpressionState & } -// ===== @ingroup meos_temporal_dist ===== -static void Gen_tdistance_tfloat_float(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_geo_dist ===== +static void Gen_tdistance_tgeo_geo(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, double a2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tdistance_tfloat_float(t, a2); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tdistance_tint_int(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tdistance_tint_int(t, a2); - free(t); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in_t); + GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); + if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { + GSERIALIZED *gs_geog = geom_to_geog(gs); + free(gs); gs = gs_geog; + } + Temporal *r = tdistance_tgeo_geo(t, gs); + free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tdistance_tnumber_tnumber(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tdistance_tgeo_tgeo(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - Temporal *r = tdistance_tnumber_tnumber(t1, t2); + Temporal *r = tdistance_tgeo_tgeo(t1, t2); free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_nad_tfloat_float(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, double a2) { - Temporal *t = BlobToTemporal(in); - double r = nad_tfloat_float(t, a2); - free(t); - return r; - }); -} - -static void Gen_nad_tfloat_tfloat(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_tgeo_tgeo(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in1, string_t in2) { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - double r = nad_tfloat_tfloat(t1, t2); + double r = nad_tgeo_tgeo(t1, t2); free(t1); free(t2); - return r; - }); -} - -static void Gen_nad_tbigint_bigint(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, int64_t a2) { - Temporal *t = BlobToTemporal(in); - int64_t r = nad_tbigint_bigint(t, a2); - free(t); - return r; + return (double) r; }); } -static void Gen_nad_tbigint_tbigint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_mindistance_tgeo_tgeo(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2) { + TernaryExecutor::Execute(args.data[0], args.data[1], args.data[2], result, args.size(), + [&](string_t in1, string_t in2, double a2) { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - int64_t r = nad_tbigint_tbigint(t1, t2); + double r = mindistance_tgeo_tgeo(t1, t2, a2); free(t1); free(t2); - return r; + return (double) r; }); } -static void Gen_nad_tint_int(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_mindistance_tgeoarr_tgeoarr(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, int32_t a2) { - Temporal *t = BlobToTemporal(in); - int32_t r = nad_tint_int(t, a2); - free(t); - return r; - }); -} - -static void Gen_nad_tint_tint(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2) { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - int32_t r = nad_tint_tint(t1, t2); - free(t1); free(t2); + auto &lv1 = args.data[0]; auto &lv2 = args.data[1]; + auto &child1 = ListVector::GetEntry(lv1); child1.Flatten(ListVector::GetListSize(lv1)); + auto &child2 = ListVector::GetEntry(lv2); child2.Flatten(ListVector::GetListSize(lv2)); + BinaryExecutor::Execute( + lv1, lv2, result, args.size(), + [&](list_entry_t le1, list_entry_t le2) -> double { + int n1, n2; + const Temporal **a1 = ListToTemporalArr(child1, le1, &n1); + const Temporal **a2 = ListToTemporalArr(child2, le2, &n2); + double r = mindistance_tgeoarr_tgeoarr(a1, n1, a2, n2); + FreeTemporalArr(a1, n1); FreeTemporalArr(a2, n2); return r; }); } -static void Gen_nad_tfloat_tbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_tgeo_stbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> double { Temporal *t = BlobToTemporal(a); - TBox *bx = BlobToTbox(b); - double r = nad_tfloat_tbox(t, bx); + STBox *bx = BlobToStbox(b); + double r = nad_tgeo_stbox(t, bx); free(t); free(bx); if (r == std::numeric_limits::max()) { mask.SetInvalid(idx); return double(); } - return r; + return (double) r; }); } -static void Gen_nad_tbigint_tbox(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> int64_t { - Temporal *t = BlobToTemporal(a); - TBox *bx = BlobToTbox(b); - int64_t r = nad_tbigint_tbox(t, bx); - free(t); free(bx); - if (r == std::numeric_limits::max()) { mask.SetInvalid(idx); return int64_t(); } - return r; - }); -} -static void Gen_nad_tint_tbox(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_cbuffer_dist ===== +static void Gen_tdistance_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> int32_t { - Temporal *t = BlobToTemporal(a); - TBox *bx = BlobToTbox(b); - int32_t r = nad_tint_tbox(t, bx); - free(t); free(bx); - if (r == std::numeric_limits::max()) { mask.SetInvalid(idx); return int32_t(); } - return r; - }); -} - - -// ===== @ingroup meos_cbuffer_comp_ever ===== -static void Gen_always_eq_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2) { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); Cbuffer *a2p = BlobToCbuffer(a2); - int32_t r = always_eq_tcbuffer_cbuffer(t, a2p); + Temporal *r = tdistance_tcbuffer_cbuffer(t, a2p); free(a2p); free(t); - return (r != 0); - }); -} - -static void Gen_always_eq_tcbuffer_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2) { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - int32_t r = always_eq_tcbuffer_tcbuffer(t1, t2); - free(t1); free(t2); - return (r != 0); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_always_ne_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tdistance_tcbuffer_geo(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2) { - Temporal *t = BlobToTemporal(in); - Cbuffer *a2p = BlobToCbuffer(a2); - int32_t r = always_ne_tcbuffer_cbuffer(t, a2p); - free(a2p); free(t); - return (r != 0); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in_t); + GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); + if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { + GSERIALIZED *gs_geog = geom_to_geog(gs); + free(gs); gs = gs_geog; + } + Temporal *r = tdistance_tcbuffer_geo(t, gs); + free(t); free(gs); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_always_ne_tcbuffer_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tdistance_tcbuffer_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2) { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - int32_t r = always_ne_tcbuffer_tcbuffer(t1, t2); + Temporal *r = tdistance_tcbuffer_tcbuffer(t1, t2); free(t1); free(t2); - return (r != 0); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_ever_eq_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in, string_t a2) { Temporal *t = BlobToTemporal(in); Cbuffer *a2p = BlobToCbuffer(a2); - int32_t r = ever_eq_tcbuffer_cbuffer(t, a2p); + double r = nad_tcbuffer_cbuffer(t, a2p); free(a2p); free(t); - return (r != 0); + return (double) r; }); } -static void Gen_ever_eq_tcbuffer_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_tcbuffer_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in1, string_t in2) { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - int32_t r = ever_eq_tcbuffer_tcbuffer(t1, t2); + double r = nad_tcbuffer_tcbuffer(t1, t2); free(t1); free(t2); - return (r != 0); + return (double) r; }); } -static void Gen_ever_ne_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nai_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2) { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); Cbuffer *a2p = BlobToCbuffer(a2); - int32_t r = ever_ne_tcbuffer_cbuffer(t, a2p); + Temporal *r = (Temporal *) nai_tcbuffer_cbuffer(t, a2p); free(a2p); free(t); - return (r != 0); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_ever_ne_tcbuffer_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_tcbuffer_stbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2) { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - int32_t r = ever_ne_tcbuffer_tcbuffer(t1, t2); - free(t1); free(t2); - return (r != 0); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> double { + Temporal *t = BlobToTemporal(a); + STBox *bx = BlobToStbox(b); + double r = nad_tcbuffer_stbox(t, bx); + free(t); free(bx); + if (r == std::numeric_limits::max()) { mask.SetInvalid(idx); return double(); } + return (double) r; }); } -// ===== @ingroup meos_cellindex ===== -static void Gen_tcellindex_get_resolution(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_geo_srid ===== +static void Gen_tspatial_srid(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { Temporal *t = BlobToTemporal(in); - Temporal *r = tcellindex_get_resolution(t); + int32_t r = tspatial_srid(t); free(t); - return TemporalToBlobN(result, r, mask, idx); + return (int32_t) r; }); } -static void Gen_tcellindex_is_valid_cell(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tspatial_set_srid(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tcellindex_is_valid_cell(t); + Temporal *r = tspatial_set_srid(t, a2); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tcellindex_cell_to_parent(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tspatial_transform(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tcellindex_cell_to_parent(t, a2); + Temporal *r = tspatial_transform(t, a2); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tcellindex_cell_to_point(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tcellindex_cell_to_point(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} -static void Gen_tcellindex_cell_to_boundary(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_setspan_inout ===== +static void Gen_set_from_hexwkb(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tcellindex_cell_to_boundary(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + Set *r = set_from_hexwkb(in.GetString().c_str()); + return SetToBlobN(result, r, mask, idx); }); } -static void Gen_tcellindex_cell_area(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_span_from_hexwkb(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tcellindex_cell_area(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + Span *r = span_from_hexwkb(in.GetString().c_str()); + if (!r) { mask.SetInvalid(idx); return string_t(); } + return SpanToBlob(result, r); }); } -static void Gen_tquadbin_cell_to_quadkey(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_spanset_from_hexwkb(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tquadbin_cell_to_quadkey(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - - -// ===== @ingroup meos_pose_restrict ===== -static void Gen_tpose_at_geom(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in_t); - GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); - if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { - GSERIALIZED *gs_geog = geom_to_geog(gs); - free(gs); gs = gs_geog; - } - Temporal *r = tpose_at_geom(t, gs); - free(t); free(gs); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tpose_at_pose(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Pose *a2p = BlobToPose(a2); - Temporal *r = tpose_at_pose(t, a2p); - free(a2p); free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tpose_minus_geom(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in_t); - GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); - if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { - GSERIALIZED *gs_geog = geom_to_geog(gs); - free(gs); gs = gs_geog; - } - Temporal *r = tpose_minus_geom(t, gs); - free(t); free(gs); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tpose_minus_pose(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Pose *a2p = BlobToPose(a2); - Temporal *r = tpose_minus_pose(t, a2p); - free(a2p); free(t); - return TemporalToBlobN(result, r, mask, idx); + SpanSet *r = spanset_from_hexwkb(in.GetString().c_str()); + if (!r) { mask.SetInvalid(idx); return string_t(); } + return SpanSetToBlob(result, r); }); } -static void Gen_tpose_at_elevation(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(a); - Span *cc = BlobToSpan(b); - Temporal *r = tpose_at_elevation(t, cc); - free(t); free(cc); - return TemporalToBlobN(result, r, mask, idx); - }); -} -static void Gen_tpose_minus_elevation(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(a); - Span *cc = BlobToSpan(b); - Temporal *r = tpose_minus_elevation(t, cc); - free(t); free(cc); - return TemporalToBlobN(result, r, mask, idx); - }); -} - - -// ===== @ingroup meos_pointcloud_box_comp ===== -static void Gen_tpcbox_eq(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_box_comp ===== +static void Gen_tbox_eq(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = tpcbox_eq(s1, s2); + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = tbox_eq(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_tpcbox_ne(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tbox_ge(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = tpcbox_ne(s1, s2); + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = tbox_ge(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_tpcbox_lt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tbox_gt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = tpcbox_lt(s1, s2); + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = tbox_gt(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_tpcbox_le(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tbox_le(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = tpcbox_le(s1, s2); + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = tbox_le(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_tpcbox_gt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tbox_lt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = tpcbox_gt(s1, s2); + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = tbox_lt(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_tpcbox_ge(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tbox_ne(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = tpcbox_ge(s1, s2); + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = tbox_ne(s1, s2); free(s1); free(s2); return r; }); } -// ===== @ingroup meos_cbuffer_restrict ===== -static void Gen_tcbuffer_at_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_rgeo_comp_temp ===== +static void Gen_teq_geo_trgeometry(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Cbuffer *a2p = BlobToCbuffer(a2); - Temporal *r = tcbuffer_at_cbuffer(t, a2p); - free(a2p); free(t); + [&](string_t in_g, string_t in_t, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in_t); + GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); + if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { + GSERIALIZED *gs_geog = geom_to_geog(gs); + free(gs); gs = gs_geog; + } + Temporal *r = teq_geo_trgeometry(gs, t); + free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tcbuffer_at_geom(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_teq_trgeometry_geo(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { @@ -2840,25 +2682,29 @@ static void Gen_tcbuffer_at_geom(DataChunk &args, ExpressionState &, Vector &res GSERIALIZED *gs_geog = geom_to_geog(gs); free(gs); gs = gs_geog; } - Temporal *r = tcbuffer_at_geom(t, gs); + Temporal *r = teq_trgeometry_geo(t, gs); free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tcbuffer_minus_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tne_geo_trgeometry(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Cbuffer *a2p = BlobToCbuffer(a2); - Temporal *r = tcbuffer_minus_cbuffer(t, a2p); - free(a2p); free(t); + [&](string_t in_g, string_t in_t, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in_t); + GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); + if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { + GSERIALIZED *gs_geog = geom_to_geog(gs); + free(gs); gs = gs_geog; + } + Temporal *r = tne_geo_trgeometry(gs, t); + free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tcbuffer_minus_geom(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tne_trgeometry_geo(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { @@ -2868,50 +2714,50 @@ static void Gen_tcbuffer_minus_geom(DataChunk &args, ExpressionState &, Vector & GSERIALIZED *gs_geog = geom_to_geog(gs); free(gs); gs = gs_geog; } - Temporal *r = tcbuffer_minus_geom(t, gs); + Temporal *r = tne_trgeometry_geo(t, gs); free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_quadbin_accessor ===== -static void Gen_tquadbin_start_value(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_h3_accessor ===== +static void Gen_th3index_start_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t in) -> int64_t { Temporal *t = BlobToTemporal(in); - int64_t r = (int64_t) tquadbin_start_value(t); + int64_t r = (int64_t) th3index_start_value(t); free(t); return r; }); } -static void Gen_tquadbin_end_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_end_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t in) -> int64_t { Temporal *t = BlobToTemporal(in); - int64_t r = (int64_t) tquadbin_end_value(t); + int64_t r = (int64_t) th3index_end_value(t); free(t); return r; }); } -static void Gen_tquadbin_value_n(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_value_n(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> int64_t { Temporal *t = BlobToTemporal(in); uint64_t v; - bool ok = tquadbin_value_n(t, a2, &v); + bool ok = th3index_value_n(t, a2, &v); free(t); if (!ok) { mask.SetInvalid(idx); return int64_t(); } return (int64_t) v; }); } -static void Gen_tquadbin_values(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_values(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); auto &in_vec = args.data[0]; idx_t row_count = args.size(); @@ -2924,7 +2770,7 @@ static void Gen_tquadbin_values(DataChunk &args, ExpressionState &, Vector &resu string_t blob = FlatVector::GetData(in_vec)[i]; Temporal *in = BlobToTemporal(blob); int count = 0; - uint64_t * arr = tquadbin_values(in, &count); + uint64_t * arr = th3index_values(in, &count); free(in); int n = (arr && count > 0) ? count : 0; ListVector::Reserve(result, off + n); @@ -2943,209 +2789,172 @@ static void Gen_tquadbin_values(DataChunk &args, ExpressionState &, Vector &resu } -// ===== @ingroup meos_h3_traversal ===== -static void Gen_th3index_grid_distance(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pointcloud_accessor ===== +static void Gen_tpcpoint_start_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = th3index_grid_distance(t1, t2); - free(t1); free(t2); - return TemporalToBlobN(result, r, mask, idx); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Pcpoint * r = tpcpoint_start_value(t); + free(t); + return PcpointToBlobN(result, r, mask, idx); }); } -static void Gen_th3index_cell_to_local_ij(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcpoint_end_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = th3index_cell_to_local_ij(t1, t2); - free(t1); free(t2); - return TemporalToBlobN(result, r, mask, idx); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Pcpoint * r = tpcpoint_end_value(t); + free(t); + return PcpointToBlobN(result, r, mask, idx); }); } -static void Gen_th3index_local_ij_to_cell(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcpatch_start_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = th3index_local_ij_to_cell(t1, t2); - free(t1); free(t2); - return TemporalToBlobN(result, r, mask, idx); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Pcpatch * r = tpcpatch_start_value(t); + free(t); + return PcpatchToBlobN(result, r, mask, idx); }); } - -// ===== @ingroup meos_posechain_base_inout ===== -static void Gen_posechain_as_text(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcpatch_end_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, int32_t a2) { - PoseChain *s = BlobToPosechain(a); - char *r = posechain_as_text(s, a2); - free(s); - return TakeCString(result, r); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Pcpatch * r = tpcpatch_end_value(t); + free(t); + return PcpatchToBlobN(result, r, mask, idx); }); } -static void Gen_posechain_as_text_d(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t a) { - PoseChain *s = BlobToPosechain(a); - char *r = posechain_as_text(s, 15); - free(s); - return TakeCString(result, r); - }); -} -static void Gen_posechain_as_ewkt(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_geo_set_srid ===== +static void Gen_spatialset_set_srid(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, int32_t a2) { - PoseChain *s = BlobToPosechain(a); - char *r = posechain_as_ewkt(s, a2); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t a, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { + Set *s = BlobToSet(a); + Set *r = spatialset_set_srid(s, a2); free(s); - return TakeCString(result, r); + return SetToBlobN(result, r, mask, idx); }); } -static void Gen_posechain_as_ewkt_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_spatialset_transform(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t a) { - PoseChain *s = BlobToPosechain(a); - char *r = posechain_as_ewkt(s, 15); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t a, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { + Set *s = BlobToSet(a); + Set *r = spatialset_transform(s, a2); free(s); - return TakeCString(result, r); + return SetToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_rgeo_modif ===== -static void Gen_trgeometry_delete_timestamptz(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_h3_inspection ===== +static void Gen_th3index_get_base_cell_number(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - TernaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], args.data[2], result, args.size(), - [&](string_t in, timestamp_tz_t a2, bool a3, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = trgeometry_delete_timestamptz(t, DuckDBToMeosTimestamp(a2).value, a3); + Temporal *r = th3index_get_base_cell_number(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_trgeometry_merge(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = trgeometry_merge(t1, t2); - free(t1); free(t2); - return TemporalToBlobN(result, r, mask, idx); - }); -} - - -// ===== @ingroup meos_npoint_conversion ===== -static void Gen_tgeompoint_to_tnpoint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_is_res_class_iii(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tgeompoint_to_tnpoint(t); + Temporal *r = th3index_is_res_class_iii(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tnpoint_to_tgeompoint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_is_pentagon(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tnpoint_to_tgeompoint(t); + Temporal *r = th3index_is_pentagon(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_json_comp_temp ===== -static void Gen_teq_tjsonb_jsonb(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_s2cell_conversion ===== +static void Gen_tbigint_to_ts2cell(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Jsonb *a2p = BlobToJsonb(a2); - Temporal *r = teq_tjsonb_jsonb(t, a2p); - free(a2p); free(t); + Temporal *r = tbigint_to_ts2cell(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_tjsonb_jsonb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_ts2cell_to_tbigint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Jsonb *a2p = BlobToJsonb(a2); - Temporal *r = tne_tjsonb_jsonb(t, a2p); - free(a2p); free(t); + Temporal *r = ts2cell_to_tbigint(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_npoint_base_srid ===== -static void Gen_npoint_srid(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_internal_temporal_inout ===== +static void Gen_temporal_from_mfjson(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Npoint *v = BlobToNpoint(in); - int32_t r = npoint_srid(v); - free(v); - return r; - }); -} - -static void Gen_nsegment_srid(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Nsegment *v = BlobToNsegment(in); - int32_t r = nsegment_srid(v); - free(v); - return r; + MeosType temptype = TemporalHelpers::GetTemptypeFromAlias(result.GetType().GetAlias().c_str()); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *r = temporal_from_mfjson(in.GetString().c_str(), temptype); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_cbuffer_base_srid ===== -static void Gen_cbuffer_srid(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_rgeo_spatialfuncs ===== +static void Gen_trgeometry_body_point_trajectory(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Cbuffer *v = BlobToCbuffer(in); - int32_t r = cbuffer_srid(v); - free(v); - return r; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in_t); + GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); + if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { + GSERIALIZED *gs_geog = geom_to_geog(gs); + free(gs); gs = gs_geog; + } + Temporal *r = trgeometry_body_point_trajectory(t, gs); + free(t); free(gs); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_pose_base_srid ===== -static void Gen_pose_srid(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_posechain_base_srid ===== +static void Gen_posechain_srid(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t in) { - Pose *v = BlobToPose(in); - int32_t r = pose_srid(v); + PoseChain *v = BlobToPosechain(in); + int32_t r = posechain_srid(v); free(v); return r; }); @@ -3700,156 +3509,195 @@ void RegisterGenerated_meos_rgeo_comp_ever(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, LogicalType::BOOLEAN, Gen_ever_ne_trgeometry_trgeometry)); } -void RegisterGenerated_meos_temporal_dist(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TemporalTypes::tfloat(), LogicalType::DOUBLE}, TemporalTypes::tfloat(), Gen_tdistance_tfloat_float)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TemporalTypes::tfloat(), LogicalType::DOUBLE}, TemporalTypes::tfloat(), Gen_tdistance_tfloat_float)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TemporalTypes::tint(), LogicalType::INTEGER}, TemporalTypes::tint(), Gen_tdistance_tint_int)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TemporalTypes::tint(), LogicalType::INTEGER}, TemporalTypes::tint(), Gen_tdistance_tint_int)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TemporalTypes::tint(), TemporalTypes::tint()}, TemporalTypes::tint(), Gen_tdistance_tnumber_tnumber)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TemporalTypes::tint(), TemporalTypes::tint()}, TemporalTypes::tint(), Gen_tdistance_tnumber_tnumber)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TemporalTypes::tfloat(), TemporalTypes::tfloat()}, TemporalTypes::tfloat(), Gen_tdistance_tnumber_tnumber)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TemporalTypes::tfloat(), TemporalTypes::tfloat()}, TemporalTypes::tfloat(), Gen_tdistance_tnumber_tnumber)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tfloat(), LogicalType::DOUBLE}, LogicalType::DOUBLE, Gen_nad_tfloat_float)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tfloat(), LogicalType::DOUBLE}, LogicalType::DOUBLE, Gen_nad_tfloat_float)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tfloat(), TemporalTypes::tfloat()}, LogicalType::DOUBLE, Gen_nad_tfloat_tfloat)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tfloat(), TemporalTypes::tfloat()}, LogicalType::DOUBLE, Gen_nad_tfloat_tfloat)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tbigint(), LogicalType::BIGINT}, LogicalType::BIGINT, Gen_nad_tbigint_bigint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tbigint(), LogicalType::BIGINT}, LogicalType::BIGINT, Gen_nad_tbigint_bigint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tbigint(), TemporalTypes::tbigint()}, LogicalType::BIGINT, Gen_nad_tbigint_tbigint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tbigint(), TemporalTypes::tbigint()}, LogicalType::BIGINT, Gen_nad_tbigint_tbigint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tint(), LogicalType::INTEGER}, LogicalType::INTEGER, Gen_nad_tint_int)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tint(), LogicalType::INTEGER}, LogicalType::INTEGER, Gen_nad_tint_int)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::INTEGER, Gen_nad_tint_tint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::INTEGER, Gen_nad_tint_tint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tfloat(), TboxType::tbox()}, LogicalType::DOUBLE, Gen_nad_tfloat_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tfloat(), TboxType::tbox()}, LogicalType::DOUBLE, Gen_nad_tfloat_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tbigint(), TboxType::tbox()}, LogicalType::BIGINT, Gen_nad_tbigint_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tbigint(), TboxType::tbox()}, LogicalType::BIGINT, Gen_nad_tbigint_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tint(), TboxType::tbox()}, LogicalType::INTEGER, Gen_nad_tint_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tint(), TboxType::tbox()}, LogicalType::INTEGER, Gen_nad_tint_tbox)); -} - -void RegisterGenerated_meos_cbuffer_comp_ever(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_always_eq_tcbuffer_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_always_eq_tcbuffer_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_always_eq_tcbuffer_tcbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_always_eq_tcbuffer_tcbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_always_ne_tcbuffer_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_always_ne_tcbuffer_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_always_ne_tcbuffer_tcbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_always_ne_tcbuffer_tcbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_ever_eq_tcbuffer_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_ever_eq_tcbuffer_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_ever_eq_tcbuffer_tcbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_ever_eq_tcbuffer_tcbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_ever_ne_tcbuffer_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_ever_ne_tcbuffer_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_ever_ne_tcbuffer_tcbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_ever_ne_tcbuffer_tcbuffer)); -} - -void RegisterGenerated_meos_cellindex(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("getResolution", {H3indexTypes::th3index()}, TemporalTypes::tint(), Gen_tcellindex_get_resolution)); - RegisterSerializedScalarFunction(loader, ScalarFunction("getResolution", {QuadbinTypes::tquadbin()}, TemporalTypes::tint(), Gen_tcellindex_get_resolution)); - RegisterSerializedScalarFunction(loader, ScalarFunction("getResolution", {S2cellTypes::ts2cell()}, TemporalTypes::tint(), Gen_tcellindex_get_resolution)); - RegisterSerializedScalarFunction(loader, ScalarFunction("isValidCell", {H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_tcellindex_is_valid_cell)); - RegisterSerializedScalarFunction(loader, ScalarFunction("isValidCell", {QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_tcellindex_is_valid_cell)); - RegisterSerializedScalarFunction(loader, ScalarFunction("isValidCell", {S2cellTypes::ts2cell()}, TemporalTypes::tbool(), Gen_tcellindex_is_valid_cell)); - RegisterSerializedScalarFunction(loader, ScalarFunction("cellToParent", {H3indexTypes::th3index(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_tcellindex_cell_to_parent)); - RegisterSerializedScalarFunction(loader, ScalarFunction("cellToParent", {QuadbinTypes::tquadbin(), LogicalType::INTEGER}, QuadbinTypes::tquadbin(), Gen_tcellindex_cell_to_parent)); - RegisterSerializedScalarFunction(loader, ScalarFunction("cellToParent", {S2cellTypes::ts2cell(), LogicalType::INTEGER}, S2cellTypes::ts2cell(), Gen_tcellindex_cell_to_parent)); - RegisterSerializedScalarFunction(loader, ScalarFunction("cellToPoint", {QuadbinTypes::tquadbin()}, TgeompointType::tgeompoint(), Gen_tcellindex_cell_to_point)); - RegisterSerializedScalarFunction(loader, ScalarFunction("cellToPoint", {S2cellTypes::ts2cell()}, TgeogpointType::tgeogpoint(), Gen_tcellindex_cell_to_point)); - RegisterSerializedScalarFunction(loader, ScalarFunction("cellToBoundary", {H3indexTypes::th3index()}, TGeographyTypes::tgeography(), Gen_tcellindex_cell_to_boundary)); - RegisterSerializedScalarFunction(loader, ScalarFunction("cellToBoundary", {QuadbinTypes::tquadbin()}, TGeometryTypes::tgeometry(), Gen_tcellindex_cell_to_boundary)); - RegisterSerializedScalarFunction(loader, ScalarFunction("cellToBoundary", {S2cellTypes::ts2cell()}, TGeographyTypes::tgeography(), Gen_tcellindex_cell_to_boundary)); - RegisterSerializedScalarFunction(loader, ScalarFunction("cellArea", {H3indexTypes::th3index()}, TemporalTypes::tfloat(), Gen_tcellindex_cell_area)); - RegisterSerializedScalarFunction(loader, ScalarFunction("cellArea", {QuadbinTypes::tquadbin()}, TemporalTypes::tfloat(), Gen_tcellindex_cell_area)); - RegisterSerializedScalarFunction(loader, ScalarFunction("cellArea", {S2cellTypes::ts2cell()}, TemporalTypes::tfloat(), Gen_tcellindex_cell_area)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tquadbinCellToQuadkey", {QuadbinTypes::tquadbin()}, TemporalTypes::ttext(), Gen_tquadbin_cell_to_quadkey)); -} - -void RegisterGenerated_meos_pose_restrict(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("atGeometry", {PoseTypes::tpose(), MobilityDuckGeometryType()}, PoseTypes::tpose(), Gen_tpose_at_geom)); - RegisterSerializedScalarFunction(loader, ScalarFunction("atValue", {PoseTypes::tpose(), PoseTypes::pose()}, PoseTypes::tpose(), Gen_tpose_at_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minusGeometry", {PoseTypes::tpose(), MobilityDuckGeometryType()}, PoseTypes::tpose(), Gen_tpose_minus_geom)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minusValue", {PoseTypes::tpose(), PoseTypes::pose()}, PoseTypes::tpose(), Gen_tpose_minus_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("atElevation", {PoseTypes::tpose(), SpanTypes::floatspan()}, PoseTypes::tpose(), Gen_tpose_at_elevation)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minusElevation", {PoseTypes::tpose(), SpanTypes::floatspan()}, PoseTypes::tpose(), Gen_tpose_minus_elevation)); -} - -void RegisterGenerated_meos_pointcloud_box_comp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_eq)); - RegisterSerializedScalarFunction(loader, ScalarFunction("=", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_eq)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_ne)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_ne)); - RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_lt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_lt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("le", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_le)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_le)); - RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_gt)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_gt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_ge)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_ge)); -} - -void RegisterGenerated_meos_cbuffer_restrict(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("atValue", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, CbufferTypes::tcbuffer(), Gen_tcbuffer_at_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("atGeometry", {CbufferTypes::tcbuffer(), MobilityDuckGeometryType()}, CbufferTypes::tcbuffer(), Gen_tcbuffer_at_geom)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minusValue", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, CbufferTypes::tcbuffer(), Gen_tcbuffer_minus_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minusGeometry", {CbufferTypes::tcbuffer(), MobilityDuckGeometryType()}, CbufferTypes::tcbuffer(), Gen_tcbuffer_minus_geom)); -} - -void RegisterGenerated_meos_quadbin_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {QuadbinTypes::tquadbin()}, QuadbinTypes::quadbin(), Gen_tquadbin_start_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {QuadbinTypes::tquadbin()}, QuadbinTypes::quadbin(), Gen_tquadbin_end_value)); - RegisterSerializedScalarFunction(loader, ScalarFunction("valueN", {QuadbinTypes::tquadbin(), LogicalType::INTEGER}, QuadbinTypes::quadbin(), Gen_tquadbin_value_n)); - RegisterSerializedScalarFunction(loader, ScalarFunction("getValues", {QuadbinTypes::tquadbin()}, LogicalType::LIST(QuadbinTypes::quadbin()), Gen_tquadbin_values)); -} - -void RegisterGenerated_meos_h3_traversal(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("th3GridDistance", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbigint(), Gen_th3index_grid_distance)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbigint(), Gen_th3index_grid_distance)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbigint(), Gen_th3index_grid_distance)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellToLocalIj", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TgeompointType::tgeompoint(), Gen_th3index_cell_to_local_ij)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3LocalIjToCell", {H3indexTypes::th3index(), H3indexTypes::th3index()}, H3indexTypes::th3index(), Gen_th3index_local_ij_to_cell)); -} - -void RegisterGenerated_meos_posechain_base_inout(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PosechainTypes::posechain(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_posechain_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PosechainTypes::posechain()}, LogicalType::VARCHAR, Gen_posechain_as_text_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PosechainTypes::posechain(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_posechain_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PosechainTypes::posechain()}, LogicalType::VARCHAR, Gen_posechain_as_ewkt_d)); -} - -void RegisterGenerated_meos_rgeo_modif(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("deleteTime", {TrgeometryTypes::trgeometry(), LogicalType::TIMESTAMP_TZ, LogicalType::BOOLEAN}, TrgeometryTypes::trgeometry(), Gen_trgeometry_delete_timestamptz)); - RegisterSerializedScalarFunction(loader, ScalarFunction("merge", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, TrgeometryTypes::trgeometry(), Gen_trgeometry_merge)); -} - -void RegisterGenerated_meos_npoint_conversion(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tnpoint", {TgeompointType::tgeompoint()}, NpointTypes::tnpoint(), Gen_tgeompoint_to_tnpoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TgeompointType::tgeompoint()}, NpointTypes::tnpoint(), Gen_tgeompoint_to_tnpoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tgeompoint", {NpointTypes::tnpoint()}, TgeompointType::tgeompoint(), Gen_tnpoint_to_tgeompoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {NpointTypes::tnpoint()}, TgeompointType::tgeompoint(), Gen_tnpoint_to_tgeompoint)); -} - -void RegisterGenerated_meos_json_comp_temp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, TemporalTypes::tbool(), Gen_teq_tjsonb_jsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, TemporalTypes::tbool(), Gen_tne_tjsonb_jsonb)); -} - -void RegisterGenerated_meos_npoint_base_srid(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {NpointTypes::npoint()}, LogicalType::INTEGER, Gen_npoint_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {NpointTypes::nsegment()}, LogicalType::INTEGER, Gen_nsegment_srid)); -} - -void RegisterGenerated_meos_cbuffer_base_srid(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {CbufferTypes::cbuffer()}, LogicalType::INTEGER, Gen_cbuffer_srid)); -} - -void RegisterGenerated_meos_pose_base_srid(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {PoseTypes::pose()}, LogicalType::INTEGER, Gen_pose_srid)); +void RegisterGenerated_meos_geo_dist(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TgeompointType::tgeompoint(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TgeompointType::tgeompoint(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TgeogpointType::tgeogpoint(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TgeogpointType::tgeogpoint(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TGeometryTypes::tgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TGeometryTypes::tgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TGeographyTypes::tgeography(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TGeographyTypes::tgeography(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TGeometryTypes::tgeometry(), TGeometryTypes::tgeometry()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TGeometryTypes::tgeometry(), TGeometryTypes::tgeometry()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TGeographyTypes::tgeography(), TGeographyTypes::tgeography()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TGeographyTypes::tgeography(), TGeographyTypes::tgeography()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TGeometryTypes::tgeometry(), TGeometryTypes::tgeometry()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TGeometryTypes::tgeometry(), TGeometryTypes::tgeometry()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TGeographyTypes::tgeography(), TGeographyTypes::tgeography()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TGeographyTypes::tgeography(), TGeographyTypes::tgeography()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance_transfn", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint(), LogicalType::DOUBLE}, LogicalType::DOUBLE, Gen_mindistance_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance_transfn", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint(), LogicalType::DOUBLE}, LogicalType::DOUBLE, Gen_mindistance_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance_transfn", {TGeometryTypes::tgeometry(), TGeometryTypes::tgeometry(), LogicalType::DOUBLE}, LogicalType::DOUBLE, Gen_mindistance_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance_transfn", {TGeographyTypes::tgeography(), TGeographyTypes::tgeography(), LogicalType::DOUBLE}, LogicalType::DOUBLE, Gen_mindistance_tgeo_tgeo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance", {LogicalType::LIST(TgeompointType::tgeompoint()), LogicalType::LIST(TgeompointType::tgeompoint())}, LogicalType::DOUBLE, Gen_mindistance_tgeoarr_tgeoarr)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance", {LogicalType::LIST(TgeogpointType::tgeogpoint()), LogicalType::LIST(TgeogpointType::tgeogpoint())}, LogicalType::DOUBLE, Gen_mindistance_tgeoarr_tgeoarr)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance", {LogicalType::LIST(TGeometryTypes::tgeometry()), LogicalType::LIST(TGeometryTypes::tgeometry())}, LogicalType::DOUBLE, Gen_mindistance_tgeoarr_tgeoarr)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance", {LogicalType::LIST(TGeographyTypes::tgeography()), LogicalType::LIST(TGeographyTypes::tgeography())}, LogicalType::DOUBLE, Gen_mindistance_tgeoarr_tgeoarr)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TGeometryTypes::tgeometry(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TGeometryTypes::tgeometry(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TGeographyTypes::tgeography(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TGeographyTypes::tgeography(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); +} + +void RegisterGenerated_meos_cbuffer_dist(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, TemporalTypes::tfloat(), Gen_tdistance_tcbuffer_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, TemporalTypes::tfloat(), Gen_tdistance_tcbuffer_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {CbufferTypes::tcbuffer(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tcbuffer_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {CbufferTypes::tcbuffer(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tcbuffer_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, TemporalTypes::tfloat(), Gen_tdistance_tcbuffer_tcbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, TemporalTypes::tfloat(), Gen_tdistance_tcbuffer_tcbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::DOUBLE, Gen_nad_tcbuffer_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::DOUBLE, Gen_nad_tcbuffer_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::DOUBLE, Gen_nad_tcbuffer_tcbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::DOUBLE, Gen_nad_tcbuffer_tcbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachInstant", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, CbufferTypes::tcbuffer(), Gen_nai_tcbuffer_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {CbufferTypes::tcbuffer(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tcbuffer_stbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {CbufferTypes::tcbuffer(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tcbuffer_stbox)); +} + +void RegisterGenerated_meos_geo_srid(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TgeompointType::tgeompoint()}, LogicalType::INTEGER, Gen_tspatial_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TgeogpointType::tgeogpoint()}, LogicalType::INTEGER, Gen_tspatial_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TGeometryTypes::tgeometry()}, LogicalType::INTEGER, Gen_tspatial_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TGeographyTypes::tgeography()}, LogicalType::INTEGER, Gen_tspatial_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {CbufferTypes::tcbuffer()}, LogicalType::INTEGER, Gen_tspatial_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TPcpointTypes::tpcpoint()}, LogicalType::INTEGER, Gen_tspatial_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TPcpatchTypes::tpcpatch()}, LogicalType::INTEGER, Gen_tspatial_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {NpointTypes::tnpoint()}, LogicalType::INTEGER, Gen_tspatial_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {PoseTypes::tpose()}, LogicalType::INTEGER, Gen_tspatial_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TrgeometryTypes::trgeometry()}, LogicalType::INTEGER, Gen_tspatial_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {PosechainTypes::tposechain()}, LogicalType::INTEGER, Gen_tspatial_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, TgeompointType::tgeompoint(), Gen_tspatial_set_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, TgeogpointType::tgeogpoint(), Gen_tspatial_set_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, TGeometryTypes::tgeometry(), Gen_tspatial_set_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {TGeographyTypes::tgeography(), LogicalType::INTEGER}, TGeographyTypes::tgeography(), Gen_tspatial_set_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, CbufferTypes::tcbuffer(), Gen_tspatial_set_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {PoseTypes::tpose(), LogicalType::INTEGER}, PoseTypes::tpose(), Gen_tspatial_set_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, TrgeometryTypes::trgeometry(), Gen_tspatial_set_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {PosechainTypes::tposechain(), LogicalType::INTEGER}, PosechainTypes::tposechain(), Gen_tspatial_set_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, TgeompointType::tgeompoint(), Gen_tspatial_transform)); + RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, TgeogpointType::tgeogpoint(), Gen_tspatial_transform)); + RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, TGeometryTypes::tgeometry(), Gen_tspatial_transform)); + RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {TGeographyTypes::tgeography(), LogicalType::INTEGER}, TGeographyTypes::tgeography(), Gen_tspatial_transform)); + RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, CbufferTypes::tcbuffer(), Gen_tspatial_transform)); + RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {PoseTypes::tpose(), LogicalType::INTEGER}, PoseTypes::tpose(), Gen_tspatial_transform)); + RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, TrgeometryTypes::trgeometry(), Gen_tspatial_transform)); + RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {PosechainTypes::tposechain(), LogicalType::INTEGER}, PosechainTypes::tposechain(), Gen_tspatial_transform)); +} + +void RegisterGenerated_meos_setspan_inout(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("cbuffersetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::cbufferset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("jsonbsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::jsonbset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("npointsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::npointset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("pcpointsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::pcpointset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("pcpatchsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::pcpatchset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("posesetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::poseset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("posechainsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::posechainset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("quadbinsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::quadbinset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("s2cellsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::s2cellset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("intsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::intset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("bigintsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::bigintset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("floatsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::floatset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("textsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::textset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("datesetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::dateset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tstzsetFromHexWKB", {LogicalType::VARCHAR}, SetTypes::tstzset(), Gen_set_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("intspanFromHexWKB", {LogicalType::VARCHAR}, SpanTypes::intspan(), Gen_span_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("bigintspanFromHexWKB", {LogicalType::VARCHAR}, SpanTypes::bigintspan(), Gen_span_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("floatspanFromHexWKB", {LogicalType::VARCHAR}, SpanTypes::floatspan(), Gen_span_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tstzspanFromHexWKB", {LogicalType::VARCHAR}, SpanTypes::tstzspan(), Gen_span_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("datespanFromHexWKB", {LogicalType::VARCHAR}, SpanTypes::datespan(), Gen_span_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("intspansetFromHexWKB", {LogicalType::VARCHAR}, SpansetTypes::intspanset(), Gen_spanset_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("bigintspansetFromHexWKB", {LogicalType::VARCHAR}, SpansetTypes::bigintspanset(), Gen_spanset_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("floatspansetFromHexWKB", {LogicalType::VARCHAR}, SpansetTypes::floatspanset(), Gen_spanset_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("datespansetFromHexWKB", {LogicalType::VARCHAR}, SpansetTypes::datespanset(), Gen_spanset_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tstzspansetFromHexWKB", {LogicalType::VARCHAR}, SpansetTypes::tstzspanset(), Gen_spanset_from_hexwkb)); +} + +void RegisterGenerated_meos_box_comp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("=", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_ge)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_ge)); + RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("le", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_ne)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_tbox_ne)); +} + +void RegisterGenerated_meos_rgeo_comp_temp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {MobilityDuckGeometryType(), TrgeometryTypes::trgeometry()}, TemporalTypes::tbool(), Gen_teq_geo_trgeometry)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TrgeometryTypes::trgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_teq_trgeometry_geo)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {MobilityDuckGeometryType(), TrgeometryTypes::trgeometry()}, TemporalTypes::tbool(), Gen_tne_geo_trgeometry)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TrgeometryTypes::trgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tbool(), Gen_tne_trgeometry_geo)); +} + +void RegisterGenerated_meos_h3_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {H3indexTypes::th3index()}, H3indexTypes::h3index(), Gen_th3index_start_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {H3indexTypes::th3index()}, H3indexTypes::h3index(), Gen_th3index_end_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("valueN", {H3indexTypes::th3index(), LogicalType::INTEGER}, H3indexTypes::h3index(), Gen_th3index_value_n)); + RegisterSerializedScalarFunction(loader, ScalarFunction("getValues", {H3indexTypes::th3index()}, LogicalType::LIST(H3indexTypes::h3index()), Gen_th3index_values)); +} + +void RegisterGenerated_meos_pointcloud_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {TPcpointTypes::tpcpoint()}, TPcpointTypes::pcpoint(), Gen_tpcpoint_start_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {TPcpointTypes::tpcpoint()}, TPcpointTypes::pcpoint(), Gen_tpcpoint_end_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {TPcpatchTypes::tpcpatch()}, TPcpatchTypes::pcpatch(), Gen_tpcpatch_start_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {TPcpatchTypes::tpcpatch()}, TPcpatchTypes::pcpatch(), Gen_tpcpatch_end_value)); +} + +void RegisterGenerated_meos_geo_set_srid(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {SetTypes::cbufferset(), LogicalType::INTEGER}, SetTypes::cbufferset(), Gen_spatialset_set_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {SetTypes::poseset(), LogicalType::INTEGER}, SetTypes::poseset(), Gen_spatialset_set_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {SetTypes::posechainset(), LogicalType::INTEGER}, SetTypes::posechainset(), Gen_spatialset_set_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {SetTypes::cbufferset(), LogicalType::INTEGER}, SetTypes::cbufferset(), Gen_spatialset_transform)); + RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {SetTypes::poseset(), LogicalType::INTEGER}, SetTypes::poseset(), Gen_spatialset_transform)); + RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {SetTypes::posechainset(), LogicalType::INTEGER}, SetTypes::posechainset(), Gen_spatialset_transform)); +} + +void RegisterGenerated_meos_h3_inspection(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("th3GetBaseCellNumber", {H3indexTypes::th3index()}, TemporalTypes::tint(), Gen_th3index_get_base_cell_number)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3IsResClassIii", {H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_th3index_is_res_class_iii)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3IsPentagon", {H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_th3index_is_pentagon)); +} + +void RegisterGenerated_meos_s2cell_conversion(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("ts2cell", {TemporalTypes::tbigint()}, S2cellTypes::ts2cell(), Gen_tbigint_to_ts2cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TemporalTypes::tbigint()}, S2cellTypes::ts2cell(), Gen_tbigint_to_ts2cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tbigint", {S2cellTypes::ts2cell()}, TemporalTypes::tbigint(), Gen_ts2cell_to_tbigint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {S2cellTypes::ts2cell()}, TemporalTypes::tbigint(), Gen_ts2cell_to_tbigint)); +} + +void RegisterGenerated_meos_internal_temporal_inout(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tboolFromMFJSON", {LogicalType::VARCHAR}, TemporalTypes::tbool(), Gen_temporal_from_mfjson)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tintFromMFJSON", {LogicalType::VARCHAR}, TemporalTypes::tint(), Gen_temporal_from_mfjson)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tbigintFromMFJSON", {LogicalType::VARCHAR}, TemporalTypes::tbigint(), Gen_temporal_from_mfjson)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tfloatFromMFJSON", {LogicalType::VARCHAR}, TemporalTypes::tfloat(), Gen_temporal_from_mfjson)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ttextFromMFJSON", {LogicalType::VARCHAR}, TemporalTypes::ttext(), Gen_temporal_from_mfjson)); +} + +void RegisterGenerated_meos_rgeo_spatialfuncs(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("bodyPointTrajectory", {TrgeometryTypes::trgeometry(), MobilityDuckGeometryType()}, TgeompointType::tgeompoint(), Gen_trgeometry_body_point_trajectory)); +} + +void RegisterGenerated_meos_posechain_base_srid(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {PosechainTypes::posechain()}, LogicalType::INTEGER, Gen_posechain_srid)); } } // namespace duckdb diff --git a/src/generated/generated_temporal_udfs_7.cpp b/src/generated/generated_temporal_udfs_7.cpp index c80c664e..45e3fde0 100644 --- a/src/generated/generated_temporal_udfs_7.cpp +++ b/src/generated/generated_temporal_udfs_7.cpp @@ -353,7 +353,7 @@ static void Gen_adjacent_tspatial_tspatial(DataChunk &args, ExpressionState &, V Temporal *t2 = BlobToTemporal(in2); bool r = adjacent_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -365,7 +365,7 @@ static void Gen_contained_tspatial_tspatial(DataChunk &args, ExpressionState &, Temporal *t2 = BlobToTemporal(in2); bool r = contained_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -377,7 +377,7 @@ static void Gen_contains_tspatial_tspatial(DataChunk &args, ExpressionState &, V Temporal *t2 = BlobToTemporal(in2); bool r = contains_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -389,7 +389,7 @@ static void Gen_overlaps_tspatial_tspatial(DataChunk &args, ExpressionState &, V Temporal *t2 = BlobToTemporal(in2); bool r = overlaps_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -401,7 +401,7 @@ static void Gen_same_tspatial_tspatial(DataChunk &args, ExpressionState &, Vecto Temporal *t2 = BlobToTemporal(in2); bool r = same_tspatial_tspatial(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -413,7 +413,7 @@ static void Gen_adjacent_stbox_tspatial(DataChunk &args, ExpressionState &, Vect Temporal *t = BlobToTemporal(b); bool r = adjacent_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -425,7 +425,7 @@ static void Gen_adjacent_tspatial_stbox(DataChunk &args, ExpressionState &, Vect STBox *bx = BlobToStbox(b); bool r = adjacent_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -437,7 +437,7 @@ static void Gen_contained_stbox_tspatial(DataChunk &args, ExpressionState &, Vec Temporal *t = BlobToTemporal(b); bool r = contained_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -449,7 +449,7 @@ static void Gen_contained_tspatial_stbox(DataChunk &args, ExpressionState &, Vec STBox *bx = BlobToStbox(b); bool r = contained_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -461,7 +461,7 @@ static void Gen_contains_stbox_tspatial(DataChunk &args, ExpressionState &, Vect Temporal *t = BlobToTemporal(b); bool r = contains_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -473,7 +473,7 @@ static void Gen_contains_tspatial_stbox(DataChunk &args, ExpressionState &, Vect STBox *bx = BlobToStbox(b); bool r = contains_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -485,7 +485,7 @@ static void Gen_overlaps_stbox_tspatial(DataChunk &args, ExpressionState &, Vect Temporal *t = BlobToTemporal(b); bool r = overlaps_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -497,7 +497,7 @@ static void Gen_overlaps_tspatial_stbox(DataChunk &args, ExpressionState &, Vect STBox *bx = BlobToStbox(b); bool r = overlaps_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -509,7 +509,7 @@ static void Gen_same_stbox_tspatial(DataChunk &args, ExpressionState &, Vector & Temporal *t = BlobToTemporal(b); bool r = same_stbox_tspatial(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -521,7 +521,7 @@ static void Gen_same_tspatial_stbox(DataChunk &args, ExpressionState &, Vector & STBox *bx = BlobToStbox(b); bool r = same_tspatial_stbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -535,7 +535,7 @@ static void Gen_after_temporal_temporal(DataChunk &args, ExpressionState &, Vect Temporal *t2 = BlobToTemporal(in2); bool r = after_temporal_temporal(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -547,7 +547,7 @@ static void Gen_after_tnumber_tnumber(DataChunk &args, ExpressionState &, Vector Temporal *t2 = BlobToTemporal(in2); bool r = after_tnumber_tnumber(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -559,7 +559,7 @@ static void Gen_before_temporal_temporal(DataChunk &args, ExpressionState &, Vec Temporal *t2 = BlobToTemporal(in2); bool r = before_temporal_temporal(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -571,7 +571,7 @@ static void Gen_before_tnumber_tnumber(DataChunk &args, ExpressionState &, Vecto Temporal *t2 = BlobToTemporal(in2); bool r = before_tnumber_tnumber(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -583,7 +583,7 @@ static void Gen_left_tnumber_tnumber(DataChunk &args, ExpressionState &, Vector Temporal *t2 = BlobToTemporal(in2); bool r = left_tnumber_tnumber(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -595,7 +595,7 @@ static void Gen_overafter_temporal_temporal(DataChunk &args, ExpressionState &, Temporal *t2 = BlobToTemporal(in2); bool r = overafter_temporal_temporal(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -607,7 +607,7 @@ static void Gen_overafter_tnumber_tnumber(DataChunk &args, ExpressionState &, Ve Temporal *t2 = BlobToTemporal(in2); bool r = overafter_tnumber_tnumber(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -619,7 +619,7 @@ static void Gen_overbefore_temporal_temporal(DataChunk &args, ExpressionState &, Temporal *t2 = BlobToTemporal(in2); bool r = overbefore_temporal_temporal(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -631,7 +631,7 @@ static void Gen_overbefore_tnumber_tnumber(DataChunk &args, ExpressionState &, V Temporal *t2 = BlobToTemporal(in2); bool r = overbefore_tnumber_tnumber(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -643,7 +643,7 @@ static void Gen_overleft_tnumber_tnumber(DataChunk &args, ExpressionState &, Vec Temporal *t2 = BlobToTemporal(in2); bool r = overleft_tnumber_tnumber(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -655,7 +655,7 @@ static void Gen_overright_tnumber_tnumber(DataChunk &args, ExpressionState &, Ve Temporal *t2 = BlobToTemporal(in2); bool r = overright_tnumber_tnumber(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -667,7 +667,7 @@ static void Gen_right_tnumber_tnumber(DataChunk &args, ExpressionState &, Vector Temporal *t2 = BlobToTemporal(in2); bool r = right_tnumber_tnumber(t1, t2); free(t1); free(t2); - return r; + return (bool) r; }); } @@ -679,7 +679,7 @@ static void Gen_after_tbox_tnumber(DataChunk &args, ExpressionState &, Vector &r Temporal *t = BlobToTemporal(b); bool r = after_tbox_tnumber(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -691,7 +691,7 @@ static void Gen_after_tnumber_tbox(DataChunk &args, ExpressionState &, Vector &r TBox *bx = BlobToTbox(b); bool r = after_tnumber_tbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -703,7 +703,7 @@ static void Gen_before_tbox_tnumber(DataChunk &args, ExpressionState &, Vector & Temporal *t = BlobToTemporal(b); bool r = before_tbox_tnumber(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -715,7 +715,7 @@ static void Gen_before_tnumber_tbox(DataChunk &args, ExpressionState &, Vector & TBox *bx = BlobToTbox(b); bool r = before_tnumber_tbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -727,7 +727,7 @@ static void Gen_left_tbox_tnumber(DataChunk &args, ExpressionState &, Vector &re Temporal *t = BlobToTemporal(b); bool r = left_tbox_tnumber(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -739,7 +739,7 @@ static void Gen_left_tnumber_tbox(DataChunk &args, ExpressionState &, Vector &re TBox *bx = BlobToTbox(b); bool r = left_tnumber_tbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -751,7 +751,7 @@ static void Gen_overafter_tbox_tnumber(DataChunk &args, ExpressionState &, Vecto Temporal *t = BlobToTemporal(b); bool r = overafter_tbox_tnumber(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -763,7 +763,7 @@ static void Gen_overafter_tnumber_tbox(DataChunk &args, ExpressionState &, Vecto TBox *bx = BlobToTbox(b); bool r = overafter_tnumber_tbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -775,7 +775,7 @@ static void Gen_overbefore_tbox_tnumber(DataChunk &args, ExpressionState &, Vect Temporal *t = BlobToTemporal(b); bool r = overbefore_tbox_tnumber(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -787,7 +787,7 @@ static void Gen_overbefore_tnumber_tbox(DataChunk &args, ExpressionState &, Vect TBox *bx = BlobToTbox(b); bool r = overbefore_tnumber_tbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -799,7 +799,7 @@ static void Gen_overleft_tbox_tnumber(DataChunk &args, ExpressionState &, Vector Temporal *t = BlobToTemporal(b); bool r = overleft_tbox_tnumber(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -811,7 +811,7 @@ static void Gen_overleft_tnumber_tbox(DataChunk &args, ExpressionState &, Vector TBox *bx = BlobToTbox(b); bool r = overleft_tnumber_tbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -823,7 +823,7 @@ static void Gen_overright_tbox_tnumber(DataChunk &args, ExpressionState &, Vecto Temporal *t = BlobToTemporal(b); bool r = overright_tbox_tnumber(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -835,7 +835,7 @@ static void Gen_overright_tnumber_tbox(DataChunk &args, ExpressionState &, Vecto TBox *bx = BlobToTbox(b); bool r = overright_tnumber_tbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -847,7 +847,7 @@ static void Gen_right_tbox_tnumber(DataChunk &args, ExpressionState &, Vector &r Temporal *t = BlobToTemporal(b); bool r = right_tbox_tnumber(bx, t); free(bx); free(t); - return r; + return (bool) r; }); } @@ -859,7 +859,7 @@ static void Gen_right_tnumber_tbox(DataChunk &args, ExpressionState &, Vector &r TBox *bx = BlobToTbox(b); bool r = right_tnumber_tbox(t, bx); free(t); free(bx); - return r; + return (bool) r; }); } @@ -1717,7 +1717,7 @@ static void Gen_temporal_dyntimewarp_distance(DataChunk &args, ExpressionState & Temporal *t2 = BlobToTemporal(in2); double r = temporal_dyntimewarp_distance(t1, t2); free(t1); free(t2); - return r; + return (double) r; }); } @@ -1780,7 +1780,7 @@ static void Gen_temporal_frechet_distance(DataChunk &args, ExpressionState &, Ve Temporal *t2 = BlobToTemporal(in2); double r = temporal_frechet_distance(t1, t2); free(t1); free(t2); - return r; + return (double) r; }); } @@ -1843,7 +1843,7 @@ static void Gen_temporal_hausdorff_distance(DataChunk &args, ExpressionState &, Temporal *t2 = BlobToTemporal(in2); double r = temporal_hausdorff_distance(t1, t2); free(t1); free(t2); - return r; + return (double) r; }); } @@ -1855,7 +1855,7 @@ static void Gen_temporal_average_hausdorff_distance(DataChunk &args, ExpressionS Temporal *t2 = BlobToTemporal(in2); double r = temporal_average_hausdorff_distance(t1, t2); free(t1); free(t2); - return r; + return (double) r; }); } @@ -1867,708 +1867,826 @@ static void Gen_temporal_lcss_distance(DataChunk &args, ExpressionState &, Vecto Temporal *t2 = BlobToTemporal(in2); double r = temporal_lcss_distance(t1, t2, a2); free(t1); free(t2); - return r; + return (double) r; }); } -// ===== @ingroup meos_geo_dist ===== -static void Gen_tdistance_tgeo_geo(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_temporal_dist ===== +static void Gen_tdistance_tfloat_float(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in_t); - GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); - if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { - GSERIALIZED *gs_geog = geom_to_geog(gs); - free(gs); gs = gs_geog; - } - Temporal *r = tdistance_tgeo_geo(t, gs); - free(t); free(gs); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, double a2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tdistance_tfloat_float(t, a2); + free(t); + return TemporalToBlobN(result, r, mask, idx); + }); +} + +static void Gen_tdistance_tint_int(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tdistance_tint_int(t, a2); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tdistance_tgeo_tgeo(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tdistance_tnumber_tnumber(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - Temporal *r = tdistance_tgeo_tgeo(t1, t2); + Temporal *r = tdistance_tnumber_tnumber(t1, t2); free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_nad_tgeo_tgeo(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_tfloat_float(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, double a2) { + Temporal *t = BlobToTemporal(in); + double r = nad_tfloat_float(t, a2); + free(t); + return (double) r; + }); +} + +static void Gen_nad_tfloat_tfloat(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in1, string_t in2) { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - double r = nad_tgeo_tgeo(t1, t2); + double r = nad_tfloat_tfloat(t1, t2); free(t1); free(t2); - return r; + return (double) r; }); } -static void Gen_mindistance_tgeo_tgeo(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_tbigint_bigint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - TernaryExecutor::Execute(args.data[0], args.data[1], args.data[2], result, args.size(), - [&](string_t in1, string_t in2, double a2) { + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int64_t a2) { + Temporal *t = BlobToTemporal(in); + int64_t r = nad_tbigint_bigint(t, a2); + free(t); + return (double) r; + }); +} + +static void Gen_nad_tbigint_tbigint(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2) { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - double r = mindistance_tgeo_tgeo(t1, t2, a2); + int64_t r = nad_tbigint_tbigint(t1, t2); free(t1); free(t2); - return r; + return (double) r; }); } -static void Gen_mindistance_tgeoarr_tgeoarr(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_tint_int(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - auto &lv1 = args.data[0]; auto &lv2 = args.data[1]; - auto &child1 = ListVector::GetEntry(lv1); child1.Flatten(ListVector::GetListSize(lv1)); - auto &child2 = ListVector::GetEntry(lv2); child2.Flatten(ListVector::GetListSize(lv2)); - BinaryExecutor::Execute( - lv1, lv2, result, args.size(), - [&](list_entry_t le1, list_entry_t le2) -> double { - int n1, n2; - const Temporal **a1 = ListToTemporalArr(child1, le1, &n1); - const Temporal **a2 = ListToTemporalArr(child2, le2, &n2); - double r = mindistance_tgeoarr_tgeoarr(a1, n1, a2, n2); - FreeTemporalArr(a1, n1); FreeTemporalArr(a2, n2); - return r; + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int32_t a2) { + Temporal *t = BlobToTemporal(in); + int32_t r = nad_tint_int(t, a2); + free(t); + return (double) r; + }); +} + +static void Gen_nad_tint_tint(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2) { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + int32_t r = nad_tint_tint(t1, t2); + free(t1); free(t2); + return (double) r; }); } -static void Gen_nad_tgeo_stbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_tfloat_tbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> double { Temporal *t = BlobToTemporal(a); - STBox *bx = BlobToStbox(b); - double r = nad_tgeo_stbox(t, bx); + TBox *bx = BlobToTbox(b); + double r = nad_tfloat_tbox(t, bx); free(t); free(bx); if (r == std::numeric_limits::max()) { mask.SetInvalid(idx); return double(); } - return r; + return (double) r; }); } +static void Gen_nad_tbigint_tbox(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> double { + Temporal *t = BlobToTemporal(a); + TBox *bx = BlobToTbox(b); + int64_t r = nad_tbigint_tbox(t, bx); + free(t); free(bx); + if (r == std::numeric_limits::max()) { mask.SetInvalid(idx); return double(); } + return (double) r; + }); +} -// ===== @ingroup meos_json_comp_ever ===== -static void Gen_always_eq_tjsonb_jsonb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_tint_tbox(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> double { + Temporal *t = BlobToTemporal(a); + TBox *bx = BlobToTbox(b); + int32_t r = nad_tint_tbox(t, bx); + free(t); free(bx); + if (r == std::numeric_limits::max()) { mask.SetInvalid(idx); return double(); } + return (double) r; + }); +} + + +// ===== @ingroup meos_cbuffer_comp_ever ===== +static void Gen_always_eq_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in, string_t a2) { Temporal *t = BlobToTemporal(in); - Jsonb *a2p = BlobToJsonb(a2); - int32_t r = always_eq_tjsonb_jsonb(t, a2p); + Cbuffer *a2p = BlobToCbuffer(a2); + int32_t r = always_eq_tcbuffer_cbuffer(t, a2p); free(a2p); free(t); return (r != 0); }); } -static void Gen_always_eq_tjsonb_tjsonb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_always_eq_tcbuffer_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in1, string_t in2) { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - int32_t r = always_eq_tjsonb_tjsonb(t1, t2); + int32_t r = always_eq_tcbuffer_tcbuffer(t1, t2); free(t1); free(t2); return (r != 0); }); } -static void Gen_always_ne_tjsonb_jsonb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_always_ne_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in, string_t a2) { Temporal *t = BlobToTemporal(in); - Jsonb *a2p = BlobToJsonb(a2); - int32_t r = always_ne_tjsonb_jsonb(t, a2p); + Cbuffer *a2p = BlobToCbuffer(a2); + int32_t r = always_ne_tcbuffer_cbuffer(t, a2p); free(a2p); free(t); return (r != 0); }); } -static void Gen_always_ne_tjsonb_tjsonb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_always_ne_tcbuffer_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in1, string_t in2) { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - int32_t r = always_ne_tjsonb_tjsonb(t1, t2); + int32_t r = always_ne_tcbuffer_tcbuffer(t1, t2); free(t1); free(t2); return (r != 0); }); } -static void Gen_ever_eq_tjsonb_jsonb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_ever_eq_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in, string_t a2) { Temporal *t = BlobToTemporal(in); - Jsonb *a2p = BlobToJsonb(a2); - int32_t r = ever_eq_tjsonb_jsonb(t, a2p); + Cbuffer *a2p = BlobToCbuffer(a2); + int32_t r = ever_eq_tcbuffer_cbuffer(t, a2p); free(a2p); free(t); return (r != 0); }); } -static void Gen_ever_eq_tjsonb_tjsonb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_ever_eq_tcbuffer_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in1, string_t in2) { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - int32_t r = ever_eq_tjsonb_tjsonb(t1, t2); + int32_t r = ever_eq_tcbuffer_tcbuffer(t1, t2); free(t1); free(t2); return (r != 0); }); } -static void Gen_ever_ne_tjsonb_jsonb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_ever_ne_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in, string_t a2) { Temporal *t = BlobToTemporal(in); - Jsonb *a2p = BlobToJsonb(a2); - int32_t r = ever_ne_tjsonb_jsonb(t, a2p); + Cbuffer *a2p = BlobToCbuffer(a2); + int32_t r = ever_ne_tcbuffer_cbuffer(t, a2p); free(a2p); free(t); return (r != 0); }); } -static void Gen_ever_ne_tjsonb_tjsonb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_ever_ne_tcbuffer_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in1, string_t in2) { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - int32_t r = ever_ne_tjsonb_tjsonb(t1, t2); + int32_t r = ever_ne_tcbuffer_tcbuffer(t1, t2); free(t1); free(t2); return (r != 0); }); } -// ===== @ingroup meos_geo_srid ===== -static void Gen_tspatial_srid(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_cellindex ===== +static void Gen_tcellindex_get_resolution(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - int32_t r = tspatial_srid(t); + Temporal *r = tcellindex_get_resolution(t); free(t); - return r; + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tspatial_set_srid(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tcellindex_is_valid_cell(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tspatial_set_srid(t, a2); + Temporal *r = tcellindex_is_valid_cell(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tspatial_transform(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tcellindex_cell_to_parent(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tspatial_transform(t, a2); + Temporal *r = tcellindex_cell_to_parent(t, a2); free(t); return TemporalToBlobN(result, r, mask, idx); }); } - -// ===== @ingroup meos_npoint_base_comp ===== -static void Gen_npoint_eq(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - Npoint *s1 = BlobToNpoint(a); - Npoint *s2 = BlobToNpoint(b); - bool r = npoint_eq(s1, s2); - free(s1); free(s2); - return r; - }); -} - -static void Gen_npoint_ge(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - Npoint *s1 = BlobToNpoint(a); - Npoint *s2 = BlobToNpoint(b); - bool r = npoint_ge(s1, s2); - free(s1); free(s2); - return r; - }); -} - -static void Gen_npoint_gt(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - Npoint *s1 = BlobToNpoint(a); - Npoint *s2 = BlobToNpoint(b); - bool r = npoint_gt(s1, s2); - free(s1); free(s2); - return r; - }); -} - -static void Gen_npoint_le(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tcellindex_cell_to_point(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - Npoint *s1 = BlobToNpoint(a); - Npoint *s2 = BlobToNpoint(b); - bool r = npoint_le(s1, s2); - free(s1); free(s2); - return r; + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tcellindex_cell_to_point(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_npoint_lt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tcellindex_cell_to_boundary(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - Npoint *s1 = BlobToNpoint(a); - Npoint *s2 = BlobToNpoint(b); - bool r = npoint_lt(s1, s2); - free(s1); free(s2); - return r; + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tcellindex_cell_to_boundary(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_npoint_ne(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tcellindex_cell_area(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - Npoint *s1 = BlobToNpoint(a); - Npoint *s2 = BlobToNpoint(b); - bool r = npoint_ne(s1, s2); - free(s1); free(s2); - return r; + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tcellindex_cell_area(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_npoint_same(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tquadbin_cell_to_quadkey(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, string_t b) { - Npoint *s1 = BlobToNpoint(a); - Npoint *s2 = BlobToNpoint(b); - bool r = npoint_same(s1, s2); - free(s1); free(s2); - return r; + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = tquadbin_cell_to_quadkey(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_quadbin_comp_temp ===== -static void Gen_teq_quadbin_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pose_restrict ===== +static void Gen_tpose_at_geom(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](int64_t a1, string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = teq_quadbin_tquadbin((uint64_t) a1, t); - free(t); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in_t); + GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); + if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { + GSERIALIZED *gs_geog = geom_to_geog(gs); + free(gs); gs = gs_geog; + } + Temporal *r = tpose_at_geom(t, gs); + free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_teq_tquadbin_quadbin(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_at_pose(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, int64_t a2, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = teq_tquadbin_quadbin(t, (uint64_t) a2); - free(t); + Pose *a2p = BlobToPose(a2); + Temporal *r = tpose_at_pose(t, a2p); + free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_teq_tquadbin_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_minus_geom(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = teq_tquadbin_tquadbin(t1, t2); - free(t1); free(t2); + [&](string_t in_t, string_t in_g, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in_t); + GSERIALIZED *gs = GeometryToGSerialized(in_g, tspatial_srid(t)); + if (MEOS_FLAGS_GET_GEODETIC(t->flags)) { + GSERIALIZED *gs_geog = geom_to_geog(gs); + free(gs); gs = gs_geog; + } + Temporal *r = tpose_minus_geom(t, gs); + free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_quadbin_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_minus_pose(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](int64_t a1, string_t in, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tne_quadbin_tquadbin((uint64_t) a1, t); - free(t); + Pose *a2p = BlobToPose(a2); + Temporal *r = tpose_minus_pose(t, a2p); + free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_tquadbin_quadbin(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_at_elevation(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, int64_t a2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tne_tquadbin_quadbin(t, (uint64_t) a2); - free(t); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(a); + Span *cc = BlobToSpan(b); + Temporal *r = tpose_at_elevation(t, cc); + free(t); free(cc); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_tquadbin_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_minus_elevation(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = tne_tquadbin_tquadbin(t1, t2); - free(t1); free(t2); + [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(a); + Span *cc = BlobToSpan(b); + Temporal *r = tpose_minus_elevation(t, cc); + free(t); free(cc); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_geo_box_topo ===== -static void Gen_adjacent_stbox_stbox(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pointcloud_box_comp ===== +static void Gen_tpcbox_eq(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = adjacent_stbox_stbox(s1, s2); + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = tpcbox_eq(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_contained_stbox_stbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcbox_ne(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = contained_stbox_stbox(s1, s2); + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = tpcbox_ne(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_contains_stbox_stbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcbox_lt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = contains_stbox_stbox(s1, s2); + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = tpcbox_lt(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_overlaps_stbox_stbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcbox_le(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = overlaps_stbox_stbox(s1, s2); + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = tpcbox_le(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_same_stbox_stbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcbox_gt(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t a, string_t b) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = same_stbox_stbox(s1, s2); + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = tpcbox_gt(s1, s2); free(s1); free(s2); return r; }); } - -// ===== @ingroup meos_pointcloud_base_accessor ===== -static void Gen_pcpoint_get_pcid(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcbox_ge(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Pcpoint *v = BlobToPcpoint(in); - uint32_t r = pcpoint_get_pcid(v); - free(v); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = tpcbox_ge(s1, s2); + free(s1); free(s2); return r; }); } -static void Gen_pcpoint_hash(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_box_bbox_topo ===== +static void Gen_adjacent_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Pcpoint *v = BlobToPcpoint(in); - uint32_t r = pcpoint_hash(v); - free(v); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = adjacent_tbox_tbox(s1, s2); + free(s1); free(s2); return r; }); } -static void Gen_pcpatch_get_pcid(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_contained_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Pcpatch *v = BlobToPcpatch(in); - uint32_t r = pcpatch_get_pcid(v); - free(v); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = contained_tbox_tbox(s1, s2); + free(s1); free(s2); return r; }); } -static void Gen_pcpatch_hash(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_contains_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Pcpatch *v = BlobToPcpatch(in); - uint32_t r = pcpatch_hash(v); - free(v); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = contains_tbox_tbox(s1, s2); + free(s1); free(s2); return r; }); } -static void Gen_pcpoint_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_overlaps_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, uint64_t a2) { - Pcpoint *s = BlobToPcpoint(in); - uint64_t r = pcpoint_hash_extended(s, a2); - free(s); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = overlaps_tbox_tbox(s1, s2); + free(s1); free(s2); return r; }); } -static void Gen_pcpatch_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_same_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, uint64_t a2) { - Pcpatch *s = BlobToPcpatch(in); - uint64_t r = pcpatch_hash_extended(s, a2); - free(s); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b) { + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = same_tbox_tbox(s1, s2); + free(s1); free(s2); return r; }); } -// ===== @ingroup meos_cbuffer_conversion ===== -static void Gen_tcbuffer_to_tfloat(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_s2cell_accessor ===== +static void Gen_ts2cell_start_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) -> int64_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tcbuffer_to_tfloat(t); + int64_t r = (int64_t) ts2cell_start_value(t); free(t); - return TemporalToBlobN(result, r, mask, idx); + return r; }); } -static void Gen_tcbuffer_to_tgeompoint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_ts2cell_end_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) -> int64_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tcbuffer_to_tgeompoint(t); + int64_t r = (int64_t) ts2cell_end_value(t); free(t); - return TemporalToBlobN(result, r, mask, idx); + return r; }); } -static void Gen_tgeometry_to_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_ts2cell_value_n(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> int64_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tgeometry_to_tcbuffer(t); + uint64_t v; + bool ok = ts2cell_value_n(t, a2, &v); free(t); - return TemporalToBlobN(result, r, mask, idx); - }); + if (!ok) { mask.SetInvalid(idx); return int64_t(); } + return (int64_t) v; + }); +} + +static void Gen_ts2cell_values(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + auto &in_vec = args.data[0]; + idx_t row_count = args.size(); + in_vec.Flatten(row_count); + auto &result_validity = FlatVector::Validity(result); + auto list_entries = FlatVector::GetData(result); + idx_t off = 0; + for (idx_t i = 0; i < row_count; ++i) { + if (in_vec.GetValue(i).IsNull()) { result_validity.SetInvalid(i); continue; } + string_t blob = FlatVector::GetData(in_vec)[i]; + Temporal *in = BlobToTemporal(blob); + int count = 0; + uint64_t * arr = ts2cell_values(in, &count); + free(in); + int n = (arr && count > 0) ? count : 0; + ListVector::Reserve(result, off + n); + ListVector::SetListSize(result, off + n); + list_entries[i] = list_entry_t{off, (uint64_t) n}; + if (n > 0) { + auto &child_vector = ListVector::GetEntry(result); + child_vector.SetVectorType(VectorType::FLAT_VECTOR); + auto *cd = FlatVector::GetData(child_vector); + for (int j = 0; j < n; ++j) { cd[off + j] = (int64_t) arr[j]; } + off += n; + } + if (arr) free(arr); + result_validity.SetValid(i); + } } -// ===== @ingroup meos_npoint_base_inout ===== -static void Gen_npoint_as_ewkt(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, int32_t a2) { - Npoint *s = BlobToNpoint(a); - char *r = npoint_as_ewkt(s, a2); - free(s); - return TakeCString(result, r); - }); -} - -static void Gen_npoint_as_ewkt_d(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pointcloud_box_accessor ===== +static void Gen_tpcbox_hasx(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t a) { - Npoint *s = BlobToNpoint(a); - char *r = npoint_as_ewkt(s, 15); - free(s); - return TakeCString(result, r); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + TPCBox *v = BlobToTpcbox(in); + bool r = tpcbox_hasx(v); + free(v); + return r; }); } -static void Gen_npoint_as_text(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcbox_hasz(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, int32_t a2) { - Npoint *s = BlobToNpoint(a); - char *r = npoint_as_text(s, a2); - free(s); - return TakeCString(result, r); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + TPCBox *v = BlobToTpcbox(in); + bool r = tpcbox_hasz(v); + free(v); + return r; }); } -static void Gen_npoint_as_text_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcbox_hast(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t a) { - Npoint *s = BlobToNpoint(a); - char *r = npoint_as_text(s, 15); - free(s); - return TakeCString(result, r); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + TPCBox *v = BlobToTpcbox(in); + bool r = tpcbox_hast(v); + free(v); + return r; }); } - -// ===== @ingroup meos_posechain_base_accessor ===== -static void Gen_posechain_num_poses(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcbox_srid(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t in) { - PoseChain *v = BlobToPosechain(in); - int32_t r = posechain_num_poses(v); + TPCBox *v = BlobToTpcbox(in); + int32_t r = tpcbox_srid(v); free(v); return r; }); } -static void Gen_posechain_hash(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcbox_pcid(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::Execute(args.data[0], result, args.size(), [&](string_t in) { - PoseChain *v = BlobToPosechain(in); - uint32_t r = posechain_hash(v); + TPCBox *v = BlobToTpcbox(in); + uint32_t r = tpcbox_pcid(v); free(v); return r; }); } -static void Gen_posechain_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_cbuffer_accessor ===== +static void Gen_tcbuffer_end_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, uint64_t a2) { - PoseChain *s = BlobToPosechain(in); - uint64_t r = posechain_hash_extended(s, a2); - free(s); - return r; + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Cbuffer * r = tcbuffer_end_value(t); + free(t); + return CbufferToBlobN(result, r, mask, idx); }); } +static void Gen_tcbuffer_convex_hull(DataChunk &args, ExpressionState &state, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + GSERIALIZED * r = tcbuffer_convex_hull(t); + free(t); + if (!r) { mask.SetInvalid(idx); return string_t(); } + string_t out = GSerializedToGeometry(r, state, result); + free(r); + return out; + }); +} -// ===== @ingroup meos_posechain_comp_temp ===== -static void Gen_teq_tposechain_posechain(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tcbuffer_start_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - PoseChain *a2p = BlobToPosechain(a2); - Temporal *r = teq_tposechain_posechain(t, a2p); - free(a2p); free(t); + Cbuffer * r = tcbuffer_start_value(t); + free(t); + return CbufferToBlobN(result, r, mask, idx); + }); +} + + +// ===== @ingroup meos_rgeo_transf ===== +static void Gen_trgeometry_round(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = trgeometry_round(t, a2); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_tposechain_posechain(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_trgeometry_round_d(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - PoseChain *a2p = BlobToPosechain(a2); - Temporal *r = tne_tposechain_posechain(t, a2p); - free(a2p); free(t); + Temporal *r = trgeometry_round(t, 0); + free(t); + return TemporalToBlobN(result, r, mask, idx); + }); +} + +static void Gen_trgeometry_as_tinstant(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Temporal *r = (Temporal *) trgeometry_as_tinstant(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_pose_conversion ===== -static void Gen_tpose_make(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_s2cell_comp_temp ===== +static void Gen_teq_ts2cell_ts2cell(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t1 = BlobToTemporal(in1); Temporal *t2 = BlobToTemporal(in2); - Temporal *r = tpose_make(t1, t2); + Temporal *r = teq_ts2cell_ts2cell(t1, t2); free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpose_to_tpoint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tne_ts2cell_ts2cell(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + Temporal *r = tne_ts2cell_ts2cell(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); + }); +} + + +// ===== @ingroup meos_h3_metrics ===== +static void Gen_th3index_edge_length(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tpose_to_tpoint(t); + Temporal *r = th3index_edge_length(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } - -// ===== @ingroup meos_h3_comp ===== -static void Gen_ever_eq_h3indexset_th3index(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tgeogpoint_great_circle_distance(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in_s, string_t in_t, ValidityMask &mask, idx_t idx) { - Set *s = BlobToSet(in_s); - Temporal *t = BlobToTemporal(in_t); - int r = ever_eq_h3indexset_th3index(s, t); - free(s); free(t); - if (r < 0) { mask.SetInvalid(idx); return false; } - return r != 0; + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + Temporal *r = tgeogpoint_great_circle_distance(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_s2 ===== -static void Gen_ts2cell_cell_to_token(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_posechain_conversion ===== +static void Gen_tposechain_to_tpose(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = ts2cell_cell_to_token(t); + Temporal *r = tposechain_to_tpose(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } + +// ===== @ingroup meos_pose_base_transf ===== +static void Gen_pose_compose(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> string_t { + Pose *s1 = BlobToPose(a); + Pose *s2 = BlobToPose(b); + Pose *r = pose_compose(s1, s2); + free(s1); free(s2); + if (!r) { mask.SetInvalid(idx); return string_t(); } + return PoseToBlob(result, r); + }); +} + } // anonymous void RegisterGenerated_meos_geo_bbox_topo(ExtensionLoader &loader) { @@ -3314,186 +3432,156 @@ void RegisterGenerated_meos_temporal_analytics_similarity(ExtensionLoader &loade RegisterSerializedScalarFunction(loader, ScalarFunction("lcssDistance", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint(), LogicalType::DOUBLE}, LogicalType::DOUBLE, Gen_temporal_lcss_distance)); } -void RegisterGenerated_meos_geo_dist(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TgeompointType::tgeompoint(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TgeompointType::tgeompoint(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TgeogpointType::tgeogpoint(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TgeogpointType::tgeogpoint(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TGeometryTypes::tgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TGeometryTypes::tgeometry(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TGeographyTypes::tgeography(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TGeographyTypes::tgeography(), MobilityDuckGeometryType()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_geo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TGeometryTypes::tgeometry(), TGeometryTypes::tgeometry()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TGeometryTypes::tgeometry(), TGeometryTypes::tgeometry()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TGeographyTypes::tgeography(), TGeographyTypes::tgeography()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TGeographyTypes::tgeography(), TGeographyTypes::tgeography()}, TemporalTypes::tfloat(), Gen_tdistance_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TGeometryTypes::tgeometry(), TGeometryTypes::tgeometry()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TGeometryTypes::tgeometry(), TGeometryTypes::tgeometry()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TGeographyTypes::tgeography(), TGeographyTypes::tgeography()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TGeographyTypes::tgeography(), TGeographyTypes::tgeography()}, LogicalType::DOUBLE, Gen_nad_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance_transfn", {TgeompointType::tgeompoint(), TgeompointType::tgeompoint(), LogicalType::DOUBLE}, LogicalType::DOUBLE, Gen_mindistance_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance_transfn", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint(), LogicalType::DOUBLE}, LogicalType::DOUBLE, Gen_mindistance_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance_transfn", {TGeometryTypes::tgeometry(), TGeometryTypes::tgeometry(), LogicalType::DOUBLE}, LogicalType::DOUBLE, Gen_mindistance_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance_transfn", {TGeographyTypes::tgeography(), TGeographyTypes::tgeography(), LogicalType::DOUBLE}, LogicalType::DOUBLE, Gen_mindistance_tgeo_tgeo)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance", {LogicalType::LIST(TgeompointType::tgeompoint()), LogicalType::LIST(TgeompointType::tgeompoint())}, LogicalType::DOUBLE, Gen_mindistance_tgeoarr_tgeoarr)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance", {LogicalType::LIST(TgeogpointType::tgeogpoint()), LogicalType::LIST(TgeogpointType::tgeogpoint())}, LogicalType::DOUBLE, Gen_mindistance_tgeoarr_tgeoarr)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance", {LogicalType::LIST(TGeometryTypes::tgeometry()), LogicalType::LIST(TGeometryTypes::tgeometry())}, LogicalType::DOUBLE, Gen_mindistance_tgeoarr_tgeoarr)); - RegisterSerializedScalarFunction(loader, ScalarFunction("minDistance", {LogicalType::LIST(TGeographyTypes::tgeography()), LogicalType::LIST(TGeographyTypes::tgeography())}, LogicalType::DOUBLE, Gen_mindistance_tgeoarr_tgeoarr)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TgeompointType::tgeompoint(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TgeogpointType::tgeogpoint(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TGeometryTypes::tgeometry(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TGeometryTypes::tgeometry(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TGeographyTypes::tgeography(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TGeographyTypes::tgeography(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); -} - -void RegisterGenerated_meos_json_comp_ever(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_always_eq_tjsonb_jsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_always_eq_tjsonb_jsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_always_eq_tjsonb_tjsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_always_eq_tjsonb_tjsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_always_ne_tjsonb_jsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_always_ne_tjsonb_jsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_always_ne_tjsonb_tjsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_always_ne_tjsonb_tjsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_ever_eq_tjsonb_jsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_ever_eq_tjsonb_jsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_ever_eq_tjsonb_tjsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_ever_eq_tjsonb_tjsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_ever_ne_tjsonb_jsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {TJsonbTypes::tjsonb(), TJsonbTypes::jsonb()}, LogicalType::BOOLEAN, Gen_ever_ne_tjsonb_jsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_ever_ne_tjsonb_tjsonb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {TJsonbTypes::tjsonb(), TJsonbTypes::tjsonb()}, LogicalType::BOOLEAN, Gen_ever_ne_tjsonb_tjsonb)); -} - -void RegisterGenerated_meos_geo_srid(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TgeompointType::tgeompoint()}, LogicalType::INTEGER, Gen_tspatial_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TgeogpointType::tgeogpoint()}, LogicalType::INTEGER, Gen_tspatial_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TGeometryTypes::tgeometry()}, LogicalType::INTEGER, Gen_tspatial_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TGeographyTypes::tgeography()}, LogicalType::INTEGER, Gen_tspatial_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {CbufferTypes::tcbuffer()}, LogicalType::INTEGER, Gen_tspatial_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TPcpointTypes::tpcpoint()}, LogicalType::INTEGER, Gen_tspatial_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TPcpatchTypes::tpcpatch()}, LogicalType::INTEGER, Gen_tspatial_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {NpointTypes::tnpoint()}, LogicalType::INTEGER, Gen_tspatial_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {PoseTypes::tpose()}, LogicalType::INTEGER, Gen_tspatial_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TrgeometryTypes::trgeometry()}, LogicalType::INTEGER, Gen_tspatial_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {PosechainTypes::tposechain()}, LogicalType::INTEGER, Gen_tspatial_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, TgeompointType::tgeompoint(), Gen_tspatial_set_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, TgeogpointType::tgeogpoint(), Gen_tspatial_set_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, TGeometryTypes::tgeometry(), Gen_tspatial_set_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {TGeographyTypes::tgeography(), LogicalType::INTEGER}, TGeographyTypes::tgeography(), Gen_tspatial_set_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, CbufferTypes::tcbuffer(), Gen_tspatial_set_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {PoseTypes::tpose(), LogicalType::INTEGER}, PoseTypes::tpose(), Gen_tspatial_set_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, TrgeometryTypes::trgeometry(), Gen_tspatial_set_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {PosechainTypes::tposechain(), LogicalType::INTEGER}, PosechainTypes::tposechain(), Gen_tspatial_set_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, TgeompointType::tgeompoint(), Gen_tspatial_transform)); - RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, TgeogpointType::tgeogpoint(), Gen_tspatial_transform)); - RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, TGeometryTypes::tgeometry(), Gen_tspatial_transform)); - RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {TGeographyTypes::tgeography(), LogicalType::INTEGER}, TGeographyTypes::tgeography(), Gen_tspatial_transform)); - RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, CbufferTypes::tcbuffer(), Gen_tspatial_transform)); - RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {PoseTypes::tpose(), LogicalType::INTEGER}, PoseTypes::tpose(), Gen_tspatial_transform)); - RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, TrgeometryTypes::trgeometry(), Gen_tspatial_transform)); - RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {PosechainTypes::tposechain(), LogicalType::INTEGER}, PosechainTypes::tposechain(), Gen_tspatial_transform)); -} - -void RegisterGenerated_meos_npoint_base_comp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_eq)); - RegisterSerializedScalarFunction(loader, ScalarFunction("=", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_eq)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_ge)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_ge)); - RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_gt)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_gt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("le", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_le)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_le)); - RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_lt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_lt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_ne)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_ne)); - RegisterSerializedScalarFunction(loader, ScalarFunction("same", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_same)); - RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {NpointTypes::npoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_npoint_same)); -} - -void RegisterGenerated_meos_quadbin_comp_temp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {QuadbinTypes::quadbin(), QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_teq_quadbin_tquadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {QuadbinTypes::tquadbin(), QuadbinTypes::quadbin()}, TemporalTypes::tbool(), Gen_teq_tquadbin_quadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_teq_tquadbin_tquadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {QuadbinTypes::quadbin(), QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_tne_quadbin_tquadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {QuadbinTypes::tquadbin(), QuadbinTypes::quadbin()}, TemporalTypes::tbool(), Gen_tne_tquadbin_quadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_tne_tquadbin_tquadbin)); -} - -void RegisterGenerated_meos_geo_box_topo(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_adjacent_stbox_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_adjacent_stbox_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contained_stbox_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contained_stbox_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contains_stbox_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_contains_stbox_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overlaps_stbox_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_overlaps_stbox_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("same", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_same_stbox_stbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_same_stbox_stbox)); -} - -void RegisterGenerated_meos_pointcloud_base_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("pcid", {TPcpointTypes::pcpoint()}, LogicalType::UINTEGER, Gen_pcpoint_get_pcid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("hash", {TPcpointTypes::pcpoint()}, LogicalType::UINTEGER, Gen_pcpoint_hash)); - RegisterSerializedScalarFunction(loader, ScalarFunction("pcid", {TPcpatchTypes::pcpatch()}, LogicalType::UINTEGER, Gen_pcpatch_get_pcid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("hash", {TPcpatchTypes::pcpatch()}, LogicalType::UINTEGER, Gen_pcpatch_hash)); - RegisterSerializedScalarFunction(loader, ScalarFunction("hashExtended", {TPcpointTypes::pcpoint(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_pcpoint_hash_extended)); - RegisterSerializedScalarFunction(loader, ScalarFunction("hashExtended", {TPcpatchTypes::pcpatch(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_pcpatch_hash_extended)); -} - -void RegisterGenerated_meos_cbuffer_conversion(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tfloat", {CbufferTypes::tcbuffer()}, TemporalTypes::tfloat(), Gen_tcbuffer_to_tfloat)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {CbufferTypes::tcbuffer()}, TemporalTypes::tfloat(), Gen_tcbuffer_to_tfloat)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tgeompoint", {CbufferTypes::tcbuffer()}, TgeompointType::tgeompoint(), Gen_tcbuffer_to_tgeompoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {CbufferTypes::tcbuffer()}, TgeompointType::tgeompoint(), Gen_tcbuffer_to_tgeompoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tcbuffer", {TGeometryTypes::tgeometry()}, CbufferTypes::tcbuffer(), Gen_tgeometry_to_tcbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TGeometryTypes::tgeometry()}, CbufferTypes::tcbuffer(), Gen_tgeometry_to_tcbuffer)); -} - -void RegisterGenerated_meos_npoint_base_inout(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {NpointTypes::npoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_npoint_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {NpointTypes::npoint()}, LogicalType::VARCHAR, Gen_npoint_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {NpointTypes::npoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_npoint_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {NpointTypes::npoint()}, LogicalType::VARCHAR, Gen_npoint_as_text_d)); -} - -void RegisterGenerated_meos_posechain_base_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("numPoses", {PosechainTypes::posechain()}, LogicalType::INTEGER, Gen_posechain_num_poses)); - RegisterSerializedScalarFunction(loader, ScalarFunction("hash", {PosechainTypes::posechain()}, LogicalType::UINTEGER, Gen_posechain_hash)); - RegisterSerializedScalarFunction(loader, ScalarFunction("hashExtended", {PosechainTypes::posechain(), LogicalType::UBIGINT}, LogicalType::UBIGINT, Gen_posechain_hash_extended)); -} - -void RegisterGenerated_meos_posechain_comp_temp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, TemporalTypes::tbool(), Gen_teq_tposechain_posechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, TemporalTypes::tbool(), Gen_tne_tposechain_posechain)); -} - -void RegisterGenerated_meos_pose_conversion(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tpose", {PoseTypes::tpose(), PoseTypes::tpose()}, PoseTypes::tpose(), Gen_tpose_make)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tgeompoint", {PoseTypes::tpose()}, PoseTypes::tpose(), Gen_tpose_to_tpoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {PoseTypes::tpose()}, PoseTypes::tpose(), Gen_tpose_to_tpoint)); -} - -void RegisterGenerated_meos_h3_comp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {H3indexTypes::h3indexset(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_ever_eq_h3indexset_th3index)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {H3indexTypes::h3indexset(), H3indexTypes::th3index()}, LogicalType::BOOLEAN, Gen_ever_eq_h3indexset_th3index)); -} - -void RegisterGenerated_meos_s2(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("ts2CellToToken", {S2cellTypes::ts2cell()}, TemporalTypes::ttext(), Gen_ts2cell_cell_to_token)); +void RegisterGenerated_meos_temporal_dist(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TemporalTypes::tfloat(), LogicalType::DOUBLE}, TemporalTypes::tfloat(), Gen_tdistance_tfloat_float)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TemporalTypes::tfloat(), LogicalType::DOUBLE}, TemporalTypes::tfloat(), Gen_tdistance_tfloat_float)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TemporalTypes::tint(), LogicalType::INTEGER}, TemporalTypes::tint(), Gen_tdistance_tint_int)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TemporalTypes::tint(), LogicalType::INTEGER}, TemporalTypes::tint(), Gen_tdistance_tint_int)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TemporalTypes::tint(), TemporalTypes::tint()}, TemporalTypes::tint(), Gen_tdistance_tnumber_tnumber)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TemporalTypes::tint(), TemporalTypes::tint()}, TemporalTypes::tint(), Gen_tdistance_tnumber_tnumber)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tDistance", {TemporalTypes::tfloat(), TemporalTypes::tfloat()}, TemporalTypes::tfloat(), Gen_tdistance_tnumber_tnumber)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<->", {TemporalTypes::tfloat(), TemporalTypes::tfloat()}, TemporalTypes::tfloat(), Gen_tdistance_tnumber_tnumber)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tfloat(), LogicalType::DOUBLE}, LogicalType::DOUBLE, Gen_nad_tfloat_float)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tfloat(), LogicalType::DOUBLE}, LogicalType::DOUBLE, Gen_nad_tfloat_float)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tfloat(), TemporalTypes::tfloat()}, LogicalType::DOUBLE, Gen_nad_tfloat_tfloat)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tfloat(), TemporalTypes::tfloat()}, LogicalType::DOUBLE, Gen_nad_tfloat_tfloat)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tbigint(), LogicalType::BIGINT}, LogicalType::DOUBLE, Gen_nad_tbigint_bigint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tbigint(), LogicalType::BIGINT}, LogicalType::DOUBLE, Gen_nad_tbigint_bigint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tbigint(), TemporalTypes::tbigint()}, LogicalType::DOUBLE, Gen_nad_tbigint_tbigint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tbigint(), TemporalTypes::tbigint()}, LogicalType::DOUBLE, Gen_nad_tbigint_tbigint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tint(), LogicalType::INTEGER}, LogicalType::DOUBLE, Gen_nad_tint_int)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tint(), LogicalType::INTEGER}, LogicalType::DOUBLE, Gen_nad_tint_int)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::DOUBLE, Gen_nad_tint_tint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tint(), TemporalTypes::tint()}, LogicalType::DOUBLE, Gen_nad_tint_tint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tfloat(), TboxType::tbox()}, LogicalType::DOUBLE, Gen_nad_tfloat_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tfloat(), TboxType::tbox()}, LogicalType::DOUBLE, Gen_nad_tfloat_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tbigint(), TboxType::tbox()}, LogicalType::DOUBLE, Gen_nad_tbigint_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tbigint(), TboxType::tbox()}, LogicalType::DOUBLE, Gen_nad_tbigint_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("nearestApproachDistance", {TemporalTypes::tint(), TboxType::tbox()}, LogicalType::DOUBLE, Gen_nad_tint_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tint(), TboxType::tbox()}, LogicalType::DOUBLE, Gen_nad_tint_tbox)); +} + +void RegisterGenerated_meos_cbuffer_comp_ever(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_always_eq_tcbuffer_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_always_eq_tcbuffer_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_always_eq_tcbuffer_tcbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_always_eq_tcbuffer_tcbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_always_ne_tcbuffer_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_always_ne_tcbuffer_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_always_ne_tcbuffer_tcbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_always_ne_tcbuffer_tcbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_ever_eq_tcbuffer_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_ever_eq_tcbuffer_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_ever_eq_tcbuffer_tcbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_ever_eq_tcbuffer_tcbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_ever_ne_tcbuffer_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, LogicalType::BOOLEAN, Gen_ever_ne_tcbuffer_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_ever_ne_tcbuffer_tcbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {CbufferTypes::tcbuffer(), CbufferTypes::tcbuffer()}, LogicalType::BOOLEAN, Gen_ever_ne_tcbuffer_tcbuffer)); +} + +void RegisterGenerated_meos_cellindex(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("getResolution", {H3indexTypes::th3index()}, TemporalTypes::tint(), Gen_tcellindex_get_resolution)); + RegisterSerializedScalarFunction(loader, ScalarFunction("getResolution", {QuadbinTypes::tquadbin()}, TemporalTypes::tint(), Gen_tcellindex_get_resolution)); + RegisterSerializedScalarFunction(loader, ScalarFunction("getResolution", {S2cellTypes::ts2cell()}, TemporalTypes::tint(), Gen_tcellindex_get_resolution)); + RegisterSerializedScalarFunction(loader, ScalarFunction("isValidCell", {H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_tcellindex_is_valid_cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("isValidCell", {QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_tcellindex_is_valid_cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("isValidCell", {S2cellTypes::ts2cell()}, TemporalTypes::tbool(), Gen_tcellindex_is_valid_cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cellToParent", {H3indexTypes::th3index(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_tcellindex_cell_to_parent)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cellToParent", {QuadbinTypes::tquadbin(), LogicalType::INTEGER}, QuadbinTypes::tquadbin(), Gen_tcellindex_cell_to_parent)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cellToParent", {S2cellTypes::ts2cell(), LogicalType::INTEGER}, S2cellTypes::ts2cell(), Gen_tcellindex_cell_to_parent)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cellToPoint", {QuadbinTypes::tquadbin()}, TgeompointType::tgeompoint(), Gen_tcellindex_cell_to_point)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cellToPoint", {S2cellTypes::ts2cell()}, TgeogpointType::tgeogpoint(), Gen_tcellindex_cell_to_point)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cellToBoundary", {H3indexTypes::th3index()}, TGeographyTypes::tgeography(), Gen_tcellindex_cell_to_boundary)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cellToBoundary", {QuadbinTypes::tquadbin()}, TGeometryTypes::tgeometry(), Gen_tcellindex_cell_to_boundary)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cellToBoundary", {S2cellTypes::ts2cell()}, TGeographyTypes::tgeography(), Gen_tcellindex_cell_to_boundary)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cellArea", {H3indexTypes::th3index()}, TemporalTypes::tfloat(), Gen_tcellindex_cell_area)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cellArea", {QuadbinTypes::tquadbin()}, TemporalTypes::tfloat(), Gen_tcellindex_cell_area)); + RegisterSerializedScalarFunction(loader, ScalarFunction("cellArea", {S2cellTypes::ts2cell()}, TemporalTypes::tfloat(), Gen_tcellindex_cell_area)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tquadbinCellToQuadkey", {QuadbinTypes::tquadbin()}, TemporalTypes::ttext(), Gen_tquadbin_cell_to_quadkey)); +} + +void RegisterGenerated_meos_pose_restrict(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("atGeometry", {PoseTypes::tpose(), MobilityDuckGeometryType()}, PoseTypes::tpose(), Gen_tpose_at_geom)); + RegisterSerializedScalarFunction(loader, ScalarFunction("atValue", {PoseTypes::tpose(), PoseTypes::pose()}, PoseTypes::tpose(), Gen_tpose_at_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minusGeometry", {PoseTypes::tpose(), MobilityDuckGeometryType()}, PoseTypes::tpose(), Gen_tpose_minus_geom)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minusValue", {PoseTypes::tpose(), PoseTypes::pose()}, PoseTypes::tpose(), Gen_tpose_minus_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("atElevation", {PoseTypes::tpose(), SpanTypes::floatspan()}, PoseTypes::tpose(), Gen_tpose_at_elevation)); + RegisterSerializedScalarFunction(loader, ScalarFunction("minusElevation", {PoseTypes::tpose(), SpanTypes::floatspan()}, PoseTypes::tpose(), Gen_tpose_minus_elevation)); +} + +void RegisterGenerated_meos_pointcloud_box_comp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("eq", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("=", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_eq)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ne", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_ne)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<>", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_ne)); + RegisterSerializedScalarFunction(loader, ScalarFunction("lt", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_lt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("le", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<=", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_le)); + RegisterSerializedScalarFunction(loader, ScalarFunction("gt", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_gt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ge", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_ge)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">=", {TpcboxType::tpcbox(), TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_ge)); +} + +void RegisterGenerated_meos_box_bbox_topo(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("adjacent", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_adjacent_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("-|-", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_adjacent_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contained", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_contained_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<@", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_contained_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("contains", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_contains_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("@>", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_contains_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overlaps", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overlaps_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&&", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overlaps_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("same", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_same_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_same_tbox_tbox)); +} + +void RegisterGenerated_meos_s2cell_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {S2cellTypes::ts2cell()}, S2cellTypes::s2cell(), Gen_ts2cell_start_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {S2cellTypes::ts2cell()}, S2cellTypes::s2cell(), Gen_ts2cell_end_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("valueN", {S2cellTypes::ts2cell(), LogicalType::INTEGER}, S2cellTypes::s2cell(), Gen_ts2cell_value_n)); + RegisterSerializedScalarFunction(loader, ScalarFunction("getValues", {S2cellTypes::ts2cell()}, LogicalType::LIST(S2cellTypes::s2cell()), Gen_ts2cell_values)); +} + +void RegisterGenerated_meos_pointcloud_box_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("hasX", {TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_hasx)); + RegisterSerializedScalarFunction(loader, ScalarFunction("hasZ", {TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_hasz)); + RegisterSerializedScalarFunction(loader, ScalarFunction("hasT", {TpcboxType::tpcbox()}, LogicalType::BOOLEAN, Gen_tpcbox_hast)); + RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {TpcboxType::tpcbox()}, LogicalType::INTEGER, Gen_tpcbox_srid)); + RegisterSerializedScalarFunction(loader, ScalarFunction("pcid", {TpcboxType::tpcbox()}, LogicalType::UINTEGER, Gen_tpcbox_pcid)); +} + +void RegisterGenerated_meos_cbuffer_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("endValue", {CbufferTypes::tcbuffer()}, CbufferTypes::cbuffer(), Gen_tcbuffer_end_value)); + RegisterSerializedScalarFunction(loader, ScalarFunction("convexHull", {CbufferTypes::tcbuffer()}, MobilityDuckGeometryType(), Gen_tcbuffer_convex_hull)); + RegisterSerializedScalarFunction(loader, ScalarFunction("startValue", {CbufferTypes::tcbuffer()}, CbufferTypes::cbuffer(), Gen_tcbuffer_start_value)); +} + +void RegisterGenerated_meos_rgeo_transf(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("round", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, TrgeometryTypes::trgeometry(), Gen_trgeometry_round)); + RegisterSerializedScalarFunction(loader, ScalarFunction("round", {TrgeometryTypes::trgeometry()}, TrgeometryTypes::trgeometry(), Gen_trgeometry_round_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("trgeometryInst", {TrgeometryTypes::trgeometry()}, TrgeometryTypes::trgeometry(), Gen_trgeometry_as_tinstant)); +} + +void RegisterGenerated_meos_s2cell_comp_temp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, TemporalTypes::tbool(), Gen_teq_ts2cell_ts2cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, TemporalTypes::tbool(), Gen_tne_ts2cell_ts2cell)); +} + +void RegisterGenerated_meos_h3_metrics(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("th3EdgeLength", {H3indexTypes::th3index()}, TemporalTypes::tfloat(), Gen_th3index_edge_length)); + RegisterSerializedScalarFunction(loader, ScalarFunction("greatCircleDistance", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tgeogpoint_great_circle_distance)); +} + +void RegisterGenerated_meos_posechain_conversion(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tpose", {PosechainTypes::tposechain()}, PoseTypes::tpose(), Gen_tposechain_to_tpose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {PosechainTypes::tposechain()}, PoseTypes::tpose(), Gen_tposechain_to_tpose)); +} + +void RegisterGenerated_meos_pose_base_transf(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("applyPose", {PoseTypes::pose(), PoseTypes::pose()}, PoseTypes::pose(), Gen_pose_compose)); } } // namespace duckdb diff --git a/test/sql/parity/081_nearest_approach_box.test b/test/sql/parity/081_nearest_approach_box.test index fa5a65e4..9f16bdd0 100644 --- a/test/sql/parity/081_nearest_approach_box.test +++ b/test/sql/parity/081_nearest_approach_box.test @@ -124,16 +124,19 @@ SELECT nearestApproachDistance( ---- 3.0 -# A temporal integer carries its own span type, so it pairs with an integer box -# and answers in integers. The value follows from the half-open form an integer -# span normalises to, which is the span arithmetic's business rather than this -# surface's, so what is asserted here is the type and the presence of an answer. +# A temporal integer pairs with an integer box, and the pair answers a distance, +# which the surface states as a float whatever the operand types: MobilityDB +# declares `nearestApproachDistance(tint, tbox) RETURNS float` exactly as it +# declares the tfloat one, both over the one wrapper NAD_tnumber_tbox. The value +# follows from the half-open form an integer span normalises to, which is the +# span arithmetic's business rather than this surface's, so what is asserted +# here is the type and the presence of an answer. query I SELECT typeof(nearestApproachDistance( '[1@2000-01-01, 5@2000-01-02]'::tint, 'TBOXINT X([8,9])'::tbox)); ---- -INTEGER +DOUBLE query I SELECT nearestApproachDistance( diff --git a/tools/codegen_duck_udfs.py b/tools/codegen_duck_udfs.py index e8616ec8..9ee8859f 100644 --- a/tools/codegen_duck_udfs.py +++ b/tools/codegen_duck_udfs.py @@ -135,6 +135,36 @@ def base(canon): "TimestampTz": ("LogicalType::TIMESTAMP_TZ", "timestamp_tz_t"), "DateADT": ("LogicalType::DATE", "date_t"), } +# The SCALAR SQL return types, keyed by the name the catalog reads out of the CREATE FUNCTION +# `RETURNS` clause. A registration answers the type MobilityDB DECLARES, not the type the C kernel +# happens to return: one SQL name is commonly served by several typed kernels whose C returns differ +# while every declaration agrees, so keying on C splits one declared type into several registered +# ones — nad_tint_tint / nad_tbigint_tbigint / nad_tfloat_tfloat return int / int64 / double against +# `nearestApproachDistance(...) RETURNS float` for all three. +# The spellings are the ones the catalog actually carries, counted over it rather than assumed: a +# type is written several ways in the SQL sources (float 115, float8 11, double precision 6; +# integer 98, int 2), and a map missing one silently leaves those functions on the C type. +# Deliberately NOT SQL_BASE_TO_DUCK: that map carries the container types, which these two scalar +# paths must never register. `cstring` / `internal` / `record` are I/O and plumbing shapes with no +# scalar rendering and are excluded for the same reason. +# The C returns whose DuckDB rendering OUTRANKS the SQL declaration, because PostgreSQL has no +# unsigned SQL type to declare and says `integer`/`bigint` for want of one (SCALAR_RET_CPP states +# the consequence: a signed registration is range-checked by DuckDB and flips the sign of a hash +# at or above 2**31). Derived from the C type, not from a name. +UNSIGNED_C_RET = {"uint32_t", "uint64_t"} +# The declared scalar types whose conversion from a C return is a PLAIN CAST, and the executor C++ +# type each one needs. The declaration outranks the C type only here: a declared text / date / +# timestamp needs a marshaller (TakeText, FromMeosDate, TakeTimestamp), which the per-C-type +# branches already answer, and a cast would discard. +NUMERIC_DUCK_CPP = {"LogicalType::INTEGER": "int32_t", "LogicalType::BIGINT": "int64_t", + "LogicalType::DOUBLE": "double", "LogicalType::BOOLEAN": "bool"} +NUMERIC_C_RET = {"int", "int32_t", "int64_t", "double", "bool"} +SQL_SCALAR_RET = {"integer": "LogicalType::INTEGER", "int": "LogicalType::INTEGER", + "bigint": "LogicalType::BIGINT", + "float": "LogicalType::DOUBLE", "float8": "LogicalType::DOUBLE", + "double precision": "LogicalType::DOUBLE", + "boolean": "LogicalType::BOOLEAN", "text": "LogicalType::VARCHAR", + "date": "LogicalType::DATE", "timestamptz": "LogicalType::TIMESTAMP_TZ"} OUTPRIM = {"int *": "LogicalType::INTEGER", "int64_t *": "LogicalType::BIGINT", "uint64_t *": "LogicalType::BIGINT", "double *": "LogicalType::DOUBLE", "bool *": "LogicalType::BOOLEAN"} @@ -203,11 +233,26 @@ def arg_type(canon, fname=None): return ("LogicalType::VARCHAR", None) return None +def outprim_ret3(f, out_canon): + """(registration LogicalType, out-param local C type, executor RET) for a scalar out-param — + the out-param counterpart of scalar_ret4, and ONE decision for the same reason: ret_type and + emit_body_outparam must not disagree about the type, or DuckDB meets the wrong vector. + + The declared SQL type outranks the C pointer under the same two conditions as scalar_ret4 (a + plain numeric cast, and not an unsigned C quantity PostgreSQL can only declare signed).""" + n = norm(out_canon) + cloc, cpp = OUTPARAM_LOCAL[n] + sr = SQL_SCALAR_RET.get(f.get("sqlReturnType")) + if sr and sr in NUMERIC_DUCK_CPP and base(out_canon) not in UNSIGNED_C_RET \ + and cpp in NUMERIC_DUCK_CPP.values(): + return (sr, cloc, NUMERIC_DUCK_CPP[sr]) + return (OUTPRIM[n], cloc, cpp) + def ret_type(f, out_canon): """(duck_ret_type, kind) where kind in {ptr,scalar,outprim,outptr}. None if unmappable.""" if out_canon is not None: n = norm(out_canon) - if n in OUTPRIM: return (OUTPRIM[n], "outprim") + if n in OUTPRIM: return (outprim_ret3(f, out_canon)[0], "outprim") if base(out_canon) in PTR_RET: return (PTR_RET[base(out_canon)][0], "outptr") ob = outptr_base(out_canon) if ob: return (PTR_RET[ob][0], "outptr") @@ -381,34 +426,56 @@ def is_pred_int(f): return (re.match(r'(ever|always)_', f["name"]) is not None or re.search(r'_rel_(ever|always)$', f.get("group") or "") is not None) -def scalar_ret_duck(f): - """DuckDB registration return type for a by-value scalar return.""" - if is_pred_int(f): - return "LogicalType::BOOLEAN" - rb = base(f["returnType"]["canonical"]) - if rb == "Interval": return "LogicalType::INTERVAL" - if rb == "TimestampTz": return "LogicalType::TIMESTAMP_TZ" - if rb == "DateADT": return "LogicalType::DATE" - if rb in ("text", "char"): return "LogicalType::VARCHAR" - return SCALAR_RET_CPP[rb][1] - -def scalar_emit3(f): - """(call_var_ctype, executor_RET, return_expr) — for ever_/always_ the MEOS call - yields int but the UDF returns bool via (r != 0); an owned MEOS Interval* is - converted+freed via TakeInterval (preamble helper).""" +def scalar_ret4(f): + """(registration LogicalType, call-var C type, executor RET, return expr) for a by-value + scalar return — ONE decision, so the type a registration DECLARES and the type its executor + WRITES cannot disagree. DuckDB raises `Expected vector of type X, but found vector of type Y` + when they do, so scalar_ret_duck and scalar_emit3 are both projections of this tuple. + + The catalog's declared SQL return type outranks the C one for a NUMERIC return, read first + exactly as ret_temporal_type reads it for a temporal return: several typed kernels commonly + serve one SQL name with differing C returns while every declaration agrees, and keying on C + splits one declared type into several registered ones. The conversion is a plain cast, so the + executor carries the declared type while the MEOS call keeps its own. + + TWO CASES KEEP THE C TYPE, each for a stated reason and neither by name: + - an UNSIGNED C return (UNSIGNED_C_RET). PostgreSQL has no unsigned SQL type, so a uint32 hash + is DECLARED `integer` there for want of one; registering that signed makes DuckDB range-check + the cast and flip the sign of every hash at or above 2**31 (see SCALAR_RET_CPP). The + declaration records PostgreSQL's limitation, the C type records the quantity. + - a return needing a MARSHALLER rather than a cast (Interval / TimestampTz / DateADT / text / + char). Those branches already answer the declared type, and their conversion is a helper call + a numeric cast would discard.""" if is_pred_int(f): - return ("int32_t", "bool", "(r != 0)") + return ("LogicalType::BOOLEAN", "int32_t", "bool", "(r != 0)") rb = base(f["returnType"]["canonical"]) - if rb == "Interval": return ("MeosInterval *", "interval_t", "TakeInterval(r)") - if rb == "TimestampTz": return ("TimestampTz", "timestamp_tz_t", "TakeTimestamp(r)") - if rb == "DateADT": return ("DateADT", "date_t", "FromMeosDate((int32_t) r)") - if rb == "text": return ("text *", "string_t", "TakeText(result, r)") + if rb == "Interval": + return ("LogicalType::INTERVAL", "MeosInterval *", "interval_t", "TakeInterval(r)") + if rb == "TimestampTz": + return ("LogicalType::TIMESTAMP_TZ", "TimestampTz", "timestamp_tz_t", "TakeTimestamp(r)") + if rb == "DateADT": + return ("LogicalType::DATE", "DateADT", "date_t", "FromMeosDate((int32_t) r)") + if rb == "text": + return ("LogicalType::VARCHAR", "text *", "string_t", "TakeText(result, r)") if rb == "char": # const char* = borrowed/static (no free); char* = owned (free) if "const" in (f["returnType"]["canonical"] or ""): - return ("const char *", "string_t", "StringVector::AddString(result, r)") - return ("char *", "string_t", "TakeCString(result, r)") + return ("LogicalType::VARCHAR", "const char *", "string_t", + "StringVector::AddString(result, r)") + return ("LogicalType::VARCHAR", "char *", "string_t", "TakeCString(result, r)") ct = SCALAR_RET_CPP[rb][0] - return (ct, ct, "r") + sr = SQL_SCALAR_RET.get(f.get("sqlReturnType")) + if sr and sr in NUMERIC_DUCK_CPP and rb not in UNSIGNED_C_RET and rb in NUMERIC_C_RET: + cpp = NUMERIC_DUCK_CPP[sr] + return (sr, ct, cpp, f"({cpp}) r") + return (SCALAR_RET_CPP[rb][1], ct, ct, "r") + +def scalar_ret_duck(f): + """DuckDB registration return type for a by-value scalar return.""" + return scalar_ret4(f)[0] + +def scalar_emit3(f): + """(call_var_ctype, executor_RET, return_expr), paired with scalar_ret_duck by construction.""" + return scalar_ret4(f)[1:] # By-value/owned-scalar return marshalling keyed by the MEOS return base type — used by the # container (set/span) u_scalar branches so they handle time/Interval returns like the @@ -1614,7 +1681,7 @@ def emit_body_outparam(f, dret, kind, vary, tail, sig, out_canon): decl, rett = f"{ob} *o = NULL;", "string_t" give, empty = "return %s;" % (PTR_RET[ob][1] % "o"), "return string_t();" else: - cloc, cpp = OUTPARAM_LOCAL[norm(out_canon)] + _dt, cloc, cpp = outprim_ret3(f, out_canon) # paired with ret_type by construction decl, rett = f"{cloc} o = ({cloc}) 0;", cpp give, empty = f"return ({cpp}) o;", f"return ({cpp}) 0;" if vary: @@ -2299,32 +2366,48 @@ def shape_temporal_box(f): if b1 == "Temporal" and b0 in BOX_MARSH: return (f"tb_l:{b0}:{ret}", sc[1]) # (Box, Temporal) return None +def box_ret3(f, ret_key): + """(registration LogicalType, MEOS-call C type, executor RET) for a Temporal x box scalar — + the third paired decision, for the same reason as scalar_ret4 and outprim_ret3. + + The C type stays on the CALL and on the sentinel test: the no-distance sentinel is the maximum + of the type MEOS returns, so testing it against the declared type would compare against the + wrong maximum. The conversion happens after the test.""" + ccpp = "bool" if ret_key == "bool" else SCALAR_RET_CPP[ret_key][0] + dflt = "LogicalType::BOOLEAN" if ret_key == "bool" else SCALAR_RET_CPP[ret_key][1] + sr = SQL_SCALAR_RET.get(f.get("sqlReturnType")) + if sr and sr in NUMERIC_DUCK_CPP and ret_key not in UNSIGNED_C_RET and ret_key in NUMERIC_C_RET: + return (sr, ccpp, NUMERIC_DUCK_CPP[sr]) + return (dflt, ccpp, ccpp) + def emit_temporal_box(f, kind): name = f["name"]; parts = kind.split(":") side, box = parts[0], parts[1] sentinel = parts[2] == "sentinel" ret = parts[-1] blobto = BOX_MARSH[box][0] - cpp = "bool" if ret == "bool" else SCALAR_RET_CPP[ret][0] + _dt, cpp, ecpp = box_ret3(f, ret) # paired with the registration by construction call = f"{name}(t, bx)" if side == "tb_r" else f"{name}(bx, t)" marshal = (f" Temporal *t = BlobToTemporal(a);\n {box} *bx = {blobto}(b);\n" if side == "tb_r" else f" {box} *bx = {blobto}(a);\n Temporal *t = BlobToTemporal(b);\n") frees = "free(t); free(bx);" if side == "tb_r" else "free(bx); free(t);" if not sentinel: - body = f"{marshal} {cpp} r = {call};\n {frees}\n return r;" + body = (f"{marshal} {cpp} r = {call};\n {frees}\n" + f" return ({ecpp}) r;") return (f"static void Gen_{name}(DataChunk &args, ExpressionState &, Vector &result) {{\n" f" EnsureMeosThreadInitialized();\n" - f" BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(),\n" + f" BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(),\n" f" [&](string_t a, string_t b) {{\n{body}\n }});\n}}\n") - # The maximum of the return type says there is no distance, which is NULL here. + # The maximum of the type MEOS RETURNS says there is no distance, which is NULL here; the + # conversion to the declared type happens after that test, never before it. body = (f"{marshal} {cpp} r = {call};\n {frees}\n" - f" if (r == std::numeric_limits<{cpp}>::max()) {{ mask.SetInvalid(idx); return {cpp}(); }}\n" - f" return r;") + f" if (r == std::numeric_limits<{cpp}>::max()) {{ mask.SetInvalid(idx); return {ecpp}(); }}\n" + f" return ({ecpp}) r;") return (f"static void Gen_{name}(DataChunk &args, ExpressionState &, Vector &result) {{\n" f" EnsureMeosThreadInitialized();\n" - f" BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(),\n" - f" [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> {cpp} {{\n{body}\n }});\n}}\n") + f" BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(),\n" + f" [&](string_t a, string_t b, ValidityMask &mask, idx_t idx) -> {ecpp} {{\n{body}\n }});\n}}\n") # Temporal + span -> bool: topological predicates across the value (numspan) or time # (tstzspan) dimension. numspan PAIRS to the tnumber's value type; tstzspan is fixed and @@ -3919,7 +4002,7 @@ def gen_cpp(fns, out_path, declared=None, aliases=None): kparts = kind.split(":") box_acc = BOX_MARSH[kparts[1]][1] ret_key = kparts[-1] - dret = "LogicalType::BOOLEAN" if ret_key == "bool" else SCALAR_RET_CPP[ret_key][1] + dret = box_ret3(f, ret_key)[0] for a in accs: sig = "{%s, %s}" % (a, box_acc) if kind.startswith("tb_r:") else "{%s, %s}" % (box_acc, a) for nm in names: