64e2f2c545b67061a86a444609a938f1d2b035b2
[dbsrgits/Data-Query.git] / t / sql.t
1 use strictures 1;
2 use Test::More qw(no_plan);
3
4 use Devel::Dwarn;
5 use Data::Query::Renderer::SQL::Naive;
6
7 BEGIN { require 't/expr.include' }
8
9 my $rend = Data::Query::Renderer::SQL::Naive->new({ quote_chars => [ "'" ] });
10
11 sub expr_sql_is (&;@) {
12   my $sub = shift;
13   @_
14     ? is_deeply($rend->render(_mk_expr($sub)), @_)
15     : ::Dwarn($rend->render(_mk_expr($sub)));
16 }
17
18 expr_sql_is { $_->foo }
19   [ 'foo' ],
20   "Simple identifier -> SQL";
21
22 expr_sql_is { $_->group }
23   [ q{'group'} ],
24   "Simple identifier needing quoting -> SQL";
25
26 expr_sql_is { $_->foo->group }
27   [ q{foo.'group'} ],
28   "Complex identifier -> SQL";
29
30 expr_sql_is { $_->foo == 1 }
31   [
32     "foo = ?",
33     {
34       subtype => {
35         Perl => "Scalar"
36       },
37       type => "Value",
38       value => 1
39     }
40   ],
41   "Simple expression -> SQL";
42
43 expr_sql_is { ($_->foo == 1) & ($_->bar eq "foo") }
44   [
45     "( foo = ? AND bar = ? )",
46     {
47       subtype => {
48         Perl => "Scalar"
49       },
50       type => "Value",
51       value => 1
52     },
53     {
54       subtype => {
55         Perl => "Scalar"
56       },
57       type => "Value",
58       value => "foo"
59     }
60   ],
61   "Compound expression -> SQL";
62
63
64 expr_sql_is { ($_->foo == 1) & ($_->bar eq "foo") & ($_->baz > 3) }
65   [
66     "( foo = ? AND bar = ? AND baz > ? )",
67     {
68       subtype => {
69         Perl => "Scalar"
70       },
71       type => "Value",
72       value => 1
73     },
74     {
75       subtype => {
76         Perl => "Scalar"
77       },
78       type => "Value",
79       value => "foo"
80     },
81     {
82       subtype => {
83         Perl => "Scalar"
84       },
85       type => "Value",
86       value => 3
87     }
88   ],
89   "Flatten expression ok";
90
91 expr_sql_is { !$_->foo }
92   [ "NOT foo" ],
93   "Unary expression ok";