From 8da52e0ca2403eccc83d03e04be54b03f1fe5bde Mon Sep 17 00:00:00 2001 From: recon Date: Fri, 28 Aug 2026 22:22:05 +0200 Subject: [PATCH] Register the spatial surface over the types the catalog declares MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Being a spatial temporal type makes a family eligible for the abstract tspatial_* surface; it does not mean MobilityDB publishes every tspatial_* kernel over it. The generator applied that surface as a blanket over every member of SPATIAL_ALLTYPES, which overrode the catalog's own word, so the scope now comes from each function's sqlSignatures and falls back to the blanket only where the catalog states nothing. The cell indexes are what the blanket got wrong. MobilityDB declares asText over a cell temporal through the generic Temporal_as_text and declares asEWKT, SRID, setSRID and transform over one nowhere: across all fourteen mobilitydb/sql/s2cell slices those four appear zero times. Bound to tspatial_as_text, tspatial_as_ewkt and tspatial_transform, whose own sqlSignatures list neither ts2cell nor tquadbin nor th3index, asText, asEWKT and transform answered "Unknown output function in WKT format for type: s2cell" and "Unknown transformation function for type: s2cell" — raised inside MEOS on a call MobilityDB never makes — while SRID and setSRID answered a value for surface MobilityDB does not publish. All three families carry this, so it reaches ts2cell, tquadbin and th3index alike. Twenty-nine registrations go, two arrive. The departures are those five kernels over the three cell families, plus asEWKT, setSRID and transform over tnpoint and asText and asEWKT over trgeometry, none of which MobilityDB declares. trgeometry keeps both under its own trgeometry_as_text, the kernel that carries the reference geometry it appends to the varlena, so asText(trgeometry) answers POLYGON((1 1,2 2,3 1,1 1));Pose(POINT(1 1),0.5)@… rather than reaching a kernel that would drop the polygon. The arrivals are SRID over tpcpoint and tpcpatch, which the catalog declares and the blanket omitted. The restriction reads the tspatial_ prefix alone. The _tspatial_tspatial suffix names are the positional operators, carried by @sqlop rather than @sqlfn with sparse signatures, and reading those as authoritative drops 132 working operator registrations. test/sql/cell_index_spatial_surface.test covers the cell temporal rendering through its own text form, the five kernels staying absent across the families, trgeometry keeping its reference geometry, and SRID reaching the pointcloud temporals. --- src/generated/generated_temporal_udfs_0.cpp | 575 +++++------ src/generated/generated_temporal_udfs_1.cpp | 947 +++++++++-------- src/generated/generated_temporal_udfs_2.cpp | 671 ++++++------- src/generated/generated_temporal_udfs_3.cpp | 739 ++++++++------ src/generated/generated_temporal_udfs_4.cpp | 929 +++++++++-------- src/generated/generated_temporal_udfs_5.cpp | 968 +++++++++--------- src/generated/generated_temporal_udfs_6.cpp | 770 +++++++------- src/generated/generated_temporal_udfs_7.cpp | 1004 ++++++++++--------- test/sql/cell_index_spatial_surface.test | 72 ++ tools/codegen_duck_udfs.py | 38 +- 10 files changed, 3393 insertions(+), 3320 deletions(-) create mode 100644 test/sql/cell_index_spatial_surface.test diff --git a/src/generated/generated_temporal_udfs_0.cpp b/src/generated/generated_temporal_udfs_0.cpp index 13aa769b..3d76c9fa 100644 --- a/src/generated/generated_temporal_udfs_0.cpp +++ b/src/generated/generated_temporal_udfs_0.cpp @@ -922,201 +922,205 @@ static void Gen_right_tspatial_stbox(DataChunk &args, ExpressionState &, Vector } -// ===== @ingroup meos_geo_bbox_split ===== -static void Gen_tgeo_stboxes(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_geo_accessor ===== +static void Gen_tgeo_centroid(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 = tgeo_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); - } + 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_tgeo_split_each_n_stboxes(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpoint_angular_difference(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 = tgeo_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); - } + 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_tgeo_split_n_stboxes(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpoint_azimuth(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 = tgeo_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); - } + 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); + }); +} -// ===== @ingroup meos_pose_comp_ever ===== -static void Gen_always_eq_tpose_pose(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpoint_get_x(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); - int32_t r = always_eq_tpose_pose(t, a2p); - free(a2p); free(t); - return (r != 0); + Temporal *r = tpoint_get_x(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_always_eq_tpose_tpose(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpoint_get_y(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_tpose_tpose(t1, t2); - free(t1); free(t2); - return (r != 0); + 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_always_ne_tpose_pose(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpoint_get_z(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); + 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; + }); +} + +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 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); + }); +} + + +// ===== @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); Pose *a2p = BlobToPose(a2); - int32_t r = always_ne_tpose_pose(t, a2p); + Temporal *r = tdistance_tpose_pose(t, a2p); free(a2p); free(t); - return (r != 0); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_always_ne_tpose_tpose(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tdistance_tpose_geo(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 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); + return TemporalToBlobN(result, r, mask, idx); + }); +} + +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); - int32_t r = always_ne_tpose_tpose(t1, t2); + Temporal *r = tdistance_tpose_tpose(t1, t2); free(t1); free(t2); - return (r != 0); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_ever_eq_tpose_pose(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(), + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), [&](string_t in, string_t a2) { Temporal *t = BlobToTemporal(in); Pose *a2p = BlobToPose(a2); - int32_t r = ever_eq_tpose_pose(t, a2p); + double r = nad_tpose_pose(t, a2p); free(a2p); free(t); - return (r != 0); + return r; }); } -static void Gen_ever_eq_tpose_tpose(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(), + 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_tpose_tpose(t1, t2); + double r = nad_tpose_tpose(t1, t2); free(t1); free(t2); - return (r != 0); + return r; }); } -static void Gen_ever_ne_tpose_pose(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nai_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) { + 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); - int32_t r = ever_ne_tpose_pose(t, a2p); + Temporal *r = (Temporal *) nai_tpose_pose(t, a2p); free(a2p); free(t); - return (r != 0); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_ever_ne_tpose_tpose(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_tpose_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_tpose_tpose(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_tpose_stbox(t, bx); + free(t); free(bx); + if (r == std::numeric_limits::max()) { mask.SetInvalid(idx); return double(); } + return r; }); } @@ -1340,127 +1344,108 @@ static void Gen_jsonbset_pretty(DataChunk &args, ExpressionState &, Vector &resu } -// ===== @ingroup meos_pointcloud_base_accessor ===== -static void Gen_pcpoint_get_pcid(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) { - Pcpoint *v = BlobToPcpoint(in); - uint32_t r = pcpoint_get_pcid(v); - free(v); - return r; - }); -} - -static void Gen_pcpoint_hash(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); - return r; - }); -} - -static void Gen_pcpatch_get_pcid(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); - return r; - }); -} - -static void Gen_pcpatch_hash(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); + 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); + free(t); return r; }); } -static void Gen_pcpoint_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tquadbin_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) { - Pcpoint *s = BlobToPcpoint(in); - uint64_t r = pcpoint_hash_extended(s, a2); - free(s); + 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); + free(t); return r; }); } -static void Gen_pcpatch_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tquadbin_value_n(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; + 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); + free(t); + if (!ok) { mask.SetInvalid(idx); return int64_t(); } + return (int64_t) v; }); } - -// ===== @ingroup meos_pointcloud_box_accessor ===== -static void Gen_tpcbox_hasx(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tquadbin_values(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - TPCBox *v = BlobToTpcbox(in); - bool r = tpcbox_hasx(v); - free(v); - return r; - }); + 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 = tquadbin_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); + } } -static void Gen_tpcbox_hasz(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - 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_tpcbox_hast(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_h3_traversal ===== +static void Gen_th3index_grid_distance(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - TPCBox *v = BlobToTpcbox(in); - bool r = tpcbox_hast(v); - free(v); - 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 = th3index_grid_distance(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpcbox_srid(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_cell_to_local_ij(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - TPCBox *v = BlobToTpcbox(in); - int32_t r = tpcbox_srid(v); - free(v); - 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 = th3index_cell_to_local_ij(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpcbox_pcid(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_local_ij_to_cell(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); - 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 = th3index_local_ij_to_cell(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); }); } @@ -1586,24 +1571,24 @@ static void Gen_tnpoint_minus_npointset(DataChunk &args, ExpressionState &, Vect } -// ===== @ingroup meos_pose_base_accessor ===== -static void Gen_pose_hash(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_box_accessor ===== +static void Gen_tbox_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); + TBox *s = BlobToTbox(in); + uint32_t r = tbox_hash(s); + free(s); return r; }); } -static void Gen_pose_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tbox_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) { - Pose *s = BlobToPose(in); - uint64_t r = pose_hash_extended(s, a2); + TBox *s = BlobToTbox(in); + uint64_t r = tbox_hash_extended(s, a2); free(s); return r; }); @@ -2648,47 +2633,45 @@ void RegisterGenerated_meos_geo_bbox_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {PosechainTypes::tposechain(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_right_tspatial_stbox)); } -void RegisterGenerated_meos_geo_bbox_split(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {CbufferTypes::tcbuffer()}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {TGeometryTypes::tgeometry()}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {TGeographyTypes::tgeography()}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {TgeompointType::tgeompoint()}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {TgeogpointType::tgeogpoint()}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {PoseTypes::tpose()}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {PosechainTypes::tposechain()}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_each_n_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_each_n_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {TGeographyTypes::tgeography(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_each_n_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_each_n_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_each_n_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {PoseTypes::tpose(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_each_n_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {PosechainTypes::tposechain(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_each_n_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_n_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_n_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {TGeographyTypes::tgeography(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_n_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_n_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_n_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {PoseTypes::tpose(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_n_stboxes)); - RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {PosechainTypes::tposechain(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_n_stboxes)); -} - -void RegisterGenerated_meos_pose_comp_ever(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_always_eq_tpose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_always_eq_tpose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_always_eq_tpose_tpose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_always_eq_tpose_tpose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_always_ne_tpose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_always_ne_tpose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_always_ne_tpose_tpose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_always_ne_tpose_tpose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_ever_eq_tpose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_ever_eq_tpose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_ever_eq_tpose_tpose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_ever_eq_tpose_tpose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_ever_ne_tpose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_ever_ne_tpose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_ever_ne_tpose_tpose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_ever_ne_tpose_tpose)); +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_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_cellindex(ExtensionLoader &loader) { @@ -2729,21 +2712,19 @@ void RegisterGenerated_meos_json_set_json(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("jsonbsetPretty", {SetTypes::jsonbset()}, SetTypes::jsonbset(), Gen_jsonbset_pretty)); } -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_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_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_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_npoint_base_inout(ExtensionLoader &loader) { @@ -2770,9 +2751,9 @@ void RegisterGenerated_meos_npoint_restrict(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("minusValues", {NpointTypes::tnpoint(), SetTypes::npointset()}, NpointTypes::tnpoint(), Gen_tnpoint_minus_npointset)); } -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_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_posechain_base_srid(ExtensionLoader &loader) { diff --git a/src/generated/generated_temporal_udfs_1.cpp b/src/generated/generated_temporal_udfs_1.cpp index af8e85c6..3faa9d8f 100644 --- a/src/generated/generated_temporal_udfs_1.cpp +++ b/src/generated/generated_temporal_udfs_1.cpp @@ -3190,44 +3190,104 @@ static void Gen_tpoint_minus_elevation(DataChunk &args, ExpressionState &, Vecto } -// ===== @ingroup meos_temporal_inout ===== -static void Gen_temporal_as_hexwkb(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - if (args.ColumnCount() > 1) { - BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t endian, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *x = BlobToTemporal(in); - uint8_t variant = wkb_variant_from_endian(endian.GetString().c_str()); - size_t sz = 0; - char *hex = temporal_as_hexwkb(x, variant, &sz); - free(x); - if (!hex) { mask.SetInvalid(idx); return string_t(); } - string_t out = StringVector::AddString(result, hex); - free(hex); - return out; - }); - } else { - UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), - [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *x = BlobToTemporal(in); - size_t sz = 0; - char *hex = temporal_as_hexwkb(x, (uint8_t) 0, &sz); - free(x); - if (!hex) { mask.SetInvalid(idx); return string_t(); } - string_t out = StringVector::AddString(result, hex); - free(hex); - return out; - }); +// ===== @ingroup meos_geo_bbox_split ===== +static void Gen_tgeo_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 = tgeo_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_temporal_from_hexwkb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tgeo_split_each_n_stboxes(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 *r = temporal_from_hexwkb(in.GetString().c_str()); - return TemporalToBlobN(result, r, mask, idx); - }); + 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 = tgeo_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); + } +} + +static void Gen_tgeo_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 = tgeo_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); + } } @@ -3371,566 +3431,495 @@ static void PathExec_trgeometry_dyntimewarp_path(ClientContext &, TableFunctionI } -// ===== @ingroup meos_temporal_bool ===== -static void Gen_tand_bool_tbool(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(), - [&](bool a1, string_t in, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tand_bool_tbool(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 = tdistance_trgeometry_geo(t, gs); + free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tand_tbool_bool(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, bool a2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tand_tbool_bool(t, a2); - free(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 = tdistance_trgeometry_tpoint(t1, t2); + free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tand_tbool_tbool(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 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); + Temporal *r = tdistance_trgeometry_trgeometry(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_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 = tnot_tbool(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 r; }); } -static void Gen_tor_bool_tbool(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_trgeometry_trgeometry(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 { - Temporal *t = BlobToTemporal(in); - Temporal *r = tor_bool_tbool(a1, 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 r; }); } -static void Gen_tor_tbool_bool(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nad_trgeometry_stbox(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 { - Temporal *t = BlobToTemporal(in); - Temporal *r = tor_tbool_bool(t, a2); - 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 r; }); } -static void Gen_tor_tbool_tbool(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_setspan_inout ===== +static void Gen_set_from_hexwkb(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); - return TemporalToBlobN(result, r, mask, idx); + 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); }); } - -// ===== @ingroup meos_npoint_base_comp ===== -static void Gen_npoint_eq(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_span_from_hexwkb(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; + 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); }); } -static void Gen_npoint_ge(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_spanset_from_hexwkb(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; + 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); }); } -static void Gen_npoint_gt(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_pointcloud_box_topo ===== +static void Gen_contains_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) { - Npoint *s1 = BlobToNpoint(a); - Npoint *s2 = BlobToNpoint(b); - bool r = npoint_gt(s1, s2); + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = contains_tpcbox_tpcbox(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_npoint_le(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_contained_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) { - Npoint *s1 = BlobToNpoint(a); - Npoint *s2 = BlobToNpoint(b); - bool r = npoint_le(s1, s2); + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = contained_tpcbox_tpcbox(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_npoint_lt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_overlaps_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) { - Npoint *s1 = BlobToNpoint(a); - Npoint *s2 = BlobToNpoint(b); - bool r = npoint_lt(s1, s2); + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = overlaps_tpcbox_tpcbox(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_npoint_ne(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_same_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) { - Npoint *s1 = BlobToNpoint(a); - Npoint *s2 = BlobToNpoint(b); - bool r = npoint_ne(s1, s2); + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = same_tpcbox_tpcbox(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_npoint_same(DataChunk &args, ExpressionState &, Vector &result) { +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) { - Npoint *s1 = BlobToNpoint(a); - Npoint *s2 = BlobToNpoint(b); - bool r = npoint_same(s1, s2); + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = adjacent_tpcbox_tpcbox(s1, s2); free(s1); free(s2); return r; }); } -// ===== @ingroup meos_h3_hierarchy ===== -static void Gen_th3index_cell_to_parent_next(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_cell_to_parent_next(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_th3index_cell_to_center_child(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 = th3index_cell_to_center_child(t, a2); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_th3index_cell_to_center_child_next(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_cell_to_center_child_next(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_th3index_cell_to_child_pos(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 = th3index_cell_to_child_pos(t, a2); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_th3index_child_pos_to_cell(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - TernaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], args.data[2], result, args.size(), - [&](string_t in1, string_t in2, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = th3index_child_pos_to_cell(t1, t2, a2); - free(t1); free(t2); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_h3_uncompact_cells(DataChunk &args, ExpressionState &, Vector &result) { - EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, int32_t a2) { - Set *s = BlobToSet(a); - Set *r = h3_uncompact_cells(s, a2); - free(s); - return SetToBlob(result, r); - }); -} - - -// ===== @ingroup meos_box_bbox_topo ===== -static void Gen_adjacent_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_geo_box_topo ===== +static void Gen_adjacent_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) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = adjacent_tbox_tbox(s1, s2); + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = adjacent_stbox_stbox(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_contained_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_contained_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) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = contained_tbox_tbox(s1, s2); + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = contained_stbox_stbox(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_contains_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_contains_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) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = contains_tbox_tbox(s1, s2); + 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_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { +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) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = overlaps_tbox_tbox(s1, s2); + 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_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { +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) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = same_tbox_tbox(s1, s2); + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = same_stbox_stbox(s1, s2); free(s1); free(s2); return r; }); } -// ===== @ingroup meos_pointcloud_comp_temp ===== -static void Gen_teq_tpcpoint_pcpoint(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, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); Pcpoint *a2p = BlobToPcpoint(a2); - Temporal *r = teq_tpcpoint_pcpoint(t, a2p); + Temporal *r = tpcpoint_at_value(t, a2p); free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_tpcpoint_pcpoint(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, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); Pcpoint *a2p = BlobToPcpoint(a2); - Temporal *r = tne_tpcpoint_pcpoint(t, a2p); + Temporal *r = tpcpoint_minus_value(t, a2p); free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_teq_tpcpatch_pcpatch(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcpatch_at_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 { Temporal *t = BlobToTemporal(in); Pcpatch *a2p = BlobToPcpatch(a2); - Temporal *r = teq_tpcpatch_pcpatch(t, a2p); + Temporal *r = tpcpatch_at_value(t, a2p); free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_tpcpatch_pcpatch(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcpatch_minus_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 { Temporal *t = BlobToTemporal(in); Pcpatch *a2p = BlobToPcpatch(a2); - Temporal *r = tne_tpcpatch_pcpatch(t, a2p); + Temporal *r = tpcpatch_minus_value(t, a2p); free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_rgeo_inout ===== -static void Gen_trgeometry_as_text(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_npoint_base_accessor ===== +static void Gen_npoint_position(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 = trgeometry_as_text(t, a2); - free(t); - return TakeCString(result, r); + 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_trgeometry_as_text_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_npoint_route(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) { - Temporal *t = BlobToTemporal(in); - char * r = trgeometry_as_text(t, 15); - free(t); - return TakeCString(result, r); + Npoint *v = BlobToNpoint(in); + int64_t r = npoint_route(v); + free(v); + return r; }); } -static void Gen_trgeometry_as_ewkt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nsegment_end_position(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 = trgeometry_as_ewkt(t, a2); - free(t); - return TakeCString(result, r); + 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_trgeometry_as_ewkt_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nsegment_route(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) { - Temporal *t = BlobToTemporal(in); - char * r = trgeometry_as_ewkt(t, 15); - free(t); - return TakeCString(result, r); + Nsegment *v = BlobToNsegment(in); + int64_t r = nsegment_route(v); + free(v); + return r; }); } - -// ===== @ingroup meos_posechain_base_inout ===== -static void Gen_posechain_as_text(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nsegment_start_position(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::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Nsegment *v = BlobToNsegment(in); + double r = nsegment_start_position(v); + free(v); + return r; }); } -static void Gen_posechain_as_text_d(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_rgeo_transf ===== +static void Gen_trgeometry_round(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); + 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_posechain_as_ewkt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_trgeometry_round_d(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); - 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); + Temporal *r = trgeometry_round(t, 0); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_posechain_as_ewkt_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_trgeometry_as_tinstant(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); - 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); + Temporal *r = (Temporal *) trgeometry_as_tinstant(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_posechain_base_accessor ===== -static void Gen_posechain_num_poses(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_rgeo_conversion ===== +static void Gen_trgeometry_to_tpose(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); - 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 = trgeometry_to_tpose(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_posechain_hash(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_trgeometry_to_tgeompoint(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; + 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_to_tgeompoint(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_posechain_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_trgeometry_to_tgeometry(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); + Temporal *r = trgeometry_to_tgeometry(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_posechain_comp_temp ===== -static void Gen_teq_tposechain_posechain(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_h3_comp_temp ===== +static void Gen_teq_th3index_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 { - Temporal *t = BlobToTemporal(in); - PoseChain *a2p = BlobToPosechain(a2); - Temporal *r = teq_tposechain_posechain(t, a2p); - free(a2p); 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 = teq_th3index_th3index(t1, t2); + free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_tposechain_posechain(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tne_th3index_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 { - Temporal *t = BlobToTemporal(in); - PoseChain *a2p = BlobToPosechain(a2); - Temporal *r = tne_tposechain_posechain(t, a2p); - free(a2p); 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 = tne_th3index_th3index(t1, t2); + free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_json_restrict ===== -static void Gen_tjsonb_at_value(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); Jsonb *a2p = BlobToJsonb(a2); - Temporal *r = tjsonb_at_value(t, a2p); + Temporal *r = teq_tjsonb_jsonb(t, a2p); free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tjsonb_minus_value(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); Jsonb *a2p = BlobToJsonb(a2); - Temporal *r = tjsonb_minus_value(t, a2p); + Temporal *r = tne_tjsonb_jsonb(t, a2p); free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_npoint_base_srid ===== -static void Gen_npoint_srid(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) { +// ===== @ingroup meos_box_set ===== +static void Gen_intersection_tbox_tbox(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; + 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); + free(s1); free(s2); + if (!r) { mask.SetInvalid(idx); return string_t(); } + return TboxToBlob(result, r); }); } -// ===== @ingroup meos_s2 ===== -static void Gen_ts2cell_cell_to_token(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pose_base_transf ===== +static void Gen_pose_compose(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); - 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) -> 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); }); } @@ -4356,52 +4345,28 @@ void RegisterGenerated_meos_geo_restrict(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("minusElevation", {TgeompointType::tgeompoint(), SpanTypes::floatspan()}, TgeompointType::tgeompoint(), Gen_tpoint_minus_elevation)); } -void RegisterGenerated_meos_temporal_inout(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {CbufferTypes::tcbuffer()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {CbufferTypes::tcbuffer(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TGeometryTypes::tgeometry()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TGeometryTypes::tgeometry(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TGeographyTypes::tgeography()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TGeographyTypes::tgeography(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TgeompointType::tgeompoint()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TgeompointType::tgeompoint(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TgeogpointType::tgeogpoint()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TgeogpointType::tgeogpoint(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {H3indexTypes::th3index()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {H3indexTypes::th3index(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TJsonbTypes::tjsonb()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TJsonbTypes::tjsonb(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {NpointTypes::tnpoint()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {NpointTypes::tnpoint(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TPcpointTypes::tpcpoint()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TPcpointTypes::tpcpoint(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TPcpatchTypes::tpcpatch()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TPcpatchTypes::tpcpatch(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {PoseTypes::tpose()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {PoseTypes::tpose(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {PosechainTypes::tposechain()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {PosechainTypes::tposechain(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {QuadbinTypes::tquadbin()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {QuadbinTypes::tquadbin(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TrgeometryTypes::trgeometry()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TrgeometryTypes::trgeometry(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {S2cellTypes::ts2cell()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {S2cellTypes::ts2cell(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tbool()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tbool(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tint()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tint(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tbigint()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tbigint(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tfloat()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tfloat(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::ttext()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::ttext(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tboolFromHexWKB", {LogicalType::VARCHAR}, TemporalTypes::tbool(), Gen_temporal_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tintFromHexWKB", {LogicalType::VARCHAR}, TemporalTypes::tint(), Gen_temporal_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tbigintFromHexWKB", {LogicalType::VARCHAR}, TemporalTypes::tbigint(), Gen_temporal_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tfloatFromHexWKB", {LogicalType::VARCHAR}, TemporalTypes::tfloat(), Gen_temporal_from_hexwkb)); - RegisterSerializedScalarFunction(loader, ScalarFunction("ttextFromHexWKB", {LogicalType::VARCHAR}, TemporalTypes::ttext(), Gen_temporal_from_hexwkb)); +void RegisterGenerated_meos_geo_bbox_split(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {CbufferTypes::tcbuffer()}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {TGeometryTypes::tgeometry()}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {TGeographyTypes::tgeography()}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {TgeompointType::tgeompoint()}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {TgeogpointType::tgeogpoint()}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {PoseTypes::tpose()}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("stboxes", {PosechainTypes::tposechain()}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_each_n_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_each_n_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {TGeographyTypes::tgeography(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_each_n_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_each_n_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_each_n_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {PoseTypes::tpose(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_each_n_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitEachNStboxes", {PosechainTypes::tposechain(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_each_n_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_n_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_n_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {TGeographyTypes::tgeography(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_n_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_n_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_n_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {PoseTypes::tpose(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_n_stboxes)); + RegisterSerializedScalarFunction(loader, ScalarFunction("splitNStboxes", {PosechainTypes::tposechain(), LogicalType::INTEGER}, LogicalType::LIST(StboxType::stbox()), Gen_tgeo_split_n_stboxes)); } void RegisterGenerated_meos_rgeo_analytics_similarity(ExtensionLoader &loader) { @@ -4412,105 +4377,119 @@ void RegisterGenerated_meos_rgeo_analytics_similarity(ExtensionLoader &loader) { loader.RegisterFunction(TableFunction("dynTimeWarpPath", {TrgeometryTypes::trgeometry(), TrgeometryTypes::trgeometry()}, PathExec_trgeometry_dyntimewarp_path, PathBindFn_trgeometry_dyntimewarp_path, PathInit_trgeometry_dyntimewarp_path)); } -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_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)); -} - -void RegisterGenerated_meos_h3_hierarchy(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("cellToParent", {H3indexTypes::th3index()}, H3indexTypes::th3index(), Gen_th3index_cell_to_parent_next)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellToCenterChild", {H3indexTypes::th3index(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_th3index_cell_to_center_child)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellToCenterChild", {H3indexTypes::th3index()}, H3indexTypes::th3index(), Gen_th3index_cell_to_center_child_next)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellToChildPos", {H3indexTypes::th3index(), LogicalType::INTEGER}, TemporalTypes::tbigint(), Gen_th3index_cell_to_child_pos)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3ChildPosToCell", {H3indexTypes::th3index(), H3indexTypes::th3index(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_th3index_child_pos_to_cell)); - 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_pointcloud_comp_temp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TPcpointTypes::tpcpoint(), TPcpointTypes::pcpoint()}, TemporalTypes::tbool(), Gen_teq_tpcpoint_pcpoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TPcpointTypes::tpcpoint(), TPcpointTypes::pcpoint()}, TemporalTypes::tbool(), Gen_tne_tpcpoint_pcpoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::pcpatch()}, TemporalTypes::tbool(), Gen_teq_tpcpatch_pcpatch)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::pcpatch()}, TemporalTypes::tbool(), Gen_tne_tpcpatch_pcpatch)); -} - -void RegisterGenerated_meos_rgeo_inout(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_trgeometry_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TrgeometryTypes::trgeometry()}, LogicalType::VARCHAR, Gen_trgeometry_as_text_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_trgeometry_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TrgeometryTypes::trgeometry()}, LogicalType::VARCHAR, Gen_trgeometry_as_ewkt_d)); -} - -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_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_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_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_s2(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("ts2CellToToken", {S2cellTypes::ts2cell()}, TemporalTypes::ttext(), Gen_ts2cell_cell_to_token)); +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_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_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_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_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_rgeo_conversion(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tpose", {TrgeometryTypes::trgeometry()}, PoseTypes::tpose(), Gen_trgeometry_to_tpose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tgeompoint", {TrgeometryTypes::trgeometry()}, TgeompointType::tgeompoint(), Gen_trgeometry_to_tgeompoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tgeometry", {TrgeometryTypes::trgeometry()}, TGeometryTypes::tgeometry(), Gen_trgeometry_to_tgeometry)); +} + +void RegisterGenerated_meos_h3_comp_temp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_teq_th3index_th3index)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_tne_th3index_th3index)); +} + +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_box_set(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("intersection", {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)); } } // namespace duckdb diff --git a/src/generated/generated_temporal_udfs_2.cpp b/src/generated/generated_temporal_udfs_2.cpp index 2e6f68c7..a6e2c2cb 100644 --- a/src/generated/generated_temporal_udfs_2.cpp +++ b/src/generated/generated_temporal_udfs_2.cpp @@ -3353,402 +3353,385 @@ 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_cbuffer_comp_ever ===== +static void Gen_always_eq_tcbuffer_cbuffer(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::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t a2) { Temporal *t = BlobToTemporal(in); - Temporal *r = tgeo_centroid(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + Cbuffer *a2p = BlobToCbuffer(a2); + int32_t r = always_eq_tcbuffer_cbuffer(t, a2p); + free(a2p); free(t); + return (r != 0); }); } -static void Gen_tpoint_angular_difference(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_always_eq_tcbuffer_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 { + 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); + }); +} + +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); - Temporal *r = tpoint_angular_difference(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + Cbuffer *a2p = BlobToCbuffer(a2); + int32_t r = always_ne_tcbuffer_cbuffer(t, a2p); + free(a2p); free(t); + return (r != 0); }); } -static void Gen_tpoint_azimuth(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_always_ne_tcbuffer_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 { + 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_tcbuffer_tcbuffer(t1, t2); + free(t1); free(t2); + return (r != 0); + }); +} + +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); - Temporal *r = tpoint_azimuth(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + Cbuffer *a2p = BlobToCbuffer(a2); + int32_t r = ever_eq_tcbuffer_cbuffer(t, a2p); + free(a2p); free(t); + return (r != 0); }); } -static void Gen_tpoint_cumulative_length(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_ever_eq_tcbuffer_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 { + 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); + free(t1); free(t2); + return (r != 0); + }); +} + +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); - Temporal *r = tpoint_cumulative_length(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + Cbuffer *a2p = BlobToCbuffer(a2); + int32_t r = ever_ne_tcbuffer_cbuffer(t, a2p); + free(a2p); free(t); + return (r != 0); }); } -static void Gen_tpoint_get_x(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_ever_ne_tcbuffer_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 { + 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); + }); +} + + +// ===== @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(), + [&](bool a1, string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tpoint_get_x(t); + Temporal *r = tand_bool_tbool(a1, t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpoint_get_y(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tand_tbool_bool(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, bool a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tpoint_get_y(t); + Temporal *r = tand_tbool_bool(t, a2); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpoint_get_z(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tand_tbool_tbool(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); + 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_tpoint_is_simple(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tnot_tbool(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); - bool r = tpoint_is_simple(t); + Temporal *r = tnot_tbool(t); free(t); - return r; + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpoint_length(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tor_bool_tbool(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { + 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); - double r = tpoint_length(t); + Temporal *r = tor_bool_tbool(a1, t); free(t); - return r; + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpoint_speed(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tor_tbool_bool(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, bool a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Temporal *r = tpoint_speed(t); + Temporal *r = tor_tbool_bool(t, a2); free(t); return TemporalToBlobN(result, r, mask, idx); }); } - -// ===== @ingroup meos_box_bbox_pos ===== -static void Gen_after_tbox_tbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tor_tbool_tbool(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 = after_tbox_tbox(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 = tor_tbool_tbool(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_before_tbox_tbox(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) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = before_tbox_tbox(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_left_tbox_tbox(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) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = left_tbox_tbox(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_overafter_tbox_tbox(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) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = overafter_tbox_tbox(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_overbefore_tbox_tbox(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) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = overbefore_tbox_tbox(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_overleft_tbox_tbox(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) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = overleft_tbox_tbox(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_overright_tbox_tbox(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) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = overright_tbox_tbox(s1, s2); + Npoint *s1 = BlobToNpoint(a); + Npoint *s2 = BlobToNpoint(b); + bool r = npoint_ne(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_right_tbox_tbox(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) { - TBox *s1 = BlobToTbox(a); - TBox *s2 = BlobToTbox(b); - bool r = right_tbox_tbox(s1, s2); + Npoint *s1 = BlobToNpoint(a); + Npoint *s2 = BlobToNpoint(b); + bool r = npoint_same(s1, s2); free(s1); free(s2); return r; }); } -// ===== @ingroup meos_geo_conversion ===== -static void Gen_tgeogpoint_to_tgeography(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_h3_edges ===== +static void Gen_th3index_are_neighbor_cells(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); + 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_are_neighbor_cells(t1, t2); + free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tgeography_to_tgeogpoint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_cells_to_directed_edge(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); + 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_cells_to_directed_edge(t1, t2); + free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tgeography_to_tgeometry(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_is_valid_directed_edge(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); + Temporal *r = th3index_is_valid_directed_edge(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tgeometry_to_tgeography(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_get_directed_edge_origin(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); + Temporal *r = th3index_get_directed_edge_origin(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tgeometry_to_tgeompoint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_get_directed_edge_destination(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); + Temporal *r = th3index_get_directed_edge_destination(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tgeompoint_to_tgeometry(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_directed_edge_to_boundary(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); + Temporal *r = th3index_directed_edge_to_boundary(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @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) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = stbox_eq(s1, s2); - free(s1); free(s2); - return r; - }); -} - -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) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = stbox_ge(s1, s2); - free(s1); free(s2); - return r; - }); -} - -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) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = stbox_gt(s1, s2); - free(s1); free(s2); - return r; - }); -} - -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) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = stbox_le(s1, s2); - free(s1); free(s2); - return r; - }); -} - -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) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = stbox_lt(s1, s2); - free(s1); free(s2); - return r; - }); -} - -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) { - STBox *s1 = BlobToStbox(a); - STBox *s2 = BlobToStbox(b); - bool r = stbox_ne(s1, s2); - free(s1); free(s2); - return r; - }); -} - - -// ===== @ingroup meos_quadbin_comp_ever ===== -static void Gen_ever_eq_tquadbin_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_s2cell_comp_ever ===== +static void Gen_ever_eq_ts2cell_ts2cell(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_tquadbin_tquadbin(t1, t2); + int32_t r = ever_eq_ts2cell_ts2cell(t1, t2); free(t1); free(t2); return (r != 0); }); } -static void Gen_ever_ne_tquadbin_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_ever_ne_ts2cell_ts2cell(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_tquadbin_tquadbin(t1, t2); + int32_t r = ever_ne_ts2cell_ts2cell(t1, t2); free(t1); free(t2); return (r != 0); }); } -static void Gen_always_eq_tquadbin_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_always_eq_ts2cell_ts2cell(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_tquadbin_tquadbin(t1, t2); + int32_t r = always_eq_ts2cell_ts2cell(t1, t2); free(t1); free(t2); return (r != 0); }); } -static void Gen_always_ne_tquadbin_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_always_ne_ts2cell_ts2cell(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_tquadbin_tquadbin(t1, t2); + int32_t r = always_ne_ts2cell_ts2cell(t1, t2); free(t1); free(t2); return (r != 0); }); @@ -3823,92 +3806,81 @@ static void Gen_th3index_values(DataChunk &args, ExpressionState &, Vector &resu } -// ===== @ingroup meos_pointcloud_accessor ===== -static void Gen_tpcpoint_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); - Pcpoint * r = tpcpoint_start_value(t); - free(t); - return PcpointToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tpcpoint_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); - Pcpoint * r = tpcpoint_end_value(t); + Temporal *r = tcbuffer_to_tfloat(t); free(t); - return PcpointToBlobN(result, r, mask, idx); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpcpatch_start_value(DataChunk &args, ExpressionState &, 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); - Pcpatch * r = tpcpatch_start_value(t); + Temporal *r = tcbuffer_to_tgeompoint(t); free(t); - return PcpatchToBlobN(result, r, mask, idx); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpcpatch_end_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); - Pcpatch * r = tpcpatch_end_value(t); + Temporal *r = tgeometry_to_tcbuffer(t); free(t); - return PcpatchToBlobN(result, r, mask, idx); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_pose_base_inout ===== -static void Gen_pose_as_ewkt(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_posechain_base_inout ===== +static void Gen_posechain_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_ewkt(s, a2); + PoseChain *s = BlobToPosechain(a); + char *r = posechain_as_text(s, a2); free(s); return TakeCString(result, r); }); } -static void Gen_pose_as_ewkt_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_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_ewkt(s, 15); + PoseChain *s = BlobToPosechain(a); + char *r = posechain_as_text(s, 15); free(s); return TakeCString(result, r); }); } -static void Gen_pose_as_text(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_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_text(s, a2); + PoseChain *s = BlobToPosechain(a); + char *r = posechain_as_ewkt(s, a2); free(s); return TakeCString(result, r); }); } -static void Gen_pose_as_text_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_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_text(s, 15); + PoseChain *s = BlobToPosechain(a); + char *r = posechain_as_ewkt(s, 15); free(s); return TakeCString(result, r); }); @@ -3998,52 +3970,33 @@ static void Gen_ttext_to_tjsonb(DataChunk &args, ExpressionState &, Vector &resu } -// ===== @ingroup meos_box_accessor ===== -static void Gen_tbox_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); - return r; - }); -} - -static void Gen_tbox_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_rgeo_spatialfuncs ===== +static void Gen_trgeometry_body_point_trajectory(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); - free(s); - 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_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; - }); -} - - -// ===== @ingroup meos_pose_base_srid ===== -static void Gen_pose_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); - free(v); - return r; + return TemporalToBlobN(result, r, mask, idx); }); } @@ -4543,85 +4496,76 @@ 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_box_bbox_pos(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("after", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_after_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("before", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_before_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("left", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_left_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("<<", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_left_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overafter_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overbefore_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("overleft", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overleft_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("&<", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overleft_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("overright", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overright_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("&>", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overright_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction("right", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_right_tbox_tbox)); - RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_right_tbox_tbox)); -} - -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_quadbin_comp_ever(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_ever_eq_tquadbin_tquadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_ever_eq_tquadbin_tquadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_ever_ne_tquadbin_tquadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_ever_ne_tquadbin_tquadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_always_eq_tquadbin_tquadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_always_eq_tquadbin_tquadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_always_ne_tquadbin_tquadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_always_ne_tquadbin_tquadbin)); +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_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_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)); +} + +void RegisterGenerated_meos_h3_edges(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("th3AreNeighborCells", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_th3index_are_neighbor_cells)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellsToDirectedEdge", {H3indexTypes::th3index(), H3indexTypes::th3index()}, H3indexTypes::th3index(), Gen_th3index_cells_to_directed_edge)); + RegisterSerializedScalarFunction(loader, ScalarFunction("isValidDirectedEdge", {H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_th3index_is_valid_directed_edge)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3GetDirectedEdgeOrigin", {H3indexTypes::th3index()}, H3indexTypes::th3index(), Gen_th3index_get_directed_edge_origin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3GetDirectedEdgeDestination", {H3indexTypes::th3index()}, H3indexTypes::th3index(), Gen_th3index_get_directed_edge_destination)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3DirectedEdgeToBoundary", {H3indexTypes::th3index()}, TGeographyTypes::tgeography(), Gen_th3index_directed_edge_to_boundary)); +} + +void RegisterGenerated_meos_s2cell_comp_ever(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_ever_eq_ts2cell_ts2cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_ever_eq_ts2cell_ts2cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_ever_ne_ts2cell_ts2cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_ever_ne_ts2cell_ts2cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_always_eq_ts2cell_ts2cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_always_eq_ts2cell_ts2cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_always_ne_ts2cell_ts2cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_always_ne_ts2cell_ts2cell)); } void RegisterGenerated_meos_h3_accessor(ExtensionLoader &loader) { @@ -4631,18 +4575,20 @@ void RegisterGenerated_meos_h3_accessor(ExtensionLoader &loader) { 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_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_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_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_cbuffer_base_accessor(ExtensionLoader &loader) { @@ -4665,17 +4611,12 @@ void RegisterGenerated_meos_json_conversion(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TemporalTypes::ttext()}, TJsonbTypes::tjsonb(), Gen_ttext_to_tjsonb)); } -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_posechain_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("numPoses", {PosechainTypes::tposechain()}, LogicalType::INTEGER, Gen_tposechain_num_poses)); +void RegisterGenerated_meos_rgeo_spatialfuncs(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("bodyPointTrajectory", {TrgeometryTypes::trgeometry(), MobilityDuckGeometryType()}, TgeompointType::tgeompoint(), Gen_trgeometry_body_point_trajectory)); } -void RegisterGenerated_meos_pose_base_srid(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {PoseTypes::pose()}, LogicalType::INTEGER, Gen_pose_srid)); +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 aeb492ef..b3cbb692 100644 --- a/src/generated/generated_temporal_udfs_3.cpp +++ b/src/generated/generated_temporal_udfs_3.cpp @@ -1515,148 +1515,233 @@ static void Gen_right_stbox_stbox(DataChunk &args, ExpressionState &, Vector &re } -// ===== @ingroup meos_geo_inout ===== -static void Gen_tspatial_as_ewkt(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_temporal_inout ===== +static void Gen_temporal_as_hexwkb(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + if (args.ColumnCount() > 1) { + BinaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], result, args.size(), + [&](string_t in, string_t endian, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *x = BlobToTemporal(in); + uint8_t variant = wkb_variant_from_endian(endian.GetString().c_str()); + size_t sz = 0; + char *hex = temporal_as_hexwkb(x, variant, &sz); + free(x); + if (!hex) { mask.SetInvalid(idx); return string_t(); } + string_t out = StringVector::AddString(result, hex); + free(hex); + return out; + }); + } else { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *x = BlobToTemporal(in); + size_t sz = 0; + char *hex = temporal_as_hexwkb(x, (uint8_t) 0, &sz); + free(x); + if (!hex) { mask.SetInvalid(idx); return string_t(); } + string_t out = StringVector::AddString(result, hex); + free(hex); + return out; + }); + } +} + +static void Gen_temporal_from_hexwkb(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, int32_t a2) { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *r = temporal_from_hexwkb(in.GetString().c_str()); + return TemporalToBlobN(result, r, mask, idx); + }); +} + + +// ===== @ingroup meos_posechain_comp_ever ===== +static void Gen_always_eq_tposechain_posechain(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); - char * r = tspatial_as_ewkt(t, a2); - free(t); - return TakeCString(result, r); + PoseChain *a2p = BlobToPosechain(a2); + int32_t r = always_eq_tposechain_posechain(t, a2p); + free(a2p); free(t); + return (r != 0); }); } -static void Gen_tspatial_as_ewkt_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_always_eq_tposechain_tposechain(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { + 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_tposechain_tposechain(t1, t2); + free(t1); free(t2); + return (r != 0); + }); +} + +static void Gen_always_ne_tposechain_posechain(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); - char * r = tspatial_as_ewkt(t, 15); - free(t); - return TakeCString(result, r); + PoseChain *a2p = BlobToPosechain(a2); + int32_t r = always_ne_tposechain_posechain(t, a2p); + free(a2p); free(t); + return (r != 0); }); } -static void Gen_tspatial_as_text(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_always_ne_tposechain_tposechain(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, int32_t a2) { + 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_tposechain_tposechain(t1, t2); + free(t1); free(t2); + return (r != 0); + }); +} + +static void Gen_ever_eq_tposechain_posechain(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); - char * r = tspatial_as_text(t, a2); - free(t); - return TakeCString(result, r); + PoseChain *a2p = BlobToPosechain(a2); + int32_t r = ever_eq_tposechain_posechain(t, a2p); + free(a2p); free(t); + return (r != 0); }); } -static void Gen_tspatial_as_text_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_ever_eq_tposechain_tposechain(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { + 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_tposechain_tposechain(t1, t2); + free(t1); free(t2); + return (r != 0); + }); +} + +static void Gen_ever_ne_tposechain_posechain(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); - char * r = tspatial_as_text(t, 15); - free(t); - return TakeCString(result, r); + PoseChain *a2p = BlobToPosechain(a2); + int32_t r = ever_ne_tposechain_posechain(t, a2p); + free(a2p); free(t); + return (r != 0); + }); +} + +static void Gen_ever_ne_tposechain_tposechain(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_tposechain_tposechain(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_h3_metrics ===== +static void Gen_th3index_cell_area_km2(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 = th3index_cell_area_km2(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_th3index_cell_area_rads2(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 = th3index_cell_area_rads2(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tspatial_transform(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_edge_length_km(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_transform(t, a2); + Temporal *r = th3index_edge_length_km(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } +static void Gen_th3index_edge_length_m(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_edge_length_m(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); + }); +} -// ===== @ingroup meos_geo_comp_temp ===== -static void Gen_teq_geo_tgeo(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_edge_length_rads(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); + 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_edge_length_rads(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_teq_tgeo_geo(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tgeogpoint_great_circle_distance_km(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); + [&](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_km(t1, t2); + free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_geo_tgeo(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tgeogpoint_great_circle_distance_m(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 = tgeogpoint_great_circle_distance_m(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_tgeogpoint_great_circle_distance_rads(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); + [&](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_rads(t1, t2); + free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } @@ -1748,76 +1833,71 @@ static void Gen_pose_same(DataChunk &args, ExpressionState &, Vector &result) { } -// ===== @ingroup meos_box_comp ===== -static void Gen_tbox_eq(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_h3_hierarchy ===== +static void Gen_th3index_cell_to_parent_next(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; + 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_cell_to_parent_next(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tbox_ge(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_cell_to_center_child(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; + 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 = th3index_cell_to_center_child(t, a2); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tbox_gt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_cell_to_center_child_next(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; + 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_cell_to_center_child_next(t); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tbox_le(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_cell_to_child_pos(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; + 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 = th3index_cell_to_child_pos(t, a2); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tbox_lt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_child_pos_to_cell(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; + TernaryExecutor::ExecuteWithNulls(args.data[0], args.data[1], args.data[2], result, args.size(), + [&](string_t in1, string_t in2, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + Temporal *r = th3index_child_pos_to_cell(t1, t2, a2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tbox_ne(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_h3_uncompact_cells(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; + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, int32_t a2) { + Set *s = BlobToSet(a); + Set *r = h3_uncompact_cells(s, a2); + free(s); + return SetToBlob(result, r); }); } @@ -1940,40 +2020,59 @@ static void Gen_tjsonb_value_n(DataChunk &args, ExpressionState &, Vector &resul } -// ===== @ingroup meos_h3_traversal ===== -static void Gen_th3index_grid_distance(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pose_base_geopose ===== +static void Gen_tpose_as_geopose_stream(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); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int32_t a2) { + Temporal *t = BlobToTemporal(in); + char * r = tpose_as_geopose_stream(t, a2); + free(t); + return TakeCString(result, r); }); } -static void Gen_th3index_cell_to_local_ij(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_as_geopose_stream_d(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::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Temporal *t = BlobToTemporal(in); + char * r = tpose_as_geopose_stream(t, -1); + free(t); + return TakeCString(result, r); }); } -static void Gen_th3index_local_ij_to_cell(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pose_yaw(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::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Pose *v = BlobToPose(in); + double r = pose_yaw(v); + free(v); + return r; + }); +} + +static void Gen_pose_pitch(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Pose *v = BlobToPose(in); + double r = pose_pitch(v); + free(v); + return r; + }); +} + +static void Gen_pose_roll(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Pose *v = BlobToPose(in); + double r = pose_roll(v); + free(v); + return r; }); } @@ -2052,81 +2151,90 @@ static void Gen_etouches_tpoint_geo(DataChunk &args, ExpressionState &, Vector & } -// ===== @ingroup meos_h3_comp_temp ===== -static void Gen_teq_th3index_th3index(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_quadbin_comp_temp ===== +static void Gen_teq_tquadbin_tquadbin(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_th3index_th3index(t1, t2); + Temporal *r = teq_tquadbin_tquadbin(t1, t2); free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_th3index_th3index(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tne_tquadbin_tquadbin(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_th3index_th3index(t1, t2); + Temporal *r = tne_tquadbin_tquadbin(t1, t2); free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_pose_conversion ===== -static void Gen_tpose_make(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_internal_temporal_inout ===== +static void Gen_temporal_from_mfjson(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); - free(t1); free(t2); + 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); }); } -static void Gen_tpose_to_tpoint(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_pose_base_accessor ===== +static void Gen_pose_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 = tpose_to_tpoint(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + 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) { + 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; }); } -// ===== @ingroup meos_h3_comp ===== -static void Gen_ever_eq_h3indexset_th3index(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_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; + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Temporal *t = BlobToTemporal(in); + int32_t r = tposechain_num_poses(t); + free(t); + return r; }); } -// ===== @ingroup meos_npoint_set_accessor ===== -static void Gen_npointset_routes(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 { - Set *s = BlobToSet(in); - Set *r = npointset_routes(s); - free(s); - return SetToBlobN(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; }); } @@ -2992,113 +3100,82 @@ void RegisterGenerated_meos_geo_box_pos(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {StboxType::stbox(), StboxType::stbox()}, LogicalType::BOOLEAN, Gen_right_stbox_stbox)); } -void RegisterGenerated_meos_geo_inout(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TGeographyTypes::tgeography(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {H3indexTypes::th3index(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {QuadbinTypes::tquadbin(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {S2cellTypes::ts2cell(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {NpointTypes::tnpoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PoseTypes::tpose(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PosechainTypes::tposechain(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TgeompointType::tgeompoint()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TgeogpointType::tgeogpoint()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TGeometryTypes::tgeometry()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TGeographyTypes::tgeography()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {CbufferTypes::tcbuffer()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {H3indexTypes::th3index()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {QuadbinTypes::tquadbin()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {S2cellTypes::ts2cell()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {NpointTypes::tnpoint()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PoseTypes::tpose()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TrgeometryTypes::trgeometry()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PosechainTypes::tposechain()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TGeographyTypes::tgeography(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {H3indexTypes::th3index(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {QuadbinTypes::tquadbin(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {S2cellTypes::ts2cell(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {NpointTypes::tnpoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PoseTypes::tpose(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PosechainTypes::tposechain(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TgeompointType::tgeompoint()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TgeogpointType::tgeogpoint()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TGeometryTypes::tgeometry()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TGeographyTypes::tgeography()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {CbufferTypes::tcbuffer()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {H3indexTypes::th3index()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {QuadbinTypes::tquadbin()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {S2cellTypes::ts2cell()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {NpointTypes::tnpoint()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PoseTypes::tpose()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TrgeometryTypes::trgeometry()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PosechainTypes::tposechain()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); -} - -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", {H3indexTypes::th3index()}, LogicalType::INTEGER, Gen_tspatial_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {QuadbinTypes::tquadbin()}, LogicalType::INTEGER, Gen_tspatial_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("SRID", {S2cellTypes::ts2cell()}, 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", {H3indexTypes::th3index(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_tspatial_set_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {QuadbinTypes::tquadbin(), LogicalType::INTEGER}, QuadbinTypes::tquadbin(), Gen_tspatial_set_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {S2cellTypes::ts2cell(), LogicalType::INTEGER}, S2cellTypes::ts2cell(), Gen_tspatial_set_srid)); - RegisterSerializedScalarFunction(loader, ScalarFunction("setSRID", {NpointTypes::tnpoint(), LogicalType::INTEGER}, NpointTypes::tnpoint(), 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", {H3indexTypes::th3index(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_tspatial_transform)); - RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {QuadbinTypes::tquadbin(), LogicalType::INTEGER}, QuadbinTypes::tquadbin(), Gen_tspatial_transform)); - RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {S2cellTypes::ts2cell(), LogicalType::INTEGER}, S2cellTypes::ts2cell(), Gen_tspatial_transform)); - RegisterSerializedScalarFunction(loader, ScalarFunction("transform", {NpointTypes::tnpoint(), LogicalType::INTEGER}, NpointTypes::tnpoint(), 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_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_temporal_inout(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {CbufferTypes::tcbuffer()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {CbufferTypes::tcbuffer(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TGeometryTypes::tgeometry()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TGeometryTypes::tgeometry(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TGeographyTypes::tgeography()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TGeographyTypes::tgeography(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TgeompointType::tgeompoint()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TgeompointType::tgeompoint(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TgeogpointType::tgeogpoint()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TgeogpointType::tgeogpoint(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {H3indexTypes::th3index()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {H3indexTypes::th3index(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TJsonbTypes::tjsonb()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TJsonbTypes::tjsonb(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {NpointTypes::tnpoint()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {NpointTypes::tnpoint(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TPcpointTypes::tpcpoint()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TPcpointTypes::tpcpoint(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TPcpatchTypes::tpcpatch()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TPcpatchTypes::tpcpatch(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {PoseTypes::tpose()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {PoseTypes::tpose(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {PosechainTypes::tposechain()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {PosechainTypes::tposechain(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {QuadbinTypes::tquadbin()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {QuadbinTypes::tquadbin(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TrgeometryTypes::trgeometry()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TrgeometryTypes::trgeometry(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {S2cellTypes::ts2cell()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {S2cellTypes::ts2cell(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tbool()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tbool(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tint()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tint(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tbigint()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tbigint(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tfloat()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::tfloat(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::ttext()}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asHexWKB", {TemporalTypes::ttext(), LogicalType::VARCHAR}, LogicalType::VARCHAR, Gen_temporal_as_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tboolFromHexWKB", {LogicalType::VARCHAR}, TemporalTypes::tbool(), Gen_temporal_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tintFromHexWKB", {LogicalType::VARCHAR}, TemporalTypes::tint(), Gen_temporal_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tbigintFromHexWKB", {LogicalType::VARCHAR}, TemporalTypes::tbigint(), Gen_temporal_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tfloatFromHexWKB", {LogicalType::VARCHAR}, TemporalTypes::tfloat(), Gen_temporal_from_hexwkb)); + RegisterSerializedScalarFunction(loader, ScalarFunction("ttextFromHexWKB", {LogicalType::VARCHAR}, TemporalTypes::ttext(), Gen_temporal_from_hexwkb)); +} + +void RegisterGenerated_meos_posechain_comp_ever(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_always_eq_tposechain_posechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_always_eq_tposechain_posechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_always_eq_tposechain_tposechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_always_eq_tposechain_tposechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_always_ne_tposechain_posechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_always_ne_tposechain_posechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_always_ne_tposechain_tposechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_always_ne_tposechain_tposechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_ever_eq_tposechain_posechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_ever_eq_tposechain_posechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_ever_eq_tposechain_tposechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_ever_eq_tposechain_tposechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_ever_ne_tposechain_posechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_ever_ne_tposechain_posechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_ever_ne_tposechain_tposechain)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_ever_ne_tposechain_tposechain)); +} + +void RegisterGenerated_meos_h3_metrics(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellAreaKm2", {H3indexTypes::th3index()}, TemporalTypes::tfloat(), Gen_th3index_cell_area_km2)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellAreaRads2", {H3indexTypes::th3index()}, TemporalTypes::tfloat(), Gen_th3index_cell_area_rads2)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3EdgeLengthKm", {H3indexTypes::th3index()}, TemporalTypes::tfloat(), Gen_th3index_edge_length_km)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3EdgeLengthM", {H3indexTypes::th3index()}, TemporalTypes::tfloat(), Gen_th3index_edge_length_m)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3EdgeLengthRads", {H3indexTypes::th3index()}, TemporalTypes::tfloat(), Gen_th3index_edge_length_rads)); + RegisterSerializedScalarFunction(loader, ScalarFunction("greatCircleDistanceKm", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tgeogpoint_great_circle_distance_km)); + RegisterSerializedScalarFunction(loader, ScalarFunction("greatCircleDistanceM", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tgeogpoint_great_circle_distance_m)); + RegisterSerializedScalarFunction(loader, ScalarFunction("greatCircleDistanceRads", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tgeogpoint_great_circle_distance_rads)); } void RegisterGenerated_meos_pose_base_comp(ExtensionLoader &loader) { @@ -3118,19 +3195,13 @@ void RegisterGenerated_meos_pose_base_comp(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("~=", {PoseTypes::pose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_pose_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_h3_hierarchy(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("cellToParent", {H3indexTypes::th3index()}, H3indexTypes::th3index(), Gen_th3index_cell_to_parent_next)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellToCenterChild", {H3indexTypes::th3index(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_th3index_cell_to_center_child)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellToCenterChild", {H3indexTypes::th3index()}, H3indexTypes::th3index(), Gen_th3index_cell_to_center_child_next)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellToChildPos", {H3indexTypes::th3index(), LogicalType::INTEGER}, TemporalTypes::tbigint(), Gen_th3index_cell_to_child_pos)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3ChildPosToCell", {H3indexTypes::th3index(), H3indexTypes::th3index(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_th3index_child_pos_to_cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("h3UncompactCells", {SetTypes::intset(), LogicalType::INTEGER}, SetTypes::intset(), Gen_h3_uncompact_cells)); } void RegisterGenerated_meos_rgeo_comp_temp(ExtensionLoader &loader) { @@ -3147,12 +3218,12 @@ void RegisterGenerated_meos_json_accessor(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("valueN", {TJsonbTypes::tjsonb(), LogicalType::INTEGER}, TJsonbTypes::jsonb(), Gen_tjsonb_value_n)); } -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_pose_base_geopose(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("asGeoPoseStream", {PoseTypes::tpose(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tpose_as_geopose_stream)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asGeoPoseStream", {PoseTypes::tpose()}, LogicalType::VARCHAR, Gen_tpose_as_geopose_stream_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("yaw", {PoseTypes::pose()}, LogicalType::DOUBLE, Gen_pose_yaw)); + RegisterSerializedScalarFunction(loader, ScalarFunction("pitch", {PoseTypes::pose()}, LogicalType::DOUBLE, Gen_pose_pitch)); + RegisterSerializedScalarFunction(loader, ScalarFunction("roll", {PoseTypes::pose()}, LogicalType::DOUBLE, Gen_pose_roll)); } void RegisterGenerated_meos_cbuffer_accessor(ExtensionLoader &loader) { @@ -3166,24 +3237,30 @@ void RegisterGenerated_meos_temporal_spatial_rel_ever(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("eTouches", {TgeompointType::tgeompoint(), MobilityDuckGeometryType()}, LogicalType::BOOLEAN, Gen_etouches_tpoint_geo)); } -void RegisterGenerated_meos_h3_comp_temp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_teq_th3index_th3index)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_tne_th3index_th3index)); +void RegisterGenerated_meos_quadbin_comp_temp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_teq_tquadbin_tquadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_tne_tquadbin_tquadbin)); +} + +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_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_posechain_accessor(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("numPoses", {PosechainTypes::tposechain()}, LogicalType::INTEGER, Gen_tposechain_num_poses)); } -void RegisterGenerated_meos_npoint_set_accessor(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("routes", {SetTypes::npointset()}, SetTypes::npointset(), Gen_npointset_routes)); +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_4.cpp b/src/generated/generated_temporal_udfs_4.cpp index 78161c3d..b49bd0d4 100644 --- a/src/generated/generated_temporal_udfs_4.cpp +++ b/src/generated/generated_temporal_udfs_4.cpp @@ -2233,584 +2233,631 @@ 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) { +// ===== @ingroup meos_geo_inout ===== +static void Gen_tspatial_as_ewkt(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); - Cbuffer *a2p = BlobToCbuffer(a2); - Temporal *r = tdistance_tcbuffer_cbuffer(t, a2p); - free(a2p); free(t); - return TemporalToBlobN(result, r, mask, idx); + char * r = tspatial_as_ewkt(t, a2); + free(t); + return TakeCString(result, r); }); } -static void Gen_tdistance_tcbuffer_geo(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tspatial_as_ewkt_d(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_tcbuffer_geo(t, gs); - free(t); free(gs); - return TemporalToBlobN(result, r, mask, idx); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Temporal *t = BlobToTemporal(in); + char * r = tspatial_as_ewkt(t, 15); + free(t); + return TakeCString(result, r); }); } -static void Gen_tdistance_tcbuffer_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tspatial_as_text(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); - free(t1); free(t2); - return TemporalToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int32_t a2) { + Temporal *t = BlobToTemporal(in); + char * r = tspatial_as_text(t, a2); + free(t); + return TakeCString(result, r); }); } -static void Gen_nad_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tspatial_as_text_d(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, string_t a2) { + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { Temporal *t = BlobToTemporal(in); - Cbuffer *a2p = BlobToCbuffer(a2); - double r = nad_tcbuffer_cbuffer(t, a2p); - free(a2p); free(t); - return r; + char * r = tspatial_as_text(t, 15); + free(t); + return TakeCString(result, r); }); } -static void Gen_nad_tcbuffer_tcbuffer(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_box_bbox_pos ===== +static void Gen_after_tbox_tbox(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); - free(t1); free(t2); + 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 = after_tbox_tbox(s1, s2); + free(s1); free(s2); return r; }); } -static void Gen_nai_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_before_tbox_tbox(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); - free(a2p); 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) { + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = before_tbox_tbox(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_nad_tcbuffer_stbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_left_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) -> 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(); } + 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 = left_tbox_tbox(s1, s2); + free(s1); free(s2); return r; }); } - -// ===== @ingroup meos_h3_metrics ===== -static void Gen_th3index_cell_area_km2(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_overafter_tbox_tbox(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_cell_area_km2(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) { + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = overafter_tbox_tbox(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_th3index_cell_area_rads2(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_overbefore_tbox_tbox(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_cell_area_rads2(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) { + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = overbefore_tbox_tbox(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_th3index_edge_length_km(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_overleft_tbox_tbox(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_edge_length_km(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) { + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = overleft_tbox_tbox(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_th3index_edge_length_m(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_overright_tbox_tbox(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_edge_length_m(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) { + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = overright_tbox_tbox(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_th3index_edge_length_rads(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_right_tbox_tbox(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_edge_length_rads(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) { + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = right_tbox_tbox(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_tgeogpoint_great_circle_distance_km(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(), - [&](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_km(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_at_geom(t, gs); + free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tgeogpoint_great_circle_distance_m(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 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_m(t1, t2); - free(t1); free(t2); + [&](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_tgeogpoint_great_circle_distance_rads(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 = tgeogpoint_great_circle_distance_rads(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); }); } - -// ===== @ingroup meos_setspan_inout ===== -static void Gen_set_from_hexwkb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_minus_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 { - Set *r = set_from_hexwkb(in.GetString().c_str()); - return SetToBlobN(result, r, mask, idx); + 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); }); } -static void Gen_span_from_hexwkb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_at_elevation(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::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_spanset_from_hexwkb(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_minus_elevation(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::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_topo ===== -static void Gen_contains_tpcbox_tpcbox(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) { TPCBox *s1 = BlobToTpcbox(a); TPCBox *s2 = BlobToTpcbox(b); - bool r = contains_tpcbox_tpcbox(s1, s2); + bool r = tpcbox_eq(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_contained_tpcbox_tpcbox(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) { TPCBox *s1 = BlobToTpcbox(a); TPCBox *s2 = BlobToTpcbox(b); - bool r = contained_tpcbox_tpcbox(s1, s2); + bool r = tpcbox_ne(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_overlaps_tpcbox_tpcbox(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) { TPCBox *s1 = BlobToTpcbox(a); TPCBox *s2 = BlobToTpcbox(b); - bool r = overlaps_tpcbox_tpcbox(s1, s2); + bool r = tpcbox_lt(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_same_tpcbox_tpcbox(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) { TPCBox *s1 = BlobToTpcbox(a); TPCBox *s2 = BlobToTpcbox(b); - bool r = same_tpcbox_tpcbox(s1, s2); + bool r = tpcbox_le(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_adjacent_tpcbox_tpcbox(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) { TPCBox *s1 = BlobToTpcbox(a); TPCBox *s2 = BlobToTpcbox(b); - bool r = adjacent_tpcbox_tpcbox(s1, s2); - free(s1); free(s2); - return r; - }); -} - - -// ===== @ingroup meos_geo_box_topo ===== -static void Gen_adjacent_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 = adjacent_stbox_stbox(s1, s2); - free(s1); free(s2); - return r; - }); -} - -static void Gen_contained_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 = contained_stbox_stbox(s1, s2); + bool r = tpcbox_gt(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_contains_stbox_stbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcbox_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 = 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); + TPCBox *s1 = BlobToTpcbox(a); + TPCBox *s2 = BlobToTpcbox(b); + bool r = tpcbox_ge(s1, s2); free(s1); free(s2); return r; }); } -// ===== @ingroup meos_pointcloud_restrict ===== -static void Gen_tpcpoint_at_value(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_cbuffer_restrict ===== +static void Gen_tcbuffer_at_cbuffer(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); - Pcpoint *a2p = BlobToPcpoint(a2); - Temporal *r = tpcpoint_at_value(t, a2p); + Cbuffer *a2p = BlobToCbuffer(a2); + Temporal *r = tcbuffer_at_cbuffer(t, a2p); free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpcpoint_minus_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tcbuffer_at_geom(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); - Pcpoint *a2p = BlobToPcpoint(a2); - Temporal *r = tpcpoint_minus_value(t, a2p); - free(a2p); free(t); + [&](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_tpcpatch_at_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tcbuffer_minus_cbuffer(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); - Pcpatch *a2p = BlobToPcpatch(a2); - Temporal *r = tpcpatch_at_value(t, a2p); + Cbuffer *a2p = BlobToCbuffer(a2); + Temporal *r = tcbuffer_minus_cbuffer(t, a2p); free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpcpatch_minus_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tcbuffer_minus_geom(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); - Pcpatch *a2p = BlobToPcpatch(a2); - Temporal *r = tpcpatch_minus_value(t, a2p); - free(a2p); free(t); + [&](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_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_cbuffer_base_inout ===== -static void Gen_cbuffer_as_ewkt(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_pointcloud_accessor ===== +static void Gen_tpcpoint_start_value(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); - 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); + Pcpoint * r = tpcpoint_start_value(t); + free(t); + return PcpointToBlobN(result, r, mask, idx); }); } -static void Gen_cbuffer_as_ewkt_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcpoint_end_value(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); - 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); + Pcpoint * r = tpcpoint_end_value(t); + free(t); + return PcpointToBlobN(result, r, mask, idx); }); } -static void Gen_cbuffer_as_text(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcpatch_start_value(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); - 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_start_value(t); + free(t); + return PcpatchToBlobN(result, r, mask, idx); }); } -static void Gen_cbuffer_as_text_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcpatch_end_value(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); - 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); }); } -// ===== @ingroup meos_geo_set_srid ===== -static void Gen_spatialset_set_srid(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pose_transf ===== +static void Gen_tpose_compose_pose(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, int32_t a2) { - Set *s = BlobToSet(a); - Set *r = spatialset_set_srid(s, a2); - free(s); - return SetToBlob(result, 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); + Pose *a2p = BlobToPose(a2); + Temporal *r = tpose_compose_pose(t, a2p); + free(a2p); free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_spatialset_transform(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_compose_tpose(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t a, int32_t a2) { - Set *s = BlobToSet(a); - Set *r = spatialset_transform(s, a2); - free(s); - return SetToBlob(result, 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_compose_tpose(t1, t2); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); }); } - -// ===== @ingroup meos_s2cell_conversion ===== -static void Gen_tbigint_to_ts2cell(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_inverse(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_ts2cell(t); + Temporal *r = tpose_inverse(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_ts2cell_to_tbigint(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_pose_accessor ===== +static void Gen_tpose_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 = ts2cell_to_tbigint(t); + Pose * r = tpose_end_value(t); free(t); - return TemporalToBlobN(result, r, mask, idx); + return PoseToBlobN(result, r, mask, idx); }); } - -// ===== @ingroup meos_posechain_inout ===== -static void Gen_tposechain_as_geopose(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_start_value(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in, int32_t a2) { + UnaryExecutor::ExecuteWithNulls(args.data[0], result, args.size(), + [&](string_t in, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - char * r = tposechain_as_geopose(t, a2); + Pose * r = tpose_start_value(t); free(t); - return TakeCString(result, r); + return PoseToBlobN(result, r, mask, idx); }); } -static void Gen_tposechain_as_geopose_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_trajectory(DataChunk &args, ExpressionState &state, 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); - char * r = tposechain_as_geopose(t, -1); + GSERIALIZED * r = tpose_trajectory(t); free(t); - return TakeCString(result, r); + if (!r) { mask.SetInvalid(idx); return string_t(); } + string_t out = GSerializedToGeometry(r, state, result); + free(r); + return out; }); } -// ===== @ingroup meos_geo_box_accessor ===== -static void Gen_stbox_hash(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_cbuffer_comp_temp ===== +static void Gen_teq_tcbuffer_cbuffer(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 in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { + Temporal *t = BlobToTemporal(in); + Cbuffer *a2p = BlobToCbuffer(a2); + Temporal *r = teq_tcbuffer_cbuffer(t, a2p); + free(a2p); free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_stbox_hash_extended(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tne_tcbuffer_cbuffer(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; + 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 = tne_tcbuffer_cbuffer(t, a2p); + free(a2p); free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_posechain_conversion ===== -static void Gen_tposechain_to_tpose(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pose_conversion ===== +static void Gen_tpose_make(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); + free(t1); free(t2); + return TemporalToBlobN(result, r, mask, idx); + }); +} + +static void Gen_tpose_to_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 = tposechain_to_tpose(t); + Temporal *r = tpose_to_tpoint(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) { + 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; + }); +} + + +// ===== @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_accessor(ExtensionLoader &loader) { @@ -3577,139 +3624,129 @@ void RegisterGenerated_meos_temporal_dist(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TemporalTypes::tint(), TboxType::tbox()}, LogicalType::INTEGER, Gen_nad_tint_tbox)); } -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_h3_metrics(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellAreaKm2", {H3indexTypes::th3index()}, TemporalTypes::tfloat(), Gen_th3index_cell_area_km2)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellAreaRads2", {H3indexTypes::th3index()}, TemporalTypes::tfloat(), Gen_th3index_cell_area_rads2)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3EdgeLengthKm", {H3indexTypes::th3index()}, TemporalTypes::tfloat(), Gen_th3index_edge_length_km)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3EdgeLengthM", {H3indexTypes::th3index()}, TemporalTypes::tfloat(), Gen_th3index_edge_length_m)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3EdgeLengthRads", {H3indexTypes::th3index()}, TemporalTypes::tfloat(), Gen_th3index_edge_length_rads)); - RegisterSerializedScalarFunction(loader, ScalarFunction("greatCircleDistanceKm", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tgeogpoint_great_circle_distance_km)); - RegisterSerializedScalarFunction(loader, ScalarFunction("greatCircleDistanceM", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tgeogpoint_great_circle_distance_m)); - RegisterSerializedScalarFunction(loader, ScalarFunction("greatCircleDistanceRads", {TgeogpointType::tgeogpoint(), TgeogpointType::tgeogpoint()}, TemporalTypes::tfloat(), Gen_tgeogpoint_great_circle_distance_rads)); -} - -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_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_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_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_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_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_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_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_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_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_geo_inout(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TGeographyTypes::tgeography(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PoseTypes::tpose(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PosechainTypes::tposechain(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TgeompointType::tgeompoint()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TgeogpointType::tgeogpoint()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TGeometryTypes::tgeometry()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TGeographyTypes::tgeography()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {CbufferTypes::tcbuffer()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PoseTypes::tpose()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {PosechainTypes::tposechain()}, LogicalType::VARCHAR, Gen_tspatial_as_ewkt_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TgeompointType::tgeompoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TgeogpointType::tgeogpoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TGeometryTypes::tgeometry(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TGeographyTypes::tgeography(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {CbufferTypes::tcbuffer(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {NpointTypes::tnpoint(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PoseTypes::tpose(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PosechainTypes::tposechain(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tspatial_as_text)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TgeompointType::tgeompoint()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TgeogpointType::tgeogpoint()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TGeometryTypes::tgeometry()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TGeographyTypes::tgeography()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {CbufferTypes::tcbuffer()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {NpointTypes::tnpoint()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PoseTypes::tpose()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {PosechainTypes::tposechain()}, LogicalType::VARCHAR, Gen_tspatial_as_text_d)); +} + +void RegisterGenerated_meos_box_bbox_pos(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("after", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_after_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("before", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_before_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("left", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_left_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("<<", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_left_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overafter", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overafter_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overbefore", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overbefore_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overleft", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overleft_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&<", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overleft_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("overright", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overright_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("&>", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_overright_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction("right", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_right_tbox_tbox)); + RegisterSerializedScalarFunction(loader, ScalarFunction(">>", {TboxType::tbox(), TboxType::tbox()}, LogicalType::BOOLEAN, Gen_right_tbox_tbox)); +} + +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_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_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_pose_transf(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("applyPose", {PoseTypes::tpose(), PoseTypes::pose()}, PoseTypes::tpose(), Gen_tpose_compose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("applyPose", {PoseTypes::tpose(), PoseTypes::tpose()}, PoseTypes::tpose(), Gen_tpose_compose_tpose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("poseInverse", {PoseTypes::tpose()}, PoseTypes::tpose(), Gen_tpose_inverse)); +} + +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_cbuffer_comp_temp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, TemporalTypes::tbool(), Gen_teq_tcbuffer_cbuffer)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, TemporalTypes::tbool(), Gen_tne_tcbuffer_cbuffer)); +} + +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_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_5.cpp b/src/generated/generated_temporal_udfs_5.cpp index bcfa01d0..f50dd8c2 100644 --- a/src/generated/generated_temporal_udfs_5.cpp +++ b/src/generated/generated_temporal_udfs_5.cpp @@ -2955,684 +2955,631 @@ static void Gen_always_ne_th3index_h3index(DataChunk &args, ExpressionState &, V } -// ===== @ingroup meos_posechain_comp_ever ===== -static void Gen_always_eq_tposechain_posechain(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); - PoseChain *a2p = BlobToPosechain(a2); - int32_t r = always_eq_tposechain_posechain(t, a2p); + 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_tposechain_tposechain(DataChunk &args, ExpressionState &, Vector &result) { +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_tposechain_tposechain(t1, t2); + int32_t r = always_eq_tjsonb_tjsonb(t1, t2); free(t1); free(t2); return (r != 0); }); } -static void Gen_always_ne_tposechain_posechain(DataChunk &args, ExpressionState &, Vector &result) { +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); - PoseChain *a2p = BlobToPosechain(a2); - int32_t r = always_ne_tposechain_posechain(t, a2p); + 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_tposechain_tposechain(DataChunk &args, ExpressionState &, Vector &result) { +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_tposechain_tposechain(t1, t2); + int32_t r = always_ne_tjsonb_tjsonb(t1, t2); free(t1); free(t2); return (r != 0); }); } -static void Gen_ever_eq_tposechain_posechain(DataChunk &args, ExpressionState &, Vector &result) { +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); - PoseChain *a2p = BlobToPosechain(a2); - int32_t r = ever_eq_tposechain_posechain(t, a2p); + 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_tposechain_tposechain(DataChunk &args, ExpressionState &, Vector &result) { +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_tposechain_tposechain(t1, t2); + int32_t r = ever_eq_tjsonb_tjsonb(t1, t2); free(t1); free(t2); return (r != 0); }); } -static void Gen_ever_ne_tposechain_posechain(DataChunk &args, ExpressionState &, Vector &result) { +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); - PoseChain *a2p = BlobToPosechain(a2); - int32_t r = ever_ne_tposechain_posechain(t, a2p); + 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_tposechain_tposechain(DataChunk &args, ExpressionState &, Vector &result) { +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_tposechain_tposechain(t1, t2); + int32_t r = ever_ne_tjsonb_tjsonb(t1, t2); free(t1); free(t2); return (r != 0); }); } -// ===== @ingroup meos_rgeo_dist ===== -static void Gen_tdistance_trgeometry_geo(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_posechain_base_comp ===== +static void Gen_posechain_eq(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); - return TemporalToBlobN(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_eq(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_tdistance_trgeometry_tpoint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_ne(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); - return TemporalToBlobN(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_ne(s1, s2); + free(s1); free(s2); + return r; }); } -static void Gen_tdistance_trgeometry_trgeometry(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 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); + 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_nad_trgeometry_tpoint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_lt(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_lt(s1, s2); + free(s1); free(s2); return r; }); } -static void Gen_nad_trgeometry_trgeometry(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_le(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_le(s1, s2); + free(s1); free(s2); return r; }); } -static void Gen_nad_trgeometry_stbox(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_gt(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_gt(s1, s2); + free(s1); free(s2); return r; }); } +static void Gen_posechain_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_ge(s1, s2); + free(s1); free(s2); + return r; + }); +} -// ===== @ingroup meos_rgeo_bbox_split ===== -static void Gen_trgeometry_stboxes(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_cbuffer_base_comp ===== +static void Gen_cbuffer_eq(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); - } + 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); + free(s1); free(s2); + return r; + }); } -static void Gen_trgeometry_split_n_stboxes(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_ge(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); - } + 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); + free(s1); free(s2); + return r; + }); } -static void Gen_trgeometry_split_each_n_stboxes(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_gt(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); - } + 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); + free(s1); free(s2); + return r; + }); +} + +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) { + Cbuffer *s1 = BlobToCbuffer(a); + Cbuffer *s2 = BlobToCbuffer(b); + bool r = cbuffer_le(s1, s2); + free(s1); free(s2); + return r; + }); } +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) { + Cbuffer *s1 = BlobToCbuffer(a); + Cbuffer *s2 = BlobToCbuffer(b); + bool r = cbuffer_lt(s1, s2); + free(s1); free(s2); + return r; + }); +} -// ===== @ingroup meos_h3_edges ===== -static void Gen_th3index_are_neighbor_cells(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_ne(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_are_neighbor_cells(t1, t2); - free(t1); free(t2); - return TemporalToBlobN(result, r, mask, idx); + 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); + free(s1); free(s2); + return r; }); } -static void Gen_th3index_cells_to_directed_edge(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) { + Cbuffer *s1 = BlobToCbuffer(a); + Cbuffer *s2 = BlobToCbuffer(b); + bool r = cbuffer_same(s1, s2); + free(s1); free(s2); + return r; + }); +} + + +// ===== @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 in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = th3index_cells_to_directed_edge(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_apply_geo(t, gs); + free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_th3index_is_valid_directed_edge(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_yaw(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_valid_directed_edge(t); + Temporal *r = tpose_yaw(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_th3index_get_directed_edge_origin(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_pitch(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_directed_edge_origin(t); + Temporal *r = tpose_pitch(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_th3index_get_directed_edge_destination(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_roll(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_directed_edge_destination(t); + Temporal *r = tpose_roll(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_th3index_directed_edge_to_boundary(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpose_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 = th3index_directed_edge_to_boundary(t); + Temporal *r = tpose_speed(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } - -// ===== @ingroup meos_cbuffer_restrict ===== -static void Gen_tcbuffer_at_cbuffer(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, 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); - Cbuffer *a2p = BlobToCbuffer(a2); - Temporal *r = tcbuffer_at_cbuffer(t, a2p); - free(a2p); free(t); + Temporal *r = tpose_angular_speed(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tcbuffer_at_geom(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_temporal_analytics_simplify ===== +static void Gen_temporal_simplify_dp(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 = tcbuffer_at_geom(t, gs); - free(t); free(gs); + 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); }); } -static void Gen_tcbuffer_minus_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_temporal_simplify_max_dist(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 { + 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); - Cbuffer *a2p = BlobToCbuffer(a2); - Temporal *r = tcbuffer_minus_cbuffer(t, a2p); - free(a2p); free(t); + Temporal *r = temporal_simplify_max_dist(t, a2, a3); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tcbuffer_minus_geom(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_temporal_simplify_min_dist(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 = tcbuffer_minus_geom(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 = temporal_simplify_min_dist(t, a2); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_quadbin_accessor ===== -static void Gen_tquadbin_start_value(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pointcloud_comp_temp ===== +static void Gen_teq_tpcpoint_pcpoint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) -> int64_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); - int64_t r = (int64_t) tquadbin_start_value(t); - free(t); - return r; + Pcpoint *a2p = BlobToPcpoint(a2); + Temporal *r = teq_tpcpoint_pcpoint(t, a2p); + free(a2p); free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tquadbin_end_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tne_tpcpoint_pcpoint(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) -> int64_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); - int64_t r = (int64_t) tquadbin_end_value(t); - free(t); - return r; + Pcpoint *a2p = BlobToPcpoint(a2); + Temporal *r = tne_tpcpoint_pcpoint(t, a2p); + free(a2p); free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tquadbin_value_n(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_teq_tpcpatch_pcpatch(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 { + 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); - uint64_t v; - bool ok = tquadbin_value_n(t, a2, &v); - free(t); - if (!ok) { mask.SetInvalid(idx); return int64_t(); } - return (int64_t) v; + Pcpatch *a2p = BlobToPcpatch(a2); + Temporal *r = teq_tpcpatch_pcpatch(t, a2p); + free(a2p); free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tquadbin_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 = tquadbin_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_accessor ===== -static void Gen_npoint_position(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tne_tpcpatch_pcpatch(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; + 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); + Pcpatch *a2p = BlobToPcpatch(a2); + Temporal *r = tne_tpcpatch_pcpatch(t, a2p); + free(a2p); free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_npoint_route(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_rgeo_inout ===== +static void Gen_trgeometry_as_text(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; + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int32_t a2) { + Temporal *t = BlobToTemporal(in); + char * r = trgeometry_as_text(t, a2); + free(t); + return TakeCString(result, r); }); } -static void Gen_nsegment_end_position(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_trgeometry_as_text_d(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) { - Nsegment *v = BlobToNsegment(in); - double r = nsegment_end_position(v); - free(v); - return r; + Temporal *t = BlobToTemporal(in); + char * r = trgeometry_as_text(t, 15); + free(t); + return TakeCString(result, r); }); } -static void Gen_nsegment_route(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_trgeometry_as_ewkt(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; + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in, int32_t a2) { + Temporal *t = BlobToTemporal(in); + char * r = trgeometry_as_ewkt(t, a2); + free(t); + return TakeCString(result, r); }); } -static void Gen_nsegment_start_position(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_trgeometry_as_ewkt_d(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) { - Nsegment *v = BlobToNsegment(in); - double r = nsegment_start_position(v); - free(v); - return r; + Temporal *t = BlobToTemporal(in); + char * r = trgeometry_as_ewkt(t, 15); + free(t); + return TakeCString(result, r); }); } -// ===== @ingroup meos_h3_vertex ===== -static void Gen_th3index_cell_to_vertex(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_cbuffer_base_inout ===== +static void Gen_cbuffer_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 = th3index_cell_to_vertex(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) { + Cbuffer *s = BlobToCbuffer(a); + char *r = cbuffer_as_ewkt(s, a2); + free(s); + return TakeCString(result, r); }); } -static void Gen_th3index_vertex_to_latlng(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_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 = th3index_vertex_to_latlng(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t a) { + Cbuffer *s = BlobToCbuffer(a); + char *r = cbuffer_as_ewkt(s, 15); + free(s); + return TakeCString(result, r); }); } -static void Gen_th3index_is_valid_vertex(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_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 = th3index_is_valid_vertex(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) { + Cbuffer *s = BlobToCbuffer(a); + char *r = cbuffer_as_text(s, a2); + free(s); + return TakeCString(result, r); }); } - -// ===== @ingroup meos_pose_accessor ===== -static void Gen_tpose_end_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_cbuffer_as_text_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); - Pose * r = tpose_end_value(t); - free(t); - return PoseToBlobN(result, r, mask, idx); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t a) { + Cbuffer *s = BlobToCbuffer(a); + char *r = cbuffer_as_text(s, 15); + free(s); + return TakeCString(result, r); }); } -static void Gen_tpose_start_value(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_geo_set_srid ===== +static void Gen_spatialset_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 { - Temporal *t = BlobToTemporal(in); - Pose * r = tpose_start_value(t); - free(t); - return PoseToBlobN(result, r, mask, idx); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, int32_t a2) { + Set *s = BlobToSet(a); + Set *r = spatialset_set_srid(s, a2); + free(s); + return SetToBlob(result, r); }); } -static void Gen_tpose_trajectory(DataChunk &args, ExpressionState &state, Vector &result) { +static void Gen_spatialset_transform(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::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t a, int32_t a2) { + Set *s = BlobToSet(a); + Set *r = spatialset_transform(s, a2); + free(s); + return SetToBlob(result, r); }); } -// ===== @ingroup meos_cbuffer_comp_temp ===== -static void Gen_teq_tcbuffer_cbuffer(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 in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Cbuffer *a2p = BlobToCbuffer(a2); - Temporal *r = teq_tcbuffer_cbuffer(t, a2p); - free(a2p); 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 = teq_ts2cell_ts2cell(t1, t2); + free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_tcbuffer_cbuffer(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 in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Cbuffer *a2p = BlobToCbuffer(a2); - Temporal *r = tne_tcbuffer_cbuffer(t, a2p); - free(a2p); 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 = tne_ts2cell_ts2cell(t1, t2); + free(t1); free(t2); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_pose_comp_temp ===== -static void Gen_teq_tpose_pose(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); - Pose *a2p = BlobToPose(a2); - Temporal *r = teq_tpose_pose(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_tne_tpose_pose(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); - Pose *a2p = BlobToPose(a2); - Temporal *r = tne_tpose_pose(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_geo_box_set ===== -static void Gen_intersection_stbox_stbox(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_geo_box_accessor ===== +static void Gen_stbox_hash(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) { + STBox *s = BlobToStbox(in); + uint32_t r = stbox_hash(s); + free(s); + return r; + }); +} + +static void Gen_stbox_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) { + STBox *s = BlobToStbox(in); + uint64_t r = stbox_hash_extended(s, a2); + free(s); + return r; }); } -// ===== @ingroup meos_pointcloud_conversion ===== -static void Gen_tpcpatch_to_tgeometry(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 = tpcpatch_to_tgeometry(t); + Temporal *r = tposechain_to_tpose(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); @@ -4164,106 +4111,131 @@ void RegisterGenerated_meos_h3_comp_ever(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {H3indexTypes::th3index(), H3indexTypes::h3index()}, LogicalType::BOOLEAN, Gen_always_ne_th3index_h3index)); } -void RegisterGenerated_meos_posechain_comp_ever(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_always_eq_tposechain_posechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_always_eq_tposechain_posechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_always_eq_tposechain_tposechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_always_eq_tposechain_tposechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_always_ne_tposechain_posechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_always_ne_tposechain_posechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_always_ne_tposechain_tposechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_always_ne_tposechain_tposechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_ever_eq_tposechain_posechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_ever_eq_tposechain_posechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_ever_eq_tposechain_tposechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_ever_eq_tposechain_tposechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_ever_ne_tposechain_posechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {PosechainTypes::tposechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_ever_ne_tposechain_posechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_ever_ne_tposechain_tposechain)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {PosechainTypes::tposechain(), PosechainTypes::tposechain()}, LogicalType::BOOLEAN, Gen_ever_ne_tposechain_tposechain)); -} - -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_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) { - RegisterSerializedScalarFunction(loader, ScalarFunction("th3AreNeighborCells", {H3indexTypes::th3index(), H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_th3index_are_neighbor_cells)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellsToDirectedEdge", {H3indexTypes::th3index(), H3indexTypes::th3index()}, H3indexTypes::th3index(), Gen_th3index_cells_to_directed_edge)); - RegisterSerializedScalarFunction(loader, ScalarFunction("isValidDirectedEdge", {H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_th3index_is_valid_directed_edge)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3GetDirectedEdgeOrigin", {H3indexTypes::th3index()}, H3indexTypes::th3index(), Gen_th3index_get_directed_edge_origin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3GetDirectedEdgeDestination", {H3indexTypes::th3index()}, H3indexTypes::th3index(), Gen_th3index_get_directed_edge_destination)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3DirectedEdgeToBoundary", {H3indexTypes::th3index()}, TGeographyTypes::tgeography(), Gen_th3index_directed_edge_to_boundary)); -} - -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_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_vertex(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellToVertex", {H3indexTypes::th3index(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_th3index_cell_to_vertex)); - RegisterSerializedScalarFunction(loader, ScalarFunction("th3VertexToPoint", {H3indexTypes::th3index()}, TgeogpointType::tgeogpoint(), Gen_th3index_vertex_to_latlng)); - 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_cbuffer_comp_temp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, TemporalTypes::tbool(), Gen_teq_tcbuffer_cbuffer)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {CbufferTypes::tcbuffer(), CbufferTypes::cbuffer()}, TemporalTypes::tbool(), Gen_tne_tcbuffer_cbuffer)); -} - -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_geo_box_set(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("stbox_intersection", {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_pointcloud_conversion(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tgeometry", {TPcpatchTypes::tpcpatch()}, TGeometryTypes::tgeometry(), Gen_tpcpatch_to_tgeometry)); +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_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("posechain_same", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_same)); + 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_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_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_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_comp_temp(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TPcpointTypes::tpcpoint(), TPcpointTypes::pcpoint()}, TemporalTypes::tbool(), Gen_teq_tpcpoint_pcpoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TPcpointTypes::tpcpoint(), TPcpointTypes::pcpoint()}, TemporalTypes::tbool(), Gen_tne_tpcpoint_pcpoint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::pcpatch()}, TemporalTypes::tbool(), Gen_teq_tpcpatch_pcpatch)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {TPcpatchTypes::tpcpatch(), TPcpatchTypes::pcpatch()}, TemporalTypes::tbool(), Gen_tne_tpcpatch_pcpatch)); +} + +void RegisterGenerated_meos_rgeo_inout(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_trgeometry_as_text)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asText", {TrgeometryTypes::trgeometry()}, LogicalType::VARCHAR, Gen_trgeometry_as_text_d)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TrgeometryTypes::trgeometry(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_trgeometry_as_ewkt)); + RegisterSerializedScalarFunction(loader, ScalarFunction("asEWKT", {TrgeometryTypes::trgeometry()}, LogicalType::VARCHAR, Gen_trgeometry_as_ewkt_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_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_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_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_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)); } } // namespace duckdb diff --git a/src/generated/generated_temporal_udfs_6.cpp b/src/generated/generated_temporal_udfs_6.cpp index c0078d1a..1b51bd50 100644 --- a/src/generated/generated_temporal_udfs_6.cpp +++ b/src/generated/generated_temporal_udfs_6.cpp @@ -1887,118 +1887,122 @@ static void Gen_tsequenceset_make_gaps(DataChunk &args, ExpressionState &, Vecto } -// ===== @ingroup meos_json_comp_ever ===== -static void Gen_always_eq_tjsonb_jsonb(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pose_comp_ever ===== +static void Gen_always_eq_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); - Jsonb *a2p = BlobToJsonb(a2); - int32_t r = always_eq_tjsonb_jsonb(t, a2p); + Pose *a2p = BlobToPose(a2); + int32_t r = always_eq_tpose_pose(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_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); - int32_t r = always_eq_tjsonb_tjsonb(t1, t2); + int32_t r = always_eq_tpose_tpose(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_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); - Jsonb *a2p = BlobToJsonb(a2); - int32_t r = always_ne_tjsonb_jsonb(t, a2p); + Pose *a2p = BlobToPose(a2); + int32_t r = always_ne_tpose_pose(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_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); - int32_t r = always_ne_tjsonb_tjsonb(t1, t2); + int32_t r = always_ne_tpose_tpose(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_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); - Jsonb *a2p = BlobToJsonb(a2); - int32_t r = ever_eq_tjsonb_jsonb(t, a2p); + Pose *a2p = BlobToPose(a2); + int32_t r = ever_eq_tpose_pose(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_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); - int32_t r = ever_eq_tjsonb_tjsonb(t1, t2); + int32_t r = ever_eq_tpose_tpose(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_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); - Jsonb *a2p = BlobToJsonb(a2); - int32_t r = ever_ne_tjsonb_jsonb(t, a2p); + Pose *a2p = BlobToPose(a2); + int32_t r = ever_ne_tpose_pose(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_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); - int32_t r = ever_ne_tjsonb_tjsonb(t1, t2); + int32_t r = ever_ne_tpose_tpose(t1, t2); free(t1); free(t2); return (r != 0); }); } -// ===== @ingroup meos_pose_dist ===== -static void Gen_tdistance_tpose_pose(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, string_t a2, 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); + [&](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_tdistance_tpose_geo(DataChunk &args, ExpressionState &, Vector &result) { +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 { @@ -2008,76 +2012,29 @@ static void Gen_tdistance_tpose_geo(DataChunk &args, ExpressionState &, Vector & GSERIALIZED *gs_geog = geom_to_geog(gs); free(gs); gs = gs_geog; } - Temporal *r = tdistance_tpose_geo(t, gs); + Temporal *r = teq_tgeo_geo(t, gs); free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tdistance_tpose_tpose(DataChunk &args, ExpressionState &, Vector &result) { +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 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); - free(t1); free(t2); + [&](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_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); - Pose *a2p = BlobToPose(a2); - double r = nad_tpose_pose(t, a2p); - free(a2p); free(t); - return r; - }); -} - -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_tpose_tpose(t1, t2); - free(t1); free(t2); - return r; - }); -} - -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); - 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_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_tpose_stbox(t, bx); - free(t); free(bx); - if (r == std::numeric_limits::max()) { mask.SetInvalid(idx); return double(); } - return r; - }); -} - - -// ===== @ingroup meos_pose_restrict ===== -static void Gen_tpose_at_geom(DataChunk &args, ExpressionState &, Vector &result) { +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 { @@ -2087,355 +2044,338 @@ static void Gen_tpose_at_geom(DataChunk &args, ExpressionState &, Vector &result GSERIALIZED *gs_geog = geom_to_geog(gs); free(gs); gs = gs_geog; } - Temporal *r = tpose_at_geom(t, gs); + Temporal *r = tne_tgeo_geo(t, gs); free(t); free(gs); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpose_at_pose(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(), - [&](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); - Pose *a2p = BlobToPose(a2); - Temporal *r = tpose_at_pose(t, a2p); - free(a2p); free(t); + Temporal *r = tgeogpoint_to_tgeography(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpose_minus_geom(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_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); + 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_tpose_minus_pose(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tgeography_to_tgeometry(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); - Pose *a2p = BlobToPose(a2); - Temporal *r = tpose_minus_pose(t, a2p); - free(a2p); free(t); + Temporal *r = tgeography_to_tgeometry(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpose_at_elevation(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(), - [&](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); + 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); }); } -static void Gen_tpose_minus_elevation(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 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); + 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); + }); +} + +static void Gen_tgeompoint_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 = tgeompoint_to_tgeometry(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_pointcloud_box_comp ===== -static void Gen_tpcbox_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) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = tpcbox_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_tpcbox_ne(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) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = tpcbox_ne(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_tpcbox_lt(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) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = tpcbox_lt(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_tpcbox_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) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = tpcbox_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_tpcbox_gt(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) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = tpcbox_gt(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_tpcbox_ge(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) { - TPCBox *s1 = BlobToTpcbox(a); - TPCBox *s2 = BlobToTpcbox(b); - bool r = tpcbox_ge(s1, s2); + STBox *s1 = BlobToStbox(a); + STBox *s2 = BlobToStbox(b); + bool r = stbox_ne(s1, s2); free(s1); free(s2); return r; }); } -// ===== @ingroup meos_s2cell_comp_ever ===== -static void Gen_ever_eq_ts2cell_ts2cell(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @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 in1, string_t in2) { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - int32_t r = ever_eq_ts2cell_ts2cell(t1, t2); - free(t1); free(t2); - return (r != 0); + [&](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_ever_ne_ts2cell_ts2cell(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_contained_tbox_tbox(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_ts2cell_ts2cell(t1, t2); - free(t1); free(t2); - return (r != 0); + [&](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_always_eq_ts2cell_ts2cell(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_contains_tbox_tbox(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_ts2cell_ts2cell(t1, t2); - free(t1); free(t2); - return (r != 0); + [&](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_always_ne_ts2cell_ts2cell(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 in1, string_t in2) { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - int32_t r = always_ne_ts2cell_ts2cell(t1, t2); - free(t1); free(t2); - return (r != 0); + [&](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; }); } - -// ===== @ingroup meos_s2cell_accessor ===== -static void Gen_ts2cell_start_value(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_same_tbox_tbox(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); - free(t); + 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; }); } -static void Gen_ts2cell_end_value(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_h3_conversion ===== +static void Gen_tbigint_to_th3index(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) ts2cell_end_value(t); + Temporal *r = tbigint_to_th3index(t); free(t); - return r; + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_ts2cell_value_n(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_to_tbigint(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 = ts2cell_value_n(t, a2, &v); + Temporal *r = th3index_to_tbigint(t); free(t); - 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); - } + return TemporalToBlobN(result, r, mask, idx); + }); } +static void Gen_geo_to_h3index_cell(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), + [&](string_t in_g, int32_t res) { + GSERIALIZED *gs = GeometryToGSerialized(in_g, 4326); + uint64_t r = geo_to_h3index_cell(gs, res); + free(gs); + return (int64_t) r; + }); +} -// ===== @ingroup meos_pose_base_geopose ===== -static void Gen_tpose_as_geopose_stream(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_geo_to_h3index_set(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 = tpose_as_geopose_stream(t, a2); - free(t); - return TakeCString(result, r); + [&](string_t in_g, int32_t res) { + GSERIALIZED *gs = GeometryToGSerialized(in_g, 4326); + Set *r = geo_to_h3index_set(gs, res); + free(gs); + return SetToBlob(result, r); }); } -static void Gen_tpose_as_geopose_stream_d(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_h3_latlng ===== +static void Gen_tgeogpoint_to_th3index(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { + 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); - char * r = tpose_as_geopose_stream(t, -1); + Temporal *r = tgeogpoint_to_th3index(t, a2); free(t); - return TakeCString(result, r); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_pose_yaw(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tgeompoint_to_th3index(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - UnaryExecutor::Execute(args.data[0], result, args.size(), - [&](string_t in) { - Pose *v = BlobToPose(in); - double r = pose_yaw(v); - free(v); - return r; + 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 = tgeompoint_to_th3index(t, a2); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_pose_pitch(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) { - Pose *v = BlobToPose(in); - double r = pose_pitch(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_pose_roll(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) { - Pose *v = BlobToPose(in); - double r = pose_roll(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_rgeo_transf ===== -static void Gen_trgeometry_round(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_h3_vertex ===== +static void Gen_th3index_cell_to_vertex(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); + Temporal *r = th3index_cell_to_vertex(t, a2); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_trgeometry_round_d(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_vertex_to_latlng(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); + Temporal *r = th3index_vertex_to_latlng(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_trgeometry_as_tinstant(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_th3index_is_valid_vertex(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); + Temporal *r = th3index_is_valid_vertex(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); @@ -2477,84 +2417,80 @@ static void Gen_th3index_is_pentagon(DataChunk &args, ExpressionState &, Vector } -// ===== @ingroup meos_s2cell_comp_temp ===== -static void Gen_teq_ts2cell_ts2cell(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 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::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_ts2cell(t); + free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_ts2cell_ts2cell(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 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 = ts2cell_to_tbigint(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_pose_comp_temp ===== +static void Gen_teq_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); - Jsonb *a2p = BlobToJsonb(a2); - Temporal *r = teq_tjsonb_jsonb(t, a2p); + Pose *a2p = BlobToPose(a2); + Temporal *r = teq_tpose_pose(t, a2p); free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tne_tjsonb_jsonb(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 in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Jsonb *a2p = BlobToJsonb(a2); - Temporal *r = tne_tjsonb_jsonb(t, a2p); + Pose *a2p = BlobToPose(a2); + Temporal *r = tne_tpose_pose(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_pose_base_transf ===== -static void Gen_pose_compose(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_cbuffer_transf ===== +static void Gen_tcbuffer_expand(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); + 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); }); } @@ -3318,95 +3254,107 @@ 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_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_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_s2cell_comp_ever(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_ever_eq_ts2cell_ts2cell)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_ever_eq_ts2cell_ts2cell)); - RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_ever_ne_ts2cell_ts2cell)); - RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_ever_ne_ts2cell_ts2cell)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_always_eq_ts2cell_ts2cell)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_always_eq_ts2cell_ts2cell)); - RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_always_ne_ts2cell_ts2cell)); - RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {S2cellTypes::ts2cell(), S2cellTypes::ts2cell()}, LogicalType::BOOLEAN, Gen_always_ne_ts2cell_ts2cell)); -} - -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_pose_base_geopose(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("asGeoPoseStream", {PoseTypes::tpose(), LogicalType::INTEGER}, LogicalType::VARCHAR, Gen_tpose_as_geopose_stream)); - RegisterSerializedScalarFunction(loader, ScalarFunction("asGeoPoseStream", {PoseTypes::tpose()}, LogicalType::VARCHAR, Gen_tpose_as_geopose_stream_d)); - RegisterSerializedScalarFunction(loader, ScalarFunction("yaw", {PoseTypes::pose()}, LogicalType::DOUBLE, Gen_pose_yaw)); - RegisterSerializedScalarFunction(loader, ScalarFunction("pitch", {PoseTypes::pose()}, LogicalType::DOUBLE, Gen_pose_pitch)); - RegisterSerializedScalarFunction(loader, ScalarFunction("roll", {PoseTypes::pose()}, LogicalType::DOUBLE, Gen_pose_roll)); -} - -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_pose_comp_ever(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_always_eq_tpose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_always_eq_tpose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_always_eq_tpose_tpose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_always_eq_tpose_tpose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_always_ne_tpose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_always_ne_tpose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_always_ne_tpose_tpose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_always_ne_tpose_tpose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_ever_eq_tpose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_ever_eq_tpose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_ever_eq_tpose_tpose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_ever_eq_tpose_tpose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_ever_ne_tpose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {PoseTypes::tpose(), PoseTypes::pose()}, LogicalType::BOOLEAN, Gen_ever_ne_tpose_pose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_ever_ne_tpose_tpose)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {PoseTypes::tpose(), PoseTypes::tpose()}, LogicalType::BOOLEAN, Gen_ever_ne_tpose_tpose)); +} + +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_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_h3_conversion(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("th3index", {TemporalTypes::tbigint()}, H3indexTypes::th3index(), Gen_tbigint_to_th3index)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TemporalTypes::tbigint()}, H3indexTypes::th3index(), Gen_tbigint_to_th3index)); + RegisterSerializedScalarFunction(loader, ScalarFunction("tbigint", {H3indexTypes::th3index()}, TemporalTypes::tbigint(), Gen_th3index_to_tbigint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("::", {H3indexTypes::th3index()}, TemporalTypes::tbigint(), Gen_th3index_to_tbigint)); + RegisterSerializedScalarFunction(loader, ScalarFunction("geoToH3Cell", {MobilityDuckGeometryType(), LogicalType::INTEGER}, H3indexTypes::h3index(), Gen_geo_to_h3index_cell)); + RegisterSerializedScalarFunction(loader, ScalarFunction("geoToH3IndexSet", {MobilityDuckGeometryType(), LogicalType::INTEGER}, H3indexTypes::h3indexset(), Gen_geo_to_h3index_set)); +} + +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_h3_vertex(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("th3CellToVertex", {H3indexTypes::th3index(), LogicalType::INTEGER}, H3indexTypes::th3index(), Gen_th3index_cell_to_vertex)); + RegisterSerializedScalarFunction(loader, ScalarFunction("th3VertexToPoint", {H3indexTypes::th3index()}, TgeogpointType::tgeogpoint(), Gen_th3index_vertex_to_latlng)); + RegisterSerializedScalarFunction(loader, ScalarFunction("isValidVertex", {H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_th3index_is_valid_vertex)); } void RegisterGenerated_meos_h3_inspection(ExtensionLoader &loader) { @@ -3415,23 +3363,25 @@ void RegisterGenerated_meos_h3_inspection(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("th3IsPentagon", {H3indexTypes::th3index()}, TemporalTypes::tbool(), Gen_th3index_is_pentagon)); } -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_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_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_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("intersection", {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_geo_box_set(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("stbox_intersection", {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_pose_base_transf(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("applyPose", {PoseTypes::pose(), PoseTypes::pose()}, PoseTypes::pose(), Gen_pose_compose)); +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_7.cpp b/src/generated/generated_temporal_udfs_7.cpp index befd9f2d..bb33a971 100644 --- a/src/generated/generated_temporal_udfs_7.cpp +++ b/src/generated/generated_temporal_udfs_7.cpp @@ -2475,611 +2475,646 @@ static void Gen_nad_tgeo_stbox(DataChunk &args, ExpressionState &, Vector &resul } -// ===== @ingroup meos_cbuffer_comp_ever ===== -static void Gen_always_eq_tcbuffer_cbuffer(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_cbuffer_dist ===== +static void Gen_tdistance_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 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 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 r; }); } -// ===== @ingroup meos_posechain_base_comp ===== -static void Gen_posechain_eq(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_geo_srid ===== +static void Gen_tspatial_srid(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); - free(s1); free(s2); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Temporal *t = BlobToTemporal(in); + int32_t r = tspatial_srid(t); + free(t); return r; }); } -static void Gen_posechain_ne(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tspatial_set_srid(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); - free(s1); free(s2); - return r; + 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_set_srid(t, a2); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_posechain_same(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tspatial_transform(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); - free(s1); free(s2); - return r; + 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); + free(t); + return TemporalToBlobN(result, r, mask, idx); }); } -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_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); + } } -static void Gen_posechain_le(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) { - PoseChain *s1 = BlobToPosechain(a); - PoseChain *s2 = BlobToPosechain(b); - bool r = posechain_le(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_posechain_gt(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) { - PoseChain *s1 = BlobToPosechain(a); - PoseChain *s2 = BlobToPosechain(b); - bool r = posechain_gt(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_posechain_ge(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) { - PoseChain *s1 = BlobToPosechain(a); - PoseChain *s2 = BlobToPosechain(b); - bool r = posechain_ge(s1, s2); + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = tbox_gt(s1, s2); free(s1); free(s2); return r; }); } - -// ===== @ingroup meos_cbuffer_base_comp ===== -static void Gen_cbuffer_eq(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) { - Cbuffer *s1 = BlobToCbuffer(a); - Cbuffer *s2 = BlobToCbuffer(b); - bool r = cbuffer_eq(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_cbuffer_ge(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) { - Cbuffer *s1 = BlobToCbuffer(a); - Cbuffer *s2 = BlobToCbuffer(b); - bool r = cbuffer_ge(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_cbuffer_gt(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) { - Cbuffer *s1 = BlobToCbuffer(a); - Cbuffer *s2 = BlobToCbuffer(b); - bool r = cbuffer_gt(s1, s2); + TBox *s1 = BlobToTbox(a); + TBox *s2 = BlobToTbox(b); + bool r = tbox_ne(s1, s2); free(s1); free(s2); return r; }); } -static void Gen_cbuffer_le(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_quadbin_comp_ever ===== +static void Gen_ever_eq_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) { - Cbuffer *s1 = BlobToCbuffer(a); - Cbuffer *s2 = BlobToCbuffer(b); - bool r = cbuffer_le(s1, s2); - free(s1); free(s2); - return r; + [&](string_t in1, string_t in2) { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + int32_t r = ever_eq_tquadbin_tquadbin(t1, t2); + free(t1); free(t2); + return (r != 0); }); } -static void Gen_cbuffer_lt(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_ever_ne_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) { - Cbuffer *s1 = BlobToCbuffer(a); - Cbuffer *s2 = BlobToCbuffer(b); - bool r = cbuffer_lt(s1, s2); - free(s1); free(s2); - return r; + [&](string_t in1, string_t in2) { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + int32_t r = ever_ne_tquadbin_tquadbin(t1, t2); + free(t1); free(t2); + return (r != 0); }); } -static void Gen_cbuffer_ne(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_always_eq_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) { - Cbuffer *s1 = BlobToCbuffer(a); - Cbuffer *s2 = BlobToCbuffer(b); - bool r = cbuffer_ne(s1, s2); - free(s1); free(s2); - return r; + [&](string_t in1, string_t in2) { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + int32_t r = always_eq_tquadbin_tquadbin(t1, t2); + free(t1); free(t2); + return (r != 0); }); } -static void Gen_cbuffer_same(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_always_ne_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) { - Cbuffer *s1 = BlobToCbuffer(a); - Cbuffer *s2 = BlobToCbuffer(b); - bool r = cbuffer_same(s1, s2); - free(s1); free(s2); - return r; + [&](string_t in1, string_t in2) { + Temporal *t1 = BlobToTemporal(in1); + Temporal *t2 = BlobToTemporal(in2); + int32_t r = always_ne_tquadbin_tquadbin(t1, t2); + free(t1); free(t2); + return (r != 0); }); } -// ===== @ingroup meos_pose_geopose_accessor ===== -static void Gen_tpose_apply_geo(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pointcloud_base_accessor ===== +static void Gen_pcpoint_get_pcid(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); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Pcpoint *v = BlobToPcpoint(in); + uint32_t r = pcpoint_get_pcid(v); + free(v); + return r; }); } -static void Gen_tpose_yaw(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pcpoint_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 = tpose_yaw(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Pcpoint *v = BlobToPcpoint(in); + uint32_t r = pcpoint_hash(v); + free(v); + return r; }); } -static void Gen_tpose_pitch(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pcpatch_get_pcid(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); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Pcpatch *v = BlobToPcpatch(in); + uint32_t r = pcpatch_get_pcid(v); + free(v); + return r; }); } -static void Gen_tpose_roll(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pcpatch_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 = tpose_roll(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + Pcpatch *v = BlobToPcpatch(in); + uint32_t r = pcpatch_hash(v); + free(v); + return r; }); } -static void Gen_tpose_speed(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pcpoint_hash_extended(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); - free(t); - return TemporalToBlobN(result, r, mask, idx); + 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_tpose_angular_speed(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pcpatch_hash_extended(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); - free(t); - return TemporalToBlobN(result, r, mask, idx); + 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_temporal_analytics_simplify ===== -static void Gen_temporal_simplify_dp(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pointcloud_box_accessor ===== +static void Gen_tpcbox_hasx(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); + 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_temporal_simplify_max_dist(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcbox_hasz(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); + 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_temporal_simplify_min_dist(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcbox_hast(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); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + TPCBox *v = BlobToTpcbox(in); + bool r = tpcbox_hast(v); + free(v); + return r; }); } +static void Gen_tpcbox_srid(DataChunk &args, ExpressionState &, Vector &result) { + EnsureMeosThreadInitialized(); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + TPCBox *v = BlobToTpcbox(in); + int32_t r = tpcbox_srid(v); + free(v); + return r; + }); +} -// ===== @ingroup meos_h3_conversion ===== -static void Gen_tbigint_to_th3index(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_tpcbox_pcid(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_th3index(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t in) { + TPCBox *v = BlobToTpcbox(in); + uint32_t r = tpcbox_pcid(v); + free(v); + return r; }); } -static void Gen_th3index_to_tbigint(DataChunk &args, ExpressionState &, Vector &result) { + +// ===== @ingroup meos_pose_base_inout ===== +static void Gen_pose_as_ewkt(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_to_tbigint(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) { + Pose *s = BlobToPose(a); + char *r = pose_as_ewkt(s, a2); + free(s); + return TakeCString(result, r); }); } -static void Gen_geo_to_h3index_cell(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pose_as_ewkt_d(DataChunk &args, ExpressionState &, Vector &result) { EnsureMeosThreadInitialized(); - BinaryExecutor::Execute(args.data[0], args.data[1], result, args.size(), - [&](string_t in_g, int32_t res) { - GSERIALIZED *gs = GeometryToGSerialized(in_g, 4326); - uint64_t r = geo_to_h3index_cell(gs, res); - free(gs); - return (int64_t) r; + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t a) { + Pose *s = BlobToPose(a); + char *r = pose_as_ewkt(s, 15); + free(s); + return TakeCString(result, r); }); } -static void Gen_geo_to_h3index_set(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 in_g, int32_t res) { - GSERIALIZED *gs = GeometryToGSerialized(in_g, 4326); - Set *r = geo_to_h3index_set(gs, res); - free(gs); - return SetToBlob(result, r); + [&](string_t a, int32_t a2) { + Pose *s = BlobToPose(a); + char *r = pose_as_text(s, a2); + free(s); + return TakeCString(result, r); }); } - -// ===== @ingroup meos_h3_latlng ===== -static void Gen_tgeogpoint_to_th3index(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_pose_as_text_d(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 = tgeogpoint_to_th3index(t, a2); - free(t); - return TemporalToBlobN(result, r, mask, idx); + UnaryExecutor::Execute(args.data[0], result, args.size(), + [&](string_t a) { + Pose *s = BlobToPose(a); + char *r = pose_as_text(s, 15); + free(s); + return TakeCString(result, r); }); } -static void Gen_tgeompoint_to_th3index(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 in, int32_t a2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t = BlobToTemporal(in); - Temporal *r = tgeompoint_to_th3index(t, a2); - free(t); - return TemporalToBlobN(result, r, mask, idx); + 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_th3index_to_tgeogpoint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_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_to_tgeogpoint(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + 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_th3index_to_tgeompoint(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_posechain_hash_extended(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_to_tgeompoint(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); + 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_pose_transf ===== -static void Gen_tpose_compose_pose(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 in, string_t a2, ValidityMask &mask, idx_t idx) -> string_t { Temporal *t = BlobToTemporal(in); - Pose *a2p = BlobToPose(a2); - Temporal *r = tpose_compose_pose(t, a2p); + PoseChain *a2p = BlobToPosechain(a2); + Temporal *r = teq_tposechain_posechain(t, a2p); free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -static void Gen_tpose_compose_tpose(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 in1, string_t in2, ValidityMask &mask, idx_t idx) -> string_t { - Temporal *t1 = BlobToTemporal(in1); - Temporal *t2 = BlobToTemporal(in2); - Temporal *r = tpose_compose_tpose(t1, t2); - free(t1); free(t2); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_tpose_inverse(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 = tpose_inverse(t); - free(t); + PoseChain *a2p = BlobToPosechain(a2); + Temporal *r = tne_tposechain_posechain(t, a2p); + free(a2p); free(t); return TemporalToBlobN(result, r, mask, idx); }); } -// ===== @ingroup meos_rgeo_conversion ===== -static void Gen_trgeometry_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 = trgeometry_to_tpose(t); - free(t); - return TemporalToBlobN(result, r, mask, idx); - }); -} - -static void Gen_trgeometry_to_tgeompoint(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 = trgeometry_to_tgeompoint(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_trgeometry_to_tgeometry(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 = trgeometry_to_tgeometry(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_quadbin_comp_temp ===== -static void Gen_teq_tquadbin_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_npoint_base_srid ===== +static void Gen_npoint_srid(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); - 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_tne_tquadbin_tquadbin(DataChunk &args, ExpressionState &, Vector &result) { +static void Gen_nsegment_srid(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); - return TemporalToBlobN(result, r, mask, idx); + 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_internal_temporal_inout ===== -static void Gen_temporal_from_mfjson(DataChunk &args, ExpressionState &, Vector &result) { +// ===== @ingroup meos_pointcloud_conversion ===== +static void Gen_tpcpatch_to_tgeometry(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); - }); -} - - -// ===== @ingroup meos_rgeo_spatialfuncs ===== -static void Gen_trgeometry_body_point_trajectory(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); - }); -} - - -// ===== @ingroup meos_cbuffer_transf ===== -static void Gen_tcbuffer_expand(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 = tcbuffer_expand(t, a2); + Temporal *r = tpcpatch_to_tgeometry(t); free(t); return TemporalToBlobN(result, r, mask, idx); }); @@ -3720,130 +3755,131 @@ void RegisterGenerated_meos_geo_dist(ExtensionLoader &loader) { RegisterSerializedScalarFunction(loader, ScalarFunction("|=|", {TGeographyTypes::tgeography(), StboxType::stbox()}, LogicalType::DOUBLE, Gen_nad_tgeo_stbox)); } -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_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("posechain_same", {PosechainTypes::posechain(), PosechainTypes::posechain()}, LogicalType::BOOLEAN, Gen_posechain_same)); - 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_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_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_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_h3_conversion(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("th3index", {TemporalTypes::tbigint()}, H3indexTypes::th3index(), Gen_tbigint_to_th3index)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {TemporalTypes::tbigint()}, H3indexTypes::th3index(), Gen_tbigint_to_th3index)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tbigint", {H3indexTypes::th3index()}, TemporalTypes::tbigint(), Gen_th3index_to_tbigint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("::", {H3indexTypes::th3index()}, TemporalTypes::tbigint(), Gen_th3index_to_tbigint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("geoToH3Cell", {MobilityDuckGeometryType(), LogicalType::INTEGER}, H3indexTypes::h3index(), Gen_geo_to_h3index_cell)); - RegisterSerializedScalarFunction(loader, ScalarFunction("geoToH3IndexSet", {MobilityDuckGeometryType(), LogicalType::INTEGER}, H3indexTypes::h3indexset(), Gen_geo_to_h3index_set)); -} - -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_transf(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("applyPose", {PoseTypes::tpose(), PoseTypes::pose()}, PoseTypes::tpose(), Gen_tpose_compose_pose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("applyPose", {PoseTypes::tpose(), PoseTypes::tpose()}, PoseTypes::tpose(), Gen_tpose_compose_tpose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("poseInverse", {PoseTypes::tpose()}, PoseTypes::tpose(), Gen_tpose_inverse)); -} - -void RegisterGenerated_meos_rgeo_conversion(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tpose", {TrgeometryTypes::trgeometry()}, PoseTypes::tpose(), Gen_trgeometry_to_tpose)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tgeompoint", {TrgeometryTypes::trgeometry()}, TgeompointType::tgeompoint(), Gen_trgeometry_to_tgeompoint)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tgeometry", {TrgeometryTypes::trgeometry()}, TGeometryTypes::tgeometry(), Gen_trgeometry_to_tgeometry)); -} - -void RegisterGenerated_meos_quadbin_comp_temp(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("tEq", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_teq_tquadbin_tquadbin)); - RegisterSerializedScalarFunction(loader, ScalarFunction("tNe", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, TemporalTypes::tbool(), Gen_tne_tquadbin_tquadbin)); -} - -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_cbuffer_transf(ExtensionLoader &loader) { - RegisterSerializedScalarFunction(loader, ScalarFunction("expand", {CbufferTypes::tcbuffer(), LogicalType::DOUBLE}, CbufferTypes::tcbuffer(), Gen_tcbuffer_expand)); +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_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_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_quadbin_comp_ever(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("eEq", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_ever_eq_tquadbin_tquadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?=", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_ever_eq_tquadbin_tquadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("eNe", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_ever_ne_tquadbin_tquadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("?<>", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_ever_ne_tquadbin_tquadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aEq", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_always_eq_tquadbin_tquadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%=", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_always_eq_tquadbin_tquadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("aNe", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_always_ne_tquadbin_tquadbin)); + RegisterSerializedScalarFunction(loader, ScalarFunction("%<>", {QuadbinTypes::tquadbin(), QuadbinTypes::tquadbin()}, LogicalType::BOOLEAN, Gen_always_ne_tquadbin_tquadbin)); +} + +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_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_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_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_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_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_pointcloud_conversion(ExtensionLoader &loader) { + RegisterSerializedScalarFunction(loader, ScalarFunction("tgeometry", {TPcpatchTypes::tpcpatch()}, TGeometryTypes::tgeometry(), Gen_tpcpatch_to_tgeometry)); } } // namespace duckdb diff --git a/test/sql/cell_index_spatial_surface.test b/test/sql/cell_index_spatial_surface.test new file mode 100644 index 00000000..cb24875e --- /dev/null +++ b/test/sql/cell_index_spatial_surface.test @@ -0,0 +1,72 @@ +# name: test/sql/cell_index_spatial_surface.test +# description: The tspatial_* inherited surface covers the types the catalog declares it for. +# A cell index is spatial, but MobilityDB publishes none of asText/asEWKT/SRID/ +# setSRID/transform over a cell temporal, so neither does the binding. +# group: [sql] + +require mobilityduck + +# ── a cell temporal renders through its own text form ─────────────────────── +# This is the path MobilityDB uses (CREATE FUNCTION asText(ts2cell) -> Temporal_as_text), +# and it is what carries the cell's own spelling. +query I +SELECT '{47c3c3@2000-01-01}'::ts2cell::VARCHAR; +---- +{47c3c3@2000-01-01 00:00:00+01} + +# ── the tspatial_* kernels are NOT published over a cell temporal ──────────── +# MobilityDB CREATE FUNCTIONs none of these for ts2cell, tquadbin or th3index: swept across +# all 14 mobilitydb/sql/s2cell slices, asEWKT/SRID/setSRID/transform each appear 0 times. +# Binding them anyway reached a MEOS kernel whose own sqlSignatures exclude the cell families, +# which answered "Unknown output function in WKT format for type: s2cell" — a call MobilityDB +# never makes. Absent is the honest answer; these assert it stays absent. + +statement error +SELECT asText('{47c3c3@2000-01-01}'::ts2cell); +---- +No function matches the given name and argument types 'asText(ts2cell)' + +statement error +SELECT asEWKT('{47c3c3@2000-01-01}'::ts2cell); +---- +No function matches the given name and argument types 'asEWKT(ts2cell)' + +statement error +SELECT SRID('{47c3c3@2000-01-01}'::ts2cell); +---- +No function matches the given name and argument types 'SRID(ts2cell)' + +statement error +SELECT setSRID('{47c3c3@2000-01-01}'::ts2cell, 4326); +---- +No function matches the given name and argument types 'setSRID(ts2cell, INTEGER_LITERAL)' + +statement error +SELECT transform('{47c3c3@2000-01-01}'::ts2cell, 3857); +---- +No function matches the given name and argument types 'transform(ts2cell, INTEGER_LITERAL)' + +# ── the sibling cell families answer identically ──────────────────────────── +statement error +SELECT asText(tquadbin(quadbinTileToCell(1,0,1), TIMESTAMPTZ '2024-01-01')); +---- +No function matches the given name and argument types 'asText(tquadbin)' + +statement error +SELECT transform(tquadbin(quadbinTileToCell(1,0,1), TIMESTAMPTZ '2024-01-01'), 3857); +---- +No function matches the given name and argument types 'transform(tquadbin, INTEGER_LITERAL)' + +# ── a family owning its temporal surface keeps its OWN text kernel ─────────── +# trgeometry appends its reference geometry to the varlena, so it publishes a trgeometry_as_text +# counterpart; asText resolves there and the polygon survives the round trip. +query I +SELECT asText(trgeometry 'Polygon((1 1,2 2,3 1,1 1));Pose(Point(1 1), 0.5)@2000-01-01'); +---- +POLYGON((1 1,2 2,3 1,1 1));Pose(POINT(1 1),0.5)@2000-01-01 00:00:00+01 + +# ── SRID reaches the pointcloud temporals the catalog declares it for ──────── +query I +SELECT typeof(SRID(tpcpoint('0101000000000000000000F03F0000000000000040', TIMESTAMPTZ '2000-01-01'))); +---- +INTEGER diff --git a/tools/codegen_duck_udfs.py b/tools/codegen_duck_udfs.py index 6c4a387b..b2f5f4bf 100644 --- a/tools/codegen_duck_udfs.py +++ b/tools/codegen_duck_udfs.py @@ -448,6 +448,14 @@ def byval_ret_duck(e): "NpointTypes::tnpoint()", "PoseTypes::tpose()", "TrgeometryTypes::trgeometry()", "PosechainTypes::tposechain()"] + +# The catalog entry for a function name, so a NAME-keyed scope rule can still consult the +# catalog's own `sqlSignatures` -- populated in main() from the same catalog the surface is +# generated against. reg_scope() takes a name (it is called from a dozen shape functions that +# hold only the name), and threading the whole function dict through all of them would churn +# every call site to reach one branch, so the lookup lives here instead. +FN_BY_NAME = {} + def reg_scope(name): """('all', None) generic | ('types', [accessors]) specific | None = not core family. Resolves the temporal type from the MobilityDB naming convention: a PREFIX @@ -497,11 +505,28 @@ def reg_scope(name): # speed/... live under this MEOS name); geometry-coupled variants auto-exclude. if name.startswith("tpoint_"): return ("types", [GEO_TYPES["tgeompoint"], GEO_TYPES["tgeogpoint"]]) - # the abstract spatial supertype tspatial_* covers ALL spatial temporal types (the 4 geo - # types + tcbuffer + future spatial families) with type-preserving results (setSRID/ - # transform/transformPipeline preserve the operand type; asText/asEWKT return text); - # geometry-coupled variants auto-exclude. This is the TSpatial inherited surface. - if name.startswith("tspatial_") or re.search(r'_tspatial(?=_|$)', name): + # the abstract spatial supertype tspatial_* covers the spatial temporal types with + # type-preserving results (setSRID/transform/transformPipeline preserve the operand type; + # asText/asEWKT return text); geometry-coupled variants auto-exclude. This is the + # TSpatial inherited surface. + # ⛔ WHICH types it covers is the CATALOG's to say, not this list's. Being spatial makes a + # family ELIGIBLE for the surface; it does not mean MobilityDB publishes every tspatial_* + # kernel over it. The cell indexes are the proof: MobilityDB CREATE FUNCTIONs asText for + # them over the GENERIC `Temporal_as_text` and declares asEWKT/SRID/setSRID/transform for + # them nowhere, so a blanket registration binds them to a kernel whose own sqlSignatures + # exclude them -- and tspatial_as_text/as_ewkt/transform then raise "Unknown output + # function in WKT format for type: " from inside MEOS, on a call MobilityDB never + # makes. Defer to the declared signature set, keeping the blanket only when the catalog + # states nothing (sig_declared_accs answers None), which is its documented fallback. + # ⛔ The catalog restriction applies to the `tspatial_` PREFIX only -- the NAMED inherited + # functions. The `_tspatial_tspatial` SUFFIX names are the positional/topological + # OPERATORS (front/back/left/right/over*), carried by @sqlop rather than @sqlfn, and their + # sqlSignatures are sparse: reading a sparse list as authoritative deletes 132 working + # operator registrations. An operator keeps the blanket. + if name.startswith("tspatial_"): + declared = sig_declared_accs(FN_BY_NAME.get(name) or {}) + return ("types", declared or SPATIAL_ALLTYPES) + if re.search(r'_tspatial(?=_|$)', name): return ("types", SPATIAL_ALLTYPES) # the geo supertype tgeo covers ONLY geometry+geography (NOT cbuffer/other spatial types). # Both spellings, as for every other family here: a `tgeo_*` PREFIX (tgeo_stboxes, @@ -4511,6 +4536,9 @@ def main(): % (_b, _cb, _seen.most_common(3) or "no pointer-carried function")) # struct layouts (e.g. Match {i,j}) for the array-return LIST(STRUCT) shape — from the catalog. STRUCTS.update({s["name"]: s for s in d.get("structs", [])}) + # name -> catalog entry, so the name-keyed scope rules can read the function's own + # sqlSignatures (the tspatial_* surface asks which types MobilityDB declares it for). + FN_BY_NAME.update({f["name"]: f for f in fns}) # portable bare-name renderings: operator (@sqlop) -> bareName, straight from the # catalog's portableAliases (itself generated from the MEOS doxygen @sqlop tags + # the comparison dialect). The SoT; nothing invented here.