Showing 2 changed files with 62 additions and 4 deletions
+6 -4
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 user_tables/],
23
+has [qw/connector dsn password quote user exclude_table user_table_info/],
24 24
     cache => 0,
25 25
     cache_method => sub {
26 26
         sub {
... ...
@@ -312,7 +312,9 @@ sub each_column {
312 312
         my $table = $tables[$i];
313 313
         
314 314
         # Iterate all columns
315
-        my $sth_columns = $self->dbh->column_info(undef, undef, $table, '%');
315
+        my $sth_columns;
316
+        eval {$sth_columns = $self->dbh->column_info(undef, undef, $table, '%')};
317
+        next if $@;
316 318
         while (my $column_info = $sth_columns->fetchrow_hashref) {
317 319
             my $column = $column_info->{COLUMN_NAME};
318 320
             $self->$cb($table, $column, $column_info);
... ...
@@ -323,7 +325,7 @@ sub each_column {
323 325
 sub each_table {
324 326
     my ($self, $cb, %option) = @_;
325 327
     
326
-    my $user_table_infos = $self->user_tables;
328
+    my $user_table_infos = $self->user_table_info;
327 329
     
328 330
     # Iterate tables
329 331
     if ($user_table_infos) {
... ...
@@ -532,7 +534,7 @@ sub get_table_info {
532 534
         exclude => $exclude
533 535
     );
534 536
     
535
-    return $table_info;
537
+    return [sort {$a->{table} cmp $b->{table} } @$table_info];
536 538
 }
537 539
 
538 540
 sub insert {
+56
t/common.t
... ...
@@ -2038,11 +2038,13 @@ is($row->{$key3}, 3);
2038 2038
 
2039 2039
 test 'mycolumn and column';
2040 2040
 $dbi = MyDBI7->connect;
2041
+$dbi->user_table_info($user_table_info);
2041 2042
 eval { $dbi->execute("drop table $table1") };
2042 2043
 eval { $dbi->execute("drop table $table2") };
2043 2044
 $dbi->execute($create_table1);
2044 2045
 $dbi->execute($create_table2);
2045 2046
 $dbi->separator('__');
2047
+$DB::single = 1;
2046 2048
 $dbi->setup_model;
2047 2049
 $dbi->insert(table => $table1, param => {$key1 => 1, $key2 => 2});
2048 2050
 $dbi->insert(table => $table2, param => {$key1 => 1, $key3 => 3});
... ...
@@ -2084,6 +2086,7 @@ like($@, qr/not safety/);
2084 2086
 
2085 2087
 test 'mycolumn';
2086 2088
 $dbi = MyDBI8->connect;
2089
+$dbi->user_table_info($user_table_info);
2087 2090
 eval { $dbi->execute("drop table $table1") };
2088 2091
 eval { $dbi->execute("drop table $table2") };
2089 2092
 $dbi->execute($create_table1);
... ...
@@ -2476,6 +2479,7 @@ is($row->{$key3}, 3);
2476 2479
 
2477 2480
 test 'column separator is default .';
2478 2481
 $dbi = MyDBI7->connect;
2482
+$dbi->user_table_info($user_table_info);
2479 2483
 eval { $dbi->execute("drop table $table1") };
2480 2484
 eval { $dbi->execute("drop table $table2") };
2481 2485
 $dbi->execute($create_table1);
... ...
@@ -2500,6 +2504,7 @@ is_deeply($result->one,
2500 2504
 
2501 2505
 test 'separator';
2502 2506
 $dbi = DBIx::Custom->connect;
2507
+$dbi->user_table_info($user_table_info);
2503 2508
 eval { $dbi->execute("drop table $table1") };
2504 2509
 eval { $dbi->execute("drop table $table2") };
2505 2510
 $dbi->execute($create_table1);
... ...
@@ -2559,6 +2564,7 @@ is_deeply($model2->select->one, {$key1 => 1, $key3 => 3});
2559 2564
 
2560 2565
 test 'filter_off';
2561 2566
 $dbi = DBIx::Custom->connect;
2567
+$dbi->user_table_info($user_table_info);
2562 2568
 eval { $dbi->execute("drop table $table1") };
2563 2569
 eval { $dbi->execute("drop table $table2") };
2564 2570
 $dbi->execute($create_table1);
... ...
@@ -2976,6 +2982,7 @@ like($@, qr/array/);
2976 2982
 
2977 2983
 test 'select() sqlfilter option';
2978 2984
 $dbi = DBIx::Custom->connect;
2985
+$dbi->user_table_info($user_table_info);
2979 2986
 eval { $dbi->execute("drop table $table1") };
2980 2987
 $dbi->execute($create_table1);
2981 2988
 $dbi->insert(table => $table1, param => {$key1 => 1, $key2 => 2});
... ...
@@ -3002,6 +3009,7 @@ ok(!$@);
3002 3009
 
3003 3010
 test 'column table option';
3004 3011
 $dbi = MyDBI9->connect;
3012
+$dbi->user_table_info($user_table_info);
3005 3013
 eval { $dbi->execute("drop table $table1") };
3006 3014
 $dbi->execute($create_table1);
3007 3015
 eval { $dbi->execute("drop table $table2") };
... ...
@@ -3041,6 +3049,7 @@ is_deeply($result->one,
3041 3049
 
3042 3050
 test 'create_model';
3043 3051
 $dbi = DBIx::Custom->connect;
3052
+$dbi->user_table_info($user_table_info);
3044 3053
 eval { $dbi->execute("drop table $table1") };
3045 3054
 eval { $dbi->execute("drop table $table2") };
3046 3055
 $dbi->execute($create_table1);
... ...
@@ -3222,6 +3231,7 @@ is_deeply($model->columns, [$key1, $key2]);
3222 3231
 
3223 3232
 test 'setup_model';
3224 3233
 $dbi = MyDBI1->connect;
3234
+$dbi->user_table_info($user_table_info);
3225 3235
 eval { $dbi->execute("drop table $table1") };
3226 3236
 eval { $dbi->execute("drop table $table2") };
3227 3237
 
... ...
@@ -3259,6 +3269,7 @@ is_deeply($infos,
3259 3269
     ]
3260 3270
     
3261 3271
 );
3272
+
3262 3273
 test 'each_table';
3263 3274
 $dbi = DBIx::Custom->connect;
3264 3275
 eval { $dbi->execute("drop table $table1") };
... ...
@@ -3283,10 +3294,36 @@ is_deeply($infos,
3283 3294
     ]
3284 3295
 );
3285 3296
 
3297
+$dbi = DBIx::Custom->connect;
3298
+eval { $dbi->execute("drop table $table1") };
3299
+eval { $dbi->execute("drop table $table2") };
3300
+$dbi->execute($create_table2);
3301
+$dbi->execute($create_table1_type);
3302
+
3303
+$infos = [];
3304
+$dbi->user_table_info($user_table_info);
3305
+$dbi->each_table(sub {
3306
+    my ($self, $table, $table_info) = @_;
3307
+    
3308
+    if ($table =~ /^table\d/i) {
3309
+         my $info = [$table, $table_info->{TABLE_NAME}];
3310
+         push @$infos, $info;
3311
+    }
3312
+});
3313
+$infos = [sort { $a->[0] cmp $b->[0] || $a->[1] cmp $b->[1] } @$infos];
3314
+is_deeply($infos, 
3315
+    [
3316
+        [$table1, $table1],
3317
+        [$table2, $table2],
3318
+        [$table3, $table3],
3319
+    ]
3320
+);
3321
+
3286 3322
 test 'type_rule into';
3287 3323
 eval { $dbi->execute("drop table $table1") };
3288 3324
 $dbi->execute($create_table1_type);
3289 3325
 $dbi = DBIx::Custom->connect;
3326
+$dbi->user_table_info($user_table_info);
3290 3327
 eval { $dbi->execute("drop table $table1") };
3291 3328
 $dbi->execute($create_table1_type);
3292 3329
 
... ...
@@ -3300,6 +3337,7 @@ $result = $dbi->select(table => $table1);
3300 3337
 like($result->one->{$key1}, qr/^2010-01-01/);
3301 3338
 
3302 3339
 $dbi = DBIx::Custom->connect;
3340
+$dbi->user_table_info($user_table_info);
3303 3341
 eval { $dbi->execute("drop table $table1") };
3304 3342
 $dbi->execute($create_table1_type);
3305 3343
 $dbi->type_rule(
... ...
@@ -3318,6 +3356,7 @@ like($row->{$key1}, qr/^2010-01-03/);
3318 3356
 like($row->{$key2}, qr/^2010-01-01 01:01:03/);
3319 3357
 
3320 3358
 $dbi = DBIx::Custom->connect;
3359
+$dbi->user_table_info($user_table_info);
3321 3360
 eval { $dbi->execute("drop table $table1") };
3322 3361
 $dbi->execute($create_table1_type);
3323 3362
 $dbi->insert({$key1 => '2010-01-03', $key2 => '2010-01-01 01:01:03'}, table => $table1);
... ...
@@ -3339,6 +3378,7 @@ like($row->{$key1}, qr/^2010-01-03/);
3339 3378
 like($row->{$key2}, qr/^2010-01-01 01:01:03/);
3340 3379
 
3341 3380
 $dbi = DBIx::Custom->connect;
3381
+$dbi->user_table_info($user_table_info);
3342 3382
 eval { $dbi->execute("drop table $table1") };
3343 3383
 $dbi->execute($create_table1_type);
3344 3384
 $dbi->insert({$key1 => '2010-01-03', $key2 => '2010-01-01 01:01:03'}, table => $table1);
... ...
@@ -3361,6 +3401,7 @@ like($row->{$key1}, qr/^2010-01-03/);
3361 3401
 like($row->{$key2}, qr/2010-01-01 01:01:03/);
3362 3402
 
3363 3403
 $dbi = DBIx::Custom->connect;
3404
+$dbi->user_table_info($user_table_info);
3364 3405
 eval { $dbi->execute("drop table $table1") };
3365 3406
 $dbi->execute($create_table1_type);
3366 3407
 $dbi->register_filter(convert => sub {
... ...
@@ -3382,6 +3423,7 @@ like($result->fetch->[0], qr/^2010-03-03/);
3382 3423
 
3383 3424
 test 'type_rule and filter order';
3384 3425
 $dbi = DBIx::Custom->connect;
3426
+$dbi->user_table_info($user_table_info);
3385 3427
 eval { $dbi->execute("drop table $table1") };
3386 3428
 $dbi->execute($create_table1_type);
3387 3429
 $dbi->type_rule(
... ...
@@ -3406,6 +3448,7 @@ like($result->fetch_first->[0], qr/^2010-01-09/);
3406 3448
 
3407 3449
 
3408 3450
 $dbi = DBIx::Custom->connect;
3451
+$dbi->user_table_info($user_table_info);
3409 3452
 eval { $dbi->execute("drop table $table1") };
3410 3453
 $dbi->execute($create_table1_type);
3411 3454
 $dbi->type_rule(
... ...
@@ -3431,6 +3474,7 @@ like($result->fetch_first->[0], qr/^2010-01-09/);
3431 3474
 
3432 3475
 test 'type_rule_off';
3433 3476
 $dbi = DBIx::Custom->connect;
3477
+$dbi->user_table_info($user_table_info);
3434 3478
 eval { $dbi->execute("drop table $table1") };
3435 3479
 $dbi->execute($create_table1_type);
3436 3480
 $dbi->type_rule(
... ...
@@ -3446,6 +3490,7 @@ $result = $dbi->select(table => $table1, type_rule_off => 1);
3446 3490
 like($result->type_rule_off->fetch->[0], qr/^2010-01-03/);
3447 3491
 
3448 3492
 $dbi = DBIx::Custom->connect;
3493
+$dbi->user_table_info($user_table_info);
3449 3494
 eval { $dbi->execute("drop table $table1") };
3450 3495
 $dbi->execute($create_table1_type);
3451 3496
 $dbi->type_rule(
... ...
@@ -3461,6 +3506,7 @@ $result = $dbi->select(table => $table1, type_rule_off => 1);
3461 3506
 like($result->one->{$key1}, qr/^2010-01-04/);
3462 3507
 
3463 3508
 $dbi = DBIx::Custom->connect;
3509
+$dbi->user_table_info($user_table_info);
3464 3510
 eval { $dbi->execute("drop table $table1") };
3465 3511
 $dbi->execute($create_table1_type);
3466 3512
 $dbi->type_rule(
... ...
@@ -3476,6 +3522,7 @@ $result = $dbi->select(table => $table1);
3476 3522
 like($result->one->{$key1}, qr/^2010-01-05/);
3477 3523
 
3478 3524
 $dbi = DBIx::Custom->connect;
3525
+$dbi->user_table_info($user_table_info);
3479 3526
 eval { $dbi->execute("drop table $table1") };
3480 3527
 $dbi->execute($create_table1_type);
3481 3528
 $dbi->type_rule(
... ...
@@ -3491,6 +3538,7 @@ $result = $dbi->select(table => $table1);
3491 3538
 like($result->fetch->[0], qr/2010-01-05/);
3492 3539
 
3493 3540
 $dbi = DBIx::Custom->connect;
3541
+$dbi->user_table_info($user_table_info);
3494 3542
 eval { $dbi->execute("drop table $table1") };
3495 3543
 $dbi->execute($create_table1_type);
3496 3544
 $dbi->register_filter(ppp => sub { my $v = shift || ''; $v =~ s/3/4/; return $v });
... ...
@@ -3511,6 +3559,7 @@ eval{$dbi->type_rule(
3511 3559
 like($@, qr/not registered/);
3512 3560
 
3513 3561
 $dbi = DBIx::Custom->connect;
3562
+$dbi->user_table_info($user_table_info);
3514 3563
 eval { $dbi->execute("drop table $table1") };
3515 3564
 $dbi->execute($create_table1_type);
3516 3565
 eval {
... ...
@@ -3532,6 +3581,7 @@ eval {
3532 3581
 like($@, qr/lower/);
3533 3582
 
3534 3583
 $dbi = DBIx::Custom->connect;
3584
+$dbi->user_table_info($user_table_info);
3535 3585
 eval { $dbi->execute("drop table $table1") };
3536 3586
 $dbi->execute($create_table1_type);
3537 3587
 $dbi->type_rule(
... ...
@@ -3548,6 +3598,7 @@ $result->type_rule_off;
3548 3598
 like($result->one->{$key1}, qr/^2010-01-04/);
3549 3599
 
3550 3600
 $dbi = DBIx::Custom->connect;
3601
+$dbi->user_table_info($user_table_info);
3551 3602
 eval { $dbi->execute("drop table $table1") };
3552 3603
 $dbi->execute($create_table1_type);
3553 3604
 $dbi->type_rule(
... ...
@@ -3613,6 +3664,7 @@ like($row->{$key1}, qr/^2010-01-03/);
3613 3664
 like($row->{$key2}, qr/^2010-01-01 01:01:03/);
3614 3665
 
3615 3666
 $dbi = DBIx::Custom->connect;
3667
+$dbi->user_table_info($user_table_info);
3616 3668
 eval { $dbi->execute("drop table $table1") };
3617 3669
 $dbi->execute($create_table1_type);
3618 3670
 $dbi->type_rule(
... ...
@@ -3626,6 +3678,7 @@ $result->filter($key1 => sub { my $v = shift || ''; $v =~ s/4/5/; return $v });
3626 3678
 like($result->one->{$key1}, qr/^2010-01-05/);
3627 3679
 
3628 3680
 $dbi = DBIx::Custom->connect;
3681
+$dbi->user_table_info($user_table_info);
3629 3682
 eval { $dbi->execute("drop table $table1") };
3630 3683
 $dbi->execute($create_table1_type);
3631 3684
 $dbi->type_rule(
... ...
@@ -3639,6 +3692,7 @@ $result->filter($key1 => sub { my $v = shift || ''; $v =~ s/4/5/; return $v });
3639 3692
 like($result->fetch->[0], qr/^2010-01-05/);
3640 3693
 
3641 3694
 $dbi = DBIx::Custom->connect;
3695
+$dbi->user_table_info($user_table_info);
3642 3696
 eval { $dbi->execute("drop table $table1") };
3643 3697
 $dbi->execute($create_table1_type);
3644 3698
 $dbi->type_rule(
... ...
@@ -3662,6 +3716,7 @@ $result = $dbi->select(table => $table1);
3662 3716
 like($result->type_rule_on->fetch_first->[0], qr/^2010-01-07/);
3663 3717
 
3664 3718
 $dbi = DBIx::Custom->connect;
3719
+$dbi->user_table_info($user_table_info);
3665 3720
 eval { $dbi->execute("drop table $table1") };
3666 3721
 $dbi->execute($create_table1_type);
3667 3722
 $dbi->type_rule(
... ...
@@ -3685,6 +3740,7 @@ $result = $dbi->select(table => $table1);
3685 3740
 like($result->type_rule1_on->fetch_first->[0], qr/^2010-01-07/);
3686 3741
 
3687 3742
 $dbi = DBIx::Custom->connect;
3743
+$dbi->user_table_info($user_table_info);
3688 3744
 eval { $dbi->execute("drop table $table1") };
3689 3745
 $dbi->execute($create_table1_type);
3690 3746
 $dbi->type_rule(