reifydb_core/value/column/
frame.rs1use crate::{
5 Frame, FrameColumn, FrameColumnData,
6 value::column::{Column, ColumnData, Columns},
7};
8
9impl From<ColumnData> for FrameColumnData {
10 fn from(value: ColumnData) -> Self {
11 match value {
12 ColumnData::Bool(container) => FrameColumnData::Bool(container),
13 ColumnData::Float4(container) => FrameColumnData::Float4(container),
14 ColumnData::Float8(container) => FrameColumnData::Float8(container),
15 ColumnData::Int1(container) => FrameColumnData::Int1(container),
16 ColumnData::Int2(container) => FrameColumnData::Int2(container),
17 ColumnData::Int4(container) => FrameColumnData::Int4(container),
18 ColumnData::Int8(container) => FrameColumnData::Int8(container),
19 ColumnData::Int16(container) => FrameColumnData::Int16(container),
20 ColumnData::Uint1(container) => FrameColumnData::Uint1(container),
21 ColumnData::Uint2(container) => FrameColumnData::Uint2(container),
22 ColumnData::Uint4(container) => FrameColumnData::Uint4(container),
23 ColumnData::Uint8(container) => FrameColumnData::Uint8(container),
24 ColumnData::Uint16(container) => FrameColumnData::Uint16(container),
25 ColumnData::Utf8 {
26 container,
27 ..
28 } => FrameColumnData::Utf8(container),
29 ColumnData::Date(container) => FrameColumnData::Date(container),
30 ColumnData::DateTime(container) => FrameColumnData::DateTime(container),
31 ColumnData::Time(container) => FrameColumnData::Time(container),
32 ColumnData::Duration(container) => FrameColumnData::Duration(container),
33 ColumnData::RowNumber(container) => FrameColumnData::RowNumber(container),
34 ColumnData::IdentityId(container) => FrameColumnData::IdentityId(container),
35 ColumnData::Uuid4(container) => FrameColumnData::Uuid4(container),
36 ColumnData::Uuid7(container) => FrameColumnData::Uuid7(container),
37 ColumnData::Blob {
38 container,
39 ..
40 } => FrameColumnData::Blob(container),
41 ColumnData::Int {
42 container,
43 ..
44 } => FrameColumnData::Int(container),
45 ColumnData::Uint {
46 container,
47 ..
48 } => FrameColumnData::Uint(container),
49 ColumnData::Decimal {
50 container,
51 ..
52 } => FrameColumnData::Decimal(container),
53 ColumnData::Any(container) => FrameColumnData::Any(container),
54 ColumnData::Undefined(container) => FrameColumnData::Undefined(container),
55 }
56 }
57}
58
59impl From<Column<'_>> for FrameColumn {
60 fn from(value: Column) -> Self {
61 let name_str = value.name.text();
63 let parts: Vec<&str> = name_str.split('.').collect();
64 let (namespace, store, name) = match parts.as_slice() {
65 [ns, src, n] => (Some(ns.to_string()), Some(src.to_string()), n.to_string()),
66 [src, n] => (None, Some(src.to_string()), n.to_string()),
67 [n] => (None, None, n.to_string()),
68 _ => (None, None, name_str.to_string()),
69 };
70 FrameColumn {
71 namespace,
72 source: store,
73 name,
74 data: value.data.into(),
75 }
76 }
77}
78
79impl From<Columns<'_>> for Frame {
80 fn from(columns: Columns) -> Self {
81 let frame_columns: Vec<FrameColumn> = columns.columns.into_iter().map(|col| col.into()).collect();
82 if !columns.row_numbers.is_empty() {
83 Frame::with_row_numbers(frame_columns, columns.row_numbers.to_vec())
84 } else {
85 Frame::new(frame_columns)
86 }
87 }
88}