... | ... |
@@ -1,4 +1,8 @@ |
1 |
+0.1746 |
|
2 |
+ - micro optimization |
|
1 | 3 |
0.1745 |
4 |
+ - DBIx::Custom::Order prepend method receiving array reference |
|
5 |
+ is DEPRECATED! |
|
2 | 6 |
- DBIx::Custom::QueryBuilder class is DEPRECATED! |
3 | 7 |
- added DBIX_CUSTOM_DISABLE_MODEL_EXECUTE environment variable |
4 | 8 |
- added DBIX_CUSTOM_TAG_PARSE environment variable |
... | ... |
@@ -3511,6 +3511,12 @@ L<DBIx::Custom::Tag> |
3511 | 3511 |
|
3512 | 3512 |
This module is DEPRECATED! # will be removed at 2017/1/1 |
3513 | 3513 |
|
3514 |
+L<DBIx::Custom::Order> |
|
3515 |
+ |
|
3516 |
+ # Other |
|
3517 |
+ prepend method array reference receiving |
|
3518 |
+ $order->prepend(['book', 'desc']); # will be removed 2017/1/1 |
|
3519 |
+ |
|
3514 | 3520 |
=head1 BACKWARDS COMPATIBILITY POLICY |
3515 | 3521 |
|
3516 | 3522 |
If a functionality is DEPRECATED, you can know it by DEPRECATED warnings |
... | ... |
@@ -13,6 +13,8 @@ sub prepend { |
13 | 13 |
|
14 | 14 |
for my $order (reverse @_) { |
15 | 15 |
if (ref $order eq 'ARRAY') { |
16 |
+ warn "prepend method receiving array reference is DEPRECATED! " . |
|
17 |
+ "use q method to quote column name."; |
|
16 | 18 |
my $column = shift @$order; |
17 | 19 |
$column = $self->dbi->q($column) if defined $column; |
18 | 20 |
my $derection = shift @$order; |
... | ... |
@@ -83,18 +85,6 @@ and implements the following new ones. |
83 | 85 |
|
84 | 86 |
Prepend order parts to C<orders>. |
85 | 87 |
|
86 |
-You can pass array reference, which contain column name and direction. |
|
87 |
-Column name is quoted properly |
|
88 |
- |
|
89 |
- # Column name and direction |
|
90 |
- $order->prepend(['book-title']); |
|
91 |
- $order->prepend([qw/book-title desc/]); |
|
92 |
- |
|
93 |
-This is expanded to the following way. |
|
94 |
- |
|
95 |
- "book-title" |
|
96 |
- "book-title" desc |
|
97 |
- |
|
98 | 88 |
=head2 C<to_string> |
99 | 89 |
|
100 | 90 |
my $order_by = $order->to_string; |
... | ... |
@@ -39,6 +39,121 @@ sub filter { |
39 | 39 |
return $self->{filter} ||= {}; |
40 | 40 |
} |
41 | 41 |
|
42 |
+sub _cache { |
|
43 |
+ my $self = shift; |
|
44 |
+ $self->{_type_map} = {}; |
|
45 |
+ $self->{_pos} = {}; |
|
46 |
+ $self->{_columns} = {}; |
|
47 |
+ for (my $i = 0; $i < @{$self->{sth}->{NAME}}; $i++) { |
|
48 |
+ my $type = lc $self->{sth}{TYPE}[$i]; |
|
49 |
+ my $name = $self->{sth}{NAME}[$i]; |
|
50 |
+ $self->{_type_map}{$type} ||= []; |
|
51 |
+ push @{$self->{_type_map}{$type}}, $name; |
|
52 |
+ $self->{_pos}{$name} ||= []; |
|
53 |
+ push @{$self->{_pos}{$name}}, $i; |
|
54 |
+ $self->{_columns}{$name} = 1; |
|
55 |
+ } |
|
56 |
+ $self->{_cache} = 1; |
|
57 |
+} |
|
58 |
+ |
|
59 |
+=pod |
|
60 |
+sub fetch { |
|
61 |
+ my $self = shift; |
|
62 |
+ |
|
63 |
+ # Info |
|
64 |
+ $self->_cache unless $self->{_cache}; |
|
65 |
+ |
|
66 |
+ # Fetch |
|
67 |
+ my @row = $self->{sth}->fetchrow_array; |
|
68 |
+ return unless @row; |
|
69 |
+ |
|
70 |
+ # Type rule |
|
71 |
+ if ((my $from = $self->type_rule->{from1}) && !$self->{type_rule_off} && !$self->{type_rule1_off}) { |
|
72 |
+ for my $type (keys %$from) { |
|
73 |
+ for my $column (@{$self->{_type_map}->{$type}}) { |
|
74 |
+ $row[$_] = $from->{$type}->($row[$_]) |
|
75 |
+ for @{$self->{_pos}{$column}}; |
|
76 |
+ } |
|
77 |
+ } |
|
78 |
+ } |
|
79 |
+ if ((my $from = $self->type_rule->{from2}) && !$self->{type_rule_off} && !$self->{type_rule2_off}) { |
|
80 |
+ for my $type (keys %$from) { |
|
81 |
+ for my $column (@{$self->{_type_map}->{$type}}) { |
|
82 |
+ $row[$_] = $from->{$type}->($row[$_]) |
|
83 |
+ for @{$self->{_pos}{$column}}; |
|
84 |
+ } |
|
85 |
+ } |
|
86 |
+ } |
|
87 |
+ |
|
88 |
+ # Filter |
|
89 |
+ if (($self->{filter} || $self->{default_filter}) && !$self->{filter_off}) { |
|
90 |
+ for my $column (keys %{$self->{filter}}) { |
|
91 |
+ $row[$_] = ($self->{filter}->{$column} || $self->{default_filter} || sub { shift }) |
|
92 |
+ ->($row[$_]) |
|
93 |
+ for @{$self->{_pos}{$column}}; |
|
94 |
+ } |
|
95 |
+ } |
|
96 |
+ if ($self->{end_filter} && !$self->{filter_off}) { |
|
97 |
+ for my $column (keys %{$self->{end_filter}}) { |
|
98 |
+ $row[$_] = $self->{end_filter}->{$column}->($row[$_]) |
|
99 |
+ for @{$self->{_pos}{$column}}; |
|
100 |
+ } |
|
101 |
+ } |
|
102 |
+ |
|
103 |
+ return \@row; |
|
104 |
+} |
|
105 |
+=cut |
|
106 |
+ |
|
107 |
+sub fetch_hash { |
|
108 |
+ my $self = shift; |
|
109 |
+ |
|
110 |
+ # Info |
|
111 |
+ $self->_cache unless $self->{_cache}; |
|
112 |
+ |
|
113 |
+ # Fetch |
|
114 |
+ return unless my $row = $self->{sth}->fetchrow_hashref; |
|
115 |
+ |
|
116 |
+ # Type rule |
|
117 |
+ if ($self->{type_rule}->{from1} && |
|
118 |
+ !$self->{type_rule_off} && !$self->{type_rule1_off}) |
|
119 |
+ { |
|
120 |
+ my $from = $self->{type_rule}->{from1}; |
|
121 |
+ for my $type (keys %$from) { |
|
122 |
+ $from->{$type} and $row->{$_} = $from->{$type}->($row->{$_}) |
|
123 |
+ for @{$self->{_type_map}->{$type}}; |
|
124 |
+ } |
|
125 |
+ } |
|
126 |
+ if ($self->{type_rule}->{from2} && |
|
127 |
+ !$self->{type_rule_off} && !$self->{type_rule2_off}) |
|
128 |
+ { |
|
129 |
+ my $from = $self->{type_rule}->{from2}; |
|
130 |
+ for my $type (keys %{$self->{type_rule}->{from2}}) { |
|
131 |
+ $from->{$type} and $row->{$_} = $from->{$type}->($row->{$_}) |
|
132 |
+ for @{$self->{_type_map}->{$type}}; |
|
133 |
+ } |
|
134 |
+ } |
|
135 |
+ # Filter |
|
136 |
+ if (($self->{filter} || $self->{default_filter}) && |
|
137 |
+ !$self->{filter_off}) |
|
138 |
+ { |
|
139 |
+ my @columns = $self->{default_filter} ? keys %{$self->{_columns}} |
|
140 |
+ : keys %{$self->{filter}}; |
|
141 |
+ |
|
142 |
+ for my $column (@columns) { |
|
143 |
+ next unless exists $row->{$column}; |
|
144 |
+ my $filter = exists $self->{filter}->{$column} ? $self->{filter}->{$column} |
|
145 |
+ : $self->{default_filter}; |
|
146 |
+ $row->{$column} = $filter->($row->{$column}) if $filter; |
|
147 |
+ } |
|
148 |
+ } |
|
149 |
+ if ($self->{end_filter} && !$self->{filter_off}) { |
|
150 |
+ exists $self->{_columns}{$_} && $self->{end_filter}->{$_} and |
|
151 |
+ $row->{$_} = $self->{end_filter}->{$_}->($row->{$_}) |
|
152 |
+ for keys %{$self->{end_filter}}; |
|
153 |
+ } |
|
154 |
+ $row; |
|
155 |
+} |
|
156 |
+ |
|
42 | 157 |
sub fetch { |
43 | 158 |
my $self = shift; |
44 | 159 |
|
... | ... |
@@ -104,50 +219,6 @@ sub fetch_first { |
104 | 219 |
return $row; |
105 | 220 |
} |
106 | 221 |
|
107 |
-sub fetch_hash { |
|
108 |
- my $self = shift; |
|
109 |
- |
|
110 |
- # Info |
|
111 |
- my $columns = $self->{sth}->{NAME}; |
|
112 |
- my $types = $self->{sth}->{TYPE}; |
|
113 |
- |
|
114 |
- # Fetch |
|
115 |
- my $row = $self->{sth}->fetchrow_arrayref; |
|
116 |
- return unless $row; |
|
117 |
- |
|
118 |
- # Filter |
|
119 |
- my $hash_row = {}; |
|
120 |
- my $filter = $self->filter; |
|
121 |
- my $end_filter = $self->{end_filter} || {}; |
|
122 |
- my $type_rule1 = $self->type_rule->{from1} || {}; |
|
123 |
- my $type_rule2 = $self->type_rule->{from2} || {}; |
|
124 |
- for (my $i = 0; $i < @$columns; $i++) { |
|
125 |
- |
|
126 |
- # Column |
|
127 |
- my $column = $columns->[$i]; |
|
128 |
- $hash_row->{$column} = $row->[$i]; |
|
129 |
- |
|
130 |
- # Type rule |
|
131 |
- my $type_filter1 = $type_rule1->{lc($types->[$i])}; |
|
132 |
- $hash_row->{$column} = $type_filter1->($hash_row->{$column}) |
|
133 |
- if !$self->{type_rule_off} && !$self->{type_rule1_off} |
|
134 |
- && $type_filter1; |
|
135 |
- my $type_filter2 = $type_rule2->{lc($types->[$i])}; |
|
136 |
- $hash_row->{$column} = $type_filter2->($hash_row->{$column}) |
|
137 |
- if !$self->{type_rule_off} && !$self->{type_rule2_off} |
|
138 |
- && $type_filter2; |
|
139 |
- |
|
140 |
- # Filter |
|
141 |
- my $f = $filter->{$column} || $self->{default_filter}; |
|
142 |
- $hash_row->{$column} = $f->($hash_row->{$column}) |
|
143 |
- if $f && !$self->{filter_off}; |
|
144 |
- $hash_row->{$column} = $end_filter->{$column}->($hash_row->{$column}) |
|
145 |
- if $end_filter->{$column} && !$self->{filter_off}; |
|
146 |
- } |
|
147 |
- |
|
148 |
- return $hash_row; |
|
149 |
-} |
|
150 |
- |
|
151 | 222 |
sub fetch_hash_all { |
152 | 223 |
my $self = shift; |
153 | 224 |
|