This is an automated email from the ASF dual-hosted git repository.
jiayu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sedona.git
The following commit(s) were added to refs/heads/master by this push:
new e2a8d6314b [GH-1761] error when invalid ST_Subdivide maxVertices
argument (#1926)
e2a8d6314b is described below
commit e2a8d6314bcbc12dc433e301de867320e1f6629f
Author: Javier Goday <[email protected]>
AuthorDate: Sat Apr 26 06:45:49 2025 +0200
[GH-1761] error when invalid ST_Subdivide maxVertices argument (#1926)
---
common/src/main/java/org/apache/sedona/common/Functions.java | 3 +++
.../src/test/java/org/apache/sedona/common/FunctionsTest.java | 8 ++++++++
docs/api/flink/Function.md | 2 ++
docs/api/snowflake/vector-data/Function.md | 4 ++++
docs/api/sql/Function.md | 4 ++++
.../test/scala/org/apache/sedona/sql/PreserveSRIDSuite.scala | 2 +-
.../test/scala/org/apache/sedona/sql/functionTestScala.scala | 10 ++++++++++
7 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/common/src/main/java/org/apache/sedona/common/Functions.java
b/common/src/main/java/org/apache/sedona/common/Functions.java
index 4e14055d8c..f5e1eb0eba 100644
--- a/common/src/main/java/org/apache/sedona/common/Functions.java
+++ b/common/src/main/java/org/apache/sedona/common/Functions.java
@@ -1866,6 +1866,9 @@ public class Functions {
}
public static Geometry[] subDivide(Geometry geometry, int maxVertices) {
+ if (maxVertices < 5) {
+ throw new IllegalArgumentException("ST_Subdivide needs 5 or more max
vertices");
+ }
return GeometrySubDivider.subDivide(geometry, maxVertices);
}
diff --git a/common/src/test/java/org/apache/sedona/common/FunctionsTest.java
b/common/src/test/java/org/apache/sedona/common/FunctionsTest.java
index 748c0b6c12..8cafb9c648 100644
--- a/common/src/test/java/org/apache/sedona/common/FunctionsTest.java
+++ b/common/src/test/java/org/apache/sedona/common/FunctionsTest.java
@@ -4420,4 +4420,12 @@ public class FunctionsTest extends TestBase {
assertFalse(Functions.hasM(emptyPoint));
assertFalse(Functions.hasZ(emptyPoint));
}
+
+ @Test
+ public void subdivideInvalidMaxVertices() {
+ LineString lineString = GEOMETRY_FACTORY.createLineString(coordArray(0, 0,
99, 99));
+ IllegalArgumentException e =
+ assertThrows(IllegalArgumentException.class, () ->
Functions.subDivide(lineString, 4));
+ assertEquals("ST_Subdivide needs 5 or more max vertices", e.getMessage());
+ }
}
diff --git a/docs/api/flink/Function.md b/docs/api/flink/Function.md
index fffb917684..199316538a 100644
--- a/docs/api/flink/Function.md
+++ b/docs/api/flink/Function.md
@@ -4041,6 +4041,8 @@ POINT(100 150)
Introduction: Returns list of geometries divided based of given maximum number
of vertices.
+A minimum of 5 vertices is required for maxVertices parameter to form a closed
box.
+
Format: `ST_SubDivide(geom: Geometry, maxVertices: Integer)`
Since: `v1.5.0`
diff --git a/docs/api/snowflake/vector-data/Function.md
b/docs/api/snowflake/vector-data/Function.md
index d545a2695a..37e12e81b8 100644
--- a/docs/api/snowflake/vector-data/Function.md
+++ b/docs/api/snowflake/vector-data/Function.md
@@ -3169,6 +3169,8 @@ Output: `POINT(100 150)`
Introduction: Returns a multi-geometry divided based of given maximum number
of vertices.
+A minimum of 5 vertices is required for maxVertices parameter to form a closed
box.
+
Format: `ST_SubDivide(geom: geometry, maxVertices: int)`
SQL example:
@@ -3188,6 +3190,8 @@ MULTILINESTRING ((0 0, 5 5), (5 5, 10 10), (10 10, 21
21), (21 21, 60 60), (60 6
Introduction: It works the same as ST_SubDivide but returns new rows with
geometries instead of a multi-geometry.
+A minimum of 5 vertices is required for maxVertices parameter to form a closed
box.
+
Format: `
SELECT SEDONA.ST_AsText(GEOM)
FROM table(SEDONA.ST_SubDivideExplode(geom: geometry, maxVertices: int))`
diff --git a/docs/api/sql/Function.md b/docs/api/sql/Function.md
index 2c7bd21fc6..fd7cc881d6 100644
--- a/docs/api/sql/Function.md
+++ b/docs/api/sql/Function.md
@@ -4253,6 +4253,8 @@ POINT(100 150)
Introduction: Returns list of geometries divided based of given maximum number
of vertices.
+A minimum of 5 vertices is required for maxVertices parameter to form a closed
box.
+
Format: `ST_SubDivide(geom: Geometry, maxVertices: Integer)`
Since: `v1.1.0`
@@ -4309,6 +4311,8 @@ Output:
Introduction: It works the same as ST_SubDivide but returns new rows with
geometries instead of list.
+A minimum of 5 vertices is required for maxVertices parameter to form a closed
box.
+
Format: `ST_SubDivideExplode(geom: Geometry, maxVertices: Integer)`
Since: `v1.1.0`
diff --git
a/spark/common/src/test/scala/org/apache/sedona/sql/PreserveSRIDSuite.scala
b/spark/common/src/test/scala/org/apache/sedona/sql/PreserveSRIDSuite.scala
index 02fdb3149b..37723b75fe 100644
--- a/spark/common/src/test/scala/org/apache/sedona/sql/PreserveSRIDSuite.scala
+++ b/spark/common/src/test/scala/org/apache/sedona/sql/PreserveSRIDSuite.scala
@@ -75,7 +75,7 @@ class PreserveSRIDSuite extends TestBaseScala with
TableDrivenPropertyChecks {
("ST_SetPoint(geom3, 1, ST_Point(0.5, 0.5))", 1000),
("ST_ClosestPoint(geom1, geom2)", 1000),
("ST_FlipCoordinates(geom1)", 1000),
- ("ST_SubDivide(geom4, 4)", 1000),
+ ("ST_SubDivide(geom4, 5)", 1000),
("ST_MakeEnvelope(0, 1, 2, 3, 1000)", 1000),
("ST_MakeLine(geom3, geom3)", 1000),
("ST_Points(geom1)", 1000),
diff --git
a/spark/common/src/test/scala/org/apache/sedona/sql/functionTestScala.scala
b/spark/common/src/test/scala/org/apache/sedona/sql/functionTestScala.scala
index 665304662e..1f6140e991 100644
--- a/spark/common/src/test/scala/org/apache/sedona/sql/functionTestScala.scala
+++ b/spark/common/src/test/scala/org/apache/sedona/sql/functionTestScala.scala
@@ -3770,4 +3770,14 @@ class functionTestScala
"The Line has SRID 4326 and Point has SRID 3857. The Line and Point
should be in the same SRID.")
}
+ it("should raise an error when using ST_SubDivide with not enough vertices")
{
+ val invalidDf = sparkSession.sql("""
+ |SELECT ST_Subdivide(ST_GeomFromWKT('LINESTRING(0 0, 99 99)'), 4) as
result
+ """.stripMargin)
+
+ val exception = intercept[Exception] {
+ invalidDf.collect()
+ }
+ exception.getMessage should include("ST_Subdivide needs 5 or more max
vertices")
+ }
}