Commit | Line | Data |
0bf8a8c4 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use Test::More tests => 12; |
5 | use Test::Differences; |
6 | |
7 | use_ok('SQL::Abstract') or BAIL_OUT( "$@" ); |
8 | |
9 | my $sqla = SQL::Abstract->create(1); |
10 | |
11 | is $sqla->dispatch( |
1b85673a |
12 | { -type => 'expr', |
13 | op => '>', |
14 | args => [ |
15 | {-type => name => args => [qw/me id/] }, |
16 | { -type => 'value', value => 500 } |
17 | ] |
18 | } |
19 | ), "me.id > ?", |
0bf8a8c4 |
20 | "simple where clause"; |
a464be15 |
21 | |
0bf8a8c4 |
22 | is $sqla->dispatch( |
a464be15 |
23 | { -type => 'expr', op => 'in', args => [ ] } |
0bf8a8c4 |
24 | ), "0 = 1", "emtpy -in"; |
25 | |
26 | is $sqla->dispatch( |
a464be15 |
27 | { -type => 'expr', |
28 | op => 'in', |
29 | args => [ { -type => 'name', args => ['foo'] } ], |
30 | } |
31 | ), "0 = 1", "emtpy -in"; |
0bf8a8c4 |
32 | |
a464be15 |
33 | is $sqla->dispatch( |
34 | { -type => 'expr', |
35 | op => '>', |
36 | args => [ |
37 | {-type => 'name', args => [qw/me id/]}, |
38 | {-type => 'value', value => 500 } |
0bf8a8c4 |
39 | ] |
a464be15 |
40 | } |
41 | ), "me.id > ?", |
42 | "simple expr clause"; |
43 | |
e7996b3a |
44 | my $cols = [ |
45 | { -type => 'expr', |
46 | op => '>', |
47 | args => [ |
48 | {-type => 'name', args => [qw/me id/]}, |
49 | {-type => 'value', value => 500 } |
50 | ] |
51 | }, |
52 | { -type => 'expr', |
53 | op => '==', |
54 | args => [ |
55 | {-type => 'name', args => [qw/me name/]}, |
56 | {-type => 'value', value => '200' } |
57 | ] |
58 | }, |
59 | ]; |
60 | |
a464be15 |
61 | eq_or_diff( [ SQL::Abstract->generate( |
62 | { -ast_version => 1, |
63 | -type => 'expr', |
64 | op => 'and', |
e7996b3a |
65 | args => $cols, |
a464be15 |
66 | } |
0bf8a8c4 |
67 | ) ], |
a464be15 |
68 | [ "me.id > ? AND me.name = ?", |
0bf8a8c4 |
69 | [ 500, |
70 | '200' |
71 | ] |
72 | ], |
73 | "Where with binds" |
74 | ); |
75 | |
76 | |
77 | is $sqla->dispatch( |
e7996b3a |
78 | { -type => 'expr', op => 'or', args => $cols } |
79 | ), "me.id > ? OR me.name = ?", |
0bf8a8c4 |
80 | "where clause (simple or)"; |
81 | |
82 | |
83 | is $sqla->dispatch( |
e7996b3a |
84 | { -type => 'expr', op => 'or', |
85 | args => [ |
86 | { -type => 'expr', op => '==', |
87 | args => [ {-type => 'name', args => [qw/me name/] }, {-type => 'value', value => 500 } ] |
88 | }, |
89 | { -type => 'expr', op => 'or', args => $cols } |
90 | ] |
91 | } |
92 | ), "me.name = ? OR me.id > ? OR me.name = ?", |
0bf8a8c4 |
93 | "where clause (nested or)"; |
94 | |
95 | is $sqla->dispatch( |
e7996b3a |
96 | { -type => 'expr', op => 'or', |
97 | args => [ |
98 | { -type => 'expr', op => '==', |
99 | args => [ {-type => 'name', args => [qw/me name/] }, {-type => 'value', value => 500 } ] |
100 | }, |
101 | { -type => 'expr', op => 'and', args => $cols } |
102 | ] |
103 | } |
104 | ), "me.name = ? OR me.id > ? AND me.name = ?", |
0bf8a8c4 |
105 | "where clause (inner and)"; |
106 | |
e7996b3a |
107 | __END__ |
0bf8a8c4 |
108 | is $sqla->dispatch( |
109 | [ -where => -and => |
110 | [ '==', [-name => qw/me id/], [-value => 500 ] ], |
111 | [ -and => |
112 | [ '>', [-name => qw/me name/], [-value => '200' ] ], |
113 | [ '<', [-name => qw/me name/], [-value => '100' ] ] |
114 | ] |
115 | ] |
116 | ), "WHERE me.id = ? AND me.name > ? AND me.name < ?", |
117 | "where clause (nested and)"; |
118 | |
119 | |
120 | is $sqla->dispatch( |
121 | [ -where => -and => |
122 | [ '==', [-name => qw/me id/], [-value => 500 ] ], |
123 | [ -or => |
124 | [ '>', [-name => qw/me name/], [-value => '200' ] ], |
125 | [ '<', [-name => qw/me name/], [-value => '100' ] ] |
126 | ] |
127 | ] |
128 | ), "WHERE me.id = ? AND (me.name > ? OR me.name < ?)", |
129 | "where clause (inner or)"; |
130 | |
131 | eq_or_diff( |
132 | [SQL::Abstract->generate( |
133 | [ -ast_version => 1, |
134 | -where => |
135 | [ -in => |
136 | [-name => qw/me id/], |
137 | [-value => '100' ], |
138 | [-value => '200' ], |
139 | [-value => '300' ], |
140 | ] |
141 | ] |
142 | ) ], |
143 | |
144 | [ "WHERE me.id IN (?, ?, ?)", |
145 | [ qw/100 200 300/] |
146 | ], |
147 | |
148 | "where IN clause"); |
149 | |
150 | |
151 | eq_or_diff( |
152 | [SQL::Abstract->generate( |
153 | [ -ast_version => 1, |
154 | -where => |
155 | [ -not_in => |
156 | [-name => qw/me id/], |
157 | [-value => '100' ], |
158 | [-value => '200' ], |
159 | [-value => '300' ], |
160 | ] |
161 | ] |
162 | ) ], |
163 | |
164 | [ "WHERE me.id NOT IN (?, ?, ?)", |
165 | [ qw/100 200 300/] |
166 | ], |
167 | |
168 | "where NOT IN clause"); |