Skip to main content

reifydb_core/value/column/
frame.rs

1// SPDX-License-Identifier: AGPL-3.0-or-later
2// Copyright (c) 2025 ReifyDB
3
4use reifydb_type::value::frame::{column::FrameColumn, data::FrameColumnData, frame::Frame};
5
6use crate::value::column::{Column, ColumnData, columns::Columns};
7
8impl From<ColumnData> for FrameColumnData {
9	fn from(value: ColumnData) -> Self {
10		match value {
11			ColumnData::Bool(container) => FrameColumnData::Bool(container),
12			ColumnData::Float4(container) => FrameColumnData::Float4(container),
13			ColumnData::Float8(container) => FrameColumnData::Float8(container),
14			ColumnData::Int1(container) => FrameColumnData::Int1(container),
15			ColumnData::Int2(container) => FrameColumnData::Int2(container),
16			ColumnData::Int4(container) => FrameColumnData::Int4(container),
17			ColumnData::Int8(container) => FrameColumnData::Int8(container),
18			ColumnData::Int16(container) => FrameColumnData::Int16(container),
19			ColumnData::Uint1(container) => FrameColumnData::Uint1(container),
20			ColumnData::Uint2(container) => FrameColumnData::Uint2(container),
21			ColumnData::Uint4(container) => FrameColumnData::Uint4(container),
22			ColumnData::Uint8(container) => FrameColumnData::Uint8(container),
23			ColumnData::Uint16(container) => FrameColumnData::Uint16(container),
24			ColumnData::Utf8 {
25				container,
26				..
27			} => FrameColumnData::Utf8(container),
28			ColumnData::Date(container) => FrameColumnData::Date(container),
29			ColumnData::DateTime(container) => FrameColumnData::DateTime(container),
30			ColumnData::Time(container) => FrameColumnData::Time(container),
31			ColumnData::Duration(container) => FrameColumnData::Duration(container),
32			ColumnData::IdentityId(container) => FrameColumnData::IdentityId(container),
33			ColumnData::Uuid4(container) => FrameColumnData::Uuid4(container),
34			ColumnData::Uuid7(container) => FrameColumnData::Uuid7(container),
35			ColumnData::Blob {
36				container,
37				..
38			} => FrameColumnData::Blob(container),
39			ColumnData::Int {
40				container,
41				..
42			} => FrameColumnData::Int(container),
43			ColumnData::Uint {
44				container,
45				..
46			} => FrameColumnData::Uint(container),
47			ColumnData::Decimal {
48				container,
49				..
50			} => FrameColumnData::Decimal(container),
51			ColumnData::Any(container) => FrameColumnData::Any(container),
52			ColumnData::DictionaryId(container) => FrameColumnData::DictionaryId(container),
53			ColumnData::Option {
54				inner,
55				bitvec,
56			} => FrameColumnData::Option {
57				inner: Box::new(FrameColumnData::from(*inner)),
58				bitvec,
59			},
60		}
61	}
62}
63
64impl From<Column> for FrameColumn {
65	fn from(value: Column) -> Self {
66		FrameColumn {
67			name: value.name.to_string(),
68			data: value.data.into(),
69		}
70	}
71}
72
73impl From<Columns> for Frame {
74	fn from(columns: Columns) -> Self {
75		let frame_columns: Vec<FrameColumn> = columns.columns.into_iter().map(|col| col.into()).collect();
76		if !columns.row_numbers.is_empty() {
77			Frame::with_row_numbers(frame_columns, columns.row_numbers.to_vec())
78		} else {
79			Frame::new(frame_columns)
80		}
81	}
82}