arrow_flight/sql/metadata/
mod.rs1mod catalogs;
23mod db_schemas;
24mod sql_info;
25mod table_types;
26mod tables;
27mod xdbc_info;
28
29pub use catalogs::GetCatalogsBuilder;
30pub use db_schemas::GetDbSchemasBuilder;
31pub use sql_info::{GetSqlInfoBuilder, SqlInfoData, SqlInfoDataBuilder};
32pub use table_types::GetTableTypesBuilder;
33pub use tables::GetTablesBuilder;
34pub use xdbc_info::{
35 GetXdbcTypeInfoBuilder, XdbcTypeInfo, XdbcTypeInfoData, XdbcTypeInfoDataBuilder,
36};
37
38use arrow_array::ArrayRef;
39use arrow_array::UInt32Array;
40use arrow_row::RowConverter;
41use arrow_row::SortField;
42
43fn lexsort_to_indices(arrays: &[ArrayRef]) -> UInt32Array {
45 let fields = arrays
46 .iter()
47 .map(|a| SortField::new(a.data_type().clone()))
48 .collect();
49 let converter = RowConverter::new(fields).unwrap();
50 let rows = converter.convert_columns(arrays).unwrap();
51 let mut sort: Vec<_> = rows.iter().enumerate().collect();
52 sort.sort_unstable_by_key(|(_, a)| *a);
53 UInt32Array::from_iter_values(sort.iter().map(|(i, _)| *i as u32))
54}
55
56#[cfg(test)]
57mod tests {
58 use arrow_array::RecordBatch;
59 use arrow_cast::pretty::pretty_format_batches;
60 pub fn assert_batches_eq(batches: &[RecordBatch], expected_lines: &[&str]) {
61 let formatted = pretty_format_batches(batches).unwrap().to_string();
62 let actual_lines: Vec<_> = formatted.trim().lines().collect();
63 assert_eq!(
64 &actual_lines, expected_lines,
65 "\n\nexpected:\n\n{expected_lines:#?}\nactual:\n\n{actual_lines:#?}\n\n",
66 );
67 }
68}