This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/main by this push:
new c4dbf0d8af fix: make GetCatalogsBuilder sort catalog names (#6864)
c4dbf0d8af is described below
commit c4dbf0d8af6ca5a19b8b2ea777da3c276807fc5e
Author: niebayes <[email protected]>
AuthorDate: Fri Dec 13 20:23:33 2024 +0800
fix: make GetCatalogsBuilder sort catalog names (#6864)
* fix: sort catalog names
* apply code suggestion from tustvold
Co-authored-by: Raphael Taylor-Davies
<[email protected]>
---------
Co-authored-by: Raphael Taylor-Davies
<[email protected]>
---
arrow-flight/src/sql/metadata/catalogs.rs | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/arrow-flight/src/sql/metadata/catalogs.rs
b/arrow-flight/src/sql/metadata/catalogs.rs
index 327fed8107..e27c63c393 100644
--- a/arrow-flight/src/sql/metadata/catalogs.rs
+++ b/arrow-flight/src/sql/metadata/catalogs.rs
@@ -68,7 +68,8 @@ impl GetCatalogsBuilder {
/// builds a `RecordBatch` with the correct schema for a
/// [`CommandGetCatalogs`] response
pub fn build(self) -> Result<RecordBatch> {
- let Self { catalogs } = self;
+ let Self { mut catalogs } = self;
+ catalogs.sort_unstable();
let batch = RecordBatch::try_new(
Arc::clone(&GET_CATALOG_SCHEMA),
@@ -98,3 +99,30 @@ static GET_CATALOG_SCHEMA: Lazy<SchemaRef> = Lazy::new(|| {
false,
)]))
});
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_catalogs_are_sorted() {
+ let batch = ["a_catalog", "c_catalog", "b_catalog"]
+ .into_iter()
+ .fold(GetCatalogsBuilder::new(), |mut builder, catalog| {
+ builder.append(catalog);
+ builder
+ })
+ .build()
+ .unwrap();
+ let catalogs = batch
+ .column(0)
+ .as_any()
+ .downcast_ref::<StringArray>()
+ .unwrap()
+ .iter()
+ .flatten()
+ .collect::<Vec<_>>();
+ assert!(catalogs.is_sorted());
+ assert_eq!(catalogs, ["a_catalog", "b_catalog", "c_catalog"]);
+ }
+}