limit/offset
[dbsrgits/Data-Query.git] / t / example.t
1 use strictures;
2 use Data::Query::ExprDeclare;
3 use Data::Query::Renderer::SQL::Naive;
4 use Moo::Role ();
5 use Devel::Dwarn;
6
7 my $renderer = Data::Query::Renderer::SQL::Naive->new;
8
9 sub render_expr {
10   my ($sql, @bindp) = @{$renderer->render($_[0])};
11   ($sql, map $_->{value}, @bindp);
12 }
13
14 DwarnL render_expr(SELECT { $_->foo, "bar" });
15 DwarnL render_expr(SELECT { $_->foo, "bar" } FROM { $_->baz });
16 DwarnL render_expr(SELECT { $_->foo } FROM { $_->baz, AS('quux') });
17 DwarnL render_expr(
18   SELECT { $_->cd->name } FROM { $_->cds, AS('cd') } JOIN { $_->artists }
19 );
20 DwarnL render_expr(
21   SELECT { $_->cd->name }
22   FROM { $_->cds, AS 'cd' }
23   JOIN { $_->artists, AS 'artist' }
24     ON { $_->cd->artistid eq $_->artist->id }
25 );
26 DwarnL render_expr(
27   SELECT { $_->artist->name }
28   FROM { $_->artists, AS 'artist' }
29   LEFT JOIN { $_->cds, AS 'cd' }
30          ON { $_->cd->artistid eq $_->artist->id }
31 );
32 DwarnL render_expr(
33   SELECT { $_->artist->name } WHERE { $_->artist->age > 25 }
34 );
35 DwarnL render_expr(
36   SELECT { $_->cd->name }
37   FROM { $_->cds, AS 'cd' }
38   JOIN { $_->artists, AS 'artist' }
39     ON { $_->cd->artistid eq $_->artist->id }
40   WHERE { $_->artist->age > 25 }
41 );
42 DwarnL render_expr(ORDER BY { $_->foo, $_->bar, $_->baz } DESC);
43
44 my $basic = SELECT { $_->cd->name } FROM { $_->cds, AS 'cd' };
45
46 DwarnL render_expr(
47   FROM { $basic } WHERE { $_->year > 2000 }
48 );
49
50 DwarnL render_expr(
51   FROM { $basic } ORDER BY { $_->year }
52 );
53
54 DwarnL render_expr(
55   SELECT { $_->cd->name } FROM { $_->cds, AS 'cd' } ORDER BY { $_->year }
56 );
57
58 $renderer = Moo::Role->create_class_with_roles(
59   'Data::Query::Renderer::SQL::Naive',
60   'Data::Query::Renderer::SQL::Slice::LimitOffset'
61 )->new;
62
63 DwarnL render_expr(
64   SELECT { $_->cd->name }
65   FROM { $_->cds, AS 'cd' }
66   ORDER BY { $_->year }
67   LIMIT { 10 } OFFSET { 10 }
68 );