hdbconnect_arrow/schema/
mapping.rs1use std::sync::Arc;
6
7use arrow_schema::{Field, Schema, SchemaRef};
8
9#[derive(Debug, Clone, Default)]
22pub struct SchemaMapper;
23
24impl SchemaMapper {
25 #[must_use]
27 pub const fn new() -> Self {
28 Self
29 }
30
31 #[must_use]
37 pub fn from_result_set(result_set: &hdbconnect::ResultSet) -> Schema {
38 let metadata = result_set.metadata();
40 let fields: Vec<Field> = metadata
41 .iter()
42 .map(super::super::types::arrow::FieldMetadataExt::to_arrow_field)
43 .collect();
44
45 Schema::new(fields)
46 }
47
48 #[must_use]
54 pub fn from_field_metadata(metadata: &[hdbconnect::FieldMetadata]) -> Schema {
55 let fields: Vec<Field> = metadata
56 .iter()
57 .map(super::super::types::arrow::FieldMetadataExt::to_arrow_field)
58 .collect();
59
60 Schema::new(fields)
61 }
62
63 #[must_use]
67 pub fn schema_ref_from_result_set(result_set: &hdbconnect::ResultSet) -> SchemaRef {
68 Arc::new(Self::from_result_set(result_set))
69 }
70
71 #[must_use]
75 pub fn schema_ref_from_field_metadata(metadata: &[hdbconnect::FieldMetadata]) -> SchemaRef {
76 Arc::new(Self::from_field_metadata(metadata))
77 }
78}
79
80pub trait SchemaFromHana {
82 fn from_hana_metadata(metadata: &[hdbconnect::FieldMetadata]) -> Schema;
84}
85
86impl SchemaFromHana for Schema {
87 fn from_hana_metadata(metadata: &[hdbconnect::FieldMetadata]) -> Schema {
88 SchemaMapper::from_field_metadata(metadata)
89 }
90}
91
92#[cfg(test)]
93mod tests {
94 use std::mem::size_of_val;
95
96 use super::*;
97
98 #[test]
99 fn test_schema_mapper_new() {
100 let mapper = SchemaMapper::new();
101 assert!(size_of_val(&mapper) == 0); }
104
105 #[test]
106 fn test_schema_mapper_default() {
107 let mapper = SchemaMapper::default();
108 assert!(size_of_val(&mapper) == 0);
109 }
110}