diff --git a/api/src/main/java/org/apache/iceberg/catalog/TableIdentifier.java b/api/src/main/java/org/apache/iceberg/catalog/TableIdentifier.java index 05de7fd22ec8..ecbaa0646f84 100644 --- a/api/src/main/java/org/apache/iceberg/catalog/TableIdentifier.java +++ b/api/src/main/java/org/apache/iceberg/catalog/TableIdentifier.java @@ -36,6 +36,7 @@ public class TableIdentifier { private final String name; public static TableIdentifier of(String... names) { + Preconditions.checkArgument(names != null, "Cannot create table identifier from null array"); Preconditions.checkArgument(names.length > 0, "Cannot create table identifier without a table name"); return new TableIdentifier(Namespace.of(Arrays.copyOf(names, names.length - 1)), names[names.length - 1]); } @@ -45,12 +46,14 @@ public static TableIdentifier of(Namespace namespace, String name) { } public static TableIdentifier parse(String identifier) { + Preconditions.checkArgument(identifier != null, "Cannot parse table identifier: null"); Iterable parts = DOT.split(identifier); return TableIdentifier.of(Iterables.toArray(parts, String.class)); } private TableIdentifier(Namespace namespace, String name) { - Preconditions.checkArgument(name != null && !name.isEmpty(), "Invalid table name %s", name); + Preconditions.checkArgument(name != null && !name.isEmpty(), "Invalid table name: null or empty"); + Preconditions.checkArgument(namespace != null, "Invalid Namespace: null"); this.namespace = namespace; this.name = name; } diff --git a/api/src/test/java/org/apache/iceberg/catalog/TestTableIdentifier.java b/api/src/test/java/org/apache/iceberg/catalog/TestTableIdentifier.java index b67bdcd52ce5..39f05ddc1986 100644 --- a/api/src/test/java/org/apache/iceberg/catalog/TestTableIdentifier.java +++ b/api/src/test/java/org/apache/iceberg/catalog/TestTableIdentifier.java @@ -19,6 +19,7 @@ package org.apache.iceberg.catalog; +import org.assertj.core.api.Assertions; import org.junit.Assert; import org.junit.Test; @@ -54,4 +55,30 @@ public void testToLowerCase() { TableIdentifier.of("Catalog", "dB", "TBL").toLowerCase(), TableIdentifier.of("catalog", "db", "tbl")); } + + @Test + public void testInvalidTableName() { + Assertions.assertThatThrownBy(() -> TableIdentifier.of(Namespace.empty(), "")) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("Invalid table name: null or empty"); + + Assertions.assertThatThrownBy(() -> TableIdentifier.of(Namespace.empty(), null)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("Invalid table name: null or empty"); + } + + @Test + public void testNulls() { + Assertions.assertThatThrownBy(() -> TableIdentifier.of((String[]) null)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("Cannot create table identifier from null array"); + + Assertions.assertThatThrownBy(() -> TableIdentifier.parse(null)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("Cannot parse table identifier: null"); + + Assertions.assertThatThrownBy(() -> TableIdentifier.of(null, "name")) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("Invalid Namespace: null"); + } }