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