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::IdentityId(container) => FrameColumnData::IdentityId(container),
34 ColumnData::Uuid4(container) => FrameColumnData::Uuid4(container),
35 ColumnData::Uuid7(container) => FrameColumnData::Uuid7(container),
36 ColumnData::Blob {
37 container,
38 ..
39 } => FrameColumnData::Blob(container),
40 ColumnData::Int {
41 container,
42 ..
43 } => FrameColumnData::Int(container),
44 ColumnData::Uint {
45 container,
46 ..
47 } => FrameColumnData::Uint(container),
48 ColumnData::Decimal {
49 container,
50 ..
51 } => FrameColumnData::Decimal(container),
52 ColumnData::Any(container) => FrameColumnData::Any(container),
53 ColumnData::Undefined(container) => FrameColumnData::Undefined(container),
54 }
55 }
56}
57
58impl From<Column> for FrameColumn {
59 fn from(value: Column) -> Self {
60 let name_str = value.name.text();
62 let parts: Vec<&str> = name_str.split('.').collect();
63 let (namespace, store, name) = match parts.as_slice() {
64 [ns, src, n] => (Some(ns.to_string()), Some(src.to_string()), n.to_string()),
65 [src, n] => (None, Some(src.to_string()), n.to_string()),
66 [n] => (None, None, n.to_string()),
67 _ => (None, None, name_str.to_string()),
68 };
69 FrameColumn {
70 namespace,
71 source: store,
72 name,
73 data: value.data.into(),
74 }
75 }
76}
77
78impl From<Columns> for Frame {
79 fn from(columns: Columns) -> Self {
80 let frame_columns: Vec<FrameColumn> = columns.columns.into_iter().map(|col| col.into()).collect();
81 if !columns.row_numbers.is_empty() {
82 Frame::with_row_numbers(frame_columns, columns.row_numbers.to_vec())
83 } else {
84 Frame::new(frame_columns)
85 }
86 }
87}