added DBIx::Cusotm::Order prepend method automatically...
...quoted syntax
| ... | ... |
@@ -737,7 +737,7 @@ sub not_exists { bless {}, 'DBIx::Custom::NotExists' }
|
| 737 | 737 |
|
| 738 | 738 |
sub order {
|
| 739 | 739 |
my $self = shift; |
| 740 |
- return DBIx::Custom::Order->new(@_); |
|
| 740 |
+ return DBIx::Custom::Order->new(quote => $self->quote, @_); |
|
| 741 | 741 |
} |
| 742 | 742 |
|
| 743 | 743 |
sub register_filter {
|
| ... | ... |
@@ -5,9 +5,27 @@ use overload |
| 5 | 5 |
'""' => sub { shift->to_string },
|
| 6 | 6 |
fallback => 1; |
| 7 | 7 |
|
| 8 |
-has orders => sub { [] };
|
|
| 9 | 8 |
|
| 10 |
-sub prepend { unshift @{shift->orders}, @_ }
|
|
| 9 |
+has orders => sub { [] },
|
|
| 10 |
+ quote => ''; |
|
| 11 |
+ |
|
| 12 |
+sub prepend {
|
|
| 13 |
+ my $self = shift; |
|
| 14 |
+ |
|
| 15 |
+ my $q = $self->quote; |
|
| 16 |
+ foreach my $order (reverse @_) {
|
|
| 17 |
+ if (ref $order eq 'ARRAY') {
|
|
| 18 |
+ my $column = shift @$order; |
|
| 19 |
+ $column = "$q$column$q" if defined $column; |
|
| 20 |
+ my $derection = shift @$order; |
|
| 21 |
+ $order = $column; |
|
| 22 |
+ $order .= " $derection" if $derection; |
|
| 23 |
+ } |
|
| 24 |
+ unshift @{$self->orders}, $order;
|
|
| 25 |
+ } |
|
| 26 |
+ |
|
| 27 |
+ return $self; |
|
| 28 |
+} |
|
| 11 | 29 |
|
| 12 | 30 |
sub to_string {
|
| 13 | 31 |
my $self = shift; |
| ... | ... |
@@ -61,6 +79,18 @@ and implements the following new ones. |
| 61 | 79 |
|
| 62 | 80 |
Prepend order parts to C<orders>. |
| 63 | 81 |
|
| 82 |
+You can pass array reference, which contain column name and direction. |
|
| 83 |
+Column name is quoted properly |
|
| 84 |
+ |
|
| 85 |
+ # Column name and direction |
|
| 86 |
+ $order->prepend(['book-title']); |
|
| 87 |
+ $order->prepend([qw/book-title desc/]); |
|
| 88 |
+ |
|
| 89 |
+This is expanded to the following way. |
|
| 90 |
+ |
|
| 91 |
+ "book-title" |
|
| 92 |
+ "book-title" desc |
|
| 93 |
+ |
|
| 64 | 94 |
=head2 C<to_string> |
| 65 | 95 |
|
| 66 | 96 |
my $order_by = $order->to_string; |
| ... | ... |
@@ -3325,6 +3325,16 @@ $dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:'); |
| 3325 | 3325 |
$result = $dbi->select(table => 'table1', append => "$order"); |
| 3326 | 3326 |
is_deeply($result->all, [{key1 => 2, key2 => 4}, {key1 => 2, key2 => 2},
|
| 3327 | 3327 |
{key1 => 1, key2 => 3}, {key1 => 1, key2 => 1}]);
|
| 3328 |
+ |
|
| 3329 |
+ $order = $dbi->order; |
|
| 3330 |
+ $order->prepend(['table1-key1'], [qw/table1-key2 desc/]); |
|
| 3331 |
+ $result = $dbi->select(table => 'table1', |
|
| 3332 |
+ column => [[key1 => 'table1-key1'], [key2 => 'table1-key2']], |
|
| 3333 |
+ append => "$order"); |
|
| 3334 |
+ is_deeply($result->all, [{'table1-key1' => 1, 'table1-key2' => 3},
|
|
| 3335 |
+ {'table1-key1' => 1, 'table1-key2' => 1},
|
|
| 3336 |
+ {'table1-key1' => 2, 'table1-key2' => 4},
|
|
| 3337 |
+ {'table1-key1' => 2, 'table1-key2' => 2}]);
|
|
| 3328 | 3338 |
} |
| 3329 | 3339 |
|
| 3330 | 3340 |
test 'tag_parse'; |