test for between
[dbsrgits/Data-Query.git] / t / expr-helpers.t
CommitLineData
fda85b28 1use strictures 1;
2use Test::More qw(no_plan);
3
4use Devel::Dwarn;
5use Data::Query::Renderer::SQL::Naive;
6use Data::Query::ExprHelpers;
7
8my $rend = Data::Query::Renderer::SQL::Naive->new({ quote_chars => [ "'" ] });
9
10sub binding { map perl_scalar_value($_), @_ }
11
12sub dq_sql_is {
13 my $expr = shift;
14#::Dwarn($expr); return;
15 my $rendered = $rend->render($expr);
16 is_deeply($rendered, @_);
17}
18
e6de85d7 19dq_sql_is
fda85b28 20 Select([ Identifier('*') ], Identifier('foo')),
21 ['SELECT * FROM foo'],
22 'simple select';
23
70a14d95 24{
25 # should these both be allowed, and result in the same SQL?
26
27 dq_sql_is
28 Join(
29 Select([ Identifier('*') ], Identifier('foo')),
30 Identifier('bar'),
df8418af 31 perl_operator('==', Identifier('foo', 'x'), Identifier('bar', 'y')),
70a14d95 32 ),
33 ['SELECT * FROM foo JOIN bar ON foo.x = bar.y'],
34 'join on with dots (Join Select)';
35
36 dq_sql_is
37 Select(
38 [ Identifier('*') ],
39 Join(
40 Identifier('foo'),
41 Identifier('bar'),
df8418af 42 perl_operator('==', Identifier('foo', 'x'), Identifier('bar', 'y')),
70a14d95 43 ),
44 ),
45 ['SELECT * FROM foo JOIN bar ON foo.x = bar.y'],
46 'join on with dots (Select Join)';
47}
fda85b28 48
e6de85d7 49dq_sql_is
fda85b28 50 Where(
51 perl_operator(
52 '==',
53 Identifier('x'),
54 Literal('SQL', '?', [ binding(1) ],),
55 ),
56 Select([ Identifier('*') ], Identifier('foo')),
57 ),
58 ['SELECT * FROM foo WHERE x = ?', binding(1)],
59 'simple select with where and bind';
60
7f28a961 61dq_sql_is
62 Group (
63 [ Identifier('x') ],
64 Select([ Identifier('*') ], Identifier('foo')),
65 ),
66 ['SELECT * FROM foo GROUP BY x'],
67 'simple group by';
68
df8418af 69dq_sql_is
70 Select(
71 [ Identifier('*') ],
72 Join(
73 Identifier('foo'),
74 Identifier('bar'),
75 perl_operator('==', Identifier('foo', 'x'), Identifier('bar', 'y')),
76 'left outer',
77 ),
78 ),
79 ['SELECT * FROM foo LEFT OUTER JOIN bar ON foo.x = bar.y'],
80 'left outer join';
d83e5c27 81
82dq_sql_is
83 Select(
84 [ Operator({ 'SQL.Naive' => 'apply' }, [ Identifier('COUNT'), Identifier('*') ]) ],
85 Identifier('foo'),
86 ),
87 ['SELECT COUNT( * ) FROM foo'],
88 'count';
1e55ce81 89
90dq_sql_is
91 Where(
92 Operator({ 'SQL.Naive' => 'BETWEEN' }, [
93 Identifier('x'),
94 map Literal('SQL', '?', [ binding($_) ]), (1,2),
95 ]),
96 Select([ Identifier('*') ], Identifier('foo')),
97 ),
98 [ 'SELECT * FROM foo WHERE ( x BETWEEN ? AND ? )', map binding($_), 1, 2, ],
99 'between';