Require -ast_version to generate (and un-dual life it. Now is class method only)
[dbsrgits/SQL-Abstract-2.0-ish.git] / t / 001_basic.t
CommitLineData
a0185af2 1use strict;
2use warnings;
3
d2582f0f 4use Test::More tests => 15;
5bf8c024 5use Test::Differences;
a0185af2 6
7use_ok('SQL::Abstract') or BAIL_OUT( "$@" );
8
c314b35d 9my $sqla = SQL::Abstract->new(ast_version => 1);
10is $sqla->dispatch( [ -name => qw/me id/]), "me.id",
a0185af2 11 "Simple name generator";
12
c314b35d 13is $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 22is $sqla->dispatch(
4769c837 23 [ -alias => [ -name => qw/me id/], "foobar", ]
24), "me.id AS foobar",
25 "Alias generator";
26
c314b35d 27is $sqla->dispatch(
73382d73 28 [ -order_by => [ -name => qw/me date/ ] ]
29), "ORDER BY me.date";
30
c314b35d 31is $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 38is $sqla->dispatch(
73382d73 39 [ -order_by => [ -desc => [ -name => qw/me date/ ] ] ]
40), "ORDER BY me.date DESC";
41
42
c314b35d 43is $sqla->dispatch(
4769c837 44 [ -where =>
7d3908d3 45 [ '>', [-name => qw/me id/], [-value => 500 ] ]
4769c837 46 ]
47), "WHERE me.id > ?", "where clause";
3e63a4d5 48
5bf8c024 49eq_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 65is $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 73is $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 83is $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 93is $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 104is $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
114eq_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");