e436d42a41fb116e8dd299234a260127c2e3a80f
[dbsrgits/Data-Query.git] / t / example.t
1 use strictures;
2 use Devel::Dwarn;
3
4 use Data::Query::ExprDeclare qw(SELECT FROM WHERE JOIN ON ORDER BY DESC NULLS LAST AS LEFT JOIN OFFSET LIMIT);
5
6 BEGIN { require 't/example.to_sql' };
7
8 make_renderer;
9
10 DwarnL to_sql(SELECT { $_->foo, "bar" });
11 DwarnL to_sql(SELECT { $_->foo, "bar" } FROM { $_->baz });
12 DwarnL to_sql(SELECT { $_->foo } FROM { $_->baz, AS('quux') });
13 DwarnL to_sql(
14   SELECT { $_->cd->name } FROM { $_->cds, AS('cd') }
15 );
16
17 my $w_join =
18   SELECT { $_->cd->name }
19   FROM { $_->cds, AS 'cd' }
20   JOIN { $_->artists, AS 'artist' }
21     ON { $_->cd->artistid eq $_->artist->id };
22
23 DwarnL to_sql($w_join);
24
25 Dwarn to_sql(FROM { $w_join } WHERE { $_->cd->year > 2000 });
26
27 DwarnL to_sql(
28   SELECT { $_->artist->name }
29   FROM { $_->artists, AS 'artist' }
30   LEFT JOIN { $_->cds, AS 'cd' }
31          ON { $_->cd->artistid eq $_->artist->id }
32 );
33 DwarnL to_sql(
34   SELECT { $_->artist->name } WHERE { $_->artist->age > 25 }
35 );
36 DwarnL to_sql(
37   SELECT { $_->cd->name }
38   FROM { $_->cds, AS 'cd' }
39   JOIN { $_->artists, AS 'artist' }
40     ON { $_->cd->artistid eq $_->artist->id }
41   WHERE { $_->artist->age > 25 }
42 );
43 DwarnL to_sql(ORDER BY { $_->foo, $_->bar, $_->baz } DESC);
44
45 my $basic = SELECT { $_->cd->name } FROM { $_->cds, AS 'cd' };
46
47 DwarnL to_sql(
48   FROM { $basic } WHERE { $_->year > 2000 }
49 );
50
51 DwarnL to_sql(
52   FROM { $basic } ORDER BY { $_->year }
53 );
54
55 DwarnL to_sql(
56   SELECT { $_->cd->name } FROM { $_->cds, AS 'cd' } ORDER BY { $_->year } DESC NULLS LAST
57 );
58
59 my $lo = 
60   SELECT { $_->cd->name }
61   FROM { $_->cds, AS 'cd' }
62   ORDER BY { $_->year }
63   LIMIT { 10 } OFFSET { 10 };
64
65 sub render_orders {
66
67   make_renderer('LimitOffset');
68
69   DwarnL to_sql($lo);
70
71   make_renderer('RowNum');
72
73   DwarnL to_sql($lo);
74
75   make_renderer('RowNumberOver');
76
77   DwarnL to_sql($lo);
78
79 }
80
81 render_orders();
82
83 $lo =
84   SELECT { $_->cd->name, $_->artist->name }
85   FROM { $_->cds, AS 'cd' }
86   JOIN { $_->artists, AS 'artist' }
87     ON { $_->cd->artistid eq $_->artist->id }
88   WHERE { $_->artist->age > 25 }
89   ORDER BY { $_->artist->age, $_->cd->id }
90   LIMIT { 10 } OFFSET { 20 };
91
92 render_orders();
93
94 my @cols = qw(name year genre);
95
96 DwarnL to_sql(
97   SELECT { my $cd = $_->cd; map $cd->$_, @cols }
98   FROM { $_->cds, AS 'cd' }
99 );