diff --git a/geaflow/geaflow-dsl/geaflow-dsl-plan/src/main/java/org/apache/geaflow/dsl/udf/table/string/Substr.java b/geaflow/geaflow-dsl/geaflow-dsl-plan/src/main/java/org/apache/geaflow/dsl/udf/table/string/Substr.java index 4ffe3ef8a..480d8bfef 100644 --- a/geaflow/geaflow-dsl/geaflow-dsl-plan/src/main/java/org/apache/geaflow/dsl/udf/table/string/Substr.java +++ b/geaflow/geaflow-dsl/geaflow-dsl-plan/src/main/java/org/apache/geaflow/dsl/udf/table/string/Substr.java @@ -31,6 +31,9 @@ public String eval(String str, Integer pos, Integer length) { if (str == null || pos == null || length == null) { return null; } + if (pos == Integer.MIN_VALUE) { + return str; + } if ((Math.abs(pos) > str.length())) { return str; } @@ -64,6 +67,9 @@ public BinaryString eval(BinaryString str, Integer pos, Integer length) { if (str == null || pos == null || length == null) { return null; } + if (pos == Integer.MIN_VALUE) { + return null; + } if (Math.abs(pos) > str.getLength()) { return null; } diff --git a/geaflow/geaflow-dsl/geaflow-dsl-plan/src/test/java/org/apache/geaflow/dsl/udf/string/SubstrTest.java b/geaflow/geaflow-dsl/geaflow-dsl-plan/src/test/java/org/apache/geaflow/dsl/udf/string/SubstrTest.java index ec37db6c7..eaee520d0 100644 --- a/geaflow/geaflow-dsl/geaflow-dsl-plan/src/test/java/org/apache/geaflow/dsl/udf/string/SubstrTest.java +++ b/geaflow/geaflow-dsl/geaflow-dsl-plan/src/test/java/org/apache/geaflow/dsl/udf/string/SubstrTest.java @@ -43,4 +43,17 @@ public void test() { Assert.assertEquals(sb.eval(BinaryString.fromString("Facebook"), -5).toString(), "ebook"); Assert.assertEquals(sb.eval(BinaryString.fromString("Facebook"), 5, 1).toString(), "b"); } + + @Test + public void testIntegerMinValue() { + Substr sb = new Substr(); + + // Test Integer.MIN_VALUE for String version + Assert.assertEquals(sb.eval("hello", Integer.MIN_VALUE, 1), "hello"); + Assert.assertEquals(sb.eval("hello", Integer.MIN_VALUE), "hello"); + + // Test Integer.MIN_VALUE for BinaryString version + Assert.assertNull(sb.eval(BinaryString.fromString("hello"), Integer.MIN_VALUE, 1)); + Assert.assertNull(sb.eval(BinaryString.fromString("hello"), Integer.MIN_VALUE)); + } }