Create ArrayAST, HashAST and AST types in a type library so that some constructs...
[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(
12 [ -where =>
13 [ '>', [-name => qw/me id/], [-value => 500 ] ]
14 ]
15), "WHERE me.id > ?",
16 "simple where clause";
17
18is $sqla->dispatch(
19 [ -in => [ ] ]
20), "0 = 1", "emtpy -in";
21
22is $sqla->dispatch(
23 [ -where =>
24 [ '>', [-name => qw/me id/], [-value => 500 ] ]
25 ]
26), "WHERE me.id > ?",
27 "simple where clause";
28
29eq_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
45is $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
54is $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
65is $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
76is $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
88is $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
99eq_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
119eq_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");