| DBIx-Custom documentation | Contained in the DBIx-Custom distribution. |
DBIx::Custom::Order - Order by EXPERIMENTAL
# Result
my $order = DBIx::Custom::Order->new;
$order->prepend('title', 'author desc');
my $order_by = "$order";
orders my $orders = $result->orders;
$result = $result->orders(\%orders);
Parts of order by clause
DBIx::Custom::Result inherits all methods from Object::Simple and implements the following new ones.
prepend $order->prepend('title', 'author desc');
Prepend order parts to orders.
to_stringmy $order_by = $order->to_string;
Create order by clause. If column name is duplicated, First one is used.
to_string override stringification. so you can write the follwoing way.
my $order_by = "$order";
| DBIx-Custom documentation | Contained in the DBIx-Custom distribution. |
package DBIx::Custom::Order; use Object::Simple -base; use overload 'bool' => sub {1}, '""' => sub { shift->to_string }, fallback => 1; has orders => sub { [] }; sub prepend { unshift @{shift->orders}, @_ } sub to_string { my $self = shift; my $exists = {}; my @orders; foreach my $order (@{$self->orders}) { next unless defined $order; $order =~ s/^\s+//; $order =~ s/\s+$//; my ($column, $direction) = split /\s+/, $order; push @orders, $order unless $exists->{$column}; $exists->{$column} = 1; } return '' unless @orders; return 'order by ' . join(', ', @orders); } 1;