Skip to content

Commit af00774

Browse files
committed
fix 2D_FromWKB functions
1 parent 6127c4f commit af00774

File tree

2 files changed

+51
-9
lines changed

2 files changed

+51
-9
lines changed

src/spatial/modules/main/spatial_functions_scalar.cpp

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4804,7 +4804,7 @@ struct ST_GeomFromWKB {
48044804
y_data[i] = vertex.y;
48054805
}
48064806

4807-
if (args.AllConstant()) {
4807+
if (args.AllConstant() || args.size() == 1) {
48084808
result.SetVectorType(VectorType::CONSTANT_VECTOR);
48094809
}
48104810
}
@@ -4872,7 +4872,7 @@ struct ST_GeomFromWKB {
48724872

48734873
ListVector::SetListSize(result, total_size);
48744874

4875-
if (args.AllConstant()) {
4875+
if (args.AllConstant() || args.size() == 1) {
48764876
result.SetVectorType(VectorType::CONSTANT_VECTOR);
48774877
}
48784878
}
@@ -4967,7 +4967,7 @@ struct ST_GeomFromWKB {
49674967
ListVector::SetListSize(result, total_ring_count);
49684968
ListVector::SetListSize(ring_vec, total_point_count);
49694969

4970-
if (count == 1) {
4970+
if (args.AllConstant() || args.size() == 1) {
49714971
result.SetVectorType(VectorType::CONSTANT_VECTOR);
49724972
}
49734973
}
@@ -4986,8 +4986,16 @@ struct ST_GeomFromWKB {
49864986
static void Register(ExtensionLoader &loader) {
49874987
FunctionBuilder::RegisterScalar(loader, "ST_Point2DFromWKB", [](ScalarFunctionBuilder &builder) {
49884988
builder.AddVariant([](ScalarFunctionVariantBuilder &variant) {
4989-
variant.AddParameter("point", GeoTypes::POINT_2D());
4990-
variant.SetReturnType(GeoTypes::GEOMETRY());
4989+
variant.AddParameter("wkb", GeoTypes::WKB_BLOB());
4990+
variant.SetReturnType(GeoTypes::POINT_2D());
4991+
4992+
variant.SetInit(LocalState::Init);
4993+
variant.SetFunction(ExecutePoint);
4994+
});
4995+
4996+
builder.AddVariant([](ScalarFunctionVariantBuilder &variant) {
4997+
variant.AddParameter("blob", LogicalType::BLOB);
4998+
variant.SetReturnType(GeoTypes::POINT_2D());
49914999

49925000
variant.SetInit(LocalState::Init);
49935001
variant.SetFunction(ExecutePoint);
@@ -5001,8 +5009,16 @@ struct ST_GeomFromWKB {
50015009

50025010
FunctionBuilder::RegisterScalar(loader, "ST_LineString2DFromWKB", [](ScalarFunctionBuilder &builder) {
50035011
builder.AddVariant([](ScalarFunctionVariantBuilder &variant) {
5004-
variant.AddParameter("linestring", GeoTypes::LINESTRING_2D());
5005-
variant.SetReturnType(GeoTypes::GEOMETRY());
5012+
variant.AddParameter("wkb", GeoTypes::WKB_BLOB());
5013+
variant.SetReturnType(GeoTypes::LINESTRING_2D());
5014+
5015+
variant.SetInit(LocalState::Init);
5016+
variant.SetFunction(ExecuteLineString);
5017+
});
5018+
5019+
builder.AddVariant([](ScalarFunctionVariantBuilder &variant) {
5020+
variant.AddParameter("blob", LogicalType::BLOB);
5021+
variant.SetReturnType(GeoTypes::LINESTRING_2D());
50065022

50075023
variant.SetInit(LocalState::Init);
50085024
variant.SetFunction(ExecuteLineString);
@@ -5016,8 +5032,15 @@ struct ST_GeomFromWKB {
50165032

50175033
FunctionBuilder::RegisterScalar(loader, "ST_Polygon2DFromWKB", [](ScalarFunctionBuilder &builder) {
50185034
builder.AddVariant([](ScalarFunctionVariantBuilder &variant) {
5019-
variant.AddParameter("polygon", GeoTypes::POLYGON_2D());
5020-
variant.SetReturnType(GeoTypes::GEOMETRY());
5035+
variant.AddParameter("wkb", GeoTypes::WKB_BLOB());
5036+
variant.SetReturnType(GeoTypes::POLYGON_2D());
5037+
5038+
variant.SetInit(LocalState::Init);
5039+
variant.SetFunction(ExecutePolygon);
5040+
});
5041+
builder.AddVariant([](ScalarFunctionVariantBuilder &variant) {
5042+
variant.AddParameter("blob", LogicalType::BLOB);
5043+
variant.SetReturnType(GeoTypes::POLYGON_2D());
50215044

50225045
variant.SetInit(LocalState::Init);
50235046
variant.SetFunction(ExecutePolygon);
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# name: test/sql/geometry/st_2d_fromwkb.test
2+
# group: [geometry]
3+
4+
require spatial
5+
6+
query I
7+
select ST_Point2DFromWKB(ST_AsWKB(ST_Point(1, 2)));
8+
----
9+
POINT (1 2)
10+
11+
query I
12+
SELECT ST_Linestring2DFromWKB(ST_AsWKB(ST_GeomFromText('LINESTRING(0 0, 1 1, 2 2)')));
13+
----
14+
LINESTRING (0 0, 1 1, 2 2)
15+
16+
query I
17+
SELECT ST_Polygon2DFromWKB(ST_AsWKB(ST_GeomFromText('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))')));
18+
----
19+
POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))

0 commit comments

Comments
 (0)