1use reifydb_type::{Blob, Date, DateTime, Decimal, Duration, IdentityId, Int, Time, Uint, Uuid4, Uuid7};
5
6use crate::{
7 BitVec,
8 value::{
9 column::ColumnData,
10 container::{
11 AnyContainer, BlobContainer, BoolContainer, IdentityIdContainer, NumberContainer,
12 TemporalContainer, UndefinedContainer, Utf8Container, UuidContainer,
13 },
14 },
15};
16
17impl ColumnData {
18 pub fn bool(data: impl IntoIterator<Item = bool>) -> Self {
19 let data = data.into_iter().collect::<Vec<_>>();
20 ColumnData::Bool(BoolContainer::from_vec(data))
21 }
22
23 pub fn bool_optional(data: impl IntoIterator<Item = Option<bool>>) -> Self {
24 let mut values = Vec::new();
25 let mut bitvec = Vec::new();
26
27 for opt in data {
28 match opt {
29 Some(value) => {
30 values.push(value);
31 bitvec.push(true);
32 }
33 None => {
34 values.push(false);
35 bitvec.push(false);
36 }
37 }
38 }
39
40 ColumnData::Bool(BoolContainer::new(values, BitVec::from(bitvec)))
41 }
42
43 pub fn bool_with_capacity(capacity: usize) -> Self {
44 ColumnData::Bool(BoolContainer::with_capacity(capacity))
45 }
46
47 pub fn bool_with_bitvec(data: impl IntoIterator<Item = bool>, bitvec: impl Into<BitVec>) -> Self {
48 let data = data.into_iter().collect::<Vec<_>>();
49 let bitvec = bitvec.into();
50 assert_eq!(bitvec.len(), data.len());
51 ColumnData::Bool(BoolContainer::new(data, bitvec))
52 }
53
54 pub fn float4(data: impl IntoIterator<Item = f32>) -> Self {
55 let data = data.into_iter().collect::<Vec<_>>();
56 ColumnData::Float4(NumberContainer::from_vec(data))
57 }
58
59 pub fn float4_optional(data: impl IntoIterator<Item = Option<f32>>) -> Self {
60 let mut values = Vec::new();
61 let mut bitvec = Vec::new();
62
63 for opt in data {
64 match opt {
65 Some(value) => {
66 values.push(value);
67 bitvec.push(true);
68 }
69 None => {
70 values.push(0.0);
71 bitvec.push(false);
72 }
73 }
74 }
75
76 ColumnData::Float4(NumberContainer::new(values, BitVec::from(bitvec)))
77 }
78
79 pub fn float4_with_capacity(capacity: usize) -> Self {
80 ColumnData::Float4(NumberContainer::with_capacity(capacity))
81 }
82
83 pub fn float4_with_bitvec(data: impl IntoIterator<Item = f32>, bitvec: impl Into<BitVec>) -> Self {
84 let data = data.into_iter().collect::<Vec<_>>();
85 let bitvec = bitvec.into();
86 assert_eq!(bitvec.len(), data.len());
87 ColumnData::Float4(NumberContainer::new(data, bitvec))
88 }
89
90 pub fn float8(data: impl IntoIterator<Item = f64>) -> Self {
91 let data = data.into_iter().collect::<Vec<_>>();
92 ColumnData::Float8(NumberContainer::from_vec(data))
93 }
94
95 pub fn float8_optional(data: impl IntoIterator<Item = Option<f64>>) -> Self {
96 let mut values = Vec::new();
97 let mut bitvec = Vec::new();
98
99 for opt in data {
100 match opt {
101 Some(value) => {
102 values.push(value);
103 bitvec.push(true);
104 }
105 None => {
106 values.push(0.0);
107 bitvec.push(false);
108 }
109 }
110 }
111
112 ColumnData::Float8(NumberContainer::new(values, BitVec::from(bitvec)))
113 }
114
115 pub fn float8_with_capacity(capacity: usize) -> Self {
116 ColumnData::Float8(NumberContainer::with_capacity(capacity))
117 }
118
119 pub fn float8_with_bitvec(data: impl IntoIterator<Item = f64>, bitvec: impl Into<BitVec>) -> Self {
120 let data = data.into_iter().collect::<Vec<_>>();
121 let bitvec = bitvec.into();
122 assert_eq!(bitvec.len(), data.len());
123 ColumnData::Float8(NumberContainer::new(data, bitvec))
124 }
125
126 pub fn int1(data: impl IntoIterator<Item = i8>) -> Self {
127 let data = data.into_iter().collect::<Vec<_>>();
128 ColumnData::Int1(NumberContainer::from_vec(data))
129 }
130
131 pub fn int1_optional(data: impl IntoIterator<Item = Option<i8>>) -> Self {
132 let mut values = Vec::new();
133 let mut bitvec = Vec::new();
134
135 for opt in data {
136 match opt {
137 Some(value) => {
138 values.push(value);
139 bitvec.push(true);
140 }
141 None => {
142 values.push(0);
143 bitvec.push(false);
144 }
145 }
146 }
147
148 ColumnData::Int1(NumberContainer::new(values, BitVec::from(bitvec)))
149 }
150
151 pub fn int1_with_capacity(capacity: usize) -> Self {
152 ColumnData::Int1(NumberContainer::with_capacity(capacity))
153 }
154
155 pub fn int1_with_bitvec(data: impl IntoIterator<Item = i8>, bitvec: impl Into<BitVec>) -> Self {
156 let data = data.into_iter().collect::<Vec<_>>();
157 let bitvec = bitvec.into();
158 assert_eq!(bitvec.len(), data.len());
159 ColumnData::Int1(NumberContainer::new(data, bitvec))
160 }
161
162 pub fn int2(data: impl IntoIterator<Item = i16>) -> Self {
163 let data = data.into_iter().collect::<Vec<_>>();
164 ColumnData::Int2(NumberContainer::from_vec(data))
165 }
166
167 pub fn int2_optional(data: impl IntoIterator<Item = Option<i16>>) -> Self {
168 let mut values = Vec::new();
169 let mut bitvec = Vec::new();
170
171 for opt in data {
172 match opt {
173 Some(value) => {
174 values.push(value);
175 bitvec.push(true);
176 }
177 None => {
178 values.push(0);
179 bitvec.push(false);
180 }
181 }
182 }
183
184 ColumnData::Int2(NumberContainer::new(values, BitVec::from(bitvec)))
185 }
186
187 pub fn int2_with_capacity(capacity: usize) -> Self {
188 ColumnData::Int2(NumberContainer::with_capacity(capacity))
189 }
190
191 pub fn int2_with_bitvec(data: impl IntoIterator<Item = i16>, bitvec: impl Into<BitVec>) -> Self {
192 let data = data.into_iter().collect::<Vec<_>>();
193 let bitvec = bitvec.into();
194 assert_eq!(bitvec.len(), data.len());
195 ColumnData::Int2(NumberContainer::new(data, bitvec))
196 }
197
198 pub fn int4(data: impl IntoIterator<Item = i32>) -> Self {
199 let data = data.into_iter().collect::<Vec<_>>();
200 ColumnData::Int4(NumberContainer::from_vec(data))
201 }
202
203 pub fn int4_optional(data: impl IntoIterator<Item = Option<i32>>) -> Self {
204 let mut values = Vec::new();
205 let mut bitvec = Vec::new();
206
207 for opt in data {
208 match opt {
209 Some(value) => {
210 values.push(value);
211 bitvec.push(true);
212 }
213 None => {
214 values.push(0);
215 bitvec.push(false);
216 }
217 }
218 }
219
220 ColumnData::Int4(NumberContainer::new(values, BitVec::from(bitvec)))
221 }
222
223 pub fn int4_with_capacity(capacity: usize) -> Self {
224 ColumnData::Int4(NumberContainer::with_capacity(capacity))
225 }
226
227 pub fn int4_with_bitvec(data: impl IntoIterator<Item = i32>, bitvec: impl Into<BitVec>) -> Self {
228 let data = data.into_iter().collect::<Vec<_>>();
229 let bitvec = bitvec.into();
230 assert_eq!(bitvec.len(), data.len());
231 ColumnData::Int4(NumberContainer::new(data, bitvec))
232 }
233
234 pub fn int8(data: impl IntoIterator<Item = i64>) -> Self {
235 let data = data.into_iter().collect::<Vec<_>>();
236 ColumnData::Int8(NumberContainer::from_vec(data))
237 }
238
239 pub fn int8_optional(data: impl IntoIterator<Item = Option<i64>>) -> Self {
240 let mut values = Vec::new();
241 let mut bitvec = Vec::new();
242
243 for opt in data {
244 match opt {
245 Some(value) => {
246 values.push(value);
247 bitvec.push(true);
248 }
249 None => {
250 values.push(0);
251 bitvec.push(false);
252 }
253 }
254 }
255
256 ColumnData::Int8(NumberContainer::new(values, BitVec::from(bitvec)))
257 }
258
259 pub fn int8_with_capacity(capacity: usize) -> Self {
260 ColumnData::Int8(NumberContainer::with_capacity(capacity))
261 }
262
263 pub fn int8_with_bitvec(data: impl IntoIterator<Item = i64>, bitvec: impl Into<BitVec>) -> Self {
264 let data = data.into_iter().collect::<Vec<_>>();
265 let bitvec = bitvec.into();
266 assert_eq!(bitvec.len(), data.len());
267 ColumnData::Int8(NumberContainer::new(data, bitvec))
268 }
269
270 pub fn int16(data: impl IntoIterator<Item = i128>) -> Self {
271 let data = data.into_iter().collect::<Vec<_>>();
272 ColumnData::Int16(NumberContainer::from_vec(data))
273 }
274
275 pub fn int16_optional(data: impl IntoIterator<Item = Option<i128>>) -> Self {
276 let mut values = Vec::new();
277 let mut bitvec = Vec::new();
278
279 for opt in data {
280 match opt {
281 Some(value) => {
282 values.push(value);
283 bitvec.push(true);
284 }
285 None => {
286 values.push(0);
287 bitvec.push(false);
288 }
289 }
290 }
291
292 ColumnData::Int16(NumberContainer::new(values, BitVec::from(bitvec)))
293 }
294
295 pub fn int16_with_capacity(capacity: usize) -> Self {
296 ColumnData::Int16(NumberContainer::with_capacity(capacity))
297 }
298
299 pub fn int16_with_bitvec(data: impl IntoIterator<Item = i128>, bitvec: impl Into<BitVec>) -> Self {
300 let data = data.into_iter().collect::<Vec<_>>();
301 let bitvec = bitvec.into();
302 assert_eq!(bitvec.len(), data.len());
303 ColumnData::Int16(NumberContainer::new(data, bitvec))
304 }
305
306 pub fn utf8(data: impl IntoIterator<Item = impl Into<String>>) -> Self {
307 use reifydb_type::value::constraint::bytes::MaxBytes;
308 let data = data.into_iter().map(|c| c.into()).collect::<Vec<_>>();
309 ColumnData::Utf8 {
310 container: Utf8Container::from_vec(data),
311 max_bytes: MaxBytes::MAX,
312 }
313 }
314
315 pub fn utf8_optional(data: impl IntoIterator<Item = Option<String>>) -> Self {
316 use reifydb_type::value::constraint::bytes::MaxBytes;
317 let mut values = Vec::new();
318 let mut bitvec = Vec::new();
319
320 for opt in data {
321 match opt {
322 Some(value) => {
323 values.push(value);
324 bitvec.push(true);
325 }
326 None => {
327 values.push(String::new());
328 bitvec.push(false);
329 }
330 }
331 }
332
333 ColumnData::Utf8 {
334 container: Utf8Container::new(values, BitVec::from(bitvec)),
335 max_bytes: MaxBytes::MAX,
336 }
337 }
338
339 pub fn utf8_with_capacity(capacity: usize) -> Self {
340 use reifydb_type::value::constraint::bytes::MaxBytes;
341 ColumnData::Utf8 {
342 container: Utf8Container::with_capacity(capacity),
343 max_bytes: MaxBytes::MAX,
344 }
345 }
346
347 pub fn utf8_with_bitvec(data: impl IntoIterator<Item = impl Into<String>>, bitvec: impl Into<BitVec>) -> Self {
348 use reifydb_type::value::constraint::bytes::MaxBytes;
349 let data = data.into_iter().map(Into::into).collect::<Vec<_>>();
350 let bitvec = bitvec.into();
351 assert_eq!(bitvec.len(), data.len());
352 ColumnData::Utf8 {
353 container: Utf8Container::new(data, bitvec),
354 max_bytes: MaxBytes::MAX,
355 }
356 }
357
358 pub fn uint1(data: impl IntoIterator<Item = u8>) -> Self {
359 let data = data.into_iter().collect::<Vec<_>>();
360 ColumnData::Uint1(NumberContainer::from_vec(data))
361 }
362
363 pub fn uint1_optional(data: impl IntoIterator<Item = Option<u8>>) -> Self {
364 let mut values = Vec::new();
365 let mut bitvec = Vec::new();
366
367 for opt in data {
368 match opt {
369 Some(value) => {
370 values.push(value);
371 bitvec.push(true);
372 }
373 None => {
374 values.push(0);
375 bitvec.push(false);
376 }
377 }
378 }
379
380 ColumnData::Uint1(NumberContainer::new(values, BitVec::from(bitvec)))
381 }
382
383 pub fn uint1_with_capacity(capacity: usize) -> Self {
384 ColumnData::Uint1(NumberContainer::with_capacity(capacity))
385 }
386
387 pub fn uint1_with_bitvec(data: impl IntoIterator<Item = u8>, bitvec: impl Into<BitVec>) -> Self {
388 let data = data.into_iter().collect::<Vec<_>>();
389 let bitvec = bitvec.into();
390 assert_eq!(bitvec.len(), data.len());
391 ColumnData::Uint1(NumberContainer::new(data, bitvec))
392 }
393
394 pub fn uint2(data: impl IntoIterator<Item = u16>) -> Self {
395 let data = data.into_iter().collect::<Vec<_>>();
396 ColumnData::Uint2(NumberContainer::from_vec(data))
397 }
398
399 pub fn uint2_optional(data: impl IntoIterator<Item = Option<u16>>) -> Self {
400 let mut values = Vec::new();
401 let mut bitvec = Vec::new();
402
403 for opt in data {
404 match opt {
405 Some(value) => {
406 values.push(value);
407 bitvec.push(true);
408 }
409 None => {
410 values.push(0);
411 bitvec.push(false);
412 }
413 }
414 }
415
416 ColumnData::Uint2(NumberContainer::new(values, BitVec::from(bitvec)))
417 }
418
419 pub fn uint2_with_capacity(capacity: usize) -> Self {
420 ColumnData::Uint2(NumberContainer::with_capacity(capacity))
421 }
422
423 pub fn uint2_with_bitvec(data: impl IntoIterator<Item = u16>, bitvec: impl Into<BitVec>) -> Self {
424 let data = data.into_iter().collect::<Vec<_>>();
425 let bitvec = bitvec.into();
426 assert_eq!(bitvec.len(), data.len());
427 ColumnData::Uint2(NumberContainer::new(data, bitvec))
428 }
429
430 pub fn uint4(data: impl IntoIterator<Item = u32>) -> Self {
431 let data = data.into_iter().collect::<Vec<_>>();
432 ColumnData::Uint4(NumberContainer::from_vec(data))
433 }
434
435 pub fn uint4_optional(data: impl IntoIterator<Item = Option<u32>>) -> Self {
436 let mut values = Vec::new();
437 let mut bitvec = Vec::new();
438
439 for opt in data {
440 match opt {
441 Some(value) => {
442 values.push(value);
443 bitvec.push(true);
444 }
445 None => {
446 values.push(0);
447 bitvec.push(false);
448 }
449 }
450 }
451
452 ColumnData::Uint4(NumberContainer::new(values, BitVec::from(bitvec)))
453 }
454
455 pub fn uint4_with_capacity(capacity: usize) -> Self {
456 ColumnData::Uint4(NumberContainer::with_capacity(capacity))
457 }
458
459 pub fn uint4_with_bitvec(data: impl IntoIterator<Item = u32>, bitvec: impl Into<BitVec>) -> Self {
460 let data = data.into_iter().collect::<Vec<_>>();
461 let bitvec = bitvec.into();
462 assert_eq!(bitvec.len(), data.len());
463 ColumnData::Uint4(NumberContainer::new(data, bitvec))
464 }
465
466 pub fn uint8(data: impl IntoIterator<Item = u64>) -> Self {
467 let data = data.into_iter().collect::<Vec<_>>();
468 ColumnData::Uint8(NumberContainer::from_vec(data))
469 }
470
471 pub fn uint8_optional(data: impl IntoIterator<Item = Option<u64>>) -> Self {
472 let mut values = Vec::new();
473 let mut bitvec = Vec::new();
474
475 for opt in data {
476 match opt {
477 Some(value) => {
478 values.push(value);
479 bitvec.push(true);
480 }
481 None => {
482 values.push(0);
483 bitvec.push(false);
484 }
485 }
486 }
487
488 ColumnData::Uint8(NumberContainer::new(values, BitVec::from(bitvec)))
489 }
490
491 pub fn uint8_with_capacity(capacity: usize) -> Self {
492 ColumnData::Uint8(NumberContainer::with_capacity(capacity))
493 }
494
495 pub fn uint8_with_bitvec(data: impl IntoIterator<Item = u64>, bitvec: impl Into<BitVec>) -> Self {
496 let data = data.into_iter().collect::<Vec<_>>();
497 let bitvec = bitvec.into();
498 assert_eq!(bitvec.len(), data.len());
499 ColumnData::Uint8(NumberContainer::new(data, bitvec))
500 }
501
502 pub fn uint16(data: impl IntoIterator<Item = u128>) -> Self {
503 let data = data.into_iter().collect::<Vec<_>>();
504 ColumnData::Uint16(NumberContainer::from_vec(data))
505 }
506
507 pub fn uint16_optional(data: impl IntoIterator<Item = Option<u128>>) -> Self {
508 let mut values = Vec::new();
509 let mut bitvec = Vec::new();
510
511 for opt in data {
512 match opt {
513 Some(value) => {
514 values.push(value);
515 bitvec.push(true);
516 }
517 None => {
518 values.push(0);
519 bitvec.push(false);
520 }
521 }
522 }
523
524 ColumnData::Uint16(NumberContainer::new(values, BitVec::from(bitvec)))
525 }
526
527 pub fn uint16_with_capacity(capacity: usize) -> Self {
528 ColumnData::Uint16(NumberContainer::with_capacity(capacity))
529 }
530
531 pub fn uint16_with_bitvec(data: impl IntoIterator<Item = u128>, bitvec: impl Into<BitVec>) -> Self {
532 let data = data.into_iter().collect::<Vec<_>>();
533 let bitvec = bitvec.into();
534 assert_eq!(bitvec.len(), data.len());
535 ColumnData::Uint16(NumberContainer::new(data, bitvec))
536 }
537
538 pub fn date(data: impl IntoIterator<Item = Date>) -> Self {
539 let data = data.into_iter().collect::<Vec<_>>();
540 ColumnData::Date(TemporalContainer::from_vec(data))
541 }
542
543 pub fn date_optional(data: impl IntoIterator<Item = Option<Date>>) -> Self {
544 let mut values = Vec::new();
545 let mut bitvec = Vec::new();
546
547 for opt in data {
548 match opt {
549 Some(value) => {
550 values.push(value);
551 bitvec.push(true);
552 }
553 None => {
554 values.push(Date::default());
555 bitvec.push(false);
556 }
557 }
558 }
559
560 ColumnData::Date(TemporalContainer::new(values, BitVec::from(bitvec)))
561 }
562
563 pub fn date_with_capacity(capacity: usize) -> Self {
564 ColumnData::Date(TemporalContainer::with_capacity(capacity))
565 }
566
567 pub fn date_with_bitvec(data: impl IntoIterator<Item = Date>, bitvec: impl Into<BitVec>) -> Self {
568 let data = data.into_iter().collect::<Vec<_>>();
569 let bitvec = bitvec.into();
570 assert_eq!(bitvec.len(), data.len());
571 ColumnData::Date(TemporalContainer::new(data, bitvec))
572 }
573
574 pub fn datetime(data: impl IntoIterator<Item = DateTime>) -> Self {
575 let data = data.into_iter().collect::<Vec<_>>();
576 ColumnData::DateTime(TemporalContainer::from_vec(data))
577 }
578
579 pub fn datetime_optional(data: impl IntoIterator<Item = Option<DateTime>>) -> Self {
580 let mut values = Vec::new();
581 let mut bitvec = Vec::new();
582
583 for opt in data {
584 match opt {
585 Some(value) => {
586 values.push(value);
587 bitvec.push(true);
588 }
589 None => {
590 values.push(DateTime::default());
591 bitvec.push(false);
592 }
593 }
594 }
595
596 ColumnData::DateTime(TemporalContainer::new(values, BitVec::from(bitvec)))
597 }
598
599 pub fn datetime_with_capacity(capacity: usize) -> Self {
600 ColumnData::DateTime(TemporalContainer::with_capacity(capacity))
601 }
602
603 pub fn datetime_with_bitvec(data: impl IntoIterator<Item = DateTime>, bitvec: impl Into<BitVec>) -> Self {
604 let data = data.into_iter().collect::<Vec<_>>();
605 let bitvec = bitvec.into();
606 assert_eq!(bitvec.len(), data.len());
607 ColumnData::DateTime(TemporalContainer::new(data, bitvec))
608 }
609
610 pub fn time(data: impl IntoIterator<Item = Time>) -> Self {
611 let data = data.into_iter().collect::<Vec<_>>();
612 ColumnData::Time(TemporalContainer::from_vec(data))
613 }
614
615 pub fn time_optional(data: impl IntoIterator<Item = Option<Time>>) -> Self {
616 let mut values = Vec::new();
617 let mut bitvec = Vec::new();
618
619 for opt in data {
620 match opt {
621 Some(value) => {
622 values.push(value);
623 bitvec.push(true);
624 }
625 None => {
626 values.push(Time::default());
627 bitvec.push(false);
628 }
629 }
630 }
631
632 ColumnData::Time(TemporalContainer::new(values, BitVec::from(bitvec)))
633 }
634
635 pub fn time_with_capacity(capacity: usize) -> Self {
636 ColumnData::Time(TemporalContainer::with_capacity(capacity))
637 }
638
639 pub fn time_with_bitvec(data: impl IntoIterator<Item = Time>, bitvec: impl Into<BitVec>) -> Self {
640 let data = data.into_iter().collect::<Vec<_>>();
641 let bitvec = bitvec.into();
642 assert_eq!(bitvec.len(), data.len());
643 ColumnData::Time(TemporalContainer::new(data, bitvec))
644 }
645
646 pub fn duration(data: impl IntoIterator<Item = Duration>) -> Self {
647 let data = data.into_iter().collect::<Vec<_>>();
648 ColumnData::Duration(TemporalContainer::from_vec(data))
649 }
650
651 pub fn duration_optional(data: impl IntoIterator<Item = Option<Duration>>) -> Self {
652 let mut values = Vec::new();
653 let mut bitvec = Vec::new();
654
655 for opt in data {
656 match opt {
657 Some(value) => {
658 values.push(value);
659 bitvec.push(true);
660 }
661 None => {
662 values.push(Duration::default());
663 bitvec.push(false);
664 }
665 }
666 }
667
668 ColumnData::Duration(TemporalContainer::new(values, BitVec::from(bitvec)))
669 }
670
671 pub fn duration_with_capacity(capacity: usize) -> Self {
672 ColumnData::Duration(TemporalContainer::with_capacity(capacity))
673 }
674
675 pub fn duration_with_bitvec(data: impl IntoIterator<Item = Duration>, bitvec: impl Into<BitVec>) -> Self {
676 let data = data.into_iter().collect::<Vec<_>>();
677 let bitvec = bitvec.into();
678 assert_eq!(bitvec.len(), data.len());
679 ColumnData::Duration(TemporalContainer::new(data, bitvec))
680 }
681
682 pub fn uuid4(data: impl IntoIterator<Item = Uuid4>) -> Self {
683 let data = data.into_iter().collect::<Vec<_>>();
684 ColumnData::Uuid4(UuidContainer::from_vec(data))
685 }
686
687 pub fn uuid4_optional(data: impl IntoIterator<Item = Option<Uuid4>>) -> Self {
688 let mut values = Vec::new();
689 let mut bitvec = Vec::new();
690
691 for opt in data {
692 match opt {
693 Some(value) => {
694 values.push(value);
695 bitvec.push(true);
696 }
697 None => {
698 values.push(Uuid4::default());
699 bitvec.push(false);
700 }
701 }
702 }
703
704 ColumnData::Uuid4(UuidContainer::new(values, BitVec::from(bitvec)))
705 }
706
707 pub fn uuid4_with_capacity(capacity: usize) -> Self {
708 ColumnData::Uuid4(UuidContainer::with_capacity(capacity))
709 }
710
711 pub fn uuid4_with_bitvec(data: impl IntoIterator<Item = Uuid4>, bitvec: impl Into<BitVec>) -> Self {
712 let data = data.into_iter().collect::<Vec<_>>();
713 let bitvec = bitvec.into();
714 assert_eq!(bitvec.len(), data.len());
715 ColumnData::Uuid4(UuidContainer::new(data, bitvec))
716 }
717
718 pub fn uuid7(data: impl IntoIterator<Item = Uuid7>) -> Self {
719 let data = data.into_iter().collect::<Vec<_>>();
720 ColumnData::Uuid7(UuidContainer::from_vec(data))
721 }
722
723 pub fn uuid7_optional(data: impl IntoIterator<Item = Option<Uuid7>>) -> Self {
724 let mut values = Vec::new();
725 let mut bitvec = Vec::new();
726
727 for opt in data {
728 match opt {
729 Some(value) => {
730 values.push(value);
731 bitvec.push(true);
732 }
733 None => {
734 values.push(Uuid7::default());
735 bitvec.push(false);
736 }
737 }
738 }
739
740 ColumnData::Uuid7(UuidContainer::new(values, BitVec::from(bitvec)))
741 }
742
743 pub fn uuid7_with_capacity(capacity: usize) -> Self {
744 ColumnData::Uuid7(UuidContainer::with_capacity(capacity))
745 }
746
747 pub fn uuid7_with_bitvec(data: impl IntoIterator<Item = Uuid7>, bitvec: impl Into<BitVec>) -> Self {
748 let data = data.into_iter().collect::<Vec<_>>();
749 let bitvec = bitvec.into();
750 assert_eq!(bitvec.len(), data.len());
751 ColumnData::Uuid7(UuidContainer::new(data, bitvec))
752 }
753
754 pub fn blob(data: impl IntoIterator<Item = Blob>) -> Self {
755 use reifydb_type::value::constraint::bytes::MaxBytes;
756 let data = data.into_iter().collect::<Vec<_>>();
757 ColumnData::Blob {
758 container: BlobContainer::from_vec(data),
759 max_bytes: MaxBytes::MAX,
760 }
761 }
762
763 pub fn blob_optional(data: impl IntoIterator<Item = Option<Blob>>) -> Self {
764 use reifydb_type::value::constraint::bytes::MaxBytes;
765 let mut values = Vec::new();
766 let mut bitvec = Vec::new();
767
768 for opt in data {
769 match opt {
770 Some(value) => {
771 values.push(value);
772 bitvec.push(true);
773 }
774 None => {
775 values.push(Blob::default());
776 bitvec.push(false);
777 }
778 }
779 }
780
781 ColumnData::Blob {
782 container: BlobContainer::new(values, BitVec::from(bitvec)),
783 max_bytes: MaxBytes::MAX,
784 }
785 }
786
787 pub fn blob_with_capacity(capacity: usize) -> Self {
788 use reifydb_type::value::constraint::bytes::MaxBytes;
789 ColumnData::Blob {
790 container: BlobContainer::with_capacity(capacity),
791 max_bytes: MaxBytes::MAX,
792 }
793 }
794
795 pub fn blob_with_bitvec(data: impl IntoIterator<Item = Blob>, bitvec: impl Into<BitVec>) -> Self {
796 use reifydb_type::value::constraint::bytes::MaxBytes;
797 let data = data.into_iter().collect::<Vec<_>>();
798 let bitvec = bitvec.into();
799 assert_eq!(bitvec.len(), data.len());
800 ColumnData::Blob {
801 container: BlobContainer::new(data, bitvec),
802 max_bytes: MaxBytes::MAX,
803 }
804 }
805
806 pub fn identity_id(identity_ids: impl IntoIterator<Item = IdentityId>) -> Self {
807 let data = identity_ids.into_iter().collect::<Vec<_>>();
808 ColumnData::IdentityId(IdentityIdContainer::from_vec(data))
809 }
810
811 pub fn identity_id_optional(identity_ids: impl IntoIterator<Item = Option<IdentityId>>) -> Self {
812 let mut values = Vec::new();
813 let mut bitvec = Vec::new();
814
815 for opt in identity_ids {
816 match opt {
817 Some(value) => {
818 values.push(value);
819 bitvec.push(true);
820 }
821 None => {
822 values.push(IdentityId::default());
823 bitvec.push(false);
824 }
825 }
826 }
827
828 ColumnData::IdentityId(IdentityIdContainer::new(values, BitVec::from(bitvec)))
829 }
830
831 pub fn identity_id_with_capacity(capacity: usize) -> Self {
832 ColumnData::IdentityId(IdentityIdContainer::with_capacity(capacity))
833 }
834
835 pub fn identity_id_with_bitvec(
836 identity_ids: impl IntoIterator<Item = IdentityId>,
837 bitvec: impl Into<BitVec>,
838 ) -> Self {
839 let data = identity_ids.into_iter().collect::<Vec<_>>();
840 let bitvec = bitvec.into();
841 assert_eq!(bitvec.len(), data.len());
842 ColumnData::IdentityId(IdentityIdContainer::new(data, bitvec))
843 }
844
845 pub fn int(data: impl IntoIterator<Item = Int>) -> Self {
846 use reifydb_type::value::constraint::bytes::MaxBytes;
847 let data = data.into_iter().collect::<Vec<_>>();
848 ColumnData::Int {
849 container: NumberContainer::from_vec(data),
850 max_bytes: MaxBytes::MAX,
851 }
852 }
853
854 pub fn int_optional(data: impl IntoIterator<Item = Option<Int>>) -> Self {
855 use reifydb_type::value::constraint::bytes::MaxBytes;
856 let mut values = Vec::new();
857 let mut bitvec = Vec::new();
858
859 for opt in data {
860 match opt {
861 Some(value) => {
862 values.push(value);
863 bitvec.push(true);
864 }
865 None => {
866 values.push(Int::default());
867 bitvec.push(false);
868 }
869 }
870 }
871
872 ColumnData::Int {
873 container: NumberContainer::new(values, BitVec::from(bitvec)),
874 max_bytes: MaxBytes::MAX,
875 }
876 }
877
878 pub fn uint(data: impl IntoIterator<Item = Uint>) -> Self {
879 use reifydb_type::value::constraint::bytes::MaxBytes;
880 let data = data.into_iter().collect::<Vec<_>>();
881 ColumnData::Uint {
882 container: NumberContainer::from_vec(data),
883 max_bytes: MaxBytes::MAX,
884 }
885 }
886
887 pub fn uint_optional(data: impl IntoIterator<Item = Option<Uint>>) -> Self {
888 use reifydb_type::value::constraint::bytes::MaxBytes;
889 let mut values = Vec::new();
890 let mut bitvec = Vec::new();
891
892 for opt in data {
893 match opt {
894 Some(value) => {
895 values.push(value);
896 bitvec.push(true);
897 }
898 None => {
899 values.push(Uint::default());
900 bitvec.push(false);
901 }
902 }
903 }
904
905 ColumnData::Uint {
906 container: NumberContainer::new(values, BitVec::from(bitvec)),
907 max_bytes: MaxBytes::MAX,
908 }
909 }
910
911 pub fn int_with_capacity(capacity: usize) -> Self {
912 use reifydb_type::value::constraint::bytes::MaxBytes;
913 ColumnData::Int {
914 container: NumberContainer::with_capacity(capacity),
915 max_bytes: MaxBytes::MAX,
916 }
917 }
918
919 pub fn uint_with_capacity(capacity: usize) -> Self {
920 use reifydb_type::value::constraint::bytes::MaxBytes;
921 ColumnData::Uint {
922 container: NumberContainer::with_capacity(capacity),
923 max_bytes: MaxBytes::MAX,
924 }
925 }
926
927 pub fn int_with_bitvec(data: impl IntoIterator<Item = Int>, bitvec: impl Into<BitVec>) -> Self {
928 use reifydb_type::value::constraint::bytes::MaxBytes;
929 let data = data.into_iter().collect::<Vec<_>>();
930 let bitvec = bitvec.into();
931 assert_eq!(bitvec.len(), data.len());
932 ColumnData::Int {
933 container: NumberContainer::new(data, bitvec),
934 max_bytes: MaxBytes::MAX,
935 }
936 }
937
938 pub fn uint_with_bitvec(data: impl IntoIterator<Item = Uint>, bitvec: impl Into<BitVec>) -> Self {
939 use reifydb_type::value::constraint::bytes::MaxBytes;
940 let data = data.into_iter().collect::<Vec<_>>();
941 let bitvec = bitvec.into();
942 assert_eq!(bitvec.len(), data.len());
943 ColumnData::Uint {
944 container: NumberContainer::new(data, bitvec),
945 max_bytes: MaxBytes::MAX,
946 }
947 }
948
949 pub fn decimal(data: impl IntoIterator<Item = Decimal>) -> Self {
950 use reifydb_type::value::constraint::{precision::Precision, scale::Scale};
951 let data = data.into_iter().collect::<Vec<_>>();
952 ColumnData::Decimal {
953 container: NumberContainer::from_vec(data),
954 precision: Precision::MAX,
955 scale: Scale::new(0),
956 }
957 }
958
959 pub fn decimal_optional(data: impl IntoIterator<Item = Option<Decimal>>) -> Self {
960 use reifydb_type::value::constraint::{precision::Precision, scale::Scale};
961 let mut values = Vec::new();
962 let mut bitvec = Vec::new();
963
964 for opt in data {
965 match opt {
966 Some(value) => {
967 values.push(value);
968 bitvec.push(true);
969 }
970 None => {
971 values.push(Decimal::default());
972 bitvec.push(false);
973 }
974 }
975 }
976
977 ColumnData::Decimal {
978 container: NumberContainer::new(values, BitVec::from(bitvec)),
979 precision: Precision::MAX,
980 scale: Scale::new(0),
981 }
982 }
983
984 pub fn decimal_with_capacity(capacity: usize) -> Self {
985 use reifydb_type::value::constraint::{precision::Precision, scale::Scale};
986 ColumnData::Decimal {
987 container: NumberContainer::with_capacity(capacity),
988 precision: Precision::MAX,
989 scale: Scale::new(0),
990 }
991 }
992
993 pub fn decimal_with_bitvec(data: impl IntoIterator<Item = Decimal>, bitvec: impl Into<BitVec>) -> Self {
994 use reifydb_type::value::constraint::{precision::Precision, scale::Scale};
995 let data = data.into_iter().collect::<Vec<_>>();
996 let bitvec = bitvec.into();
997 assert_eq!(bitvec.len(), data.len());
998 ColumnData::Decimal {
999 container: NumberContainer::new(data, bitvec),
1000 precision: Precision::MAX,
1001 scale: Scale::new(0),
1002 }
1003 }
1004
1005 pub fn any(data: impl IntoIterator<Item = Box<reifydb_type::Value>>) -> Self {
1006 let data = data.into_iter().collect::<Vec<_>>();
1007 ColumnData::Any(AnyContainer::from_vec(data))
1008 }
1009
1010 pub fn any_optional(data: impl IntoIterator<Item = Option<Box<reifydb_type::Value>>>) -> Self {
1011 let mut values = Vec::new();
1012 let mut bitvec = Vec::new();
1013
1014 for opt in data {
1015 match opt {
1016 Some(value) => {
1017 values.push(value);
1018 bitvec.push(true);
1019 }
1020 None => {
1021 values.push(Box::new(reifydb_type::Value::Undefined));
1022 bitvec.push(false);
1023 }
1024 }
1025 }
1026
1027 ColumnData::Any(AnyContainer::new(values, BitVec::from(bitvec)))
1028 }
1029
1030 pub fn any_with_capacity(capacity: usize) -> Self {
1031 ColumnData::Any(AnyContainer::with_capacity(capacity))
1032 }
1033
1034 pub fn any_with_bitvec(
1035 data: impl IntoIterator<Item = Box<reifydb_type::Value>>,
1036 bitvec: impl Into<BitVec>,
1037 ) -> Self {
1038 let data = data.into_iter().collect::<Vec<_>>();
1039 let bitvec = bitvec.into();
1040 assert_eq!(bitvec.len(), data.len());
1041 ColumnData::Any(AnyContainer::new(data, bitvec))
1042 }
1043
1044 pub fn undefined(len: usize) -> Self {
1045 ColumnData::Undefined(UndefinedContainer::new(len))
1046 }
1047}