... | ... |
@@ -1,3 +1,5 @@ |
1 |
+0.1624 |
|
2 |
+ added experimental iterate_all_columns method. |
|
1 | 3 |
0.1623 |
2 | 4 |
added experimental auto_filter method |
3 | 5 |
deprecated default_bind_filter and default_fetch_filter because these are global effect. |
... | ... |
@@ -447,6 +447,25 @@ sub insert { |
447 | 447 |
return $ret_val; |
448 | 448 |
} |
449 | 449 |
|
450 |
+sub iterate_all_columns { |
|
451 |
+ my ($self, $cb) = @_; |
|
452 |
+ |
|
453 |
+ # Iterate all tables |
|
454 |
+ my $sth_tables = $self->dbh->table_info; |
|
455 |
+ while (my $table_info = $sth_tables->fetchrow_hashref) { |
|
456 |
+ |
|
457 |
+ # Table |
|
458 |
+ my $table = $table_info->{TABLE_NAME}; |
|
459 |
+ |
|
460 |
+ # Iterate all columns |
|
461 |
+ my $sth_columns = $self->dbh->column_info(undef, undef, $table, '%'); |
|
462 |
+ while (my $column_info = $sth_columns->fetchrow_hashref) { |
|
463 |
+ my $column = $column_info->{COLUMN_NAME}; |
|
464 |
+ $cb->($table, $column, $column_info); |
|
465 |
+ } |
|
466 |
+ } |
|
467 |
+} |
|
468 |
+ |
|
450 | 469 |
sub new { |
451 | 470 |
my $self = shift->SUPER::new(@_); |
452 | 471 |
|
... | ... |
@@ -1120,6 +1139,19 @@ B<Example:> |
1120 | 1139 |
|
1121 | 1140 |
Create a new L<DBIx::Custom> object. |
1122 | 1141 |
|
1142 |
+=head2 C<(experimental) iterate_all_columns> |
|
1143 |
+ |
|
1144 |
+ $dbi->iterate_all_columns( |
|
1145 |
+ sub { |
|
1146 |
+ my ($table, $column, $column_info) = @_; |
|
1147 |
+ |
|
1148 |
+ # do something; |
|
1149 |
+ } |
|
1150 |
+ ); |
|
1151 |
+ |
|
1152 |
+Iterate all columns of all tables. Argument is callback. |
|
1153 |
+You can do anything by callback. |
|
1154 |
+ |
|
1123 | 1155 |
=head2 C<register_filter> |
1124 | 1156 |
|
1125 | 1157 |
$dbi->register_filter(%filters); |
... | ... |
@@ -61,7 +61,7 @@ sub fetch { |
61 | 61 |
return unless @row; |
62 | 62 |
|
63 | 63 |
# Filtering |
64 |
- my $columns = $self->{sth}->{NAME_lc}; |
|
64 |
+ my $columns = $self->{sth}->{NAME}; |
|
65 | 65 |
for (my $i = 0; $i < @$columns; $i++) { |
66 | 66 |
|
67 | 67 |
# Filter name |
... | ... |
@@ -120,7 +120,7 @@ sub fetch_hash { |
120 | 120 |
|
121 | 121 |
# Filter |
122 | 122 |
my $row_hash = {}; |
123 |
- my $columns = $self->{sth}->{NAME_lc}; |
|
123 |
+ my $columns = $self->{sth}->{NAME}; |
|
124 | 124 |
for (my $i = 0; $i < @$columns; $i++) { |
125 | 125 |
|
126 | 126 |
# Filter name |
... | ... |
@@ -25,7 +25,8 @@ sub test { |
25 | 25 |
my $CREATE_TABLE = { |
26 | 26 |
0 => 'create table table1 (key1 char(255), key2 char(255));', |
27 | 27 |
1 => 'create table table1 (key1 char(255), key2 char(255), key3 char(255), key4 char(255), key5 char(255));', |
28 |
- 2 => 'create table table2 (key1 char(255), key3 char(255));' |
|
28 |
+ 2 => 'create table table2 (key1 char(255), key3 char(255));', |
|
29 |
+ 3 => 'create table table1 (key1 Date, key2 datetime);' |
|
29 | 30 |
}; |
30 | 31 |
|
31 | 32 |
my $SELECT_SOURCES = { |
... | ... |
@@ -60,7 +61,7 @@ my $select_query; |
60 | 61 |
my $insert_query; |
61 | 62 |
my $update_query; |
62 | 63 |
my $ret_val; |
63 |
- |
|
64 |
+my $infos; |
|
64 | 65 |
|
65 | 66 |
# Prepare table |
66 | 67 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
... | ... |
@@ -721,4 +722,28 @@ $result->filter({'key2' => 'twice'}); |
721 | 722 |
$rows = $result->fetch_hash_all; |
722 | 723 |
is_deeply($rows, [{key2 => 4, key3 => 18}], "$test : select : join : omit"); |
723 | 724 |
|
725 |
+test 'auto_filter_easy_build'; |
|
726 |
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
|
727 |
+$dbi->execute($CREATE_TABLE->{2}); |
|
728 |
+$dbi->execute($CREATE_TABLE->{3}); |
|
729 |
+ |
|
730 |
+$infos = []; |
|
731 |
+$dbi->iterate_all_columns(sub { |
|
732 |
+ my ($table, $column, $cinfo) = @_; |
|
733 |
+ |
|
734 |
+ if ($table =~ /^table/) { |
|
735 |
+ my $info = [$table, $column, $cinfo->{COLUMN_NAME}]; |
|
736 |
+ push @$infos, $info; |
|
737 |
+ } |
|
738 |
+}); |
|
739 |
+$infos = [sort { $a->[0] cmp $b->[0] || $a->[1] cmp $b->[1] } @$infos]; |
|
740 |
+is_deeply($infos, |
|
741 |
+ [ |
|
742 |
+ ['table1', 'key1', 'key1'], |
|
743 |
+ ['table1', 'key2', 'key2'], |
|
744 |
+ ['table2', 'key1', 'key1'], |
|
745 |
+ ['table2', 'key3', 'key3'] |
|
746 |
+ ] |
|
747 |
+ , $test |
|
748 |
+); |
|
724 | 749 |
|