@@ -52,6 +52,7 @@ pub type Primitive = InfixType
52
52
| u32
53
53
| u64
54
54
| u8
55
+ | []Primitive
55
56
56
57
pub struct Null {}
57
58
@@ -66,6 +67,8 @@ pub enum OperationKind {
66
67
orm_ilike // ILIKE
67
68
is_null // IS NULL
68
69
is_not_null // IS NOT NULL
70
+ in // IN
71
+ not_in // NOT IN
69
72
}
70
73
71
74
pub enum MathOperationKind {
@@ -105,6 +108,8 @@ fn (kind OperationKind) to_str() string {
105
108
.orm_ilike { 'ILIKE' }
106
109
.is_null { 'IS NULL' }
107
110
.is_not_null { 'IS NOT NULL' }
111
+ .in { 'IN' }
112
+ .not_in { 'NOT IN' }
108
113
}
109
114
return str
110
115
}
@@ -402,10 +407,23 @@ fn gen_where_clause(where QueryData, q string, qm string, num bool, mut c &int)
402
407
}
403
408
str + = '${q}${field}${q} ${where.kinds[i].to_str()} '
404
409
if ! where.kinds[i].is_unary () {
405
- str + = ' ${qm} '
406
- if num {
407
- str + = '${c} '
408
- c++
410
+ if where.data.len > i && where.data[i] is []Primitive {
411
+ len := (where.data[i] as []Primitive).len
412
+ mut tmp := []string {len: len}
413
+ for j in 0 .. len {
414
+ tmp[j] = '${qm} '
415
+ if num {
416
+ tmp[j] + = '${c} '
417
+ c++
418
+ }
419
+ }
420
+ str + = ' (${tmp.join(', ')} )'
421
+ } else {
422
+ str + = ' ${qm} '
423
+ if num {
424
+ str + = '${c} '
425
+ c++
426
+ }
409
427
}
410
428
}
411
429
if current_post_par > 0 {
@@ -629,6 +647,10 @@ fn option_bool_to_primitive(b ?bool) Primitive {
629
647
return if b_ := b { Primitive (b_) } else { null_primitive }
630
648
}
631
649
650
+ fn array_bool_to_primitive (b []bool ) Primitive {
651
+ return Primitive (b.map (bool_to_primitive (it )))
652
+ }
653
+
632
654
fn f32_to_primitive (b f32 ) Primitive {
633
655
return Primitive (b)
634
656
}
@@ -637,6 +659,10 @@ fn option_f32_to_primitive(b ?f32) Primitive {
637
659
return if b_ := b { Primitive (b_) } else { null_primitive }
638
660
}
639
661
662
+ fn array_f32_to_primitive (b []f32 ) Primitive {
663
+ return Primitive (b.map (f32_to_primitive (it )))
664
+ }
665
+
640
666
fn f64_to_primitive (b f64 ) Primitive {
641
667
return Primitive (b)
642
668
}
@@ -645,6 +671,10 @@ fn option_f64_to_primitive(b ?f64) Primitive {
645
671
return if b_ := b { Primitive (b_) } else { null_primitive }
646
672
}
647
673
674
+ fn array_f64_to_primitive (b []f64 ) Primitive {
675
+ return Primitive (b.map (f64_to_primitive (it )))
676
+ }
677
+
648
678
fn i8_to_primitive (b i8 ) Primitive {
649
679
return Primitive (b)
650
680
}
@@ -653,6 +683,10 @@ fn option_i8_to_primitive(b ?i8) Primitive {
653
683
return if b_ := b { Primitive (b_) } else { null_primitive }
654
684
}
655
685
686
+ fn array_i8_to_primitive (b []i8 ) Primitive {
687
+ return Primitive (b.map (i8_to_primitive (it )))
688
+ }
689
+
656
690
fn i16_to_primitive (b i16 ) Primitive {
657
691
return Primitive (b)
658
692
}
@@ -661,6 +695,10 @@ fn option_i16_to_primitive(b ?i16) Primitive {
661
695
return if b_ := b { Primitive (b_) } else { null_primitive }
662
696
}
663
697
698
+ fn array_i16_to_primitive (b []i16 ) Primitive {
699
+ return Primitive (b.map (i16_to_primitive (it )))
700
+ }
701
+
664
702
fn int_to_primitive (b int ) Primitive {
665
703
return Primitive (b)
666
704
}
@@ -669,6 +707,10 @@ fn option_int_to_primitive(b ?int) Primitive {
669
707
return if b_ := b { Primitive (b_) } else { null_primitive }
670
708
}
671
709
710
+ fn array_int_to_primitive (b []int ) Primitive {
711
+ return Primitive (b.map (int_to_primitive (it )))
712
+ }
713
+
672
714
// int_literal_to_primitive handles int literal value
673
715
fn int_literal_to_primitive (b int ) Primitive {
674
716
return Primitive (b)
@@ -678,6 +720,10 @@ fn option_int_literal_to_primitive(b ?int) Primitive {
678
720
return if b_ := b { Primitive (b_) } else { null_primitive }
679
721
}
680
722
723
+ fn array_int_literal_to_primitive (b []int ) Primitive {
724
+ return Primitive (b.map (int_literal_to_primitive (it )))
725
+ }
726
+
681
727
// float_literal_to_primitive handles float literal value
682
728
fn float_literal_to_primitive (b f64 ) Primitive {
683
729
return Primitive (b)
@@ -687,6 +733,10 @@ fn option_float_literal_to_primitive(b ?f64) Primitive {
687
733
return if b_ := b { Primitive (b_) } else { null_primitive }
688
734
}
689
735
736
+ fn array_float_literal_to_primitive (b []f64 ) Primitive {
737
+ return Primitive (b.map (float_literal_to_primitive (it )))
738
+ }
739
+
690
740
fn i64_to_primitive (b i64 ) Primitive {
691
741
return Primitive (b)
692
742
}
@@ -695,6 +745,10 @@ fn option_i64_to_primitive(b ?i64) Primitive {
695
745
return if b_ := b { Primitive (b_) } else { null_primitive }
696
746
}
697
747
748
+ fn array_i64_to_primitive (b []i64 ) Primitive {
749
+ return Primitive (b.map (i64_to_primitive (it )))
750
+ }
751
+
698
752
fn u8_to_primitive (b u8 ) Primitive {
699
753
return Primitive (b)
700
754
}
@@ -703,6 +757,10 @@ fn option_u8_to_primitive(b ?u8) Primitive {
703
757
return if b_ := b { Primitive (b_) } else { null_primitive }
704
758
}
705
759
760
+ fn array_u8_to_primitive (b []u8 ) Primitive {
761
+ return Primitive (b.map (u8_to_primitive (it )))
762
+ }
763
+
706
764
fn u16_to_primitive (b u16 ) Primitive {
707
765
return Primitive (b)
708
766
}
@@ -711,6 +769,10 @@ fn option_u16_to_primitive(b ?u16) Primitive {
711
769
return if b_ := b { Primitive (b_) } else { null_primitive }
712
770
}
713
771
772
+ fn array_u16_to_primitive (b []u16 ) Primitive {
773
+ return Primitive (b.map (u16_to_primitive (it )))
774
+ }
775
+
714
776
fn u32_to_primitive (b u32 ) Primitive {
715
777
return Primitive (b)
716
778
}
@@ -719,6 +781,10 @@ fn option_u32_to_primitive(b ?u32) Primitive {
719
781
return if b_ := b { Primitive (b_) } else { null_primitive }
720
782
}
721
783
784
+ fn array_u32_to_primitive (b []u32 ) Primitive {
785
+ return Primitive (b.map (u32_to_primitive (it )))
786
+ }
787
+
722
788
fn u64_to_primitive (b u64 ) Primitive {
723
789
return Primitive (b)
724
790
}
@@ -727,6 +793,10 @@ fn option_u64_to_primitive(b ?u64) Primitive {
727
793
return if b_ := b { Primitive (b_) } else { null_primitive }
728
794
}
729
795
796
+ fn array_u64_to_primitive (b []u64 ) Primitive {
797
+ return Primitive (b.map (u64_to_primitive (it )))
798
+ }
799
+
730
800
fn string_to_primitive (b string ) Primitive {
731
801
return Primitive (b)
732
802
}
@@ -735,6 +805,10 @@ fn option_string_to_primitive(b ?string) Primitive {
735
805
return if b_ := b { Primitive (b_) } else { null_primitive }
736
806
}
737
807
808
+ fn array_string_to_primitive (b []string ) Primitive {
809
+ return Primitive (b.map (string_to_primitive (it )))
810
+ }
811
+
738
812
fn time_to_primitive (b time.Time) Primitive {
739
813
return Primitive (b)
740
814
}
@@ -743,6 +817,10 @@ fn option_time_to_primitive(b ?time.Time) Primitive {
743
817
return if b_ := b { Primitive (b_) } else { null_primitive }
744
818
}
745
819
820
+ fn array_time_to_primitive (b []time.Time) Primitive {
821
+ return Primitive (b.map (time_to_primitive (it )))
822
+ }
823
+
746
824
fn infix_to_primitive (b InfixType) Primitive {
747
825
return Primitive (b)
748
826
}
0 commit comments