-in and -not_in support
[dbsrgits/SQL-Abstract-2.0-ish.git] / t / compat / ast / 01.t
CommitLineData
d70ca130 1use strict;
2use warnings;
3
4use SQL::Abstract::AST::Compat;
5
2e828b0b 6use Test::More tests => 11;
d70ca130 7use Test::Differences;
8
9ok(my $visitor = SQL::Abstract::AST::Compat->new);
10
c6039348 11my $foo_id = { -type => 'name', args => [qw/foo/] };
12my $bar_id = { -type => 'name', args => [qw/bar/] };
13
d70ca130 14my $foo_eq_1 = {
15 -type => 'expr',
16 op => '==',
17 args => [
c6039348 18 $foo_id,
d70ca130 19 { -type => 'value', value => 1 }
20 ]
21};
22
23eq_or_diff
24 $visitor->generate({ foo => 1 }),
25 $foo_eq_1,
26 "Single value hash";
27
28
29my $bar_eq_str = {
30 -type => 'expr',
31 op => '==',
32 args => [
c6039348 33 $bar_id,
d70ca130 34 { -type => 'value', value => 'some str' }
35 ]
36};
37
38eq_or_diff
39 $visitor->generate({ foo => 1, bar => 'some str' }),
40 { -type => 'expr',
41 op => 'and',
42 args => [
43 $bar_eq_str,
44 $foo_eq_1,
45 ]
46 },
47 "two keys in hash";
48
49eq_or_diff
50 $visitor->generate({ -or => { foo => 1, bar => 'some str' } }),
51 { -type => 'expr',
52 op => 'or',
53 args => [
54 $bar_eq_str,
55 $foo_eq_1,
56 ]
57 },
58 "-or key in hash";
59
60
61eq_or_diff
62 $visitor->generate([ -and => { foo => 1, bar => 'some str' } ]),
63 { -type => 'expr',
64 op => 'and',
65 args => [
66 $bar_eq_str,
67 $foo_eq_1,
68 ]
69 },
70 "-and as first element of array";
71
72
73eq_or_diff
74 $visitor->generate([ -and => { foo => 1, bar => 'some str' }, { foo => 1} ]),
75 { -type => 'expr',
76 op => 'or',
77 args => [
78 { -type => 'expr',
79 op => 'and',
80 args => [
81 $bar_eq_str,
82 $foo_eq_1,
83 ]
84 },
85 $foo_eq_1,
86 ]
87 },
c6039348 88 "-and as first element of array + hash";
89
90eq_or_diff
91 $visitor->generate({ foo => { '!=' => 'bar' } }),
92 { -type => 'expr',
93 op => '!=',
94 args => [
95 $foo_id,
96 { -type => 'value', value => 'bar' },
97 ]
98 },
99 "foo => { '!=' => 'bar' }";
100
101eq_or_diff
102 $visitor->generate({ foo => [ 1, 'bar' ] }),
103 { -type => 'expr',
104 op => 'or',
105 args => [
106 $foo_eq_1,
107 { -type => 'expr',
108 op => '==',
109 args => [
110 $foo_id,
111 { -type => 'value', value => 'bar' },
112 ]
113 },
114 ],
115 },
116 "foo => [ 1, 'bar' ]";
117
2e828b0b 118eq_or_diff
119 $visitor->generate({ foo => { -in => [ 1, 'bar' ] } }),
120 { -type => 'expr',
121 op => 'in',
122 args => [
123 $foo_id,
124 { -type => 'value', value => 1 },
125 { -type => 'value', value => 'bar' },
126 ]
127 },
128 "foo => { -in => [ 1, 'bar' ] }";
129
130eq_or_diff
131 $visitor->generate({ foo => { -not_in => [ 1, 'bar' ] } }),
132 { -type => 'expr',
133 op => 'not_in',
134 args => [
135 $foo_id,
136 { -type => 'value', value => 1 },
137 { -type => 'value', value => 'bar' },
138 ]
139 },
140 "foo => { -not_in => [ 1, 'bar' ] }";
141
142eq_or_diff
143 $visitor->generate({ foo => { -in => [ ] } }),
144 { -type => 'expr',
145 op => 'in',
146 args => [
147 $foo_id,
148 ]
149 },
150 "foo => { -in => [ ] }";
151