@@ -25,6 +25,7 @@ use datafusion::catalog::{CatalogProvider, CatalogProviderList};
2525use fs_err:: read_to_string;
2626use iceberg:: CatalogBuilder ;
2727use iceberg:: memory:: MemoryCatalogBuilder ;
28+ use iceberg_catalog_hms:: HmsCatalogBuilder ;
2829use iceberg_catalog_rest:: RestCatalogBuilder ;
2930use iceberg_datafusion:: IcebergCatalogProvider ;
3031use toml:: { Table as TomlTable , Value } ;
@@ -98,9 +99,10 @@ impl IcebergCatalogList {
9899 let catalog: Arc < dyn iceberg:: Catalog > = match r#type {
99100 "rest" => Arc :: new ( RestCatalogBuilder :: default ( ) . load ( name, props) . await ?) ,
100101 "memory" => Arc :: new ( MemoryCatalogBuilder :: default ( ) . load ( name, props) . await ?) ,
102+ "hms" => Arc :: new ( HmsCatalogBuilder :: default ( ) . load ( name, props) . await ?) ,
101103 _ => {
102104 return Err ( anyhow:: anyhow!(
103- "Unsupported catalog type: '{type}'. Supported types: rest, memory"
105+ "Unsupported catalog type: '{type}'. Supported types: rest, memory, hms "
104106 ) ) ;
105107 }
106108 } ;
@@ -179,7 +181,7 @@ mod tests {
179181 let err_msg = result. unwrap_err ( ) . to_string ( ) ;
180182 assert ! ( err_msg. contains( "Unsupported catalog type" ) ) ;
181183 assert ! ( err_msg. contains( "hive" ) ) ;
182- assert ! ( err_msg. contains( "rest, memory" ) ) ;
184+ assert ! ( err_msg. contains( "rest, memory, hms " ) ) ;
183185 }
184186
185187 #[ tokio:: test]
@@ -206,4 +208,21 @@ mod tests {
206208 assert ! ( names. contains( & "catalog_one" . to_string( ) ) ) ;
207209 assert ! ( names. contains( & "catalog_two" . to_string( ) ) ) ;
208210 }
211+
212+ #[ tokio:: test]
213+ async fn test_parse_hms_catalog_config_error ( ) {
214+ let config = r#"
215+ [[catalogs]]
216+ name = "test_hms"
217+ type = "hms"
218+ [catalogs.config]
219+ uri = "127.0.0.1:9083"
220+ warehouse = "s3://warehouse/hive"
221+ "# ;
222+
223+ let toml_table: TomlTable = toml:: from_str ( config) . unwrap ( ) ;
224+ let result = IcebergCatalogList :: parse_table ( & toml_table) . await ;
225+
226+ assert ! ( result. is_err( ) ) ;
227+ }
209228}
0 commit comments