Commit | Line | Data |
a0185af2 |
1 | use strict; |
2 | use warnings; |
3 | |
d2582f0f |
4 | use Test::More tests => 15; |
5bf8c024 |
5 | use Test::Differences; |
a0185af2 |
6 | |
7 | use_ok('SQL::Abstract') or BAIL_OUT( "$@" ); |
8 | |
14774be0 |
9 | # TODO: once MXMS supports %args, use that here |
10 | my $sqla = SQL::Abstract->create(1); |
c314b35d |
11 | is $sqla->dispatch( [ -name => qw/me id/]), "me.id", |
a0185af2 |
12 | "Simple name generator"; |
13 | |
c314b35d |
14 | is $sqla->dispatch( |
a0185af2 |
15 | [ -list => |
16 | [ -name => qw/me id/], |
17 | [ -name => qw/me foo bar/], |
18 | [ -name => qw/bar/] |
19 | ] |
20 | ), "me.id, me.foo.bar, bar", |
21 | "List generator"; |
4769c837 |
22 | |
c314b35d |
23 | is $sqla->dispatch( |
4769c837 |
24 | [ -alias => [ -name => qw/me id/], "foobar", ] |
25 | ), "me.id AS foobar", |
26 | "Alias generator"; |
27 | |
c314b35d |
28 | is $sqla->dispatch( |
73382d73 |
29 | [ -order_by => [ -name => qw/me date/ ] ] |
30 | ), "ORDER BY me.date"; |
31 | |
c314b35d |
32 | is $sqla->dispatch( |
73382d73 |
33 | [ -order_by => |
34 | [ -name => qw/me date/ ], |
35 | [ -name => qw/me foobar/ ], |
36 | ] |
37 | ), "ORDER BY me.date, me.foobar"; |
38 | |
c314b35d |
39 | is $sqla->dispatch( |
73382d73 |
40 | [ -order_by => [ -desc => [ -name => qw/me date/ ] ] ] |
41 | ), "ORDER BY me.date DESC"; |
42 | |
43 | |
c314b35d |
44 | is $sqla->dispatch( |
4769c837 |
45 | [ -where => |
7d3908d3 |
46 | [ '>', [-name => qw/me id/], [-value => 500 ] ] |
4769c837 |
47 | ] |
48 | ), "WHERE me.id > ?", "where clause"; |
3e63a4d5 |
49 | |
5bf8c024 |
50 | eq_or_diff( [ SQL::Abstract->generate( |
c314b35d |
51 | [ -ast_version => 1, |
52 | -where => |
5bf8c024 |
53 | [ '>', [-name => qw/me id/], [-value => 500 ] ], |
54 | [ '==', [-name => qw/me name/], [-value => '200' ] ] |
55 | ] |
56 | ) ], |
57 | [ "WHERE me.id > ? AND me.name = ?", |
58 | [ 500, |
59 | '200' |
60 | ] |
61 | ], |
62 | "Where with binds" |
63 | ); |
64 | |
65 | |
c314b35d |
66 | is $sqla->dispatch( |
3e63a4d5 |
67 | [ -where => -or => |
7d3908d3 |
68 | [ '>', [-name => qw/me id/], [-value => 500 ] ], |
69 | [ '==', [-name => qw/me name/], [-value => '200' ] ], |
3e63a4d5 |
70 | ] |
71 | ), "WHERE me.id > ? OR me.name = ?", "where clause"; |
72 | |
73 | |
c314b35d |
74 | is $sqla->dispatch( |
3e63a4d5 |
75 | [ -where => -or => |
7d3908d3 |
76 | [ '>', [-name => qw/me id/], [-value => 500 ] ], |
3e63a4d5 |
77 | [ -or => |
7d3908d3 |
78 | [ '==', [-name => qw/me name/], [-value => '200' ] ], |
79 | [ '==', [-name => qw/me name/], [-value => '100' ] ] |
3e63a4d5 |
80 | ] |
81 | ] |
82 | ), "WHERE me.id > ? OR me.name = ? OR me.name = ?", "where clause"; |
83 | |
c314b35d |
84 | is $sqla->dispatch( |
3e63a4d5 |
85 | [ -where => -or => |
7d3908d3 |
86 | [ '==', [-name => qw/me id/], [-value => 500 ] ], |
3e63a4d5 |
87 | [ -and => |
7d3908d3 |
88 | [ '>', [-name => qw/me name/], [-value => '200' ] ], |
89 | [ '<', [-name => qw/me name/], [-value => '100' ] ] |
3e63a4d5 |
90 | ] |
91 | ] |
865ef15a |
92 | ), "WHERE me.id = ? OR me.name > ? AND me.name < ?", "where clause"; |
93 | |
c314b35d |
94 | is $sqla->dispatch( |
865ef15a |
95 | [ -where => -and => |
96 | [ '==', [-name => qw/me id/], [-value => 500 ] ], |
97 | [ -and => |
98 | [ '>', [-name => qw/me name/], [-value => '200' ] ], |
99 | [ '<', [-name => qw/me name/], [-value => '100' ] ] |
100 | ] |
101 | ] |
102 | ), "WHERE me.id = ? AND me.name > ? AND me.name < ?", "where clause"; |
103 | |
104 | |
c314b35d |
105 | is $sqla->dispatch( |
865ef15a |
106 | [ -where => -and => |
107 | [ '==', [-name => qw/me id/], [-value => 500 ] ], |
108 | [ -or => |
109 | [ '>', [-name => qw/me name/], [-value => '200' ] ], |
110 | [ '<', [-name => qw/me name/], [-value => '100' ] ] |
111 | ] |
112 | ] |
113 | ), "WHERE me.id = ? AND (me.name > ? OR me.name < ?)", "where clause"; |
d2582f0f |
114 | |
115 | eq_or_diff( |
116 | [SQL::Abstract->generate( |
c314b35d |
117 | [ -ast_version => 1, |
118 | -where => |
d2582f0f |
119 | [ -in => |
120 | [-name => qw/me id/], |
121 | [-value => '100' ], |
122 | [-value => '200' ], |
123 | [-value => '300' ], |
124 | ] |
125 | ] |
126 | ) ], |
127 | |
128 | [ "WHERE me.id IN (?, ?, ?)", |
129 | [ qw/100 200 300/] |
130 | ], |
131 | |
132 | "where IN clause"); |