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