| ... | ... | 
                  @@ -1,3 +1,17 @@  | 
              
| 1 | 
                  +0.1699  | 
              |
| 2 | 
                  + - added EXPERIMENTAL order method  | 
              |
| 3 | 
                  + - added EXPERIMENTAL DBIx::Custom::Order module  | 
              |
| 4 | 
                  + - changed backword compatible policy  | 
              |
| 5 | 
                  + ------------------------------------------------------------------------  | 
              |
| 6 | 
                  + If a functionality is DEPRECATED, you can know it by DEPRECATED warnings  | 
              |
| 7 | 
                  + except for attribute method.  | 
              |
| 8 | 
                  + You can check all DEPRECATED functionalities by document.  | 
              |
| 9 | 
                  + DEPRECATED functionality is removed after five years,  | 
              |
| 10 | 
                  + but if at least one person use the functionality and tell me that thing  | 
              |
| 11 | 
                  + I extend one year each time you tell me it.  | 
              |
| 12 | 
                  +  | 
              |
| 13 | 
                  + EXPERIMENTAL functionality will be changed without warnings.  | 
              |
| 14 | 
                  + ------------------------------------------------------------------------  | 
              |
| 1 | 15 | 
                  0.1698  | 
              
| 2 | 16 | 
                  - fixed DBIx::Custom::Where to_string method small bug  | 
              
| 3 | 17 | 
                  - added EXPERIMENTAL execute method table_alias option  | 
              
| ... | ... | 
                  @@ -12,6 +12,7 @@ use DBIx::Custom::QueryBuilder;  | 
              
| 12 | 12 | 
                  use DBIx::Custom::Where;  | 
              
| 13 | 13 | 
                  use DBIx::Custom::Model;  | 
              
| 14 | 14 | 
                  use DBIx::Custom::Tag;  | 
              
| 15 | 
                  +use DBIx::Custom::Order;  | 
              |
| 15 | 16 | 
                  use DBIx::Custom::Util qw/_array_to_hash _subname/;  | 
              
| 16 | 17 | 
                  use Encode qw/encode encode_utf8 decode_utf8/;  | 
              
| 17 | 18 | 
                   | 
              
| ... | ... | 
                  @@ -732,6 +733,11 @@ sub new {
                 | 
              
| 732 | 733 | 
                   | 
              
| 733 | 734 | 
                   sub not_exists { bless {}, 'DBIx::Custom::NotExists' }
                 | 
              
| 734 | 735 | 
                   | 
              
| 736 | 
                  +sub order {
                 | 
              |
| 737 | 
                  + my $self = shift;  | 
              |
| 738 | 
                  + return DBIx::Custom::Order->new(@_);  | 
              |
| 739 | 
                  +}  | 
              |
| 740 | 
                  +  | 
              |
| 735 | 741 | 
                   sub register_filter {
                 | 
              
| 736 | 742 | 
                  my $self = shift;  | 
              
| 737 | 743 | 
                   | 
              
| ... | ... | 
                  @@ -760,10 +766,10 @@ sub select {
                 | 
              
| 760 | 766 | 
                       croak qq{"join" must be array reference } . _subname
                 | 
              
| 761 | 767 | 
                  unless ref $join eq 'ARRAY';  | 
              
| 762 | 768 | 
                       my $relation = delete $args{relation};
                 | 
              
| 763 | 
                  - warn "select() relation option is DEPRECATED! use join option instead"  | 
              |
| 769 | 
                  + warn "select() relation option is DEPRECATED!"  | 
              |
| 764 | 770 | 
                  if $relation;  | 
              
| 765 | 771 | 
                       my $param = delete $args{param} || {}; # DEPRECATED!
                 | 
              
| 766 | 
                  - warn "select() param option is DEPRECATED! use where_param option instead"  | 
              |
| 772 | 
                  + warn "select() param option is DEPRECATED!"  | 
              |
| 767 | 773 | 
                  if keys %$param;  | 
              
| 768 | 774 | 
                       my $where_param = delete $args{where_param} || $param || {};
                 | 
              
| 769 | 775 | 
                       my $wrap = delete $args{wrap};
                 | 
              
| ... | ... | 
                  @@ -1244,7 +1250,7 @@ sub _connect {
                 | 
              
| 1244 | 1250 | 
                   | 
              
| 1245 | 1251 | 
                  # Attributes  | 
              
| 1246 | 1252 | 
                  my $dsn = $self->data_source;  | 
              
| 1247 | 
                  - warn "data_source is DEPRECATED! use dsn instead\n"  | 
              |
| 1253 | 
                  + warn "data_source is DEPRECATED!\n"  | 
              |
| 1248 | 1254 | 
                  if $dsn;  | 
              
| 1249 | 1255 | 
                  $dsn ||= $self->dsn;  | 
              
| 1250 | 1256 | 
                       croak qq{"dsn" must be specified } . _subname
                 | 
              
| ... | ... | 
                  @@ -1420,7 +1426,6 @@ sub _where_to_obj {
                 | 
              
| 1420 | 1426 | 
                  return $obj;  | 
              
| 1421 | 1427 | 
                  }  | 
              
| 1422 | 1428 | 
                   | 
              
| 1423 | 
                  -# DEPRECATED!  | 
              |
| 1424 | 1429 | 
                   sub _apply_filter {
                 | 
              
| 1425 | 1430 | 
                  my ($self, $table, @cinfos) = @_;  | 
              
| 1426 | 1431 | 
                   | 
              
| ... | ... | 
                  @@ -1500,10 +1505,7 @@ sub create_query {
                 | 
              
| 1500 | 1505 | 
                   sub apply_filter {
                 | 
              
| 1501 | 1506 | 
                  my $self = shift;  | 
              
| 1502 | 1507 | 
                   | 
              
| 1503 | 
                  - warn "apply_filter is DEPRECATED! " .  | 
              |
| 1504 | 
                  - "use type_rule method and DBIx::Custom::Result filter method, " .  | 
              |
| 1505 | 
                  - "instead";  | 
              |
| 1506 | 
                  -  | 
              |
| 1508 | 
                  + warn "apply_filter is DEPRECATED!";  | 
              |
| 1507 | 1509 | 
                  return $self->_apply_filter(@_);  | 
              
| 1508 | 1510 | 
                  }  | 
              
| 1509 | 1511 | 
                   | 
              
| ... | ... | 
                  @@ -1740,7 +1742,7 @@ sub _add_relation_table {
                 | 
              
| 1740 | 1742 | 
                   | 
              
| 1741 | 1743 | 
                  =head1 NAME  | 
              
| 1742 | 1744 | 
                   | 
              
| 1743 | 
                  -DBIx::Custom - Useful database access, respecting SQL!  | 
              |
| 1745 | 
                  +DBIx::Custom - Execute insert, update, delete, and select statement easily  | 
              |
| 1744 | 1746 | 
                   | 
              
| 1745 | 1747 | 
                  =head1 SYNOPSYS  | 
              
| 1746 | 1748 | 
                   | 
              
| ... | ... | 
                  @@ -2503,6 +2505,12 @@ Create a new L<DBIx::Custom> object.  | 
              
| 2503 | 2505 | 
                  DBIx::Custom::NotExists object, indicating the column is not exists.  | 
              
| 2504 | 2506 | 
                  This is used by C<clause> of L<DBIx::Custom::Where> .  | 
              
| 2505 | 2507 | 
                   | 
              
| 2508 | 
                  +=head2 C<order> EXPERIMENTAL  | 
              |
| 2509 | 
                  +  | 
              |
| 2510 | 
                  + my $order = $dbi->order;  | 
              |
| 2511 | 
                  +  | 
              |
| 2512 | 
                  +Create a new L<DBIx::Custom::Order> object.  | 
              |
| 2513 | 
                  +  | 
              |
| 2506 | 2514 | 
                  =head2 C<register_filter>  | 
              
| 2507 | 2515 | 
                   | 
              
| 2508 | 2516 | 
                  $dbi->register_filter(  | 
              
| ... | ... | 
                  @@ -2931,10 +2939,91 @@ executed SQL and bind values are printed to STDERR.  | 
              
| 2931 | 2939 | 
                   | 
              
| 2932 | 2940 | 
                  DEBUG output encoding. Default to UTF-8.  | 
              
| 2933 | 2941 | 
                   | 
              
| 2934 | 
                  -=head1 STABILITY  | 
              |
| 2942 | 
                  +=head1 DEPRECATED FUNCTIONALITIES  | 
              |
| 2943 | 
                  +  | 
              |
| 2944 | 
                  +L<DBIx::Custom>  | 
              |
| 2945 | 
                  +  | 
              |
| 2946 | 
                  + # Attribute methods  | 
              |
| 2947 | 
                  + data_source # Removed at 2017/1/1  | 
              |
| 2948 | 
                  + dbi_options # Removed at 2017/1/1  | 
              |
| 2949 | 
                  + filter_check # Removed at 2017/1/1  | 
              |
| 2950 | 
                  + reserved_word_quote # Removed at 2017/1/1  | 
              |
| 2951 | 
                  +  | 
              |
| 2952 | 
                  + # Methods  | 
              |
| 2953 | 
                  + create_query # Removed at 2017/1/1  | 
              |
| 2954 | 
                  + apply_filter # Removed at 2017/1/1  | 
              |
| 2955 | 
                  + select_at # Removed at 2017/1/1  | 
              |
| 2956 | 
                  + delete_at # Removed at 2017/1/1  | 
              |
| 2957 | 
                  + update_at # Removed at 2017/1/1  | 
              |
| 2958 | 
                  + insert_at # Removed at 2017/1/1  | 
              |
| 2959 | 
                  + register_tag # Removed at 2017/1/1  | 
              |
| 2960 | 
                  + default_bind_filter # Removed at 2017/1/1  | 
              |
| 2961 | 
                  + default_fetch_filter # Removed at 2017/1/1  | 
              |
| 2962 | 
                  + insert_param_tag # Removed at 2017/1/1  | 
              |
| 2963 | 
                  + register_tag_processor # Removed at 2017/1/1  | 
              |
| 2964 | 
                  + update_param_tag # Removed at 2017/1/1  | 
              |
| 2965 | 
                  +  | 
              |
| 2966 | 
                  + # Options  | 
              |
| 2967 | 
                  + select method relation option # Removed at 2017/1/1  | 
              |
| 2968 | 
                  + select method param option # Removed at 2017/1/1  | 
              |
| 2969 | 
                  +  | 
              |
| 2970 | 
                  + # Others  | 
              |
| 2971 | 
                  +    execute("select * from {= title}"); # execute tag parsing functionality
                 | 
              |
| 2972 | 
                  + # Removed at 2017/1/1  | 
              |
| 2973 | 
                  +  | 
              |
| 2974 | 
                  +L<DBIx::Custom::Model>  | 
              |
| 2975 | 
                  +  | 
              |
| 2976 | 
                  + # Attribute method  | 
              |
| 2977 | 
                  + filter # Removed at 2017/1/1  | 
              |
| 2978 | 
                  + name # Removed at 2017/1/1  | 
              |
| 2979 | 
                  + type # Removed at 2017/1/1  | 
              |
| 2980 | 
                  +  | 
              |
| 2981 | 
                  +L<DBIx::Custom::Query>  | 
              |
| 2982 | 
                  +  | 
              |
| 2983 | 
                  + # Attribute method  | 
              |
| 2984 | 
                  + default_filter # Removed at 2017/1/1  | 
              |
| 2985 | 
                  +  | 
              |
| 2986 | 
                  +L<DBIx::Custom::QueryBuilder>  | 
              |
| 2987 | 
                  +  | 
              |
| 2988 | 
                  + # Attribute method  | 
              |
| 2989 | 
                  + tags # Removed at 2017/1/1  | 
              |
| 2990 | 
                  + tag_processors # Removed at 2017/1/1  | 
              |
| 2991 | 
                  +  | 
              |
| 2992 | 
                  + # Method  | 
              |
| 2993 | 
                  + register_tag # Removed at 2017/1/1  | 
              |
| 2994 | 
                  + register_tag_processor # Removed at 2017/1/1  | 
              |
| 2995 | 
                  +  | 
              |
| 2996 | 
                  + # Others  | 
              |
| 2997 | 
                  +    build_query("select * from {= title}"); # tag parsing functionality
                 | 
              |
| 2998 | 
                  + # Removed at 2017/1/1  | 
              |
| 2999 | 
                  +  | 
              |
| 3000 | 
                  +L<DBIx::Custom::Result>  | 
              |
| 3001 | 
                  +  | 
              |
| 3002 | 
                  + # Attribute method  | 
              |
| 3003 | 
                  + filter_check # Removed at 2017/1/1  | 
              |
| 3004 | 
                  +  | 
              |
| 3005 | 
                  + # Methods  | 
              |
| 3006 | 
                  + end_filter # Removed at 2017/1/1  | 
              |
| 3007 | 
                  + remove_end_filter # Removed at 2017/1/1  | 
              |
| 3008 | 
                  + remove_filter # Removed at 2017/1/1  | 
              |
| 3009 | 
                  + default_filter # Removed at 2017/1/1  | 
              |
| 3010 | 
                  +  | 
              |
| 3011 | 
                  +L<DBIx::Custom::Tag>  | 
              |
| 3012 | 
                  +  | 
              |
| 3013 | 
                  + This module is DEPRECATED! # Removed at 2017/1/1  | 
              |
| 3014 | 
                  +  | 
              |
| 3015 | 
                  +=head1 BACKWORD COMPATIBLE POLICY  | 
              |
| 3016 | 
                  +  | 
              |
| 3017 | 
                  +If a functionality is DEPRECATED, you can know it by DEPRECATED warnings  | 
              |
| 3018 | 
                  +except for attribute method.  | 
              |
| 3019 | 
                  +You can check all DEPRECATED functionalities by document.  | 
              |
| 3020 | 
                  +DEPRECATED functionality is removed after five years,  | 
              |
| 3021 | 
                  +but if at least one person use the functionality and tell me that thing  | 
              |
| 3022 | 
                  +I extend one year each time you tell me it.  | 
              |
| 3023 | 
                  +  | 
              |
| 3024 | 
                  +EXPERIMENTAL functionality will be changed without warnings.  | 
              |
| 2935 | 3025 | 
                   | 
              
| 2936 | 
                  -L<DBIx::Custom> is stable. APIs keep backword compatible  | 
              |
| 2937 | 
                  -except EXPERIMENTAL one in the feature.  | 
              |
| 3026 | 
                  +This policy is changed at 2011/6/28  | 
              |
| 2938 | 3027 | 
                   | 
              
| 2939 | 3028 | 
                  =head1 BUGS  | 
              
| 2940 | 3029 | 
                   | 
              
| ... | ... | 
                  @@ -0,0 +1,74 @@  | 
              
| 1 | 
                  +package DBIx::Custom::Order;  | 
              |
| 2 | 
                  +use Object::Simple -base;  | 
              |
| 3 | 
                  +use overload  | 
              |
| 4 | 
                  +  'bool'   => sub {1},
                 | 
              |
| 5 | 
                  +  '""'     => sub { shift->to_string },
                 | 
              |
| 6 | 
                  + fallback => 1;  | 
              |
| 7 | 
                  +  | 
              |
| 8 | 
                  +has orders => sub { [] };
                 | 
              |
| 9 | 
                  +  | 
              |
| 10 | 
                  +sub prepend { unshift @{shift->orders}, @_ }
                 | 
              |
| 11 | 
                  +  | 
              |
| 12 | 
                  +sub to_string {
                 | 
              |
| 13 | 
                  + my $self = shift;  | 
              |
| 14 | 
                  +  | 
              |
| 15 | 
                  +    my $exists = {};
                 | 
              |
| 16 | 
                  + my @orders;  | 
              |
| 17 | 
                  +    foreach my $order (@{$self->orders}) {
                 | 
              |
| 18 | 
                  + next unless defined $order;  | 
              |
| 19 | 
                  + $order =~ s/^\s+//;  | 
              |
| 20 | 
                  + $order =~ s/\s+$//;  | 
              |
| 21 | 
                  + my ($column, $direction) = split /\s+/, $order;  | 
              |
| 22 | 
                  +        push @orders, $order unless $exists->{$column};
                 | 
              |
| 23 | 
                  +        $exists->{$column} = 1;
                 | 
              |
| 24 | 
                  + }  | 
              |
| 25 | 
                  +  | 
              |
| 26 | 
                  + return '' unless @orders;  | 
              |
| 27 | 
                  +    return 'order by ' . join(', ', @orders);
                 | 
              |
| 28 | 
                  +}  | 
              |
| 29 | 
                  +  | 
              |
| 30 | 
                  +1;  | 
              |
| 31 | 
                  +  | 
              |
| 32 | 
                  +=head1 NAME  | 
              |
| 33 | 
                  +  | 
              |
| 34 | 
                  +DBIx::Custom::Order - Order by EXPERIMENTAL  | 
              |
| 35 | 
                  +  | 
              |
| 36 | 
                  +=head1 SYNOPSIS  | 
              |
| 37 | 
                  +  | 
              |
| 38 | 
                  + # Result  | 
              |
| 39 | 
                  + my $order = DBIx::Custom::Order->new;  | 
              |
| 40 | 
                  +    $order->prepend('title', 'author desc');
                 | 
              |
| 41 | 
                  + my $order_by = "$order";  | 
              |
| 42 | 
                  +  | 
              |
| 43 | 
                  +  | 
              |
| 44 | 
                  +=head1 ATTRIBUTES  | 
              |
| 45 | 
                  +  | 
              |
| 46 | 
                  +=head2 C<orders>  | 
              |
| 47 | 
                  +  | 
              |
| 48 | 
                  + my $orders = $result->orders;  | 
              |
| 49 | 
                  + $result = $result->orders(\%orders);  | 
              |
| 50 | 
                  +  | 
              |
| 51 | 
                  +Parts of order by clause  | 
              |
| 52 | 
                  +  | 
              |
| 53 | 
                  +=head1 METHODS  | 
              |
| 54 | 
                  +  | 
              |
| 55 | 
                  +L<DBIx::Custom::Result> inherits all methods from L<Object::Simple>  | 
              |
| 56 | 
                  +and implements the following new ones.  | 
              |
| 57 | 
                  +  | 
              |
| 58 | 
                  +=head2 C<prepend>  | 
              |
| 59 | 
                  +  | 
              |
| 60 | 
                  +    $order->prepend('title', 'author desc');
                 | 
              |
| 61 | 
                  +  | 
              |
| 62 | 
                  +Prepend order parts to C<orders>.  | 
              |
| 63 | 
                  +  | 
              |
| 64 | 
                  +=head2 C<to_string>  | 
              |
| 65 | 
                  +  | 
              |
| 66 | 
                  + my $order_by = $order->to_string;  | 
              |
| 67 | 
                  +  | 
              |
| 68 | 
                  +Create order by clause. If column name is duplicated, First one is used.  | 
              |
| 69 | 
                  +C<to_string> override stringification. so you can write the follwoing way.  | 
              |
| 70 | 
                  +  | 
              |
| 71 | 
                  + my $order_by = "$order";  | 
              |
| 72 | 
                  +  | 
              |
| 73 | 
                  +=cut  | 
              |
| 74 | 
                  +  | 
              
| ... | ... | 
                  @@ -284,7 +284,7 @@ has tag_processors => sub { {} };
                 | 
              
| 284 | 284 | 
                  # DEPRECATED!  | 
              
| 285 | 285 | 
                   sub register_tag_processor {
                 | 
              
| 286 | 286 | 
                  my $self = shift;  | 
              
| 287 | 
                  - warn "register_tag_processor is DEPRECATED! use register_tag instead";  | 
              |
| 287 | 
                  + warn "register_tag_processor is DEPRECATED!";  | 
              |
| 288 | 288 | 
                  # Merge tag  | 
              
| 289 | 289 | 
                       my $tag_processors = ref $_[0] eq 'HASH' ? $_[0] : {@_};
                 | 
              
| 290 | 290 | 
                       $self->tag_processors({%{$self->tag_processors}, %{$tag_processors}});
                 | 
              
| ... | ... | 
                  @@ -284,6 +284,7 @@ sub type_rule2_on {
                 | 
              
| 284 | 284 | 
                   | 
              
| 285 | 285 | 
                  # DEPRECATED!  | 
              
| 286 | 286 | 
                   sub end_filter {
                 | 
              
| 287 | 
                  + warn "end_filter method is DEPRECATED!";  | 
              |
| 287 | 288 | 
                  my $self = shift;  | 
              
| 288 | 289 | 
                       if (@_) {
                 | 
              
| 289 | 290 | 
                           my $end_filter = {};
                 | 
              
| ... | ... | 
                  @@ -309,27 +310,24 @@ sub end_filter {
                 | 
              
| 309 | 310 | 
                  }  | 
              
| 310 | 311 | 
                       return $self->{end_filter} ||= {};
                 | 
              
| 311 | 312 | 
                  }  | 
              
| 312 | 
                  -  | 
              |
| 313 | 313 | 
                  # DEPRECATED!  | 
              
| 314 | 314 | 
                   sub remove_end_filter {
                 | 
              
| 315 | 
                  + warn "remove_end_filter is DEPRECATED!";  | 
              |
| 315 | 316 | 
                  my $self = shift;  | 
              
| 316 | 
                  - warn "remove_end_filter is DEPRECATED! use filter_off attribute instead";  | 
              |
| 317 | 317 | 
                       $self->{end_filter} = {};
                 | 
              
| 318 | 318 | 
                  return $self;  | 
              
| 319 | 319 | 
                  }  | 
              
| 320 | 
                  -  | 
              |
| 321 | 320 | 
                  # DEPRECATED!  | 
              
| 322 | 321 | 
                   sub remove_filter {
                 | 
              
| 322 | 
                  + warn "remove_filter is DEPRECATED!";  | 
              |
| 323 | 323 | 
                  my $self = shift;  | 
              
| 324 | 
                  - warn "remove_filter is DEPRECATED! use filter_off attribute instead";  | 
              |
| 325 | 324 | 
                       $self->{filter} = {};
                 | 
              
| 326 | 325 | 
                  return $self;  | 
              
| 327 | 326 | 
                  }  | 
              
| 328 | 
                  -  | 
              |
| 329 | 327 | 
                  # DEPRECATED!  | 
              
| 330 | 328 | 
                   sub default_filter {
                 | 
              
| 331 | 
                  - my $self = shift;  | 
              |
| 332 | 329 | 
                  warn "default_filter is DEPRECATED!";  | 
              
| 330 | 
                  + my $self = shift;  | 
              |
| 333 | 331 | 
                       if (@_) {
                 | 
              
| 334 | 332 | 
                  my $fname = $_[0];  | 
              
| 335 | 333 | 
                           if (@_ && !$fname) {
                 | 
              
| ... | ... | 
                  @@ -344,7 +342,6 @@ sub default_filter {
                 | 
              
| 344 | 342 | 
                  }  | 
              
| 345 | 343 | 
                       return $self->{default_filter};
                 | 
              
| 346 | 344 | 
                  }  | 
              
| 347 | 
                  -  | 
              |
| 348 | 345 | 
                  # DEPRECATED!  | 
              
| 349 | 346 | 
                  has 'filter_check';  | 
              
| 350 | 347 | 
                   | 
              
| ... | ... | 
                  @@ -3286,4 +3286,25 @@ $dbi->execute("insert into table1 (key1) values (:table2.key1)", {'table2.key1'
                 | 
              
| 3286 | 3286 | 
                  $result = $dbi->select(table => 'table1');  | 
              
| 3287 | 3287 | 
                   is($result->one->{key1}, 'A');
                 | 
              
| 3288 | 3288 | 
                   | 
              
| 3289 | 
                  +  | 
              |
| 3290 | 
                  +test 'order';  | 
              |
| 3291 | 
                  +$dbi = DBIx::Custom->connect(dsn => 'dbi:SQLite:dbname=:memory:');  | 
              |
| 3292 | 
                  +{
                 | 
              |
| 3293 | 
                  +    $dbi->execute("create table table1 (key1, key2)");
                 | 
              |
| 3294 | 
                  +    $dbi->insert({key1 => 1, key2 => 1}, table => 'table1');
                 | 
              |
| 3295 | 
                  +    $dbi->insert({key1 => 1, key2 => 3}, table => 'table1');
                 | 
              |
| 3296 | 
                  +    $dbi->insert({key1 => 2, key2 => 2}, table => 'table1');
                 | 
              |
| 3297 | 
                  +    $dbi->insert({key1 => 2, key2 => 4}, table => 'table1');
                 | 
              |
| 3298 | 
                  + my $order = $dbi->order;  | 
              |
| 3299 | 
                  +    $order->prepend('key1', 'key2 desc');
                 | 
              |
| 3300 | 
                  + $result = $dbi->select(table => 'table1', append => "$order");  | 
              |
| 3301 | 
                  +    is_deeply($result->all, [{key1 => 1, key2 => 3}, {key1 => 1, key2 => 1},
                 | 
              |
| 3302 | 
                  +      {key1 => 2, key2 => 4}, {key1 => 2, key2 => 2}]);
                 | 
              |
| 3303 | 
                  +    $order->prepend('key1 desc');
                 | 
              |
| 3304 | 
                  + $result = $dbi->select(table => 'table1', append => "$order");  | 
              |
| 3305 | 
                  +    is_deeply($result->all, [{key1 => 2, key2 => 4}, {key1 => 2, key2 => 2},
                 | 
              |
| 3306 | 
                  +      {key1 => 1, key2 => 3}, {key1 => 1, key2 => 1}]);
                 | 
              |
| 3307 | 
                  +}  | 
              |
| 3308 | 
                  +  | 
              |
| 3309 | 
                  +  | 
              |
| 3289 | 3310 | 
                  =cut  | 
              
| ... | ... | 
                  @@ -3,6 +3,8 @@ use strict;  | 
              
| 3 | 3 | 
                  use warnings;  | 
              
| 4 | 4 | 
                  use DBI;  | 
              
| 5 | 5 | 
                   | 
              
| 6 | 
                  +$SIG{__WARN__} = sub { warn $_[0] unless $_[0] =~ /DEPRECATED/};
                 | 
              |
| 7 | 
                  +  | 
              |
| 6 | 8 | 
                   BEGIN {
                 | 
              
| 7 | 9 | 
                       eval { require DBD::SQLite; 1 }
                 | 
              
| 8 | 10 | 
                  or plan skip_all => 'DBD::SQLite required';  |