ce0bb8fdd893969d806ccdac465fde13019fd6d9
[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 # TODO: once MXMS supports %args, use that here
10 my $sqla = SQL::Abstract->create(1);
11 is $sqla->dispatch( [ -name => qw/me id/]), "me.id",
12   "Simple name generator";
13
14 is $sqla->dispatch(
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";
22
23 is $sqla->dispatch(
24   [ -alias => [ -name => qw/me id/], "foobar", ] 
25 ), "me.id AS foobar",
26   "Alias generator";
27
28 is $sqla->dispatch(
29   [ -order_by => [ -name => qw/me date/ ] ]
30 ), "ORDER BY me.date";
31
32 is $sqla->dispatch(
33   [ -order_by => 
34     [ -name => qw/me date/ ],
35     [ -name => qw/me foobar/ ],
36   ]
37 ), "ORDER BY me.date, me.foobar";
38
39 is $sqla->dispatch(
40   [ -order_by => [ -desc => [ -name => qw/me date/ ] ] ]
41 ), "ORDER BY me.date DESC";
42
43
44 is $sqla->dispatch(
45   [ -where =>
46       [ '>', [-name => qw/me id/], [-value => 500 ] ]
47   ]
48 ), "WHERE me.id > ?", "where clause";
49
50 eq_or_diff( [ SQL::Abstract->generate(
51     [ -ast_version => 1,
52       -where =>
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
66 is $sqla->dispatch(
67   [ -where =>  -or =>
68       [ '>', [-name => qw/me id/], [-value => 500 ] ],
69       [ '==', [-name => qw/me name/], [-value => '200' ] ],
70   ]
71 ), "WHERE me.id > ? OR me.name = ?", "where clause";
72
73
74 is $sqla->dispatch(
75   [ -where =>  -or =>
76       [ '>', [-name => qw/me id/], [-value => 500 ] ],
77       [ -or => 
78         [ '==', [-name => qw/me name/], [-value => '200' ] ],
79         [ '==', [-name => qw/me name/], [-value => '100' ] ]
80       ]
81   ]
82 ), "WHERE me.id > ? OR me.name = ? OR me.name = ?", "where clause";
83
84 is $sqla->dispatch(
85   [ -where =>  -or =>
86       [ '==', [-name => qw/me id/], [-value => 500 ] ],
87       [ -and => 
88         [ '>', [-name => qw/me name/], [-value => '200' ] ],
89         [ '<', [-name => qw/me name/], [-value => '100' ] ]
90       ]
91   ]
92 ), "WHERE me.id = ? OR me.name > ? AND me.name < ?", "where clause";
93
94 is $sqla->dispatch(
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
105 is $sqla->dispatch(
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";
114
115 eq_or_diff(
116   [SQL::Abstract->generate(
117     [ -ast_version => 1,
118       -where =>
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");