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"; |
1b85673a |
21 | __END__ |
0bf8a8c4 |
22 | is $sqla->dispatch( |
23 | [ -in => [ ] ] |
24 | ), "0 = 1", "emtpy -in"; |
25 | |
26 | is $sqla->dispatch( |
27 | [ -where => |
28 | [ '>', [-name => qw/me id/], [-value => 500 ] ] |
29 | ] |
30 | ), "WHERE me.id > ?", |
31 | "simple where clause"; |
32 | |
33 | eq_or_diff( [ SQL::Abstract->generate( |
34 | [ -ast_version => 1, |
35 | -where => |
36 | [ '>', [-name => qw/me id/], [-value => 500 ] ], |
37 | [ '==', [-name => qw/me name/], [-value => '200' ] ] |
38 | ] |
39 | ) ], |
40 | [ "WHERE me.id > ? AND me.name = ?", |
41 | [ 500, |
42 | '200' |
43 | ] |
44 | ], |
45 | "Where with binds" |
46 | ); |
47 | |
48 | |
49 | is $sqla->dispatch( |
50 | [ -where => -or => |
51 | [ '>', [-name => qw/me id/], [-value => 500 ] ], |
52 | [ '==', [-name => qw/me name/], [-value => '200' ] ], |
53 | ] |
54 | ), "WHERE me.id > ? OR me.name = ?", |
55 | "where clause (simple or)"; |
56 | |
57 | |
58 | is $sqla->dispatch( |
59 | [ -where => -or => |
60 | [ '>', [-name => qw/me id/], [-value => 500 ] ], |
61 | [ -or => |
62 | [ '==', [-name => qw/me name/], [-value => '200' ] ], |
63 | [ '==', [-name => qw/me name/], [-value => '100' ] ] |
64 | ] |
65 | ] |
66 | ), "WHERE me.id > ? OR me.name = ? OR me.name = ?", |
67 | "where clause (nested or)"; |
68 | |
69 | is $sqla->dispatch( |
70 | [ -where => -or => |
71 | [ '==', [-name => qw/me id/], [-value => 500 ] ], |
72 | [ -and => |
73 | [ '>', [-name => qw/me name/], [-value => '200' ] ], |
74 | [ '<', [-name => qw/me name/], [-value => '100' ] ] |
75 | ] |
76 | ] |
77 | ), "WHERE me.id = ? OR me.name > ? AND me.name < ?", |
78 | "where clause (inner and)"; |
79 | |
80 | is $sqla->dispatch( |
81 | [ -where => -and => |
82 | [ '==', [-name => qw/me id/], [-value => 500 ] ], |
83 | [ -and => |
84 | [ '>', [-name => qw/me name/], [-value => '200' ] ], |
85 | [ '<', [-name => qw/me name/], [-value => '100' ] ] |
86 | ] |
87 | ] |
88 | ), "WHERE me.id = ? AND me.name > ? AND me.name < ?", |
89 | "where clause (nested and)"; |
90 | |
91 | |
92 | is $sqla->dispatch( |
93 | [ -where => -and => |
94 | [ '==', [-name => qw/me id/], [-value => 500 ] ], |
95 | [ -or => |
96 | [ '>', [-name => qw/me name/], [-value => '200' ] ], |
97 | [ '<', [-name => qw/me name/], [-value => '100' ] ] |
98 | ] |
99 | ] |
100 | ), "WHERE me.id = ? AND (me.name > ? OR me.name < ?)", |
101 | "where clause (inner or)"; |
102 | |
103 | eq_or_diff( |
104 | [SQL::Abstract->generate( |
105 | [ -ast_version => 1, |
106 | -where => |
107 | [ -in => |
108 | [-name => qw/me id/], |
109 | [-value => '100' ], |
110 | [-value => '200' ], |
111 | [-value => '300' ], |
112 | ] |
113 | ] |
114 | ) ], |
115 | |
116 | [ "WHERE me.id IN (?, ?, ?)", |
117 | [ qw/100 200 300/] |
118 | ], |
119 | |
120 | "where IN clause"); |
121 | |
122 | |
123 | eq_or_diff( |
124 | [SQL::Abstract->generate( |
125 | [ -ast_version => 1, |
126 | -where => |
127 | [ -not_in => |
128 | [-name => qw/me id/], |
129 | [-value => '100' ], |
130 | [-value => '200' ], |
131 | [-value => '300' ], |
132 | ] |
133 | ] |
134 | ) ], |
135 | |
136 | [ "WHERE me.id NOT IN (?, ?, ?)", |
137 | [ qw/100 200 300/] |
138 | ], |
139 | |
140 | "where NOT IN clause"); |