reifydb_core/value/column/
mod.rs

1// Copyright (c) reifydb.com 2025
2// This file is licensed under the AGPL-3.0-or-later, see license.md file
3
4use reifydb_type::{Fragment, Type};
5
6mod columns;
7mod compressed;
8mod data;
9pub mod frame;
10pub mod headers;
11#[allow(dead_code, unused_variables)]
12pub mod pool;
13pub mod push;
14mod transform;
15mod view;
16
17pub use columns::Columns;
18pub use compressed::{CompressedColumn, CompressionType};
19pub use data::ColumnData;
20pub use view::group_by::{GroupByView, GroupKey};
21
22#[derive(Clone, Debug, PartialEq)]
23pub struct Column {
24	pub name: Fragment,
25	pub data: ColumnData,
26}
27
28impl Column {
29	pub fn new(name: impl Into<Fragment>, data: ColumnData) -> Self {
30		Self {
31			name: name.into(),
32			data,
33		}
34	}
35
36	pub fn get_type(&self) -> Type {
37		self.data.get_type()
38	}
39
40	pub fn with_new_data(&self, data: ColumnData) -> Column {
41		Column {
42			name: self.name.clone(),
43			data,
44		}
45	}
46
47	pub fn name(&self) -> &Fragment {
48		&self.name
49	}
50
51	pub fn name_owned(&self) -> Fragment {
52		self.name.clone()
53	}
54
55	pub fn data(&self) -> &ColumnData {
56		&self.data
57	}
58
59	pub fn data_mut(&mut self) -> &mut ColumnData {
60		&mut self.data
61	}
62
63	/// Convert to a 'static lifetime version
64	pub fn to_static(&self) -> Column {
65		Column {
66			name: self.name.clone(),
67			data: self.data.clone(),
68		}
69	}
70
71	pub fn int1(name: impl Into<Fragment>, data: impl IntoIterator<Item = i8>) -> Self {
72		Column {
73			name: name.into(),
74			data: ColumnData::int1(data),
75		}
76	}
77
78	pub fn int1_with_bitvec(
79		name: impl Into<Fragment>,
80		data: impl IntoIterator<Item = i8>,
81		bitvec: impl Into<crate::BitVec>,
82	) -> Self {
83		Column {
84			name: name.into(),
85			data: ColumnData::int1_with_bitvec(data, bitvec),
86		}
87	}
88
89	pub fn int2(name: impl Into<Fragment>, data: impl IntoIterator<Item = i16>) -> Self {
90		Column {
91			name: name.into(),
92			data: ColumnData::int2(data),
93		}
94	}
95
96	pub fn int2_with_bitvec(
97		name: impl Into<Fragment>,
98		data: impl IntoIterator<Item = i16>,
99		bitvec: impl Into<crate::BitVec>,
100	) -> Self {
101		Column {
102			name: name.into(),
103			data: ColumnData::int2_with_bitvec(data, bitvec),
104		}
105	}
106
107	pub fn int4(name: impl Into<Fragment>, data: impl IntoIterator<Item = i32>) -> Self {
108		Column {
109			name: name.into(),
110			data: ColumnData::int4(data),
111		}
112	}
113
114	pub fn int4_with_bitvec(
115		name: impl Into<Fragment>,
116		data: impl IntoIterator<Item = i32>,
117		bitvec: impl Into<crate::BitVec>,
118	) -> Self {
119		Column {
120			name: name.into(),
121			data: ColumnData::int4_with_bitvec(data, bitvec),
122		}
123	}
124
125	pub fn int8(name: impl Into<Fragment>, data: impl IntoIterator<Item = i64>) -> Self {
126		Column {
127			name: name.into(),
128			data: ColumnData::int8(data),
129		}
130	}
131
132	pub fn int8_with_bitvec(
133		name: impl Into<Fragment>,
134		data: impl IntoIterator<Item = i64>,
135		bitvec: impl Into<crate::BitVec>,
136	) -> Self {
137		Column {
138			name: name.into(),
139			data: ColumnData::int8_with_bitvec(data, bitvec),
140		}
141	}
142
143	pub fn int16(name: impl Into<Fragment>, data: impl IntoIterator<Item = i128>) -> Self {
144		Column {
145			name: name.into(),
146			data: ColumnData::int16(data),
147		}
148	}
149
150	pub fn int16_with_bitvec(
151		name: impl Into<Fragment>,
152		data: impl IntoIterator<Item = i128>,
153		bitvec: impl Into<crate::BitVec>,
154	) -> Self {
155		Column {
156			name: name.into(),
157			data: ColumnData::int16_with_bitvec(data, bitvec),
158		}
159	}
160
161	pub fn uint1(name: impl Into<Fragment>, data: impl IntoIterator<Item = u8>) -> Self {
162		Column {
163			name: name.into(),
164			data: ColumnData::uint1(data),
165		}
166	}
167
168	pub fn uint1_with_bitvec(
169		name: impl Into<Fragment>,
170		data: impl IntoIterator<Item = u8>,
171		bitvec: impl Into<crate::BitVec>,
172	) -> Self {
173		Column {
174			name: name.into(),
175			data: ColumnData::uint1_with_bitvec(data, bitvec),
176		}
177	}
178
179	pub fn uint2(name: impl Into<Fragment>, data: impl IntoIterator<Item = u16>) -> Self {
180		Column {
181			name: name.into(),
182			data: ColumnData::uint2(data),
183		}
184	}
185
186	pub fn uint2_with_bitvec(
187		name: impl Into<Fragment>,
188		data: impl IntoIterator<Item = u16>,
189		bitvec: impl Into<crate::BitVec>,
190	) -> Self {
191		Column {
192			name: name.into(),
193			data: ColumnData::uint2_with_bitvec(data, bitvec),
194		}
195	}
196
197	pub fn uint4(name: impl Into<Fragment>, data: impl IntoIterator<Item = u32>) -> Self {
198		Column {
199			name: name.into(),
200			data: ColumnData::uint4(data),
201		}
202	}
203
204	pub fn uint4_with_bitvec(
205		name: impl Into<Fragment>,
206		data: impl IntoIterator<Item = u32>,
207		bitvec: impl Into<crate::BitVec>,
208	) -> Self {
209		Column {
210			name: name.into(),
211			data: ColumnData::uint4_with_bitvec(data, bitvec),
212		}
213	}
214
215	pub fn uint8(name: impl Into<Fragment>, data: impl IntoIterator<Item = u64>) -> Self {
216		Column {
217			name: name.into(),
218			data: ColumnData::uint8(data),
219		}
220	}
221
222	pub fn uint8_with_bitvec(
223		name: impl Into<Fragment>,
224		data: impl IntoIterator<Item = u64>,
225		bitvec: impl Into<crate::BitVec>,
226	) -> Self {
227		Column {
228			name: name.into(),
229			data: ColumnData::uint8_with_bitvec(data, bitvec),
230		}
231	}
232
233	pub fn uint16(name: impl Into<Fragment>, data: impl IntoIterator<Item = u128>) -> Self {
234		Column {
235			name: name.into(),
236			data: ColumnData::uint16(data),
237		}
238	}
239
240	pub fn uint16_with_bitvec(
241		name: impl Into<Fragment>,
242		data: impl IntoIterator<Item = u128>,
243		bitvec: impl Into<crate::BitVec>,
244	) -> Self {
245		Column {
246			name: name.into(),
247			data: ColumnData::uint16_with_bitvec(data, bitvec),
248		}
249	}
250
251	pub fn float4(name: impl Into<Fragment>, data: impl IntoIterator<Item = f32>) -> Self {
252		Column {
253			name: name.into(),
254			data: ColumnData::float4(data),
255		}
256	}
257
258	pub fn float4_with_bitvec(
259		name: impl Into<Fragment>,
260		data: impl IntoIterator<Item = f32>,
261		bitvec: impl Into<crate::BitVec>,
262	) -> Self {
263		Column {
264			name: name.into(),
265			data: ColumnData::float4_with_bitvec(data, bitvec),
266		}
267	}
268
269	pub fn float8(name: impl Into<Fragment>, data: impl IntoIterator<Item = f64>) -> Self {
270		Column {
271			name: name.into(),
272			data: ColumnData::float8(data),
273		}
274	}
275
276	pub fn float8_with_bitvec(
277		name: impl Into<Fragment>,
278		data: impl IntoIterator<Item = f64>,
279		bitvec: impl Into<crate::BitVec>,
280	) -> Self {
281		Column {
282			name: name.into(),
283			data: ColumnData::float8_with_bitvec(data, bitvec),
284		}
285	}
286
287	pub fn bool(name: impl Into<Fragment>, data: impl IntoIterator<Item = bool>) -> Self {
288		Column {
289			name: name.into(),
290			data: ColumnData::bool(data),
291		}
292	}
293
294	pub fn bool_with_bitvec(
295		name: impl Into<Fragment>,
296		data: impl IntoIterator<Item = bool>,
297		bitvec: impl Into<crate::BitVec>,
298	) -> Self {
299		Column {
300			name: name.into(),
301			data: ColumnData::bool_with_bitvec(data, bitvec),
302		}
303	}
304
305	pub fn utf8(name: impl Into<Fragment>, data: impl IntoIterator<Item = String>) -> Self {
306		Column {
307			name: name.into(),
308			data: ColumnData::utf8(data),
309		}
310	}
311
312	pub fn utf8_with_bitvec(
313		name: impl Into<Fragment>,
314		data: impl IntoIterator<Item = String>,
315		bitvec: impl Into<crate::BitVec>,
316	) -> Self {
317		Column {
318			name: name.into(),
319			data: ColumnData::utf8_with_bitvec(data, bitvec),
320		}
321	}
322
323	pub fn undefined(name: impl Into<Fragment>, row_count: usize) -> Self {
324		Column {
325			name: name.into(),
326			data: ColumnData::undefined(row_count),
327		}
328	}
329
330	pub fn uuid4(name: impl Into<Fragment>, data: impl IntoIterator<Item = reifydb_type::Uuid4>) -> Self {
331		Column {
332			name: name.into(),
333			data: ColumnData::uuid4(data),
334		}
335	}
336
337	pub fn uuid4_with_bitvec(
338		name: impl Into<Fragment>,
339		data: impl IntoIterator<Item = reifydb_type::Uuid4>,
340		bitvec: impl Into<crate::BitVec>,
341	) -> Self {
342		Column {
343			name: name.into(),
344			data: ColumnData::uuid4_with_bitvec(data, bitvec),
345		}
346	}
347
348	pub fn uuid7(name: impl Into<Fragment>, data: impl IntoIterator<Item = reifydb_type::Uuid7>) -> Self {
349		Column {
350			name: name.into(),
351			data: ColumnData::uuid7(data),
352		}
353	}
354
355	pub fn uuid7_with_bitvec(
356		name: impl Into<Fragment>,
357		data: impl IntoIterator<Item = reifydb_type::Uuid7>,
358		bitvec: impl Into<crate::BitVec>,
359	) -> Self {
360		Column {
361			name: name.into(),
362			data: ColumnData::uuid7_with_bitvec(data, bitvec),
363		}
364	}
365}