huaxingao commented on code in PR #15993:
URL: https://github.com/apache/iceberg/pull/15993#discussion_r3089930870
##########
spark/v4.1/spark-extensions/src/test/java/org/apache/iceberg/spark/extensions/TestRegisterTableProcedure.java:
##########
@@ -82,4 +83,59 @@ public void testRegisterTable() throws NoSuchTableException,
ParseException {
.as("Should have the right datafile count in the procedure result")
.contains(originalFileCount, atIndex(2));
}
+
+ @TestTemplate
+ public void testRegisterTableAlreadyExistsFails() throws
NoSuchTableException, ParseException {
+ long numRows = 1000;
+
+ sql("CREATE TABLE %s (id int, data string) using ICEBERG", tableName);
+ spark
+ .range(0, numRows)
+ .withColumn("data", functions.col("id").cast(DataTypes.StringType))
+ .writeTo(tableName)
+ .append();
+
+ Table table = Spark3Util.loadIcebergTable(spark, tableName);
+ String metadataJson = TableUtil.metadataFileLocation(table);
+
+ sql("CALL %s.system.register_table('%s', '%s')", catalogName, targetName,
metadataJson);
+
+ assertThatThrownBy(
+ () ->
+ sql(
+ "CALL %s.system.register_table('%s', '%s')",
+ catalogName, targetName, metadataJson))
+ .isInstanceOf(Exception.class)
+ .hasMessageContaining("Table already exists");
+ }
+
+ @TestTemplate
+ public void testRegisterTableWithOverwriteNotSupported()
+ throws NoSuchTableException, ParseException {
+ long numRows = 1000;
+
+ sql("CREATE TABLE %s (id int, data string) using ICEBERG", tableName);
+ spark
+ .range(0, numRows)
+ .withColumn("data", functions.col("id").cast(DataTypes.StringType))
+ .writeTo(tableName)
+ .append();
+
+ Table table = Spark3Util.loadIcebergTable(spark, tableName);
+ String metadataJson = TableUtil.metadataFileLocation(table);
+
+ sql("CALL %s.system.register_table('%s', '%s')", catalogName, targetName,
metadataJson);
+
+ // The test setup uses HiveCatalog which doesn't support overwrite, so it
falls back to the
+ // default implementation in Catalog interface which throws
UnsupportedOperationException.
+ // This verifies that the 'overwrite' parameter is correctly passed to the
catalog.
+ // The third argument in register_table procedure is overwrite = true.
+ assertThatThrownBy(
+ () ->
+ sql(
+ "CALL %s.system.register_table('%s', '%s', true)",
+ catalogName, targetName, metadataJson))
+ .isInstanceOf(Exception.class)
+ .hasMessageContaining("Registering tables with overwrite is not
supported");
+ }
Review Comment:
The tests only cover failure cases (table already exists, overwrite not
supported). Can we have a a positive test to show overwrite actually replacing
a registration?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]