Showing 3 changed files with 50 additions and 30 deletions
+19 -4
lib/DBIx/Custom.pm 1000644 → 1000755
... ...
@@ -234,8 +234,11 @@ sub _build_bind_values {
234 234
     my $count = {};
235 235
     foreach my $column (@{$query->columns}) {
236 236
         
237
+        croak "\"$column\" is not exists in params"
238
+          unless exists $params->{$column};
239
+        
237 240
         # Value
238
-        my $value = ref $params->{$column}
241
+        my $value = ref $params->{$column} eq 'ARRAY'
239 242
                   ? $params->{$column}->[$count->{$column} || 0]
240 243
                   : $params->{$column};
241 244
         
... ...
@@ -245,9 +248,21 @@ sub _build_bind_values {
245 248
         # Filter name
246 249
         my $fname = $filter->{$column} || $self->default_query_filter || '';
247 250
         
248
-        my $filters = $self->filters;
249
-        push @bind_values, $filters->{$fname}
250
-                         ? $filters->{$fname}->($value)
251
+        my $filter_func;
252
+        if ($fname) {
253
+            
254
+            if (ref $fname eq 'CODE') {
255
+                $filter_func = $fname;
256
+            }
257
+            else {
258
+                my $filters = $self->filters;
259
+                croak "Not exists filter \"$fname\"" unless exists $filters->{$fname};
260
+                $filter_func = $filters->{$fname};
261
+            }            
262
+        }
263
+        
264
+        push @bind_values, $filter_func
265
+                         ? $filter_func->($value)
251 266
                          : $value;
252 267
         
253 268
         # Count up 
+1
lib/DBIx/Custom/Result.pm
... ...
@@ -67,6 +67,7 @@ sub fetch_hash {
67 67
     # Filter
68 68
     my $row_hash = {};
69 69
     for (my $i = 0; $i < @$columns; $i++) {
70
+        
70 71
         my $fname  = $filter->{$columns->[$i]} || $self->{default_filter} || '';
71 72
         
72 73
         if ($fname) {
+30 -26
lib/DBIx/Custom/SQLTemplate.pm 1000644 → 1000755
... ...
@@ -9,29 +9,12 @@ use Carp 'croak';
9 9
 use DBIx::Custom::Query;
10 10
 use DBIx::Custom::SQLTemplate::TagProcessor;
11 11
 
12
-__PACKAGE__->dual_attr('tag_processors', default => sub { {} },
13
-                                         inherit => 'hash_copy');
14
-
15
-__PACKAGE__->dual_attr('tag_start', default => '{', inherit => 'scalar_copy');
16
-__PACKAGE__->dual_attr('tag_end',   default => '}', inherit => 'scalar_copy');
17
-
18
-__PACKAGE__->dual_attr('tag_syntax', inherit => 'scalar_copy');
19
-
20
-__PACKAGE__->register_tag_processor(
21
-    '?'      => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_placeholder_tag,
22
-    '='      => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_basic_tag,
23
-    '<>'     => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_basic_tag,
24
-    '>'      => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_basic_tag,
25
-    '<'      => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_basic_tag,
26
-    '>='     => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_basic_tag,
27
-    '<='     => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_basic_tag,
28
-    'like'   => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_basic_tag,
29
-    'in'     => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_in_tag,
30
-    'insert' => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_insert_tag,
31
-    'update' => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_update_tag
32
-);
33
-
34
-__PACKAGE__->tag_syntax(<< 'EOS');
12
+__PACKAGE__->attr('tag_processors' => sub { {} });
13
+
14
+__PACKAGE__->attr(tag_start => '{');
15
+__PACKAGE__->attr(tag_end   => '}');
16
+
17
+__PACKAGE__->attr('tag_syntax' => <<'EOS');
35 18
 [tag]                     [expand]
36 19
 {? name}                  ?
37 20
 {= name}                  name = ?
... ...
@@ -49,12 +32,31 @@ __PACKAGE__->tag_syntax(<< 'EOS');
49 32
 {update key1 key2}    set key1 = ?, key2 = ?
50 33
 EOS
51 34
 
35
+sub new {
36
+    my $self = shift->SUPER::new;
37
+    
38
+    $self->register_tag_processor(
39
+        '?'      => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_placeholder_tag,
40
+        '='      => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_basic_tag,
41
+        '<>'     => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_basic_tag,
42
+        '>'      => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_basic_tag,
43
+        '<'      => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_basic_tag,
44
+        '>='     => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_basic_tag,
45
+        '<='     => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_basic_tag,
46
+        'like'   => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_basic_tag,
47
+        'in'     => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_in_tag,
48
+        'insert' => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_insert_tag,
49
+        'update' => \&DBIx::Custom::SQLTemplate::TagProcessors::expand_update_tag
50
+    );
51
+    
52
+    return $self;
53
+}
52 54
 
53 55
 sub register_tag_processor {
54
-    my $invocant = shift;
56
+    my $self = shift;
55 57
     my $tag_processors = ref $_[0] eq 'HASH' ? $_[0] : {@_};
56
-    $invocant->tag_processors({%{$invocant->tag_processors}, %{$tag_processors}});
57
-    return $invocant;
58
+    $self->tag_processors({%{$self->tag_processors}, %{$tag_processors}});
59
+    return $self;
58 60
 }
59 61
 
60 62
 sub clone {
... ...
@@ -262,6 +264,8 @@ Default is '}'
262 264
 This class is L<Object::Simple> subclass.
263 265
 You can use all methods of L<Object::Simple>
264 266
 
267
+=head2 new
268
+
265 269
 =head2 create_query
266 270
     
267 271
 Create L<DBIx::Custom::Query> object parsing SQL template