@@ -2685,4 +2685,63 @@ class MetacatSmokeSpec extends Specification {
2685
2685
assert parentChildRelV1.getChildren(catalogName, databaseName, child21).isEmpty()
2686
2686
assert parentChildRelV1.getParents(catalogName, databaseName, child21) == [new ParentInfoDto(" hive- metastore/ iceberg_db/ parent2" , " CLONE " , " p2_uuid" )] as Set
2687
2687
}
2688
+
2689
+ def " Test remove migrated_data_location before soft delete" () {
2690
+ given:
2691
+ def catalogName = 'hive-metastore'
2692
+ def databaseName = 'smoke_db'
2693
+ def tableName = 'test_table_migrated_data_location'
2694
+ def uri = isLocalEnv ? String.format('file:/tmp/%s/%s', databaseName, tableName) : null
2695
+ def tableDto = PigDataDtoProvider.getTable(catalogName, databaseName, tableName, 'gtret', uri)
2696
+
2697
+ // Add multiple metadata fields to verify they persist
2698
+ tableDto.definitionMetadata.put('migrated_data_location', 's3://old/location')
2699
+ tableDto.definitionMetadata.put('preserved_field', 'should remain')
2700
+ tableDto.definitionMetadata.put('another_field', 'should also remain')
2701
+
2702
+ try {
2703
+ api.createDatabase(catalogName, databaseName, new DatabaseCreateRequestDto())
2704
+ } catch (Exception ignored) {
2705
+ }
2706
+
2707
+ when:
2708
+ def createdTable = api.createTable(catalogName, databaseName, tableName, tableDto)
2709
+
2710
+ then:
2711
+ assert createdTable.definitionMetadata.has('migrated_data_location')
2712
+ assert createdTable.definitionMetadata.has('preserved_field')
2713
+ assert createdTable.definitionMetadata.has('another_field')
2714
+
2715
+ // Soft delete the table
2716
+ when:
2717
+ api.deleteTable(catalogName, databaseName, tableName)
2718
+
2719
+ // Recreate the table with the same name and verify migrated_data_location is gone
2720
+ def newTableDto = PigDataDtoProvider.getTable(catalogName, databaseName, tableName, 'gtret', uri)
2721
+ def recreatedTable = api.createTable(catalogName, databaseName, tableName, newTableDto)
2722
+
2723
+ then:
2724
+ // Verify migrated_data_location is not present
2725
+ !recreatedTable.definitionMetadata.has('migrated_data_location')
2726
+ // Verify other fields are still present
2727
+ recreatedTable.definitionMetadata.has('preserved_field')
2728
+ recreatedTable.definitionMetadata.get('preserved_field').asText() == 'should remain'
2729
+ recreatedTable.definitionMetadata.has('another_field')
2730
+ recreatedTable.definitionMetadata.get('another_field').asText() == 'should also remain'
2731
+
2732
+ // Verify the definition metadata doesn't contain migrated_data_location
2733
+ def definitionMetadatas = metadataApi.getDefinitionMetadataList(null, null, null, null, null, null, " $catalogName/ $databaseName/ $tableName" , null)
2734
+ definitionMetadatas.each { definition ->
2735
+ assert !definition.getDefinitionMetadata().has(" migrated_data_location" )
2736
+ }
2737
+
2738
+ // Verify no exceptions are thrown
2739
+ noExceptionThrown()
2740
+
2741
+ cleanup:
2742
+ try {
2743
+ api.deleteTable(catalogName, databaseName, tableName)
2744
+ } catch (Exception ignored) {
2745
+ }
2746
+ }
2688
2747
}
0 commit comments