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: