1use std::fmt;
5
6use reifydb_value::{
7 fragment::Fragment,
8 util::bitvec::BitVec,
9 value::{
10 dictionary::DictionaryEntryId,
11 uuid::{Uuid4, Uuid7},
12 value_type::ValueType,
13 },
14};
15
16use crate::value::column::{buffer::ColumnBuffer, data::Column};
17
18pub mod buffer;
19pub mod cast;
20pub mod columns;
21pub mod data;
22pub mod encoding;
23pub mod frame;
24pub mod headers;
25pub mod mask;
26pub mod nones;
27pub mod push;
28pub mod row;
29pub mod row_ref;
30pub mod stats;
31pub mod transform;
32pub mod view;
33
34pub struct ColumnWithName {
35 pub name: Fragment,
36 pub data: ColumnBuffer,
37}
38
39impl Clone for ColumnWithName {
40 fn clone(&self) -> Self {
41 Self {
42 name: self.name.clone(),
43 data: self.data.clone(),
44 }
45 }
46}
47
48impl PartialEq for ColumnWithName {
49 fn eq(&self, other: &Self) -> bool {
50 self.name == other.name && self.data == other.data
51 }
52}
53
54impl fmt::Debug for ColumnWithName {
55 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
56 f.debug_struct("ColumnWithName").field("name", &self.name).field("data", &self.data).finish()
57 }
58}
59
60impl ColumnWithName {
61 pub fn new(name: impl Into<Fragment>, data: ColumnBuffer) -> Self {
62 Self {
63 name: name.into(),
64 data,
65 }
66 }
67
68 pub fn from_column(name: impl Into<Fragment>, column: Column) -> Self {
69 let buffer = column
70 .to_canonical()
71 .map(|c| c.to_buffer())
72 .unwrap_or_else(|_| panic!("ColumnWithName::from_column: to_canonical failed"));
73 Self {
74 name: name.into(),
75 data: buffer,
76 }
77 }
78
79 pub fn get_type(&self) -> ValueType {
80 self.data.get_type()
81 }
82
83 pub fn with_new_data(&self, data: ColumnBuffer) -> ColumnWithName {
84 ColumnWithName {
85 name: self.name.clone(),
86 data,
87 }
88 }
89
90 pub fn name(&self) -> &Fragment {
91 &self.name
92 }
93
94 pub fn name_owned(&self) -> Fragment {
95 self.name.clone()
96 }
97
98 pub fn data(&self) -> &ColumnBuffer {
99 &self.data
100 }
101
102 pub fn data_mut(&mut self) -> &mut ColumnBuffer {
103 &mut self.data
104 }
105
106 pub fn column(&self) -> Column {
107 Column::from_column_buffer(self.data.clone())
108 }
109
110 pub fn to_static(&self) -> ColumnWithName {
111 self.clone()
112 }
113}
114
115impl ColumnWithName {
116 pub fn int1(name: impl Into<Fragment>, data: impl IntoIterator<Item = i8>) -> Self {
117 ColumnWithName {
118 name: name.into(),
119 data: ColumnBuffer::int1(data),
120 }
121 }
122
123 pub fn int1_with_bitvec(
124 name: impl Into<Fragment>,
125 data: impl IntoIterator<Item = i8>,
126 bitvec: impl Into<BitVec>,
127 ) -> Self {
128 ColumnWithName {
129 name: name.into(),
130 data: ColumnBuffer::int1_with_bitvec(data, bitvec),
131 }
132 }
133
134 pub fn int2(name: impl Into<Fragment>, data: impl IntoIterator<Item = i16>) -> Self {
135 ColumnWithName {
136 name: name.into(),
137 data: ColumnBuffer::int2(data),
138 }
139 }
140
141 pub fn int2_with_bitvec(
142 name: impl Into<Fragment>,
143 data: impl IntoIterator<Item = i16>,
144 bitvec: impl Into<BitVec>,
145 ) -> Self {
146 ColumnWithName {
147 name: name.into(),
148 data: ColumnBuffer::int2_with_bitvec(data, bitvec),
149 }
150 }
151
152 pub fn int4(name: impl Into<Fragment>, data: impl IntoIterator<Item = i32>) -> Self {
153 ColumnWithName {
154 name: name.into(),
155 data: ColumnBuffer::int4(data),
156 }
157 }
158
159 pub fn int4_with_bitvec(
160 name: impl Into<Fragment>,
161 data: impl IntoIterator<Item = i32>,
162 bitvec: impl Into<BitVec>,
163 ) -> Self {
164 ColumnWithName {
165 name: name.into(),
166 data: ColumnBuffer::int4_with_bitvec(data, bitvec),
167 }
168 }
169
170 pub fn int8(name: impl Into<Fragment>, data: impl IntoIterator<Item = i64>) -> Self {
171 ColumnWithName {
172 name: name.into(),
173 data: ColumnBuffer::int8(data),
174 }
175 }
176
177 pub fn int8_with_bitvec(
178 name: impl Into<Fragment>,
179 data: impl IntoIterator<Item = i64>,
180 bitvec: impl Into<BitVec>,
181 ) -> Self {
182 ColumnWithName {
183 name: name.into(),
184 data: ColumnBuffer::int8_with_bitvec(data, bitvec),
185 }
186 }
187
188 pub fn int16(name: impl Into<Fragment>, data: impl IntoIterator<Item = i128>) -> Self {
189 ColumnWithName {
190 name: name.into(),
191 data: ColumnBuffer::int16(data),
192 }
193 }
194
195 pub fn int16_with_bitvec(
196 name: impl Into<Fragment>,
197 data: impl IntoIterator<Item = i128>,
198 bitvec: impl Into<BitVec>,
199 ) -> Self {
200 ColumnWithName {
201 name: name.into(),
202 data: ColumnBuffer::int16_with_bitvec(data, bitvec),
203 }
204 }
205
206 pub fn uint1(name: impl Into<Fragment>, data: impl IntoIterator<Item = u8>) -> Self {
207 ColumnWithName {
208 name: name.into(),
209 data: ColumnBuffer::uint1(data),
210 }
211 }
212
213 pub fn uint1_with_bitvec(
214 name: impl Into<Fragment>,
215 data: impl IntoIterator<Item = u8>,
216 bitvec: impl Into<BitVec>,
217 ) -> Self {
218 ColumnWithName {
219 name: name.into(),
220 data: ColumnBuffer::uint1_with_bitvec(data, bitvec),
221 }
222 }
223
224 pub fn uint2(name: impl Into<Fragment>, data: impl IntoIterator<Item = u16>) -> Self {
225 ColumnWithName {
226 name: name.into(),
227 data: ColumnBuffer::uint2(data),
228 }
229 }
230
231 pub fn uint2_with_bitvec(
232 name: impl Into<Fragment>,
233 data: impl IntoIterator<Item = u16>,
234 bitvec: impl Into<BitVec>,
235 ) -> Self {
236 ColumnWithName {
237 name: name.into(),
238 data: ColumnBuffer::uint2_with_bitvec(data, bitvec),
239 }
240 }
241
242 pub fn uint4(name: impl Into<Fragment>, data: impl IntoIterator<Item = u32>) -> Self {
243 ColumnWithName {
244 name: name.into(),
245 data: ColumnBuffer::uint4(data),
246 }
247 }
248
249 pub fn uint4_with_bitvec(
250 name: impl Into<Fragment>,
251 data: impl IntoIterator<Item = u32>,
252 bitvec: impl Into<BitVec>,
253 ) -> Self {
254 ColumnWithName {
255 name: name.into(),
256 data: ColumnBuffer::uint4_with_bitvec(data, bitvec),
257 }
258 }
259
260 pub fn uint8(name: impl Into<Fragment>, data: impl IntoIterator<Item = u64>) -> Self {
261 ColumnWithName {
262 name: name.into(),
263 data: ColumnBuffer::uint8(data),
264 }
265 }
266
267 pub fn uint8_with_bitvec(
268 name: impl Into<Fragment>,
269 data: impl IntoIterator<Item = u64>,
270 bitvec: impl Into<BitVec>,
271 ) -> Self {
272 ColumnWithName {
273 name: name.into(),
274 data: ColumnBuffer::uint8_with_bitvec(data, bitvec),
275 }
276 }
277
278 pub fn uint16(name: impl Into<Fragment>, data: impl IntoIterator<Item = u128>) -> Self {
279 ColumnWithName {
280 name: name.into(),
281 data: ColumnBuffer::uint16(data),
282 }
283 }
284
285 pub fn uint16_with_bitvec(
286 name: impl Into<Fragment>,
287 data: impl IntoIterator<Item = u128>,
288 bitvec: impl Into<BitVec>,
289 ) -> Self {
290 ColumnWithName {
291 name: name.into(),
292 data: ColumnBuffer::uint16_with_bitvec(data, bitvec),
293 }
294 }
295
296 pub fn float4(name: impl Into<Fragment>, data: impl IntoIterator<Item = f32>) -> Self {
297 ColumnWithName {
298 name: name.into(),
299 data: ColumnBuffer::float4(data),
300 }
301 }
302
303 pub fn float4_with_bitvec(
304 name: impl Into<Fragment>,
305 data: impl IntoIterator<Item = f32>,
306 bitvec: impl Into<BitVec>,
307 ) -> Self {
308 ColumnWithName {
309 name: name.into(),
310 data: ColumnBuffer::float4_with_bitvec(data, bitvec),
311 }
312 }
313
314 pub fn float8(name: impl Into<Fragment>, data: impl IntoIterator<Item = f64>) -> Self {
315 ColumnWithName {
316 name: name.into(),
317 data: ColumnBuffer::float8(data),
318 }
319 }
320
321 pub fn float8_with_bitvec(
322 name: impl Into<Fragment>,
323 data: impl IntoIterator<Item = f64>,
324 bitvec: impl Into<BitVec>,
325 ) -> Self {
326 ColumnWithName {
327 name: name.into(),
328 data: ColumnBuffer::float8_with_bitvec(data, bitvec),
329 }
330 }
331
332 pub fn bool(name: impl Into<Fragment>, data: impl IntoIterator<Item = bool>) -> Self {
333 ColumnWithName {
334 name: name.into(),
335 data: ColumnBuffer::bool(data),
336 }
337 }
338
339 pub fn bool_with_bitvec(
340 name: impl Into<Fragment>,
341 data: impl IntoIterator<Item = bool>,
342 bitvec: impl Into<BitVec>,
343 ) -> Self {
344 ColumnWithName {
345 name: name.into(),
346 data: ColumnBuffer::bool_with_bitvec(data, bitvec),
347 }
348 }
349
350 pub fn utf8(name: impl Into<Fragment>, data: impl IntoIterator<Item = String>) -> Self {
351 ColumnWithName {
352 name: name.into(),
353 data: ColumnBuffer::utf8(data),
354 }
355 }
356
357 pub fn utf8_with_bitvec(
358 name: impl Into<Fragment>,
359 data: impl IntoIterator<Item = String>,
360 bitvec: impl Into<BitVec>,
361 ) -> Self {
362 ColumnWithName {
363 name: name.into(),
364 data: ColumnBuffer::utf8_with_bitvec(data, bitvec),
365 }
366 }
367
368 pub fn uuid4(name: impl Into<Fragment>, data: impl IntoIterator<Item = Uuid4>) -> Self {
369 ColumnWithName {
370 name: name.into(),
371 data: ColumnBuffer::uuid4(data),
372 }
373 }
374
375 pub fn uuid4_with_bitvec(
376 name: impl Into<Fragment>,
377 data: impl IntoIterator<Item = Uuid4>,
378 bitvec: impl Into<BitVec>,
379 ) -> Self {
380 ColumnWithName {
381 name: name.into(),
382 data: ColumnBuffer::uuid4_with_bitvec(data, bitvec),
383 }
384 }
385
386 pub fn uuid7(name: impl Into<Fragment>, data: impl IntoIterator<Item = Uuid7>) -> Self {
387 ColumnWithName {
388 name: name.into(),
389 data: ColumnBuffer::uuid7(data),
390 }
391 }
392
393 pub fn uuid7_with_bitvec(
394 name: impl Into<Fragment>,
395 data: impl IntoIterator<Item = Uuid7>,
396 bitvec: impl Into<BitVec>,
397 ) -> Self {
398 ColumnWithName {
399 name: name.into(),
400 data: ColumnBuffer::uuid7_with_bitvec(data, bitvec),
401 }
402 }
403
404 pub fn dictionary_id(name: impl Into<Fragment>, data: impl IntoIterator<Item = DictionaryEntryId>) -> Self {
405 ColumnWithName {
406 name: name.into(),
407 data: ColumnBuffer::dictionary_id(data),
408 }
409 }
410
411 pub fn dictionary_id_with_bitvec(
412 name: impl Into<Fragment>,
413 data: impl IntoIterator<Item = DictionaryEntryId>,
414 bitvec: impl Into<BitVec>,
415 ) -> Self {
416 ColumnWithName {
417 name: name.into(),
418 data: ColumnBuffer::dictionary_id_with_bitvec(data, bitvec),
419 }
420 }
421
422 pub fn undefined_typed(name: impl Into<Fragment>, ty: ValueType, row_count: usize) -> Self {
423 ColumnWithName {
424 name: name.into(),
425 data: ColumnBuffer::none_typed(ty, row_count),
426 }
427 }
428}