Move the AST walking code out into seperate class
[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
14774be0 9# TODO: once MXMS supports %args, use that here
10my $sqla = SQL::Abstract->create(1);
c314b35d 11is $sqla->dispatch( [ -name => qw/me id/]), "me.id",
a0185af2 12 "Simple name generator";
13
c314b35d 14is $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 23is $sqla->dispatch(
4769c837 24 [ -alias => [ -name => qw/me id/], "foobar", ]
25), "me.id AS foobar",
26 "Alias generator";
27
c314b35d 28is $sqla->dispatch(
73382d73 29 [ -order_by => [ -name => qw/me date/ ] ]
30), "ORDER BY me.date";
31
c314b35d 32is $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 39is $sqla->dispatch(
73382d73 40 [ -order_by => [ -desc => [ -name => qw/me date/ ] ] ]
41), "ORDER BY me.date DESC";
42
43
c314b35d 44is $sqla->dispatch(
4769c837 45 [ -where =>
7d3908d3 46 [ '>', [-name => qw/me id/], [-value => 500 ] ]
4769c837 47 ]
48), "WHERE me.id > ?", "where clause";
3e63a4d5 49
5bf8c024 50eq_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 66is $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 74is $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 84is $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 94is $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 105is $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
115eq_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");