Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions src/generated/generated_temporal_udfs_4.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2488,6 +2488,48 @@ static void Gen_same_rid_tnpoint_tnpoint(DataChunk &args, ExpressionState &, Vec
});
}

static void Gen_contained_rid_npoint_tnpoint(DataChunk &args, ExpressionState &, Vector &result) {
EnsureMeosThreadInitialized();
const idx_t rows = args.size();
for (idx_t c = 0; c < 2; c++) args.data[c].Flatten(rows);
auto in0 = FlatVector::GetData<string_t>(args.data[0]);
auto in1 = FlatVector::GetData<string_t>(args.data[1]);
auto out = FlatVector::GetData<bool>(result);
auto &outv = FlatVector::Validity(result);
for (idx_t i = 0; i < rows; i++) {
if (!FlatVector::Validity(args.data[0]).RowIsValid(i)) { outv.SetInvalid(i); continue; }
if (!FlatVector::Validity(args.data[1]).RowIsValid(i)) { outv.SetInvalid(i); continue; }
Npoint *p0 = BlobToNpoint(in0[i]);
Temporal *p1 = BlobToTemporal(in1[i]);
bool r = contained_rid_npoint_tnpoint(p0, p1);
free(p0);
free(p1);
out[i] = (bool) r;
}
if (rows == 1) result.SetVectorType(VectorType::CONSTANT_VECTOR);
}

static void Gen_same_rid_npoint_tnpoint(DataChunk &args, ExpressionState &, Vector &result) {
EnsureMeosThreadInitialized();
const idx_t rows = args.size();
for (idx_t c = 0; c < 2; c++) args.data[c].Flatten(rows);
auto in0 = FlatVector::GetData<string_t>(args.data[0]);
auto in1 = FlatVector::GetData<string_t>(args.data[1]);
auto out = FlatVector::GetData<bool>(result);
auto &outv = FlatVector::Validity(result);
for (idx_t i = 0; i < rows; i++) {
if (!FlatVector::Validity(args.data[0]).RowIsValid(i)) { outv.SetInvalid(i); continue; }
if (!FlatVector::Validity(args.data[1]).RowIsValid(i)) { outv.SetInvalid(i); continue; }
Npoint *p0 = BlobToNpoint(in0[i]);
Temporal *p1 = BlobToTemporal(in1[i]);
bool r = same_rid_npoint_tnpoint(p0, p1);
free(p0);
free(p1);
out[i] = (bool) r;
}
if (rows == 1) result.SetVectorType(VectorType::CONSTANT_VECTOR);
}

static void Gen_contained_rid_bigintset_tnpoint(DataChunk &args, ExpressionState &, Vector &result) {
EnsureMeosThreadInitialized();
BinaryExecutor::Execute<string_t, string_t, bool>(args.data[0], args.data[1], result, args.size(),
Expand Down Expand Up @@ -5441,6 +5483,10 @@ void RegisterGenerated_meos_npoint_route(ExtensionLoader &loader) {
RegisterSerializedScalarFunction(loader, ScalarFunction("@=", {NpointTypes::tnpoint(), NpointTypes::npoint()}, LogicalType::BOOLEAN, Gen_same_rid_tnpoint_npoint));
RegisterSerializedScalarFunction(loader, ScalarFunction("sameRid", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_same_rid_tnpoint_tnpoint));
RegisterSerializedScalarFunction(loader, ScalarFunction("@=", {NpointTypes::tnpoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_same_rid_tnpoint_tnpoint));
RegisterSerializedScalarFunction(loader, ScalarFunction("containedRid", {NpointTypes::npoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contained_rid_npoint_tnpoint));
RegisterSerializedScalarFunction(loader, ScalarFunction("?@", {NpointTypes::npoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contained_rid_npoint_tnpoint));
RegisterSerializedScalarFunction(loader, ScalarFunction("sameRid", {NpointTypes::npoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_same_rid_npoint_tnpoint));
RegisterSerializedScalarFunction(loader, ScalarFunction("@=", {NpointTypes::npoint(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_same_rid_npoint_tnpoint));
RegisterSerializedScalarFunction(loader, ScalarFunction("containedRid", {SetTypes::bigintset(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contained_rid_bigintset_tnpoint));
RegisterSerializedScalarFunction(loader, ScalarFunction("?@", {SetTypes::bigintset(), NpointTypes::tnpoint()}, LogicalType::BOOLEAN, Gen_contained_rid_bigintset_tnpoint));
RegisterSerializedScalarFunction(loader, ScalarFunction("containedRid", {NpointTypes::tnpoint(), SetTypes::bigintset()}, LogicalType::BOOLEAN, Gen_contained_rid_tnpoint_bigintset));
Expand Down
21 changes: 21 additions & 0 deletions test/sql/tnpoint.test
Original file line number Diff line number Diff line change
Expand Up @@ -157,3 +157,24 @@ SELECT asText(atStbox(tnpoint '[NPoint(1, 0.2)@2000-01-01, NPoint(1, 0.8)@2000-0
stbox 'STBOX T([2000-01-01,2000-01-02])'));
----
{[NPoint(1,0.2)@2000-01-01 00:00:00+01, NPoint(1,0.5)@2000-01-02 00:00:00+01]} {(NPoint(1,0.5)@2000-01-02 00:00:00+01, NPoint(1,0.8)@2000-01-03 00:00:00+01]}

# The route operators with the network point first answer as their twins with the
# temporal value first: containedRid(np, temp) asks whether the routes of temp hold the
# route of np, as containsRid(temp, np) does, and sameRid is symmetric. Route 1 is held
# by both values, route 3 by neither, and the second value has two routes. DuckDB reads
# `?` as a prepared-statement parameter, so ?@ is called by its name.
query IIII
SELECT containedRid(npoint 'NPoint(1, 0.5)', tnpoint '{NPoint(1, 0.3)@2001-01-01, NPoint(2, 0.5)@2001-01-02}'),
containedRid(npoint 'NPoint(3, 0.5)', tnpoint '{NPoint(1, 0.3)@2001-01-01, NPoint(2, 0.5)@2001-01-02}'),
"?@"(npoint 'NPoint(1, 0.5)', tnpoint '{NPoint(1, 0.3)@2001-01-01, NPoint(2, 0.5)@2001-01-02}'),
containsRid(tnpoint '{NPoint(1, 0.3)@2001-01-01, NPoint(2, 0.5)@2001-01-02}', npoint 'NPoint(1, 0.5)');
----
true false true true

query IIII
SELECT sameRid(npoint 'NPoint(1, 0.5)', tnpoint '{NPoint(1, 0.3)@2001-01-01, NPoint(1, 0.6)@2001-01-02}'),
sameRid(npoint 'NPoint(1, 0.5)', tnpoint '{NPoint(1, 0.3)@2001-01-01, NPoint(2, 0.5)@2001-01-02}'),
npoint 'NPoint(1, 0.5)' @= tnpoint '{NPoint(1, 0.3)@2001-01-01, NPoint(1, 0.6)@2001-01-02}',
sameRid(tnpoint '{NPoint(1, 0.3)@2001-01-01, NPoint(1, 0.6)@2001-01-02}', npoint 'NPoint(1, 0.5)');
----
true false true true
3 changes: 3 additions & 0 deletions tools/codegen_duck_udfs.py
Original file line number Diff line number Diff line change
Expand Up @@ -5398,6 +5398,9 @@ def emit_container_scalar(f, ops, rev):
"meos_s2cell_set_conversion",
"meos_cbuffer_set_constructor", "meos_h3_set_constructor",
"meos_json_set_constructor", "meos_npoint_set_constructor",
# The route operators of a temporal network point, one public function per
# signature and argument order: overlapsRid, containsRid, containedRid, sameRid
"meos_npoint_route",
"meos_pointcloud_set_constructor", "meos_pose_set_constructor",
"meos_posechain_set_constructor", "meos_quadbin_set_constructor",
"meos_s2cell_set_constructor",
Expand Down
Loading