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