bd6220f137d149e881ae67068a37c4f7dcf90621
[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;
10 is $sqla->generate( [ -name => qw/me id/]), "me.id",
11   "Simple name generator";
12
13 is $sqla->generate(
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->generate(
23   [ -alias => [ -name => qw/me id/], "foobar", ] 
24 ), "me.id AS foobar",
25   "Alias generator";
26
27 is $sqla->generate(
28   [ -order_by => [ -name => qw/me date/ ] ]
29 ), "ORDER BY me.date";
30
31 is $sqla->generate(
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->generate(
39   [ -order_by => [ -desc => [ -name => qw/me date/ ] ] ]
40 ), "ORDER BY me.date DESC";
41
42
43 is $sqla->generate(
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     [ -where =>
51         [ '>', [-name => qw/me id/], [-value => 500 ] ],
52         [ '==', [-name => qw/me name/], [-value => '200' ] ]
53     ]
54   ) ], 
55   [ "WHERE me.id > ? AND me.name = ?",
56     [ 500,
57       '200'
58     ]
59   ],
60   "Where with binds"
61 );
62
63
64 is $sqla->generate(
65   [ -where =>  -or =>
66       [ '>', [-name => qw/me id/], [-value => 500 ] ],
67       [ '==', [-name => qw/me name/], [-value => '200' ] ],
68   ]
69 ), "WHERE me.id > ? OR me.name = ?", "where clause";
70
71
72 is $sqla->generate(
73   [ -where =>  -or =>
74       [ '>', [-name => qw/me id/], [-value => 500 ] ],
75       [ -or => 
76         [ '==', [-name => qw/me name/], [-value => '200' ] ],
77         [ '==', [-name => qw/me name/], [-value => '100' ] ]
78       ]
79   ]
80 ), "WHERE me.id > ? OR me.name = ? OR me.name = ?", "where clause";
81
82 is $sqla->generate(
83   [ -where =>  -or =>
84       [ '==', [-name => qw/me id/], [-value => 500 ] ],
85       [ -and => 
86         [ '>', [-name => qw/me name/], [-value => '200' ] ],
87         [ '<', [-name => qw/me name/], [-value => '100' ] ]
88       ]
89   ]
90 ), "WHERE me.id = ? OR me.name > ? AND me.name < ?", "where clause";
91
92 is $sqla->generate(
93   [ -where =>  -and =>
94       [ '==', [-name => qw/me id/], [-value => 500 ] ],
95       [ -and => 
96         [ '>', [-name => qw/me name/], [-value => '200' ] ],
97         [ '<', [-name => qw/me name/], [-value => '100' ] ]
98       ]
99   ]
100 ), "WHERE me.id = ? AND me.name > ? AND me.name < ?", "where clause";
101
102
103 is $sqla->generate(
104   [ -where =>  -and =>
105       [ '==', [-name => qw/me id/], [-value => 500 ] ],
106       [ -or => 
107         [ '>', [-name => qw/me name/], [-value => '200' ] ],
108         [ '<', [-name => qw/me name/], [-value => '100' ] ]
109       ]
110   ]
111 ), "WHERE me.id = ? AND (me.name > ? OR me.name < ?)", "where clause";
112
113 eq_or_diff(
114   [SQL::Abstract->generate(
115     [ -where => 
116       [ -in => 
117         [-name => qw/me id/],
118         [-value => '100' ],
119         [-value => '200' ],
120         [-value => '300' ],
121       ]
122     ]
123   ) ],
124
125   [ "WHERE me.id IN (?, ?, ?)", 
126     [ qw/100 200 300/]
127   ],
128   
129   "where IN clause");