diff --git a/java/lance-namespace-core/src/main/java/com/lancedb/lance/namespace/ObjectIdentifier.java b/java/lance-namespace-core/src/main/java/com/lancedb/lance/namespace/ObjectIdentifier.java index 9ddf4c36..f3c36a94 100644 --- a/java/lance-namespace-core/src/main/java/com/lancedb/lance/namespace/ObjectIdentifier.java +++ b/java/lance-namespace-core/src/main/java/com/lancedb/lance/namespace/ObjectIdentifier.java @@ -20,6 +20,7 @@ import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.regex.Pattern; public class ObjectIdentifier { @@ -51,7 +52,8 @@ public static ObjectIdentifier of(String id, String delimiter) { if (id.equals(delimiter)) { return new ObjectIdentifier(new String[0]); } - return new ObjectIdentifier(id.split(delimiter)); + // Split by the delimiter literally(i.e., escape any regex special characters) + return new ObjectIdentifier(id.split(Pattern.quote(delimiter))); } public String levelAtListPos(int pos) { diff --git a/java/lance-namespace-core/src/test/java/com/lancedb/lance/namespace/TestObjectIdentifier.java b/java/lance-namespace-core/src/test/java/com/lancedb/lance/namespace/TestObjectIdentifier.java index f6421d61..79e5c71d 100644 --- a/java/lance-namespace-core/src/test/java/com/lancedb/lance/namespace/TestObjectIdentifier.java +++ b/java/lance-namespace-core/src/test/java/com/lancedb/lance/namespace/TestObjectIdentifier.java @@ -67,5 +67,15 @@ public void testObjectIdentifier() { oid = ObjectIdentifier.of(Lists.newArrayList("a", "b", "c")); assertEquals(Lists.newArrayList("a", "b"), oid.parent()); + + // Case 5: parse from string + oid = ObjectIdentifier.of("."); + assertEquals(0, oid.levels()); + + oid = ObjectIdentifier.of("a.b.c"); + assertEquals(3, oid.levels()); + assertEquals("a", oid.levelAtListPos(0)); + assertEquals("b", oid.levelAtListPos(1)); + assertEquals("c", oid.levelAtListPos(2)); } }