Skip to content

Commit ab35451

Browse files
committed
feat(playground): add HMS catalog support
1 parent 1817814 commit ab35451

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

crates/integrations/playground/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ dirs = { workspace = true }
3535
fs-err = { workspace = true }
3636
home = { workspace = true }
3737
iceberg = { workspace = true }
38+
iceberg-catalog-hms = { workspace = true }
3839
iceberg-catalog-rest = { workspace = true }
3940
iceberg-datafusion = { workspace = true }
4041
mimalloc = { workspace = true }

crates/integrations/playground/src/catalog.rs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use datafusion::catalog::{CatalogProvider, CatalogProviderList};
2525
use fs_err::read_to_string;
2626
use iceberg::CatalogBuilder;
2727
use iceberg::memory::MemoryCatalogBuilder;
28+
use iceberg_catalog_hms::HmsCatalogBuilder;
2829
use iceberg_catalog_rest::RestCatalogBuilder;
2930
use iceberg_datafusion::IcebergCatalogProvider;
3031
use 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

Comments
 (0)