use Moo::Role ();
use Devel::Dwarn;
-my $renderer = Data::Query::Renderer::SQL::Naive->new;
+sub make_renderer {
+ my $class = do {
+ if ($_[0]) {
+ Moo::Role->create_class_with_roles(
+ 'Data::Query::Renderer::SQL::Naive',
+ "Data::Query::Renderer::SQL::Slice::$_[0]"
+ )
+ } else {
+ 'Data::Query::Renderer::SQL::Naive'
+ }
+ };
+ $class->new;
+}
+
+my $renderer = make_renderer;
-sub render_expr {
+sub to_sql {
my ($sql, @bindp) = @{$renderer->render($_[0])};
($sql, map $_->{value}, @bindp);
}
-DwarnL render_expr(SELECT { $_->foo, "bar" });
-DwarnL render_expr(SELECT { $_->foo, "bar" } FROM { $_->baz });
-DwarnL render_expr(SELECT { $_->foo } FROM { $_->baz, AS('quux') });
-DwarnL render_expr(
+DwarnL to_sql(SELECT { $_->foo, "bar" });
+DwarnL to_sql(SELECT { $_->foo, "bar" } FROM { $_->baz });
+DwarnL to_sql(SELECT { $_->foo } FROM { $_->baz, AS('quux') });
+DwarnL to_sql(
SELECT { $_->cd->name } FROM { $_->cds, AS('cd') } JOIN { $_->artists }
);
-DwarnL render_expr(
+DwarnL to_sql(
SELECT { $_->cd->name }
FROM { $_->cds, AS 'cd' }
JOIN { $_->artists, AS 'artist' }
ON { $_->cd->artistid eq $_->artist->id }
);
-DwarnL render_expr(
+DwarnL to_sql(
SELECT { $_->artist->name }
FROM { $_->artists, AS 'artist' }
LEFT JOIN { $_->cds, AS 'cd' }
ON { $_->cd->artistid eq $_->artist->id }
);
-DwarnL render_expr(
+DwarnL to_sql(
SELECT { $_->artist->name } WHERE { $_->artist->age > 25 }
);
-DwarnL render_expr(
+DwarnL to_sql(
SELECT { $_->cd->name }
FROM { $_->cds, AS 'cd' }
JOIN { $_->artists, AS 'artist' }
ON { $_->cd->artistid eq $_->artist->id }
WHERE { $_->artist->age > 25 }
);
-DwarnL render_expr(ORDER BY { $_->foo, $_->bar, $_->baz } DESC);
+DwarnL to_sql(ORDER BY { $_->foo, $_->bar, $_->baz } DESC);
my $basic = SELECT { $_->cd->name } FROM { $_->cds, AS 'cd' };
-DwarnL render_expr(
+DwarnL to_sql(
FROM { $basic } WHERE { $_->year > 2000 }
);
-DwarnL render_expr(
+DwarnL to_sql(
FROM { $basic } ORDER BY { $_->year }
);
-DwarnL render_expr(
+DwarnL to_sql(
SELECT { $_->cd->name } FROM { $_->cds, AS 'cd' } ORDER BY { $_->year }
);
-$renderer = Moo::Role->create_class_with_roles(
- 'Data::Query::Renderer::SQL::Naive',
- 'Data::Query::Renderer::SQL::Slice::LimitOffset'
-)->new;
-
-DwarnL render_expr(
+my $lo =
SELECT { $_->cd->name }
FROM { $_->cds, AS 'cd' }
ORDER BY { $_->year }
- LIMIT { 10 } OFFSET { 10 }
-);
+ LIMIT { 10 } OFFSET { 10 };
+
+sub render_orders {
+
+ $renderer = make_renderer('LimitOffset');
+
+ DwarnL to_sql($lo);
+
+ $renderer = make_renderer('RowNum');
+
+ DwarnL to_sql($lo);
+
+ $renderer = make_renderer('RowNumberOver');
+
+ DwarnL to_sql($lo);
+
+}
+
+render_orders();
+
+$lo =
+ SELECT { $_->cd->name, $_->artist->name }
+ FROM { $_->cds, AS 'cd' }
+ JOIN { $_->artists, AS 'artist' }
+ ON { $_->cd->artistid eq $_->artist->id }
+ WHERE { $_->artist->age > 25 }
+ ORDER BY { $_->artist->age, $_->cd->id }
+ LIMIT { 10 } OFFSET { 20 };
+
+render_orders();