1use reifydb_type::Value;
2
3use crate::value::column::data::ColumnData;
6
7impl ColumnData {
8 pub fn push_value(&mut self, value: Value) {
9 match value {
10 Value::Boolean(v) => match self {
11 ColumnData::Bool(_) => self.push(v),
12 ColumnData::Undefined(container) => {
13 let mut new_container = ColumnData::bool(vec![]);
14 if let ColumnData::Bool(new_container) = &mut new_container {
15 for _ in 0..container.len() {
16 new_container.push_undefined();
17 }
18 new_container.push(v);
19 }
20 *self = new_container;
21 }
22 _ => unimplemented!(),
23 },
24
25 Value::Float4(v) => match self {
26 ColumnData::Float4(_) => self.push(v.value()),
27 ColumnData::Undefined(container) => {
28 let mut new_container = ColumnData::float4(vec![]);
29 if let ColumnData::Float4(new_container) = &mut new_container {
30 for _ in 0..container.len() {
31 new_container.push_undefined();
32 }
33 new_container.push(v.value());
34 }
35 *self = new_container;
36 }
37 _ => unimplemented!(),
38 },
39
40 Value::Float8(v) => match self {
41 ColumnData::Float8(_) => self.push(v.value()),
42 ColumnData::Undefined(container) => {
43 let mut new_container = ColumnData::float8(vec![]);
44 if let ColumnData::Float8(new_container) = &mut new_container {
45 for _ in 0..container.len() {
46 new_container.push_undefined();
47 }
48 new_container.push(v.value());
49 }
50 *self = new_container;
51 }
52 _ => unimplemented!(),
53 },
54
55 Value::Int1(v) => match self {
56 ColumnData::Int1(_) => self.push(v),
57 ColumnData::Undefined(container) => {
58 let mut new_container = ColumnData::int1(vec![]);
59 if let ColumnData::Int1(new_container) = &mut new_container {
60 for _ in 0..container.len() {
61 new_container.push_undefined();
62 }
63 new_container.push(v);
64 }
65 *self = new_container;
66 }
67 _ => unimplemented!(),
68 },
69
70 Value::Int2(v) => match self {
71 ColumnData::Int2(_) => self.push(v),
72 ColumnData::Undefined(container) => {
73 let mut new_container = ColumnData::int2(vec![]);
74 if let ColumnData::Int2(new_container) = &mut new_container {
75 for _ in 0..container.len() {
76 new_container.push_undefined();
77 }
78 new_container.push(v);
79 }
80 *self = new_container;
81 }
82 _ => unimplemented!(),
83 },
84
85 Value::Int4(v) => match self {
86 ColumnData::Int4(_) => self.push(v),
87 ColumnData::Undefined(container) => {
88 let mut new_container = ColumnData::int4(vec![]);
89 if let ColumnData::Int4(new_container) = &mut new_container {
90 for _ in 0..container.len() {
91 new_container.push_undefined();
92 }
93 new_container.push(v);
94 }
95 *self = new_container;
96 }
97 _ => unimplemented!(),
98 },
99
100 Value::Int8(v) => match self {
101 ColumnData::Int8(_) => self.push(v),
102 ColumnData::Undefined(container) => {
103 let mut new_container = ColumnData::int8(vec![]);
104 if let ColumnData::Int8(new_container) = &mut new_container {
105 for _ in 0..container.len() {
106 new_container.push_undefined();
107 }
108 new_container.push(v);
109 }
110 *self = new_container;
111 }
112 _ => unimplemented!(),
113 },
114
115 Value::Int16(v) => match self {
116 ColumnData::Int16(_) => self.push(v),
117 ColumnData::Undefined(container) => {
118 let mut new_container = ColumnData::int16(vec![]);
119 if let ColumnData::Int16(new_container) = &mut new_container {
120 for _ in 0..container.len() {
121 new_container.push_undefined();
122 }
123 new_container.push(v);
124 }
125 *self = new_container;
126 }
127 _ => unimplemented!(),
128 },
129
130 Value::Utf8(v) => match self {
131 ColumnData::Utf8 {
132 ..
133 } => self.push(v),
134 ColumnData::Undefined(container) => {
135 let mut new_container = ColumnData::utf8(Vec::<String>::new());
136 if let ColumnData::Utf8 {
137 container: new_container,
138 ..
139 } = &mut new_container
140 {
141 for _ in 0..container.len() {
142 new_container.push_undefined();
143 }
144 new_container.push(v);
145 }
146 *self = new_container;
147 }
148 _ => unimplemented!(),
149 },
150
151 Value::Uint1(v) => match self {
152 ColumnData::Uint1(_) => self.push(v),
153 ColumnData::Undefined(container) => {
154 let mut new_container = ColumnData::uint1(vec![]);
155 if let ColumnData::Uint1(new_container) = &mut new_container {
156 for _ in 0..container.len() {
157 new_container.push_undefined();
158 }
159 new_container.push(v);
160 }
161 *self = new_container;
162 }
163 _ => unimplemented!(),
164 },
165
166 Value::Uint2(v) => match self {
167 ColumnData::Uint2(_) => self.push(v),
168 ColumnData::Undefined(container) => {
169 let mut new_container = ColumnData::uint2(vec![]);
170 if let ColumnData::Uint2(new_container) = &mut new_container {
171 for _ in 0..container.len() {
172 new_container.push_undefined();
173 }
174 new_container.push(v);
175 }
176 *self = new_container;
177 }
178 _ => unimplemented!(),
179 },
180
181 Value::Uint4(v) => match self {
182 ColumnData::Uint4(_) => self.push(v),
183 ColumnData::Undefined(container) => {
184 let mut new_container = ColumnData::uint4(vec![]);
185 if let ColumnData::Uint4(new_container) = &mut new_container {
186 for _ in 0..container.len() {
187 new_container.push_undefined();
188 }
189 new_container.push(v);
190 }
191 *self = new_container;
192 }
193 _ => unimplemented!(),
194 },
195
196 Value::Uint8(v) => match self {
197 ColumnData::Uint8(_) => self.push(v),
198 ColumnData::Undefined(container) => {
199 let mut new_container = ColumnData::uint8(vec![]);
200 if let ColumnData::Uint8(new_container) = &mut new_container {
201 for _ in 0..container.len() {
202 new_container.push_undefined();
203 }
204 new_container.push(v);
205 }
206 *self = new_container;
207 }
208 _ => unimplemented!(),
209 },
210
211 Value::Uint16(v) => match self {
212 ColumnData::Uint16(_) => self.push(v),
213 ColumnData::Undefined(container) => {
214 let mut new_container = ColumnData::uint16(vec![]);
215 if let ColumnData::Uint16(new_container) = &mut new_container {
216 for _ in 0..container.len() {
217 new_container.push_undefined();
218 }
219 new_container.push(v);
220 }
221 *self = new_container;
222 }
223 _ => unimplemented!(),
224 },
225
226 Value::Date(v) => match self {
227 ColumnData::Date(_) => self.push(v),
228 ColumnData::Undefined(container) => {
229 let mut new_container = ColumnData::date(vec![]);
230 if let ColumnData::Date(new_container) = &mut new_container {
231 for _ in 0..container.len() {
232 new_container.push_undefined();
233 }
234 new_container.push(v);
235 }
236 *self = new_container;
237 }
238 _ => unimplemented!(),
239 },
240
241 Value::DateTime(v) => match self {
242 ColumnData::DateTime(_) => self.push(v),
243 ColumnData::Undefined(container) => {
244 let mut new_container = ColumnData::datetime(vec![]);
245 if let ColumnData::DateTime(new_container) = &mut new_container {
246 for _ in 0..container.len() {
247 new_container.push_undefined();
248 }
249 new_container.push(v);
250 }
251 *self = new_container;
252 }
253 _ => unimplemented!(),
254 },
255
256 Value::Time(v) => match self {
257 ColumnData::Time(_) => self.push(v),
258 ColumnData::Undefined(container) => {
259 let mut new_container = ColumnData::time(vec![]);
260 if let ColumnData::Time(new_container) = &mut new_container {
261 for _ in 0..container.len() {
262 new_container.push_undefined();
263 }
264 new_container.push(v);
265 }
266 *self = new_container;
267 }
268 _ => unimplemented!(),
269 },
270
271 Value::Duration(v) => match self {
272 ColumnData::Duration(_) => self.push(v),
273 ColumnData::Undefined(container) => {
274 let mut new_container = ColumnData::duration(vec![]);
275 if let ColumnData::Duration(new_container) = &mut new_container {
276 for _ in 0..container.len() {
277 new_container.push_undefined();
278 }
279 new_container.push(v);
280 }
281 *self = new_container;
282 }
283 _ => unimplemented!(),
284 },
285
286 Value::Uuid4(v) => match self {
287 ColumnData::Uuid4(_) => self.push(v),
288 ColumnData::Undefined(container) => {
289 let mut new_container = ColumnData::uuid4(vec![]);
290 if let ColumnData::Uuid4(new_container) = &mut new_container {
291 for _ in 0..container.len() {
292 new_container.push_undefined();
293 }
294 new_container.push(v);
295 }
296 *self = new_container;
297 }
298 _ => unimplemented!(),
299 },
300
301 Value::Uuid7(v) => match self {
302 ColumnData::Uuid7(_) => self.push(v),
303 ColumnData::Undefined(container) => {
304 let mut new_container = ColumnData::uuid7(vec![]);
305 if let ColumnData::Uuid7(new_container) = &mut new_container {
306 for _ in 0..container.len() {
307 new_container.push_undefined();
308 }
309 new_container.push(v);
310 }
311 *self = new_container;
312 }
313 _ => unimplemented!(),
314 },
315
316 Value::Undefined => self.push_undefined(),
317 Value::IdentityId(id) => match self {
318 ColumnData::IdentityId(container) => container.push(id),
319 ColumnData::Undefined(container) => {
320 let mut new_container = ColumnData::identity_id(vec![]);
321 if let ColumnData::IdentityId(new_container) = &mut new_container {
322 for _ in 0..container.len() {
323 new_container.push_undefined();
324 }
325 new_container.push(id);
326 }
327 *self = new_container;
328 }
329 _ => unimplemented!(),
330 },
331 Value::Blob(v) => match self {
332 ColumnData::Blob {
333 container,
334 ..
335 } => container.push(v),
336 ColumnData::Undefined(container) => {
337 let mut new_container = ColumnData::blob(vec![]);
338 if let ColumnData::Blob {
339 container: new_container,
340 ..
341 } = &mut new_container
342 {
343 for _ in 0..container.len() {
344 new_container.push_undefined();
345 }
346 new_container.push(v);
347 }
348 *self = new_container;
349 }
350 _ => unimplemented!(),
351 },
352
353 Value::Int(v) => match self {
354 ColumnData::Int {
355 container,
356 ..
357 } => container.push(v),
358 ColumnData::Undefined(container) => {
359 let mut new_container = ColumnData::int(vec![]);
360 if let ColumnData::Int {
361 container: new_container,
362 ..
363 } = &mut new_container
364 {
365 for _ in 0..container.len() {
366 new_container.push_undefined();
367 }
368 new_container.push(v);
369 }
370 *self = new_container;
371 }
372 _ => unimplemented!(),
373 },
374 Value::Uint(v) => match self {
375 ColumnData::Uint {
376 container,
377 ..
378 } => container.push(v),
379 ColumnData::Undefined(container) => {
380 let mut new_container = ColumnData::uint(vec![]);
381 if let ColumnData::Uint {
382 container: new_container,
383 ..
384 } = &mut new_container
385 {
386 for _ in 0..container.len() {
387 new_container.push_undefined();
388 }
389 new_container.push(v);
390 }
391 *self = new_container;
392 }
393 _ => unimplemented!(),
394 },
395
396 Value::Decimal(v) => match self {
397 ColumnData::Decimal {
398 container,
399 ..
400 } => container.push(v),
401 ColumnData::Undefined(container) => {
402 let mut new_container = ColumnData::decimal(vec![]);
403 if let ColumnData::Decimal {
404 container: new_container,
405 ..
406 } = &mut new_container
407 {
408 for _ in 0..container.len() {
409 new_container.push_undefined();
410 }
411 new_container.push(v);
412 }
413 *self = new_container;
414 }
415 _ => unimplemented!(),
416 },
417
418 Value::Any(v) => match self {
419 ColumnData::Any(container) => container.push(v),
420 ColumnData::Undefined(container) => {
421 let mut new_container = ColumnData::any(vec![]);
422 if let ColumnData::Any(new_container) = &mut new_container {
423 for _ in 0..container.len() {
424 new_container.push_undefined();
425 }
426 new_container.push(v);
427 }
428 *self = new_container;
429 }
430 _ => unreachable!("Cannot push Any value to non-Any column"),
431 },
432 }
433 }
434}
435
436#[cfg(test)]
437#[allow(clippy::approx_constant)]
438mod tests {
439 use reifydb_type::{Date, DateTime, Duration, IdentityId, OrderedF32, OrderedF64, Time, Uuid4, Uuid7, Value};
440 use uuid::Uuid;
441
442 use crate::value::column::ColumnData;
443
444 #[test]
445 fn test_bool() {
446 let mut col = ColumnData::bool(vec![true]);
447 col.push_value(Value::Boolean(false));
448 let ColumnData::Bool(container) = col else {
449 panic!("Expected Bool");
450 };
451 assert_eq!(container.data().to_vec(), vec![true, false]);
452 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
453 }
454
455 #[test]
456 fn test_undefined_bool() {
457 let mut col = ColumnData::bool(vec![true]);
458 col.push_value(Value::Undefined);
459 let ColumnData::Bool(container) = col else {
460 panic!("Expected Bool");
461 };
462 assert_eq!(container.data().to_vec(), vec![true, false]);
463 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
464 }
465
466 #[test]
467 fn test_push_value_to_undefined_bool() {
468 let mut col = ColumnData::undefined(2);
469 col.push_value(Value::Boolean(true));
470 let ColumnData::Bool(container) = col else {
471 panic!("Expected Bool");
472 };
473 assert_eq!(container.data().to_vec(), vec![false, false, true]);
474 assert_eq!(container.bitvec().to_vec(), vec![false, false, true]);
475 }
476
477 #[test]
478 fn test_float4() {
479 let mut col = ColumnData::float4(vec![1.0]);
480 col.push_value(Value::Float4(OrderedF32::try_from(2.0).unwrap()));
481 let ColumnData::Float4(container) = col else {
482 panic!("Expected Float4");
483 };
484 assert_eq!(container.data().as_slice(), &[1.0, 2.0]);
485 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
486 }
487
488 #[test]
489 fn test_undefined_float4() {
490 let mut col = ColumnData::float4(vec![1.0]);
491 col.push_value(Value::Undefined);
492 let ColumnData::Float4(container) = col else {
493 panic!("Expected Float4");
494 };
495 assert_eq!(container.data().as_slice(), &[1.0, 0.0]);
496 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
497 }
498
499 #[test]
500 fn test_push_value_to_undefined_float4() {
501 let mut col = ColumnData::undefined(1);
502 col.push_value(Value::Float4(OrderedF32::try_from(3.14).unwrap()));
503 let ColumnData::Float4(container) = col else {
504 panic!("Expected Float4");
505 };
506 assert_eq!(container.data().as_slice(), &[0.0, 3.14]);
507 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
508 }
509
510 #[test]
511 fn test_float8() {
512 let mut col = ColumnData::float8(vec![1.0]);
513 col.push_value(Value::Float8(OrderedF64::try_from(2.0).unwrap()));
514 let ColumnData::Float8(container) = col else {
515 panic!("Expected Float8");
516 };
517 assert_eq!(container.data().as_slice(), &[1.0, 2.0]);
518 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
519 }
520
521 #[test]
522 fn test_undefined_float8() {
523 let mut col = ColumnData::float8(vec![1.0]);
524 col.push_value(Value::Undefined);
525 let ColumnData::Float8(container) = col else {
526 panic!("Expected Float8");
527 };
528 assert_eq!(container.data().as_slice(), &[1.0, 0.0]);
529 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
530 }
531
532 #[test]
533 fn test_push_value_to_undefined_float8() {
534 let mut col = ColumnData::undefined(1);
535 col.push_value(Value::Float8(OrderedF64::try_from(2.718).unwrap()));
536 let ColumnData::Float8(container) = col else {
537 panic!("Expected Float8");
538 };
539 assert_eq!(container.data().as_slice(), &[0.0, 2.718]);
540 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
541 }
542
543 #[test]
544 fn test_int1() {
545 let mut col = ColumnData::int1(vec![1]);
546 col.push_value(Value::Int1(2));
547 let ColumnData::Int1(container) = col else {
548 panic!("Expected Int1");
549 };
550 assert_eq!(container.data().as_slice(), &[1, 2]);
551 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
552 }
553
554 #[test]
555 fn test_undefined_int1() {
556 let mut col = ColumnData::int1(vec![1]);
557 col.push_value(Value::Undefined);
558 let ColumnData::Int1(container) = col else {
559 panic!("Expected Int1");
560 };
561 assert_eq!(container.data().as_slice(), &[1, 0]);
562 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
563 }
564
565 #[test]
566 fn test_push_value_to_undefined_int1() {
567 let mut col = ColumnData::undefined(1);
568 col.push_value(Value::Int1(5));
569 let ColumnData::Int1(container) = col else {
570 panic!("Expected Int1");
571 };
572 assert_eq!(container.data().as_slice(), &[0, 5]);
573 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
574 }
575
576 #[test]
577 fn test_int2() {
578 let mut col = ColumnData::int2(vec![1]);
579 col.push_value(Value::Int2(3));
580 let ColumnData::Int2(container) = col else {
581 panic!("Expected Int2");
582 };
583 assert_eq!(container.data().as_slice(), &[1, 3]);
584 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
585 }
586
587 #[test]
588 fn test_undefined_int2() {
589 let mut col = ColumnData::int2(vec![1]);
590 col.push_value(Value::Undefined);
591 let ColumnData::Int2(container) = col else {
592 panic!("Expected Int2");
593 };
594 assert_eq!(container.data().as_slice(), &[1, 0]);
595 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
596 }
597
598 #[test]
599 fn test_push_value_to_undefined_int2() {
600 let mut col = ColumnData::undefined(1);
601 col.push_value(Value::Int2(10));
602 let ColumnData::Int2(container) = col else {
603 panic!("Expected Int2");
604 };
605 assert_eq!(container.data().as_slice(), &[0, 10]);
606 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
607 }
608
609 #[test]
610 fn test_int4() {
611 let mut col = ColumnData::int4(vec![10]);
612 col.push_value(Value::Int4(20));
613 let ColumnData::Int4(container) = col else {
614 panic!("Expected Int4");
615 };
616 assert_eq!(container.data().as_slice(), &[10, 20]);
617 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
618 }
619
620 #[test]
621 fn test_undefined_int4() {
622 let mut col = ColumnData::int4(vec![10]);
623 col.push_value(Value::Undefined);
624 let ColumnData::Int4(container) = col else {
625 panic!("Expected Int4");
626 };
627 assert_eq!(container.data().as_slice(), &[10, 0]);
628 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
629 }
630
631 #[test]
632 fn test_push_value_to_undefined_int4() {
633 let mut col = ColumnData::undefined(1);
634 col.push_value(Value::Int4(20));
635 let ColumnData::Int4(container) = col else {
636 panic!("Expected Int4");
637 };
638 assert_eq!(container.data().as_slice(), &[0, 20]);
639 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
640 }
641
642 #[test]
643 fn test_int8() {
644 let mut col = ColumnData::int8(vec![100]);
645 col.push_value(Value::Int8(200));
646 let ColumnData::Int8(container) = col else {
647 panic!("Expected Int8");
648 };
649 assert_eq!(container.data().as_slice(), &[100, 200]);
650 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
651 }
652
653 #[test]
654 fn test_undefined_int8() {
655 let mut col = ColumnData::int8(vec![100]);
656 col.push_value(Value::Undefined);
657 let ColumnData::Int8(container) = col else {
658 panic!("Expected Int8");
659 };
660 assert_eq!(container.data().as_slice(), &[100, 0]);
661 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
662 }
663
664 #[test]
665 fn test_push_value_to_undefined_int8() {
666 let mut col = ColumnData::undefined(1);
667 col.push_value(Value::Int8(30));
668 let ColumnData::Int8(container) = col else {
669 panic!("Expected Int8");
670 };
671 assert_eq!(container.data().as_slice(), &[0, 30]);
672 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
673 }
674
675 #[test]
676 fn test_int16() {
677 let mut col = ColumnData::int16(vec![1000]);
678 col.push_value(Value::Int16(2000));
679 let ColumnData::Int16(container) = col else {
680 panic!("Expected Int16");
681 };
682 assert_eq!(container.data().as_slice(), &[1000, 2000]);
683 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
684 }
685
686 #[test]
687 fn test_undefined_int16() {
688 let mut col = ColumnData::int16(vec![1000]);
689 col.push_value(Value::Undefined);
690 let ColumnData::Int16(container) = col else {
691 panic!("Expected Int16");
692 };
693 assert_eq!(container.data().as_slice(), &[1000, 0]);
694 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
695 }
696
697 #[test]
698 fn test_push_value_to_undefined_int16() {
699 let mut col = ColumnData::undefined(1);
700 col.push_value(Value::Int16(40));
701 let ColumnData::Int16(container) = col else {
702 panic!("Expected Int16");
703 };
704 assert_eq!(container.data().as_slice(), &[0, 40]);
705 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
706 }
707
708 #[test]
709 fn test_uint1() {
710 let mut col = ColumnData::uint1(vec![1]);
711 col.push_value(Value::Uint1(2));
712 let ColumnData::Uint1(container) = col else {
713 panic!("Expected Uint1");
714 };
715 assert_eq!(container.data().as_slice(), &[1, 2]);
716 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
717 }
718
719 #[test]
720 fn test_undefined_uint1() {
721 let mut col = ColumnData::uint1(vec![1]);
722 col.push_value(Value::Undefined);
723 let ColumnData::Uint1(container) = col else {
724 panic!("Expected Uint1");
725 };
726 assert_eq!(container.data().as_slice(), &[1, 0]);
727 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
728 }
729
730 #[test]
731 fn test_push_value_to_undefined_uint1() {
732 let mut col = ColumnData::undefined(1);
733 col.push_value(Value::Uint1(1));
734 let ColumnData::Uint1(container) = col else {
735 panic!("Expected Uint1");
736 };
737 assert_eq!(container.data().as_slice(), &[0, 1]);
738 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
739 }
740
741 #[test]
742 fn test_uint2() {
743 let mut col = ColumnData::uint2(vec![10]);
744 col.push_value(Value::Uint2(20));
745 let ColumnData::Uint2(container) = col else {
746 panic!("Expected Uint2");
747 };
748 assert_eq!(container.data().as_slice(), &[10, 20]);
749 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
750 }
751
752 #[test]
753 fn test_undefined_uint2() {
754 let mut col = ColumnData::uint2(vec![10]);
755 col.push_value(Value::Undefined);
756 let ColumnData::Uint2(container) = col else {
757 panic!("Expected Uint2");
758 };
759 assert_eq!(container.data().as_slice(), &[10, 0]);
760 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
761 }
762
763 #[test]
764 fn test_push_value_to_undefined_uint2() {
765 let mut col = ColumnData::undefined(1);
766 col.push_value(Value::Uint2(2));
767 let ColumnData::Uint2(container) = col else {
768 panic!("Expected Uint2");
769 };
770 assert_eq!(container.data().as_slice(), &[0, 2]);
771 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
772 }
773
774 #[test]
775 fn test_uint4() {
776 let mut col = ColumnData::uint4(vec![100]);
777 col.push_value(Value::Uint4(200));
778 let ColumnData::Uint4(container) = col else {
779 panic!("Expected Uint4");
780 };
781 assert_eq!(container.data().as_slice(), &[100, 200]);
782 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
783 }
784
785 #[test]
786 fn test_undefined_uint4() {
787 let mut col = ColumnData::uint4(vec![100]);
788 col.push_value(Value::Undefined);
789 let ColumnData::Uint4(container) = col else {
790 panic!("Expected Uint4");
791 };
792 assert_eq!(container.data().as_slice(), &[100, 0]);
793 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
794 }
795
796 #[test]
797 fn test_push_value_to_undefined_uint4() {
798 let mut col = ColumnData::undefined(1);
799 col.push_value(Value::Uint4(3));
800 let ColumnData::Uint4(container) = col else {
801 panic!("Expected Uint4");
802 };
803 assert_eq!(container.data().as_slice(), &[0, 3]);
804 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
805 }
806
807 #[test]
808 fn test_uint8() {
809 let mut col = ColumnData::uint8(vec![1000]);
810 col.push_value(Value::Uint8(2000));
811 let ColumnData::Uint8(container) = col else {
812 panic!("Expected Uint8");
813 };
814 assert_eq!(container.data().as_slice(), &[1000, 2000]);
815 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
816 }
817
818 #[test]
819 fn test_undefined_uint8() {
820 let mut col = ColumnData::uint8(vec![1000]);
821 col.push_value(Value::Undefined);
822 let ColumnData::Uint8(container) = col else {
823 panic!("Expected Uint8");
824 };
825 assert_eq!(container.data().as_slice(), &[1000, 0]);
826 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
827 }
828
829 #[test]
830 fn test_push_value_to_undefined_uint8() {
831 let mut col = ColumnData::undefined(1);
832 col.push_value(Value::Uint8(4));
833 let ColumnData::Uint8(container) = col else {
834 panic!("Expected Uint8");
835 };
836 assert_eq!(container.data().as_slice(), &[0, 4]);
837 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
838 }
839
840 #[test]
841 fn test_uint16() {
842 let mut col = ColumnData::uint16(vec![10000]);
843 col.push_value(Value::Uint16(20000));
844 let ColumnData::Uint16(container) = col else {
845 panic!("Expected Uint16");
846 };
847 assert_eq!(container.data().as_slice(), &[10000, 20000]);
848 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
849 }
850
851 #[test]
852 fn test_undefined_uint16() {
853 let mut col = ColumnData::uint16(vec![10000]);
854 col.push_value(Value::Undefined);
855 let ColumnData::Uint16(container) = col else {
856 panic!("Expected Uint16");
857 };
858 assert_eq!(container.data().as_slice(), &[10000, 0]);
859 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
860 }
861
862 #[test]
863 fn test_push_value_to_undefined_uint16() {
864 let mut col = ColumnData::undefined(1);
865 col.push_value(Value::Uint16(5));
866 let ColumnData::Uint16(container) = col else {
867 panic!("Expected Uint16");
868 };
869 assert_eq!(container.data().as_slice(), &[0, 5]);
870 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
871 }
872
873 #[test]
874 fn test_utf8() {
875 let mut col = ColumnData::utf8(vec!["hello".to_string()]);
876 col.push_value(Value::Utf8("world".to_string()));
877 let ColumnData::Utf8 {
878 container,
879 ..
880 } = col
881 else {
882 panic!("Expected Utf8");
883 };
884 assert_eq!(container.data().as_slice(), &["hello".to_string(), "world".to_string()]);
885 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
886 }
887
888 #[test]
889 fn test_undefined_utf8() {
890 let mut col = ColumnData::utf8(vec!["hello".to_string()]);
891 col.push_value(Value::Undefined);
892 let ColumnData::Utf8 {
893 container,
894 ..
895 } = col
896 else {
897 panic!("Expected Utf8");
898 };
899 assert_eq!(container.data().as_slice(), &["hello".to_string(), "".to_string()]);
900 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
901 }
902
903 #[test]
904 fn test_push_value_to_undefined_utf8() {
905 let mut col = ColumnData::undefined(1);
906 col.push_value(Value::Utf8("ok".to_string()));
907 let ColumnData::Utf8 {
908 container,
909 ..
910 } = col
911 else {
912 panic!("Expected Utf8");
913 };
914 assert_eq!(container.data().as_slice(), &["".to_string(), "ok".to_string()]);
915 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
916 }
917
918 #[test]
919 fn test_undefined() {
920 let mut col = ColumnData::int2(vec![1]);
921 col.push_value(Value::Undefined);
922 let ColumnData::Int2(container) = col else {
923 panic!("Expected Int2");
924 };
925 assert_eq!(container.data().as_slice(), &[1, 0]);
926 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
927 }
928
929 #[test]
930 fn test_date() {
931 let date1 = Date::from_ymd(2023, 1, 1).unwrap();
932 let date2 = Date::from_ymd(2023, 12, 31).unwrap();
933 let mut col = ColumnData::date(vec![date1]);
934 col.push_value(Value::Date(date2));
935 let ColumnData::Date(container) = col else {
936 panic!("Expected Date");
937 };
938 assert_eq!(container.data().as_slice(), &[date1, date2]);
939 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
940 }
941
942 #[test]
943 fn test_undefined_date() {
944 let date1 = Date::from_ymd(2023, 1, 1).unwrap();
945 let mut col = ColumnData::date(vec![date1]);
946 col.push_value(Value::Undefined);
947 let ColumnData::Date(container) = col else {
948 panic!("Expected Date");
949 };
950 assert_eq!(container.data().as_slice(), &[date1, Date::default()]);
951 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
952 }
953
954 #[test]
955 fn test_push_value_to_undefined_date() {
956 let date = Date::from_ymd(2023, 6, 15).unwrap();
957 let mut col = ColumnData::undefined(1);
958 col.push_value(Value::Date(date));
959 let ColumnData::Date(container) = col else {
960 panic!("Expected Date");
961 };
962 assert_eq!(container.data().as_slice(), &[Date::default(), date]);
963 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
964 }
965
966 #[test]
967 fn test_datetime() {
968 let dt1 = DateTime::from_timestamp(1672531200).unwrap(); let dt2 = DateTime::from_timestamp(1704067200).unwrap(); let mut col = ColumnData::datetime(vec![dt1]);
971 col.push_value(Value::DateTime(dt2));
972 let ColumnData::DateTime(container) = col else {
973 panic!("Expected DateTime");
974 };
975 assert_eq!(container.data().as_slice(), &[dt1, dt2]);
976 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
977 }
978
979 #[test]
980 fn test_undefined_datetime() {
981 use DateTime;
982 let dt1 = DateTime::from_timestamp(1672531200).unwrap();
983 let mut col = ColumnData::datetime(vec![dt1]);
984 col.push_value(Value::Undefined);
985 let ColumnData::DateTime(container) = col else {
986 panic!("Expected DateTime");
987 };
988 assert_eq!(container.data().as_slice(), &[dt1, DateTime::default()]);
989 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
990 }
991
992 #[test]
993 fn test_push_value_to_undefined_datetime() {
994 let dt = DateTime::from_timestamp(1672531200).unwrap();
995 let mut col = ColumnData::undefined(1);
996 col.push_value(Value::DateTime(dt));
997 let ColumnData::DateTime(container) = col else {
998 panic!("Expected DateTime");
999 };
1000 assert_eq!(container.data().as_slice(), &[DateTime::default(), dt]);
1001 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
1002 }
1003
1004 #[test]
1005 fn test_time() {
1006 let time1 = Time::from_hms(12, 30, 0).unwrap();
1007 let time2 = Time::from_hms(18, 45, 30).unwrap();
1008 let mut col = ColumnData::time(vec![time1]);
1009 col.push_value(Value::Time(time2));
1010 let ColumnData::Time(container) = col else {
1011 panic!("Expected Time");
1012 };
1013 assert_eq!(container.data().as_slice(), &[time1, time2]);
1014 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
1015 }
1016
1017 #[test]
1018 fn test_undefined_time() {
1019 let time1 = Time::from_hms(12, 30, 0).unwrap();
1020 let mut col = ColumnData::time(vec![time1]);
1021 col.push_value(Value::Undefined);
1022 let ColumnData::Time(container) = col else {
1023 panic!("Expected Time");
1024 };
1025 assert_eq!(container.data().as_slice(), &[time1, Time::default()]);
1026 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
1027 }
1028
1029 #[test]
1030 fn test_push_value_to_undefined_time() {
1031 let time = Time::from_hms(15, 20, 10).unwrap();
1032 let mut col = ColumnData::undefined(1);
1033 col.push_value(Value::Time(time));
1034 let ColumnData::Time(container) = col else {
1035 panic!("Expected Time");
1036 };
1037 assert_eq!(container.data().as_slice(), &[Time::default(), time]);
1038 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
1039 }
1040
1041 #[test]
1042 fn test_duration() {
1043 let duration1 = Duration::from_days(30);
1044 let duration2 = Duration::from_hours(24);
1045 let mut col = ColumnData::duration(vec![duration1]);
1046 col.push_value(Value::Duration(duration2));
1047 let ColumnData::Duration(container) = col else {
1048 panic!("Expected Duration");
1049 };
1050 assert_eq!(container.data().as_slice(), &[duration1, duration2]);
1051 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
1052 }
1053
1054 #[test]
1055 fn test_undefined_duration() {
1056 let duration1 = Duration::from_days(30);
1057 let mut col = ColumnData::duration(vec![duration1]);
1058 col.push_value(Value::Undefined);
1059 let ColumnData::Duration(container) = col else {
1060 panic!("Expected Duration");
1061 };
1062 assert_eq!(container.data().as_slice(), &[duration1, Duration::default()]);
1063 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
1064 }
1065
1066 #[test]
1067 fn test_push_value_to_undefined_duration() {
1068 let duration = Duration::from_minutes(90);
1069 let mut col = ColumnData::undefined(1);
1070 col.push_value(Value::Duration(duration));
1071 let ColumnData::Duration(container) = col else {
1072 panic!("Expected Duration");
1073 };
1074 assert_eq!(container.data().as_slice(), &[Duration::default(), duration]);
1075 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
1076 }
1077
1078 #[test]
1079 fn test_identity_id() {
1080 let id1 = IdentityId::generate();
1081 let id2 = IdentityId::generate();
1082 let mut col = ColumnData::identity_id(vec![id1]);
1083 col.push_value(Value::IdentityId(id2));
1084 let ColumnData::IdentityId(container) = col else {
1085 panic!("Expected IdentityId");
1086 };
1087 assert_eq!(container.data().as_slice(), &[id1, id2]);
1088 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
1089 }
1090
1091 #[test]
1092 fn test_undefined_identity_id() {
1093 let id1 = IdentityId::generate();
1094 let mut col = ColumnData::identity_id(vec![id1]);
1095 col.push_value(Value::Undefined);
1096 let ColumnData::IdentityId(container) = col else {
1097 panic!("Expected IdentityId");
1098 };
1099 assert_eq!(container.data().as_slice(), &[id1, IdentityId::default()]);
1100 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
1101 }
1102
1103 #[test]
1104 fn test_push_value_to_undefined_identity_id() {
1105 let id = IdentityId::generate();
1106 let mut col = ColumnData::undefined(1);
1107 col.push_value(Value::IdentityId(id));
1108 let ColumnData::IdentityId(container) = col else {
1109 panic!("Expected IdentityId");
1110 };
1111 assert_eq!(container.data().as_slice(), &[IdentityId::default(), id]);
1112 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
1113 }
1114
1115 #[test]
1116 fn test_uuid4() {
1117 let uuid1 = Uuid4::generate();
1118 let uuid2 = Uuid4::generate();
1119 let mut col = ColumnData::uuid4(vec![uuid1]);
1120 col.push_value(Value::Uuid4(uuid2));
1121 let ColumnData::Uuid4(container) = col else {
1122 panic!("Expected Uuid4");
1123 };
1124 assert_eq!(container.data().as_slice(), &[uuid1, uuid2]);
1125 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
1126 }
1127
1128 #[test]
1129 fn test_undefined_uuid4() {
1130 let uuid1 = Uuid4::generate();
1131 let mut col = ColumnData::uuid4(vec![uuid1]);
1132 col.push_value(Value::Undefined);
1133 let ColumnData::Uuid4(container) = col else {
1134 panic!("Expected Uuid4");
1135 };
1136 assert_eq!(container.data().as_slice(), &[uuid1, Uuid4::from(Uuid::nil())]);
1137 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
1138 }
1139
1140 #[test]
1141 fn test_push_value_to_undefined_uuid4() {
1142 let uuid = Uuid4::generate();
1143 let mut col = ColumnData::undefined(1);
1144 col.push_value(Value::Uuid4(uuid));
1145 let ColumnData::Uuid4(container) = col else {
1146 panic!("Expected Uuid4");
1147 };
1148 assert_eq!(container.data().as_slice(), &[Uuid4::from(Uuid::nil()), uuid]);
1149 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
1150 }
1151
1152 #[test]
1153 fn test_uuid7() {
1154 let uuid1 = Uuid7::generate();
1155 let uuid2 = Uuid7::generate();
1156 let mut col = ColumnData::uuid7(vec![uuid1]);
1157 col.push_value(Value::Uuid7(uuid2));
1158 let ColumnData::Uuid7(container) = col else {
1159 panic!("Expected Uuid7");
1160 };
1161 assert_eq!(container.data().as_slice(), &[uuid1, uuid2]);
1162 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
1163 }
1164
1165 #[test]
1166 fn test_undefined_uuid7() {
1167 let uuid1 = Uuid7::generate();
1168 let mut col = ColumnData::uuid7(vec![uuid1]);
1169 col.push_value(Value::Undefined);
1170 let ColumnData::Uuid7(container) = col else {
1171 panic!("Expected Uuid7");
1172 };
1173 assert_eq!(container.data().as_slice(), &[uuid1, Uuid7::from(Uuid::nil())]);
1174 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
1175 }
1176
1177 #[test]
1178 fn test_push_value_to_undefined_uuid7() {
1179 let uuid = Uuid7::generate();
1180 let mut col = ColumnData::undefined(1);
1181 col.push_value(Value::Uuid7(uuid));
1182 let ColumnData::Uuid7(container) = col else {
1183 panic!("Expected Uuid7");
1184 };
1185 assert_eq!(container.data().as_slice(), &[Uuid7::from(Uuid::nil()), uuid]);
1186 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
1187 }
1188}