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