Commit | Line | Data |
d70ca130 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use SQL::Abstract::AST::Compat; |
5 | |
2e828b0b |
6 | use Test::More tests => 11; |
d70ca130 |
7 | use Test::Differences; |
8 | |
9 | ok(my $visitor = SQL::Abstract::AST::Compat->new); |
10 | |
c6039348 |
11 | my $foo_id = { -type => 'name', args => [qw/foo/] }; |
12 | my $bar_id = { -type => 'name', args => [qw/bar/] }; |
13 | |
d70ca130 |
14 | my $foo_eq_1 = { |
15 | -type => 'expr', |
16 | op => '==', |
17 | args => [ |
c6039348 |
18 | $foo_id, |
d70ca130 |
19 | { -type => 'value', value => 1 } |
20 | ] |
21 | }; |
22 | |
23 | eq_or_diff |
24 | $visitor->generate({ foo => 1 }), |
25 | $foo_eq_1, |
26 | "Single value hash"; |
27 | |
28 | |
29 | my $bar_eq_str = { |
30 | -type => 'expr', |
31 | op => '==', |
32 | args => [ |
c6039348 |
33 | $bar_id, |
d70ca130 |
34 | { -type => 'value', value => 'some str' } |
35 | ] |
36 | }; |
37 | |
38 | eq_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 | |
49 | eq_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 | |
61 | eq_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 | |
73 | eq_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 | |
90 | eq_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 | |
101 | eq_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 |
118 | eq_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 | |
130 | eq_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 | |
142 | eq_or_diff |
143 | $visitor->generate({ foo => { -in => [ ] } }), |
144 | { -type => 'expr', |
145 | op => 'in', |
146 | args => [ |
147 | $foo_id, |
148 | ] |
149 | }, |
150 | "foo => { -in => [ ] }"; |
151 | |