| ... | ... |
@@ -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 |
|