Showing 3 changed files with 66 additions and 18 deletions
+2 -1
Changes
... ...
@@ -1,5 +1,6 @@
1 1
 0.1717
2
-    - added EXPERIMENTAL find_tables
2
+    - added EXPERIMEfNTAL get_table_info
3
+    - added user_table_info attribute and each_table find in user_tables if set.
3 4
 0.1716
4 5
     - fixed bugs when using DBD::Oracle.
5 6
     - added EXPERIMENTAL show_tables method.
+53 -17
lib/DBIx/Custom.pm
... ...
@@ -20,7 +20,7 @@ use Scalar::Util qw/weaken/;
20 20
 use constant DEBUG => $ENV{DBIX_CUSTOM_DEBUG} || 0;
21 21
 use constant DEBUG_ENCODING => $ENV{DBIX_CUSTOM_DEBUG_ENCODING} || 'UTF-8';
22 22
 
23
-has [qw/connector dsn password quote user exclude_table/],
23
+has [qw/connector dsn password quote user exclude_table user_tables/],
24 24
     cache => 0,
25 25
     cache_method => sub {
26 26
         sub {
... ...
@@ -323,16 +323,22 @@ sub each_column {
323 323
 sub each_table {
324 324
     my ($self, $cb, %option) = @_;
325 325
     
326
-    my $re = $self->exclude_table || $option{exclude};
326
+    my $user_table_infos = $self->user_tables;
327 327
     
328
-    # Iterate all tables
329
-    my $sth_tables = $self->dbh->table_info;
330
-    while (my $table_info = $sth_tables->fetchrow_hashref) {
331
-        
332
-        # Table
333
-        my $table = $table_info->{TABLE_NAME};
334
-        next if defined $re && $table =~ /$re/;
335
-        $self->$cb($table, $table_info);
328
+    # Iterate tables
329
+    if ($user_table_infos) {
330
+        $self->$cb($_->{table}, $_->{info}) for @$user_table_infos;
331
+    }
332
+    else {
333
+        my $re = $self->exclude_table || $option{exclude};
334
+        my $sth_tables = $self->dbh->table_info;
335
+        while (my $table_info = $sth_tables->fetchrow_hashref) {
336
+            
337
+            # Table
338
+            my $table = $table_info->{TABLE_NAME};
339
+            next if defined $re && $table =~ /$re/;
340
+            $self->$cb($table, $table_info);
341
+        }
336 342
     }
337 343
 }
338 344
 
... ...
@@ -514,16 +520,19 @@ sub execute {
514 520
     else { return $affected }
515 521
 }
516 522
 
517
-sub find_tables {
523
+sub get_table_info {
518 524
     my ($self, %args) = @_;
519 525
     
520 526
     my $exclude = delete $args{exclude};
521 527
     croak qq/"$_" is wrong option/ for keys %args;
522 528
     
523
-    my %tables;
524
-    $self->each_table(sub { push $table{$_[1]}++ }, exclude => $exclude);
529
+    my $table_info = [];
530
+    $self->each_table(
531
+        sub { push @$table_info, {table => $_[1], info => $_[2] } },
532
+        exclude => $exclude
533
+    );
525 534
     
526
-    return [sort keys %tables];
535
+    return $table_info;
527 536
 }
528 537
 
529 538
 sub insert {
... ...
@@ -2108,6 +2117,26 @@ If you want to disable tag parsing functionality, set to 0.
2108 2117
 
2109 2118
 User name, used when C<connect> method is executed.
2110 2119
 
2120
+=head2 C<user_table_info EXPERIMENTAL>
2121
+
2122
+    my $user_table_info = $dbi->user_table_info;
2123
+    $dbi = $dbi->user_table_info($user_table_info);
2124
+
2125
+You can set the following data.
2126
+
2127
+    [
2128
+        {table => 'book', info => {...}},
2129
+        {table => 'author', info => {...}}
2130
+    ]
2131
+
2132
+Usually, you can set return value of C<get_table_info>.
2133
+
2134
+    my $user_table_info = $dbi->get_table_info(exclude => qr/^system/);
2135
+    $dbi->user_table_info($user_table_info);
2136
+
2137
+If C<user_table_info> is set, C<each_table> use C<user_table_info>
2138
+to find table info.
2139
+
2111 2140
 =head1 METHODS
2112 2141
 
2113 2142
 L<DBIx::Custom> inherits all methods from L<Object::Simple>
... ...
@@ -2510,11 +2539,18 @@ Turn C<into2> type rule off.
2510 2539
 
2511 2540
 =back
2512 2541
 
2513
-=head2 C<find_tables EXPERIMENTAL>
2542
+=head2 C<get_table_info EXPERIMENTAL>
2543
+
2544
+    my $tables = $self->get_table_info(exclude => qr/^system_/);
2514 2545
 
2515
-    my $tables = $self->find_tables(exclude => qr/^system_/);
2546
+get table infomation except for one which match C<exclude> pattern.
2547
+
2548
+    [
2549
+        {table => 'book', info => {...}},
2550
+        {table => 'author', info => {...}}
2551
+    ]
2516 2552
 
2517
-Find tables except for one which match C<exclude> pattern.
2553
+You can set this value to C<user_table_info>.
2518 2554
 
2519 2555
 =head2 C<insert>
2520 2556
 
+11
t/common.t
... ...
@@ -76,6 +76,7 @@ my $update_param;
76 76
 my $insert_param;
77 77
 my $join;
78 78
 my $binary;
79
+my $user_table_info;
79 80
 
80 81
 require MyDBI1;
81 82
 {
... ...
@@ -233,6 +234,16 @@ require MyDBI1;
233 234
     }
234 235
 }
235 236
 
237
+# Get user table info
238
+$dbi = DBIx::Custom->connect;
239
+eval { $dbi->execute("drop table $table1") };
240
+eval { $dbi->execute("drop table $table2") };
241
+eval { $dbi->execute("drop table $table3") };
242
+$dbi->execute($create_table1);
243
+$dbi->execute($create_table2);
244
+$dbi->execute($create_table3);
245
+$user_table_info = $dbi->get_table_info(exclude => $dbi->exclude_table);
246
+
236 247
 # Create table
237 248
 $dbi = DBIx::Custom->connect;
238 249
 eval { $dbi->execute("drop table $table1") };