Use ExprDeclare in tests instead of expr.include
[dbsrgits/Data-Query.git] / t / sql.t
CommitLineData
515523bc 1use strictures 1;
2use Test::More qw(no_plan);
3
ee4f4756 4use Scalar::Util qw(blessed);
515523bc 5use Devel::Dwarn;
6use Data::Query::Renderer::SQL::Naive;
9c8fc055 7use Data::Query::ExprHelpers qw(perl_scalar_value);
ee4f4756 8use Data::Query::ExprDeclare qw(SELECT AS expr);
515523bc 9
10my $rend = Data::Query::Renderer::SQL::Naive->new({ quote_chars => [ "'" ] });
11
3a1bb3a0 12sub binding { map perl_scalar_value($_), @_ }
13
515523bc 14sub expr_sql_is (&;@) {
15 my $sub = shift;
ee4f4756 16 my $e = Data::Query::ExprDeclare::_run_expr($sub);
17 $e = blessed($e) ? $e->{expr} : $e;
515523bc 18 @_
ee4f4756 19 ? is_deeply($rend->render($e), @_)
20 : ::Dwarn($rend->render($e));
515523bc 21}
22
23expr_sql_is { $_->foo }
24 [ 'foo' ],
25 "Simple identifier -> SQL";
26
27expr_sql_is { $_->group }
28 [ q{'group'} ],
29 "Simple identifier needing quoting -> SQL";
30
31expr_sql_is { $_->foo->group }
32 [ q{foo.'group'} ],
33 "Complex identifier -> SQL";
34
35expr_sql_is { $_->foo == 1 }
3a1bb3a0 36 [ "foo = ?", binding(1) ],
515523bc 37 "Simple expression -> SQL";
38
39expr_sql_is { ($_->foo == 1) & ($_->bar eq "foo") }
3a1bb3a0 40 [ "( foo = ? AND bar = ? )", binding(1, "foo") ],
515523bc 41 "Compound expression -> SQL";
42
43
44expr_sql_is { ($_->foo == 1) & ($_->bar eq "foo") & ($_->baz > 3) }
3a1bb3a0 45 [ "( foo = ? AND bar = ? AND baz > ? )", binding(1, "foo", 3) ],
515523bc 46 "Flatten expression ok";
47
24bfc3d1 48expr_sql_is { !$_->foo } # XXX revisit this why are the parens here
49 [ "( NOT foo )" ],
515523bc 50 "Unary expression ok";
9c8fc055 51
52expr_sql_is { SELECT { $_->foo } }
53 [ "SELECT foo" ],
54 "Simple identifier";
55
56expr_sql_is { SELECT { $_->foo, 1 } }
57 # the extra space here is a little icky but Naive's _flatten_structure
58 # will need rewriting to fix it - commit bits available if you do it first
bdb576cb 59 [ "SELECT foo, ?", binding(1) ],
9c8fc055 60 "Identifier and literal";
a0ab336b 61
62expr_sql_is { SELECT { $_->foo => AS("foom"), 1 } }
bdb576cb 63 [ "SELECT foo AS foom, ?", binding(1) ],
a0ab336b 64 "AS with parens";
65
66expr_sql_is { SELECT { $_->foo => AS "foom", 1 } }
bdb576cb 67 [ "SELECT foo AS foom, ?", binding(1) ],
a0ab336b 68 "AS without parens";