Port more stuff to use HashAST
[dbsrgits/SQL-Abstract-2.0-ish.git] / t / 100_where_basic.t
CommitLineData
0bf8a8c4 1use strict;
2use warnings;
3
4use Test::More tests => 12;
5use Test::Differences;
6
7use_ok('SQL::Abstract') or BAIL_OUT( "$@" );
8
9my $sqla = SQL::Abstract->create(1);
10
11is $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 22is $sqla->dispatch(
23 [ -in => [ ] ]
24), "0 = 1", "emtpy -in";
25
26is $sqla->dispatch(
27 [ -where =>
28 [ '>', [-name => qw/me id/], [-value => 500 ] ]
29 ]
30), "WHERE me.id > ?",
31 "simple where clause";
32
33eq_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
49is $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
58is $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
69is $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
80is $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
92is $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
103eq_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
123eq_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");