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
1 use strict;
2 use warnings;
3
4 use Test::More tests => 15;
5 use Test::Differences;
6
7 use_ok('SQL::Abstract') or BAIL_OUT( "$@" );
8
9 my $sqla = SQL::Abstract->new(ast_version => 1);
10 is $sqla->dispatch( [ -name => qw/me id/]), "me.id",
11   "Simple name generator";
12
13 is $sqla->dispatch(
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";
21
22 is $sqla->dispatch(
23   [ -alias => [ -name => qw/me id/], "foobar", ] 
24 ), "me.id AS foobar",
25   "Alias generator";
26
27 is $sqla->dispatch(
28   [ -order_by => [ -name => qw/me date/ ] ]
29 ), "ORDER BY me.date";
30
31 is $sqla->dispatch(
32   [ -order_by => 
33     [ -name => qw/me date/ ],
34     [ -name => qw/me foobar/ ],
35   ]
36 ), "ORDER BY me.date, me.foobar";
37
38 is $sqla->dispatch(
39   [ -order_by => [ -desc => [ -name => qw/me date/ ] ] ]
40 ), "ORDER BY me.date DESC";
41
42
43 is $sqla->dispatch(
44   [ -where =>
45       [ '>', [-name => qw/me id/], [-value => 500 ] ]
46   ]
47 ), "WHERE me.id > ?", "where clause";
48
49 eq_or_diff( [ SQL::Abstract->generate(
50     [ -ast_version => 1,
51       -where =>
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
65 is $sqla->dispatch(
66   [ -where =>  -or =>
67       [ '>', [-name => qw/me id/], [-value => 500 ] ],
68       [ '==', [-name => qw/me name/], [-value => '200' ] ],
69   ]
70 ), "WHERE me.id > ? OR me.name = ?", "where clause";
71
72
73 is $sqla->dispatch(
74   [ -where =>  -or =>
75       [ '>', [-name => qw/me id/], [-value => 500 ] ],
76       [ -or => 
77         [ '==', [-name => qw/me name/], [-value => '200' ] ],
78         [ '==', [-name => qw/me name/], [-value => '100' ] ]
79       ]
80   ]
81 ), "WHERE me.id > ? OR me.name = ? OR me.name = ?", "where clause";
82
83 is $sqla->dispatch(
84   [ -where =>  -or =>
85       [ '==', [-name => qw/me id/], [-value => 500 ] ],
86       [ -and => 
87         [ '>', [-name => qw/me name/], [-value => '200' ] ],
88         [ '<', [-name => qw/me name/], [-value => '100' ] ]
89       ]
90   ]
91 ), "WHERE me.id = ? OR me.name > ? AND me.name < ?", "where clause";
92
93 is $sqla->dispatch(
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
104 is $sqla->dispatch(
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";
113
114 eq_or_diff(
115   [SQL::Abstract->generate(
116     [ -ast_version => 1,
117       -where =>
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");