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::RowNumber(row_number) => match self {
318 ColumnData::RowNumber(container) => container.push(row_number),
319 ColumnData::Undefined(container) => {
320 let mut new_container = ColumnData::row_number(vec![]);
321 if let ColumnData::RowNumber(new_container) = &mut new_container {
322 for _ in 0..container.len() {
323 new_container.push_undefined();
324 }
325 new_container.push(row_number);
326 }
327 *self = new_container;
328 }
329 _ => unimplemented!(),
330 },
331 Value::IdentityId(id) => match self {
332 ColumnData::IdentityId(container) => container.push(id),
333 ColumnData::Undefined(container) => {
334 let mut new_container = ColumnData::identity_id(vec![]);
335 if let ColumnData::IdentityId(new_container) = &mut new_container {
336 for _ in 0..container.len() {
337 new_container.push_undefined();
338 }
339 new_container.push(id);
340 }
341 *self = new_container;
342 }
343 _ => unimplemented!(),
344 },
345 Value::Blob(v) => match self {
346 ColumnData::Blob {
347 container,
348 ..
349 } => container.push(v),
350 ColumnData::Undefined(container) => {
351 let mut new_container = ColumnData::blob(vec![]);
352 if let ColumnData::Blob {
353 container: new_container,
354 ..
355 } = &mut new_container
356 {
357 for _ in 0..container.len() {
358 new_container.push_undefined();
359 }
360 new_container.push(v);
361 }
362 *self = new_container;
363 }
364 _ => unimplemented!(),
365 },
366
367 Value::Int(v) => match self {
368 ColumnData::Int {
369 container,
370 ..
371 } => container.push(v),
372 ColumnData::Undefined(container) => {
373 let mut new_container = ColumnData::int(vec![]);
374 if let ColumnData::Int {
375 container: new_container,
376 ..
377 } = &mut new_container
378 {
379 for _ in 0..container.len() {
380 new_container.push_undefined();
381 }
382 new_container.push(v);
383 }
384 *self = new_container;
385 }
386 _ => unimplemented!(),
387 },
388 Value::Uint(v) => match self {
389 ColumnData::Uint {
390 container,
391 ..
392 } => container.push(v),
393 ColumnData::Undefined(container) => {
394 let mut new_container = ColumnData::uint(vec![]);
395 if let ColumnData::Uint {
396 container: new_container,
397 ..
398 } = &mut new_container
399 {
400 for _ in 0..container.len() {
401 new_container.push_undefined();
402 }
403 new_container.push(v);
404 }
405 *self = new_container;
406 }
407 _ => unimplemented!(),
408 },
409
410 Value::Decimal(v) => match self {
411 ColumnData::Decimal {
412 container,
413 ..
414 } => container.push(v),
415 ColumnData::Undefined(container) => {
416 let mut new_container = ColumnData::decimal(vec![]);
417 if let ColumnData::Decimal {
418 container: new_container,
419 ..
420 } = &mut new_container
421 {
422 for _ in 0..container.len() {
423 new_container.push_undefined();
424 }
425 new_container.push(v);
426 }
427 *self = new_container;
428 }
429 _ => unimplemented!(),
430 },
431
432 Value::Any(v) => match self {
433 ColumnData::Any(container) => container.push(v),
434 ColumnData::Undefined(container) => {
435 let mut new_container = ColumnData::any(vec![]);
436 if let ColumnData::Any(new_container) = &mut new_container {
437 for _ in 0..container.len() {
438 new_container.push_undefined();
439 }
440 new_container.push(v);
441 }
442 *self = new_container;
443 }
444 _ => unreachable!("Cannot push Any value to non-Any column"),
445 },
446 }
447 }
448}
449
450#[cfg(test)]
451#[allow(clippy::approx_constant)]
452mod tests {
453 use reifydb_type::{
454 Date, DateTime, Duration, IdentityId, OrderedF32, OrderedF64, RowNumber, Time, Uuid4, Uuid7, Value,
455 };
456 use uuid::Uuid;
457
458 use crate::value::column::ColumnData;
459
460 #[test]
461 fn test_bool() {
462 let mut col = ColumnData::bool(vec![true]);
463 col.push_value(Value::Boolean(false));
464 let ColumnData::Bool(container) = col else {
465 panic!("Expected Bool");
466 };
467 assert_eq!(container.data().to_vec(), vec![true, false]);
468 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
469 }
470
471 #[test]
472 fn test_undefined_bool() {
473 let mut col = ColumnData::bool(vec![true]);
474 col.push_value(Value::Undefined);
475 let ColumnData::Bool(container) = col else {
476 panic!("Expected Bool");
477 };
478 assert_eq!(container.data().to_vec(), vec![true, false]);
479 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
480 }
481
482 #[test]
483 fn test_push_value_to_undefined_bool() {
484 let mut col = ColumnData::undefined(2);
485 col.push_value(Value::Boolean(true));
486 let ColumnData::Bool(container) = col else {
487 panic!("Expected Bool");
488 };
489 assert_eq!(container.data().to_vec(), vec![false, false, true]);
490 assert_eq!(container.bitvec().to_vec(), vec![false, false, true]);
491 }
492
493 #[test]
494 fn test_float4() {
495 let mut col = ColumnData::float4(vec![1.0]);
496 col.push_value(Value::Float4(OrderedF32::try_from(2.0).unwrap()));
497 let ColumnData::Float4(container) = col else {
498 panic!("Expected Float4");
499 };
500 assert_eq!(container.data().as_slice(), &[1.0, 2.0]);
501 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
502 }
503
504 #[test]
505 fn test_undefined_float4() {
506 let mut col = ColumnData::float4(vec![1.0]);
507 col.push_value(Value::Undefined);
508 let ColumnData::Float4(container) = col else {
509 panic!("Expected Float4");
510 };
511 assert_eq!(container.data().as_slice(), &[1.0, 0.0]);
512 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
513 }
514
515 #[test]
516 fn test_push_value_to_undefined_float4() {
517 let mut col = ColumnData::undefined(1);
518 col.push_value(Value::Float4(OrderedF32::try_from(3.14).unwrap()));
519 let ColumnData::Float4(container) = col else {
520 panic!("Expected Float4");
521 };
522 assert_eq!(container.data().as_slice(), &[0.0, 3.14]);
523 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
524 }
525
526 #[test]
527 fn test_float8() {
528 let mut col = ColumnData::float8(vec![1.0]);
529 col.push_value(Value::Float8(OrderedF64::try_from(2.0).unwrap()));
530 let ColumnData::Float8(container) = col else {
531 panic!("Expected Float8");
532 };
533 assert_eq!(container.data().as_slice(), &[1.0, 2.0]);
534 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
535 }
536
537 #[test]
538 fn test_undefined_float8() {
539 let mut col = ColumnData::float8(vec![1.0]);
540 col.push_value(Value::Undefined);
541 let ColumnData::Float8(container) = col else {
542 panic!("Expected Float8");
543 };
544 assert_eq!(container.data().as_slice(), &[1.0, 0.0]);
545 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
546 }
547
548 #[test]
549 fn test_push_value_to_undefined_float8() {
550 let mut col = ColumnData::undefined(1);
551 col.push_value(Value::Float8(OrderedF64::try_from(2.718).unwrap()));
552 let ColumnData::Float8(container) = col else {
553 panic!("Expected Float8");
554 };
555 assert_eq!(container.data().as_slice(), &[0.0, 2.718]);
556 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
557 }
558
559 #[test]
560 fn test_int1() {
561 let mut col = ColumnData::int1(vec![1]);
562 col.push_value(Value::Int1(2));
563 let ColumnData::Int1(container) = col else {
564 panic!("Expected Int1");
565 };
566 assert_eq!(container.data().as_slice(), &[1, 2]);
567 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
568 }
569
570 #[test]
571 fn test_undefined_int1() {
572 let mut col = ColumnData::int1(vec![1]);
573 col.push_value(Value::Undefined);
574 let ColumnData::Int1(container) = col else {
575 panic!("Expected Int1");
576 };
577 assert_eq!(container.data().as_slice(), &[1, 0]);
578 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
579 }
580
581 #[test]
582 fn test_push_value_to_undefined_int1() {
583 let mut col = ColumnData::undefined(1);
584 col.push_value(Value::Int1(5));
585 let ColumnData::Int1(container) = col else {
586 panic!("Expected Int1");
587 };
588 assert_eq!(container.data().as_slice(), &[0, 5]);
589 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
590 }
591
592 #[test]
593 fn test_int2() {
594 let mut col = ColumnData::int2(vec![1]);
595 col.push_value(Value::Int2(3));
596 let ColumnData::Int2(container) = col else {
597 panic!("Expected Int2");
598 };
599 assert_eq!(container.data().as_slice(), &[1, 3]);
600 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
601 }
602
603 #[test]
604 fn test_undefined_int2() {
605 let mut col = ColumnData::int2(vec![1]);
606 col.push_value(Value::Undefined);
607 let ColumnData::Int2(container) = col else {
608 panic!("Expected Int2");
609 };
610 assert_eq!(container.data().as_slice(), &[1, 0]);
611 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
612 }
613
614 #[test]
615 fn test_push_value_to_undefined_int2() {
616 let mut col = ColumnData::undefined(1);
617 col.push_value(Value::Int2(10));
618 let ColumnData::Int2(container) = col else {
619 panic!("Expected Int2");
620 };
621 assert_eq!(container.data().as_slice(), &[0, 10]);
622 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
623 }
624
625 #[test]
626 fn test_int4() {
627 let mut col = ColumnData::int4(vec![10]);
628 col.push_value(Value::Int4(20));
629 let ColumnData::Int4(container) = col else {
630 panic!("Expected Int4");
631 };
632 assert_eq!(container.data().as_slice(), &[10, 20]);
633 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
634 }
635
636 #[test]
637 fn test_undefined_int4() {
638 let mut col = ColumnData::int4(vec![10]);
639 col.push_value(Value::Undefined);
640 let ColumnData::Int4(container) = col else {
641 panic!("Expected Int4");
642 };
643 assert_eq!(container.data().as_slice(), &[10, 0]);
644 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
645 }
646
647 #[test]
648 fn test_push_value_to_undefined_int4() {
649 let mut col = ColumnData::undefined(1);
650 col.push_value(Value::Int4(20));
651 let ColumnData::Int4(container) = col else {
652 panic!("Expected Int4");
653 };
654 assert_eq!(container.data().as_slice(), &[0, 20]);
655 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
656 }
657
658 #[test]
659 fn test_int8() {
660 let mut col = ColumnData::int8(vec![100]);
661 col.push_value(Value::Int8(200));
662 let ColumnData::Int8(container) = col else {
663 panic!("Expected Int8");
664 };
665 assert_eq!(container.data().as_slice(), &[100, 200]);
666 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
667 }
668
669 #[test]
670 fn test_undefined_int8() {
671 let mut col = ColumnData::int8(vec![100]);
672 col.push_value(Value::Undefined);
673 let ColumnData::Int8(container) = col else {
674 panic!("Expected Int8");
675 };
676 assert_eq!(container.data().as_slice(), &[100, 0]);
677 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
678 }
679
680 #[test]
681 fn test_push_value_to_undefined_int8() {
682 let mut col = ColumnData::undefined(1);
683 col.push_value(Value::Int8(30));
684 let ColumnData::Int8(container) = col else {
685 panic!("Expected Int8");
686 };
687 assert_eq!(container.data().as_slice(), &[0, 30]);
688 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
689 }
690
691 #[test]
692 fn test_int16() {
693 let mut col = ColumnData::int16(vec![1000]);
694 col.push_value(Value::Int16(2000));
695 let ColumnData::Int16(container) = col else {
696 panic!("Expected Int16");
697 };
698 assert_eq!(container.data().as_slice(), &[1000, 2000]);
699 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
700 }
701
702 #[test]
703 fn test_undefined_int16() {
704 let mut col = ColumnData::int16(vec![1000]);
705 col.push_value(Value::Undefined);
706 let ColumnData::Int16(container) = col else {
707 panic!("Expected Int16");
708 };
709 assert_eq!(container.data().as_slice(), &[1000, 0]);
710 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
711 }
712
713 #[test]
714 fn test_push_value_to_undefined_int16() {
715 let mut col = ColumnData::undefined(1);
716 col.push_value(Value::Int16(40));
717 let ColumnData::Int16(container) = col else {
718 panic!("Expected Int16");
719 };
720 assert_eq!(container.data().as_slice(), &[0, 40]);
721 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
722 }
723
724 #[test]
725 fn test_uint1() {
726 let mut col = ColumnData::uint1(vec![1]);
727 col.push_value(Value::Uint1(2));
728 let ColumnData::Uint1(container) = col else {
729 panic!("Expected Uint1");
730 };
731 assert_eq!(container.data().as_slice(), &[1, 2]);
732 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
733 }
734
735 #[test]
736 fn test_undefined_uint1() {
737 let mut col = ColumnData::uint1(vec![1]);
738 col.push_value(Value::Undefined);
739 let ColumnData::Uint1(container) = col else {
740 panic!("Expected Uint1");
741 };
742 assert_eq!(container.data().as_slice(), &[1, 0]);
743 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
744 }
745
746 #[test]
747 fn test_push_value_to_undefined_uint1() {
748 let mut col = ColumnData::undefined(1);
749 col.push_value(Value::Uint1(1));
750 let ColumnData::Uint1(container) = col else {
751 panic!("Expected Uint1");
752 };
753 assert_eq!(container.data().as_slice(), &[0, 1]);
754 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
755 }
756
757 #[test]
758 fn test_uint2() {
759 let mut col = ColumnData::uint2(vec![10]);
760 col.push_value(Value::Uint2(20));
761 let ColumnData::Uint2(container) = col else {
762 panic!("Expected Uint2");
763 };
764 assert_eq!(container.data().as_slice(), &[10, 20]);
765 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
766 }
767
768 #[test]
769 fn test_undefined_uint2() {
770 let mut col = ColumnData::uint2(vec![10]);
771 col.push_value(Value::Undefined);
772 let ColumnData::Uint2(container) = col else {
773 panic!("Expected Uint2");
774 };
775 assert_eq!(container.data().as_slice(), &[10, 0]);
776 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
777 }
778
779 #[test]
780 fn test_push_value_to_undefined_uint2() {
781 let mut col = ColumnData::undefined(1);
782 col.push_value(Value::Uint2(2));
783 let ColumnData::Uint2(container) = col else {
784 panic!("Expected Uint2");
785 };
786 assert_eq!(container.data().as_slice(), &[0, 2]);
787 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
788 }
789
790 #[test]
791 fn test_uint4() {
792 let mut col = ColumnData::uint4(vec![100]);
793 col.push_value(Value::Uint4(200));
794 let ColumnData::Uint4(container) = col else {
795 panic!("Expected Uint4");
796 };
797 assert_eq!(container.data().as_slice(), &[100, 200]);
798 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
799 }
800
801 #[test]
802 fn test_undefined_uint4() {
803 let mut col = ColumnData::uint4(vec![100]);
804 col.push_value(Value::Undefined);
805 let ColumnData::Uint4(container) = col else {
806 panic!("Expected Uint4");
807 };
808 assert_eq!(container.data().as_slice(), &[100, 0]);
809 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
810 }
811
812 #[test]
813 fn test_push_value_to_undefined_uint4() {
814 let mut col = ColumnData::undefined(1);
815 col.push_value(Value::Uint4(3));
816 let ColumnData::Uint4(container) = col else {
817 panic!("Expected Uint4");
818 };
819 assert_eq!(container.data().as_slice(), &[0, 3]);
820 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
821 }
822
823 #[test]
824 fn test_uint8() {
825 let mut col = ColumnData::uint8(vec![1000]);
826 col.push_value(Value::Uint8(2000));
827 let ColumnData::Uint8(container) = col else {
828 panic!("Expected Uint8");
829 };
830 assert_eq!(container.data().as_slice(), &[1000, 2000]);
831 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
832 }
833
834 #[test]
835 fn test_undefined_uint8() {
836 let mut col = ColumnData::uint8(vec![1000]);
837 col.push_value(Value::Undefined);
838 let ColumnData::Uint8(container) = col else {
839 panic!("Expected Uint8");
840 };
841 assert_eq!(container.data().as_slice(), &[1000, 0]);
842 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
843 }
844
845 #[test]
846 fn test_push_value_to_undefined_uint8() {
847 let mut col = ColumnData::undefined(1);
848 col.push_value(Value::Uint8(4));
849 let ColumnData::Uint8(container) = col else {
850 panic!("Expected Uint8");
851 };
852 assert_eq!(container.data().as_slice(), &[0, 4]);
853 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
854 }
855
856 #[test]
857 fn test_uint16() {
858 let mut col = ColumnData::uint16(vec![10000]);
859 col.push_value(Value::Uint16(20000));
860 let ColumnData::Uint16(container) = col else {
861 panic!("Expected Uint16");
862 };
863 assert_eq!(container.data().as_slice(), &[10000, 20000]);
864 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
865 }
866
867 #[test]
868 fn test_undefined_uint16() {
869 let mut col = ColumnData::uint16(vec![10000]);
870 col.push_value(Value::Undefined);
871 let ColumnData::Uint16(container) = col else {
872 panic!("Expected Uint16");
873 };
874 assert_eq!(container.data().as_slice(), &[10000, 0]);
875 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
876 }
877
878 #[test]
879 fn test_push_value_to_undefined_uint16() {
880 let mut col = ColumnData::undefined(1);
881 col.push_value(Value::Uint16(5));
882 let ColumnData::Uint16(container) = col else {
883 panic!("Expected Uint16");
884 };
885 assert_eq!(container.data().as_slice(), &[0, 5]);
886 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
887 }
888
889 #[test]
890 fn test_utf8() {
891 let mut col = ColumnData::utf8(vec!["hello".to_string()]);
892 col.push_value(Value::Utf8("world".to_string()));
893 let ColumnData::Utf8 {
894 container,
895 ..
896 } = col
897 else {
898 panic!("Expected Utf8");
899 };
900 assert_eq!(container.data().as_slice(), &["hello".to_string(), "world".to_string()]);
901 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
902 }
903
904 #[test]
905 fn test_undefined_utf8() {
906 let mut col = ColumnData::utf8(vec!["hello".to_string()]);
907 col.push_value(Value::Undefined);
908 let ColumnData::Utf8 {
909 container,
910 ..
911 } = col
912 else {
913 panic!("Expected Utf8");
914 };
915 assert_eq!(container.data().as_slice(), &["hello".to_string(), "".to_string()]);
916 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
917 }
918
919 #[test]
920 fn test_push_value_to_undefined_utf8() {
921 let mut col = ColumnData::undefined(1);
922 col.push_value(Value::Utf8("ok".to_string()));
923 let ColumnData::Utf8 {
924 container,
925 ..
926 } = col
927 else {
928 panic!("Expected Utf8");
929 };
930 assert_eq!(container.data().as_slice(), &["".to_string(), "ok".to_string()]);
931 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
932 }
933
934 #[test]
935 fn test_undefined() {
936 let mut col = ColumnData::int2(vec![1]);
937 col.push_value(Value::Undefined);
938 let ColumnData::Int2(container) = col else {
939 panic!("Expected Int2");
940 };
941 assert_eq!(container.data().as_slice(), &[1, 0]);
942 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
943 }
944
945 #[test]
946 fn test_date() {
947 let date1 = Date::from_ymd(2023, 1, 1).unwrap();
948 let date2 = Date::from_ymd(2023, 12, 31).unwrap();
949 let mut col = ColumnData::date(vec![date1]);
950 col.push_value(Value::Date(date2));
951 let ColumnData::Date(container) = col else {
952 panic!("Expected Date");
953 };
954 assert_eq!(container.data().as_slice(), &[date1, date2]);
955 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
956 }
957
958 #[test]
959 fn test_undefined_date() {
960 let date1 = Date::from_ymd(2023, 1, 1).unwrap();
961 let mut col = ColumnData::date(vec![date1]);
962 col.push_value(Value::Undefined);
963 let ColumnData::Date(container) = col else {
964 panic!("Expected Date");
965 };
966 assert_eq!(container.data().as_slice(), &[date1, Date::default()]);
967 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
968 }
969
970 #[test]
971 fn test_push_value_to_undefined_date() {
972 let date = Date::from_ymd(2023, 6, 15).unwrap();
973 let mut col = ColumnData::undefined(1);
974 col.push_value(Value::Date(date));
975 let ColumnData::Date(container) = col else {
976 panic!("Expected Date");
977 };
978 assert_eq!(container.data().as_slice(), &[Date::default(), date]);
979 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
980 }
981
982 #[test]
983 fn test_datetime() {
984 let dt1 = DateTime::from_timestamp(1672531200).unwrap(); let dt2 = DateTime::from_timestamp(1704067200).unwrap(); let mut col = ColumnData::datetime(vec![dt1]);
987 col.push_value(Value::DateTime(dt2));
988 let ColumnData::DateTime(container) = col else {
989 panic!("Expected DateTime");
990 };
991 assert_eq!(container.data().as_slice(), &[dt1, dt2]);
992 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
993 }
994
995 #[test]
996 fn test_undefined_datetime() {
997 use DateTime;
998 let dt1 = DateTime::from_timestamp(1672531200).unwrap();
999 let mut col = ColumnData::datetime(vec![dt1]);
1000 col.push_value(Value::Undefined);
1001 let ColumnData::DateTime(container) = col else {
1002 panic!("Expected DateTime");
1003 };
1004 assert_eq!(container.data().as_slice(), &[dt1, DateTime::default()]);
1005 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
1006 }
1007
1008 #[test]
1009 fn test_push_value_to_undefined_datetime() {
1010 let dt = DateTime::from_timestamp(1672531200).unwrap();
1011 let mut col = ColumnData::undefined(1);
1012 col.push_value(Value::DateTime(dt));
1013 let ColumnData::DateTime(container) = col else {
1014 panic!("Expected DateTime");
1015 };
1016 assert_eq!(container.data().as_slice(), &[DateTime::default(), dt]);
1017 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
1018 }
1019
1020 #[test]
1021 fn test_time() {
1022 let time1 = Time::from_hms(12, 30, 0).unwrap();
1023 let time2 = Time::from_hms(18, 45, 30).unwrap();
1024 let mut col = ColumnData::time(vec![time1]);
1025 col.push_value(Value::Time(time2));
1026 let ColumnData::Time(container) = col else {
1027 panic!("Expected Time");
1028 };
1029 assert_eq!(container.data().as_slice(), &[time1, time2]);
1030 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
1031 }
1032
1033 #[test]
1034 fn test_undefined_time() {
1035 let time1 = Time::from_hms(12, 30, 0).unwrap();
1036 let mut col = ColumnData::time(vec![time1]);
1037 col.push_value(Value::Undefined);
1038 let ColumnData::Time(container) = col else {
1039 panic!("Expected Time");
1040 };
1041 assert_eq!(container.data().as_slice(), &[time1, Time::default()]);
1042 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
1043 }
1044
1045 #[test]
1046 fn test_push_value_to_undefined_time() {
1047 let time = Time::from_hms(15, 20, 10).unwrap();
1048 let mut col = ColumnData::undefined(1);
1049 col.push_value(Value::Time(time));
1050 let ColumnData::Time(container) = col else {
1051 panic!("Expected Time");
1052 };
1053 assert_eq!(container.data().as_slice(), &[Time::default(), time]);
1054 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
1055 }
1056
1057 #[test]
1058 fn test_duration() {
1059 let duration1 = Duration::from_days(30);
1060 let duration2 = Duration::from_hours(24);
1061 let mut col = ColumnData::duration(vec![duration1]);
1062 col.push_value(Value::Duration(duration2));
1063 let ColumnData::Duration(container) = col else {
1064 panic!("Expected Duration");
1065 };
1066 assert_eq!(container.data().as_slice(), &[duration1, duration2]);
1067 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
1068 }
1069
1070 #[test]
1071 fn test_undefined_duration() {
1072 let duration1 = Duration::from_days(30);
1073 let mut col = ColumnData::duration(vec![duration1]);
1074 col.push_value(Value::Undefined);
1075 let ColumnData::Duration(container) = col else {
1076 panic!("Expected Duration");
1077 };
1078 assert_eq!(container.data().as_slice(), &[duration1, Duration::default()]);
1079 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
1080 }
1081
1082 #[test]
1083 fn test_push_value_to_undefined_duration() {
1084 let duration = Duration::from_minutes(90);
1085 let mut col = ColumnData::undefined(1);
1086 col.push_value(Value::Duration(duration));
1087 let ColumnData::Duration(container) = col else {
1088 panic!("Expected Duration");
1089 };
1090 assert_eq!(container.data().as_slice(), &[Duration::default(), duration]);
1091 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
1092 }
1093
1094 #[test]
1095 fn test_row_number() {
1096 let row_number1 = RowNumber::new(1);
1097 let row_number2 = RowNumber::new(2);
1098 let mut col = ColumnData::row_number(vec![row_number1]);
1099 col.push_value(Value::RowNumber(row_number2));
1100 let ColumnData::RowNumber(container) = col else {
1101 panic!("Expected RowNumber");
1102 };
1103 assert_eq!(container.data().as_slice(), &[row_number1, row_number2]);
1104 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
1105 }
1106
1107 #[test]
1108 fn test_undefined_row_number() {
1109 let row_number1 = RowNumber::new(1);
1110 let mut col = ColumnData::row_number(vec![row_number1]);
1111 col.push_value(Value::Undefined);
1112 let ColumnData::RowNumber(container) = col else {
1113 panic!("Expected RowNumber");
1114 };
1115 assert_eq!(container.data().as_slice(), &[row_number1, RowNumber::default()]);
1116 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
1117 }
1118
1119 #[test]
1120 fn test_push_value_to_undefined_row_number() {
1121 let row_number = RowNumber::new(42);
1122 let mut col = ColumnData::undefined(1);
1123 col.push_value(Value::RowNumber(row_number));
1124 let ColumnData::RowNumber(container) = col else {
1125 panic!("Expected RowNumber");
1126 };
1127 assert_eq!(container.data().as_slice(), &[RowNumber::default(), row_number]);
1128 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
1129 }
1130
1131 #[test]
1132 fn test_identity_id() {
1133 let id1 = IdentityId::generate();
1134 let id2 = IdentityId::generate();
1135 let mut col = ColumnData::identity_id(vec![id1]);
1136 col.push_value(Value::IdentityId(id2));
1137 let ColumnData::IdentityId(container) = col else {
1138 panic!("Expected IdentityId");
1139 };
1140 assert_eq!(container.data().as_slice(), &[id1, id2]);
1141 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
1142 }
1143
1144 #[test]
1145 fn test_undefined_identity_id() {
1146 let id1 = IdentityId::generate();
1147 let mut col = ColumnData::identity_id(vec![id1]);
1148 col.push_value(Value::Undefined);
1149 let ColumnData::IdentityId(container) = col else {
1150 panic!("Expected IdentityId");
1151 };
1152 assert_eq!(container.data().as_slice(), &[id1, IdentityId::default()]);
1153 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
1154 }
1155
1156 #[test]
1157 fn test_push_value_to_undefined_identity_id() {
1158 let id = IdentityId::generate();
1159 let mut col = ColumnData::undefined(1);
1160 col.push_value(Value::IdentityId(id));
1161 let ColumnData::IdentityId(container) = col else {
1162 panic!("Expected IdentityId");
1163 };
1164 assert_eq!(container.data().as_slice(), &[IdentityId::default(), id]);
1165 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
1166 }
1167
1168 #[test]
1169 fn test_uuid4() {
1170 let uuid1 = Uuid4::generate();
1171 let uuid2 = Uuid4::generate();
1172 let mut col = ColumnData::uuid4(vec![uuid1]);
1173 col.push_value(Value::Uuid4(uuid2));
1174 let ColumnData::Uuid4(container) = col else {
1175 panic!("Expected Uuid4");
1176 };
1177 assert_eq!(container.data().as_slice(), &[uuid1, uuid2]);
1178 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
1179 }
1180
1181 #[test]
1182 fn test_undefined_uuid4() {
1183 let uuid1 = Uuid4::generate();
1184 let mut col = ColumnData::uuid4(vec![uuid1]);
1185 col.push_value(Value::Undefined);
1186 let ColumnData::Uuid4(container) = col else {
1187 panic!("Expected Uuid4");
1188 };
1189 assert_eq!(container.data().as_slice(), &[uuid1, Uuid4::from(Uuid::nil())]);
1190 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
1191 }
1192
1193 #[test]
1194 fn test_push_value_to_undefined_uuid4() {
1195 let uuid = Uuid4::generate();
1196 let mut col = ColumnData::undefined(1);
1197 col.push_value(Value::Uuid4(uuid));
1198 let ColumnData::Uuid4(container) = col else {
1199 panic!("Expected Uuid4");
1200 };
1201 assert_eq!(container.data().as_slice(), &[Uuid4::from(Uuid::nil()), uuid]);
1202 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
1203 }
1204
1205 #[test]
1206 fn test_uuid7() {
1207 let uuid1 = Uuid7::generate();
1208 let uuid2 = Uuid7::generate();
1209 let mut col = ColumnData::uuid7(vec![uuid1]);
1210 col.push_value(Value::Uuid7(uuid2));
1211 let ColumnData::Uuid7(container) = col else {
1212 panic!("Expected Uuid7");
1213 };
1214 assert_eq!(container.data().as_slice(), &[uuid1, uuid2]);
1215 assert_eq!(container.bitvec().to_vec(), vec![true, true]);
1216 }
1217
1218 #[test]
1219 fn test_undefined_uuid7() {
1220 let uuid1 = Uuid7::generate();
1221 let mut col = ColumnData::uuid7(vec![uuid1]);
1222 col.push_value(Value::Undefined);
1223 let ColumnData::Uuid7(container) = col else {
1224 panic!("Expected Uuid7");
1225 };
1226 assert_eq!(container.data().as_slice(), &[uuid1, Uuid7::from(Uuid::nil())]);
1227 assert_eq!(container.bitvec().to_vec(), vec![true, false]);
1228 }
1229
1230 #[test]
1231 fn test_push_value_to_undefined_uuid7() {
1232 let uuid = Uuid7::generate();
1233 let mut col = ColumnData::undefined(1);
1234 col.push_value(Value::Uuid7(uuid));
1235 let ColumnData::Uuid7(container) = col else {
1236 panic!("Expected Uuid7");
1237 };
1238 assert_eq!(container.data().as_slice(), &[Uuid7::from(Uuid::nil()), uuid]);
1239 assert_eq!(container.bitvec().to_vec(), vec![false, true]);
1240 }
1241}