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 | |
44 | eq_or_diff( [ SQL::Abstract->generate( |
45 | { -ast_version => 1, |
46 | -type => 'expr', |
47 | op => 'and', |
48 | args => [ |
49 | { -type => 'expr', |
50 | op => '>', |
51 | args => [ |
52 | {-type => 'name', args => [qw/me id/]}, |
53 | {-type => 'value', value => 500 } |
54 | ] |
55 | }, |
56 | { -type => 'expr', |
57 | op => '==', |
58 | args => [ |
59 | {-type => 'name', args => [qw/me name/]}, |
60 | {-type => 'value', value => '200' } |
61 | ] |
62 | }, |
63 | ] |
64 | } |
0bf8a8c4 |
65 | ) ], |
a464be15 |
66 | [ "me.id > ? AND me.name = ?", |
0bf8a8c4 |
67 | [ 500, |
68 | '200' |
69 | ] |
70 | ], |
71 | "Where with binds" |
72 | ); |
a464be15 |
73 | __END__ |
0bf8a8c4 |
74 | |
75 | |
76 | is $sqla->dispatch( |
77 | [ -where => -or => |
78 | [ '>', [-name => qw/me id/], [-value => 500 ] ], |
79 | [ '==', [-name => qw/me name/], [-value => '200' ] ], |
80 | ] |
81 | ), "WHERE me.id > ? OR me.name = ?", |
82 | "where clause (simple or)"; |
83 | |
84 | |
85 | is $sqla->dispatch( |
86 | [ -where => -or => |
87 | [ '>', [-name => qw/me id/], [-value => 500 ] ], |
88 | [ -or => |
89 | [ '==', [-name => qw/me name/], [-value => '200' ] ], |
90 | [ '==', [-name => qw/me name/], [-value => '100' ] ] |
91 | ] |
92 | ] |
93 | ), "WHERE me.id > ? OR me.name = ? OR me.name = ?", |
94 | "where clause (nested or)"; |
95 | |
96 | is $sqla->dispatch( |
97 | [ -where => -or => |
98 | [ '==', [-name => qw/me id/], [-value => 500 ] ], |
99 | [ -and => |
100 | [ '>', [-name => qw/me name/], [-value => '200' ] ], |
101 | [ '<', [-name => qw/me name/], [-value => '100' ] ] |
102 | ] |
103 | ] |
104 | ), "WHERE me.id = ? OR me.name > ? AND me.name < ?", |
105 | "where clause (inner and)"; |
106 | |
107 | is $sqla->dispatch( |
108 | [ -where => -and => |
109 | [ '==', [-name => qw/me id/], [-value => 500 ] ], |
110 | [ -and => |
111 | [ '>', [-name => qw/me name/], [-value => '200' ] ], |
112 | [ '<', [-name => qw/me name/], [-value => '100' ] ] |
113 | ] |
114 | ] |
115 | ), "WHERE me.id = ? AND me.name > ? AND me.name < ?", |
116 | "where clause (nested and)"; |
117 | |
118 | |
119 | is $sqla->dispatch( |
120 | [ -where => -and => |
121 | [ '==', [-name => qw/me id/], [-value => 500 ] ], |
122 | [ -or => |
123 | [ '>', [-name => qw/me name/], [-value => '200' ] ], |
124 | [ '<', [-name => qw/me name/], [-value => '100' ] ] |
125 | ] |
126 | ] |
127 | ), "WHERE me.id = ? AND (me.name > ? OR me.name < ?)", |
128 | "where clause (inner or)"; |
129 | |
130 | eq_or_diff( |
131 | [SQL::Abstract->generate( |
132 | [ -ast_version => 1, |
133 | -where => |
134 | [ -in => |
135 | [-name => qw/me id/], |
136 | [-value => '100' ], |
137 | [-value => '200' ], |
138 | [-value => '300' ], |
139 | ] |
140 | ] |
141 | ) ], |
142 | |
143 | [ "WHERE me.id IN (?, ?, ?)", |
144 | [ qw/100 200 300/] |
145 | ], |
146 | |
147 | "where IN clause"); |
148 | |
149 | |
150 | eq_or_diff( |
151 | [SQL::Abstract->generate( |
152 | [ -ast_version => 1, |
153 | -where => |
154 | [ -not_in => |
155 | [-name => qw/me id/], |
156 | [-value => '100' ], |
157 | [-value => '200' ], |
158 | [-value => '300' ], |
159 | ] |
160 | ] |
161 | ) ], |
162 | |
163 | [ "WHERE me.id NOT IN (?, ?, ?)", |
164 | [ qw/100 200 300/] |
165 | ], |
166 | |
167 | "where NOT IN clause"); |