reifydb_core/value/column/
frame.rs1use reifydb_type::{
5 fragment::Fragment,
6 util::cowvec::CowVec,
7 value::{
8 constraint::{bytes::MaxBytes, precision::Precision, scale::Scale},
9 frame::{column::FrameColumn, data::FrameColumnData, frame::Frame},
10 },
11};
12
13use crate::value::column::{Column, ColumnData, columns::Columns};
14
15impl From<ColumnData> for FrameColumnData {
16 fn from(value: ColumnData) -> Self {
17 match value {
18 ColumnData::Bool(container) => FrameColumnData::Bool(container),
19 ColumnData::Float4(container) => FrameColumnData::Float4(container),
20 ColumnData::Float8(container) => FrameColumnData::Float8(container),
21 ColumnData::Int1(container) => FrameColumnData::Int1(container),
22 ColumnData::Int2(container) => FrameColumnData::Int2(container),
23 ColumnData::Int4(container) => FrameColumnData::Int4(container),
24 ColumnData::Int8(container) => FrameColumnData::Int8(container),
25 ColumnData::Int16(container) => FrameColumnData::Int16(container),
26 ColumnData::Uint1(container) => FrameColumnData::Uint1(container),
27 ColumnData::Uint2(container) => FrameColumnData::Uint2(container),
28 ColumnData::Uint4(container) => FrameColumnData::Uint4(container),
29 ColumnData::Uint8(container) => FrameColumnData::Uint8(container),
30 ColumnData::Uint16(container) => FrameColumnData::Uint16(container),
31 ColumnData::Utf8 {
32 container,
33 ..
34 } => FrameColumnData::Utf8(container),
35 ColumnData::Date(container) => FrameColumnData::Date(container),
36 ColumnData::DateTime(container) => FrameColumnData::DateTime(container),
37 ColumnData::Time(container) => FrameColumnData::Time(container),
38 ColumnData::Duration(container) => FrameColumnData::Duration(container),
39 ColumnData::IdentityId(container) => FrameColumnData::IdentityId(container),
40 ColumnData::Uuid4(container) => FrameColumnData::Uuid4(container),
41 ColumnData::Uuid7(container) => FrameColumnData::Uuid7(container),
42 ColumnData::Blob {
43 container,
44 ..
45 } => FrameColumnData::Blob(container),
46 ColumnData::Int {
47 container,
48 ..
49 } => FrameColumnData::Int(container),
50 ColumnData::Uint {
51 container,
52 ..
53 } => FrameColumnData::Uint(container),
54 ColumnData::Decimal {
55 container,
56 ..
57 } => FrameColumnData::Decimal(container),
58 ColumnData::Any(container) => FrameColumnData::Any(container),
59 ColumnData::DictionaryId(container) => FrameColumnData::DictionaryId(container),
60 ColumnData::Option {
61 inner,
62 bitvec,
63 } => FrameColumnData::Option {
64 inner: Box::new(FrameColumnData::from(*inner)),
65 bitvec,
66 },
67 }
68 }
69}
70
71impl From<Column> for FrameColumn {
72 fn from(value: Column) -> Self {
73 FrameColumn {
74 name: value.name.to_string(),
75 data: value.data.into(),
76 }
77 }
78}
79
80impl From<Columns> for Frame {
81 fn from(columns: Columns) -> Self {
82 let frame_columns: Vec<FrameColumn> = columns.columns.into_iter().map(|col| col.into()).collect();
83 if !columns.row_numbers.is_empty() {
84 Frame::with_row_numbers(frame_columns, columns.row_numbers.to_vec())
85 } else {
86 Frame::new(frame_columns)
87 }
88 }
89}
90
91impl From<FrameColumnData> for ColumnData {
94 fn from(value: FrameColumnData) -> Self {
95 match value {
96 FrameColumnData::Bool(container) => ColumnData::Bool(container),
97 FrameColumnData::Float4(container) => ColumnData::Float4(container),
98 FrameColumnData::Float8(container) => ColumnData::Float8(container),
99 FrameColumnData::Int1(container) => ColumnData::Int1(container),
100 FrameColumnData::Int2(container) => ColumnData::Int2(container),
101 FrameColumnData::Int4(container) => ColumnData::Int4(container),
102 FrameColumnData::Int8(container) => ColumnData::Int8(container),
103 FrameColumnData::Int16(container) => ColumnData::Int16(container),
104 FrameColumnData::Uint1(container) => ColumnData::Uint1(container),
105 FrameColumnData::Uint2(container) => ColumnData::Uint2(container),
106 FrameColumnData::Uint4(container) => ColumnData::Uint4(container),
107 FrameColumnData::Uint8(container) => ColumnData::Uint8(container),
108 FrameColumnData::Uint16(container) => ColumnData::Uint16(container),
109 FrameColumnData::Utf8(container) => ColumnData::Utf8 {
110 container,
111 max_bytes: MaxBytes::MAX,
112 },
113 FrameColumnData::Date(container) => ColumnData::Date(container),
114 FrameColumnData::DateTime(container) => ColumnData::DateTime(container),
115 FrameColumnData::Time(container) => ColumnData::Time(container),
116 FrameColumnData::Duration(container) => ColumnData::Duration(container),
117 FrameColumnData::IdentityId(container) => ColumnData::IdentityId(container),
118 FrameColumnData::Uuid4(container) => ColumnData::Uuid4(container),
119 FrameColumnData::Uuid7(container) => ColumnData::Uuid7(container),
120 FrameColumnData::Blob(container) => ColumnData::Blob {
121 container,
122 max_bytes: MaxBytes::MAX,
123 },
124 FrameColumnData::Int(container) => ColumnData::Int {
125 container,
126 max_bytes: MaxBytes::MAX,
127 },
128 FrameColumnData::Uint(container) => ColumnData::Uint {
129 container,
130 max_bytes: MaxBytes::MAX,
131 },
132 FrameColumnData::Decimal(container) => ColumnData::Decimal {
133 container,
134 precision: Precision::MAX,
135 scale: Scale::new(0),
136 },
137 FrameColumnData::Any(container) => ColumnData::Any(container),
138 FrameColumnData::DictionaryId(container) => ColumnData::DictionaryId(container),
139 FrameColumnData::Option {
140 inner,
141 bitvec,
142 } => ColumnData::Option {
143 inner: Box::new(ColumnData::from(*inner)),
144 bitvec,
145 },
146 }
147 }
148}
149
150impl From<FrameColumn> for Column {
151 fn from(value: FrameColumn) -> Self {
152 Column {
153 name: Fragment::internal(value.name),
154 data: value.data.into(),
155 }
156 }
157}
158
159impl From<Frame> for Columns {
160 fn from(frame: Frame) -> Self {
161 let columns: Vec<Column> = frame.columns.into_iter().map(|col| col.into()).collect();
162 Columns {
163 row_numbers: CowVec::new(frame.row_numbers),
164 columns: CowVec::new(columns),
165 }
166 }
167}