Showing 4 changed files with 66 additions and 40 deletions
+7
Changes
... ...
@@ -1,3 +1,10 @@
1
+0.1724
2
+    - sqlfilter option is renamed to after_build_sql, sqlfilter is DEPRECATED!
3
+    - removed EXPERIMENTAL flag from DBIx::Custom::Mapper
4
+    - removed EXPERIMENTAL flag from the following DBIx::Custom methods
5
+    insert_timestamp, mapper, update_timestamp
6
+    - removed EXPERIMENTAL flag from the following DBIx::Custom method's option
7
+    timestamp, 
1 8
 0.1723
2 9
     - removed EXPERIMENTAL call_dbi method from DBIx::Custom::Model
3 10
     - removed EXPERIMENTAL map_param method from DBIx::Custom
+40 -39
lib/DBIx/Custom.pm
... ...
@@ -1,7 +1,7 @@
1 1
 package DBIx::Custom;
2 2
 use Object::Simple -base;
3 3
 
4
-our $VERSION = '0.1723';
4
+our $VERSION = '0.1724';
5 5
 use 5.008001;
6 6
 
7 7
 use Carp 'croak';
... ...
@@ -372,7 +372,7 @@ sub each_table {
372 372
     }
373 373
 }
374 374
 
375
-our %VALID_ARGS = map { $_ => 1 } qw/append allow_delete_all
375
+our %VALID_ARGS = map { $_ => 1 } qw/append after_build_sql allow_delete_all
376 376
   allow_update_all bind_type column filter id join param prefix primary_key
377 377
   query relation sqlfilter table table_alias timestamp type type_rule_off
378 378
   type_rule1_off type_rule2_off wrap/;
... ...
@@ -400,7 +400,8 @@ sub execute {
400 400
     };
401 401
     my $query_return = delete $args{query};
402 402
     my $table_alias = delete $args{table_alias} || {};
403
-    my $sqlfilter = $args{sqlfilter};
403
+    my $after_build_sql = $args{after_build_sql} || $args{sqlfilter};
404
+    warn "sqlfilter option is DEPRECATED" if $args{sqlfilter};
404 405
     my $id = delete $args{id};
405 406
     my $primary_key = delete $args{primary_key};
406 407
     croak "insert method primary_key option " .
... ...
@@ -419,7 +420,7 @@ sub execute {
419 420
           unless $VALID_ARGS{$name};
420 421
     }
421 422
     
422
-    $query = $self->_create_query($query, $sqlfilter) unless ref $query;
423
+    $query = $self->_create_query($query, $after_build_sql) unless ref $query;
423 424
     
424 425
     # Save query
425 426
     $self->last_sql($query->sql);
... ...
@@ -1206,7 +1207,7 @@ sub where { DBIx::Custom::Where->new(dbi => shift, @_) }
1206 1207
 
1207 1208
 sub _create_query {
1208 1209
     
1209
-    my ($self, $source, $sqlfilter) = @_;
1210
+    my ($self, $source, $after_build_sql) = @_;
1210 1211
     
1211 1212
     # Cache
1212 1213
     my $cache = $self->cache;
... ...
@@ -1252,9 +1253,9 @@ sub _create_query {
1252 1253
     }
1253 1254
 
1254 1255
     # Filter SQL
1255
-    if ($sqlfilter) {
1256
+    if ($after_build_sql) {
1256 1257
         my $sql = $query->sql;
1257
-        $sql = $sqlfilter->($sql);
1258
+        $sql = $after_build_sql->($sql);
1258 1259
         $query->sql($sql);
1259 1260
     }
1260 1261
         
... ...
@@ -2379,9 +2380,9 @@ prefix before table name section.
2379 2380
 
2380 2381
 Same as C<execute> method's C<query> option.
2381 2382
 
2382
-=item C<sqlfilter>
2383
+=item C<after_build_sql>
2383 2384
 
2384
-Same as C<execute> method's C<sqlfilter> option.
2385
+Same as C<execute> method's C<after_build_sql> option.
2385 2386
 
2386 2387
 =item C<table>
2387 2388
 
... ...
@@ -2602,28 +2603,25 @@ and don't forget to sort $row values by $row key asc order.
2602 2603
 
2603 2604
 See C<id> option.
2604 2605
 
2605
-=item C<sqlfilter> 
2606
+=item C<after_build_sql> 
2606 2607
 
2607
-SQL filter function.
2608
+You can filter sql after the sql is build.
2608 2609
 
2609
-    sqlfilter => $code_ref
2610
+    after_build_sql => $code_ref
2610 2611
 
2611
-This option is generally for Oracle and SQL Server paging process.
2612
-    
2613
-    my $limit = sub {
2614
-        my ($sql, $count, $offset) = @_;
2615
-        
2616
-        my $min = $offset + 1;
2617
-        my $max = $offset + $count;
2618
-        
2619
-        $sql = "select * from ( $sql ) as t where rnum >= $min rnum <= $max";
2620
-        
2621
-        return $sql;
2622
-    }
2623
-    $dbi->select(... column => ['ROWNUM rnom'], sqlfilter => sub {
2624
-        my $sql = shift;
2625
-        return $limit->($sql, 100, 50);
2626
-    })
2612
+The following one is one example.
2613
+
2614
+    $dbi->select(
2615
+        table => 'book',
2616
+        column => 'distinct(name)',
2617
+        after_build_sql => sub {
2618
+            "select count(*) from ($_[0]) as t1"
2619
+        }
2620
+    );
2621
+
2622
+The following SQL is executed.
2623
+
2624
+    select count(*) from (select distinct(name) from book) as t1;
2627 2625
 
2628 2626
 =item C<table>
2629 2627
     
... ...
@@ -2762,9 +2760,9 @@ Primary key. This is used by C<id> option.
2762 2760
 
2763 2761
 Same as C<execute> method's C<query> option.
2764 2762
 
2765
-=item C<sqlfilter>
2763
+=item C<after_build_sql>
2766 2764
 
2767
-Same as C<execute> method's C<sqlfilter> option.
2765
+Same as C<execute> method's C<after_build_sql> option.
2768 2766
 
2769 2767
 =item C<table>
2770 2768
 
... ...
@@ -2776,7 +2774,7 @@ Table name.
2776 2774
 
2777 2775
 Same as C<execute> method's C<type_rule_off> option.
2778 2776
 
2779
-=item C<timestamp EXPERIMENTAL>
2777
+=item C<timestamp>
2780 2778
 
2781 2779
     timestamp => 1
2782 2780
 
... ...
@@ -2868,7 +2866,7 @@ You can get model object by C<model>.
2868 2866
 
2869 2867
 See L<DBIx::Custom::Model> to know model features.
2870 2868
 
2871
-=head2 C<insert_timestamp EXPERIMENTAL>
2869
+=head2 C<insert_timestamp>
2872 2870
 
2873 2871
     $dbi->insert_timestamp(
2874 2872
       [qw/created_at updated_at/] => sub { localtime });
... ...
@@ -2876,7 +2874,9 @@ See L<DBIx::Custom::Model> to know model features.
2876 2874
 Parameter for timestamp columns when C<insert> method is executed
2877 2875
 with C<timestamp> option.
2878 2876
 
2879
-=head2 C<mapper EXPERIMENTAL>
2877
+If multiple column are specified, same value is used.
2878
+
2879
+=head2 C<mapper>
2880 2880
 
2881 2881
     my $mapper = $dbi->mapper(param => $param);
2882 2882
 
... ...
@@ -3199,9 +3199,9 @@ Primary key. This is used by C<id> option.
3199 3199
 
3200 3200
 Same as C<execute> method's C<query> option.
3201 3201
 
3202
-=item C<sqlfilter>
3202
+=item C<after_build_sql>
3203 3203
 
3204
-Same as C<execute> method's C<sqlfilter> option
3204
+Same as C<execute> method's C<after_build_sql> option
3205 3205
 
3206 3206
 =item C<table>
3207 3207
 
... ...
@@ -3324,9 +3324,9 @@ Primary key. This is used by C<id> option.
3324 3324
 
3325 3325
 Same as C<execute> method's C<query> option.
3326 3326
 
3327
-=item C<sqlfilter>
3327
+=item C<after_build_sql>
3328 3328
 
3329
-Same as C<execute> method's C<sqlfilter> option.
3329
+Same as C<execute> method's C<after_build_sql> option.
3330 3330
 
3331 3331
 =item C<table>
3332 3332
 
... ...
@@ -3334,7 +3334,7 @@ Same as C<execute> method's C<sqlfilter> option.
3334 3334
 
3335 3335
 Table name.
3336 3336
 
3337
-=item C<timestamp EXPERIMENTAL>
3337
+=item C<timestamp>
3338 3338
 
3339 3339
     timestamp => 1
3340 3340
 
... ...
@@ -3394,7 +3394,7 @@ Create update parameter tag.
3394 3394
 
3395 3395
     set title = :title, author = :author
3396 3396
 
3397
-=head2 C<insert_timestamp EXPERIMENTAL>
3397
+=head2 C<update_timestamp>
3398 3398
 
3399 3399
     $dbi->update_timestamp(updated_at => sub { localtime });
3400 3400
 
... ...
@@ -3489,6 +3489,7 @@ L<DBIx::Custom>
3489 3489
     select method param option # will be removed at 2017/1/1
3490 3490
     select method column option [COLUMN, as => ALIAS] format
3491 3491
       # will be removed at 2017/1/1
3492
+    execute method's sqlfilter option # will be removed at 2017/1/1
3492 3493
     
3493 3494
     # Others
3494 3495
     execute("select * from {= title}"); # execute method's
+1 -1
lib/DBIx/Custom/Mapper.pm
... ...
@@ -108,7 +108,7 @@ sub _condition_to_sub {
108 108
 
109 109
 =head1 NAME
110 110
 
111
-DBIx::Custom::Mapper - Mapper of parameter EXPERIMENTAL
111
+DBIx::Custom::Mapper - Mapper of parameter
112 112
 
113 113
 =head1 SYNOPSYS
114 114
 
+18
t/common.t
... ...
@@ -3085,6 +3085,24 @@ $rows = $dbi->select(
3085 3085
 )->all;
3086 3086
 is_deeply($rows, [{$key1 => 1}]);
3087 3087
 
3088
+test 'select() after_build_sql option';
3089
+$dbi = DBIx::Custom->connect;
3090
+$dbi->user_table_info($user_table_info);
3091
+eval { $dbi->execute("drop table $table1") };
3092
+$dbi->execute($create_table1);
3093
+$dbi->insert(table => $table1, param => {$key1 => 1, $key2 => 2});
3094
+$dbi->insert(table => $table1, param => {$key1 => 2, $key2 => 3});
3095
+$rows = $dbi->select(
3096
+    table => $table1,
3097
+    column => $key1,
3098
+    after_build_sql => sub {
3099
+        my $sql = shift;
3100
+        $sql = "select * from ( $sql ) t where $key1 = 1";
3101
+        return $sql;
3102
+    }
3103
+)->all;
3104
+is_deeply($rows, [{$key1 => 1}]);
3105
+
3088 3106
 test 'dbi method from model';
3089 3107
 $dbi = MyDBI9->connect;
3090 3108
 eval { $dbi->execute("drop table $table1") };