renamed DBIx::Custom::TagProcessor to DBIx::Custom...
...::Tag, and function names is...
... | ... |
@@ -1,5 +1,10 @@ |
1 | 1 |
0.1637 |
2 | 2 |
renamed dbi_options to dbi_option. dbi_options is available, but deprecated. |
3 |
+ renamed DBIx::Custom::TagProcessor to DBIx::Custom::Tag, and function names is cleanuped. |
|
4 |
+ renamed register_tag_processor to register_tag. register_tag_processor is available, but deprecated. |
|
5 |
+ renamed tag_processors to tags. tag_prosessors is available, but deprecated. |
|
6 |
+ improved error message |
|
7 |
+ build all clause if param is undefined. |
|
3 | 8 |
0.1636 |
4 | 9 |
added tests and cleanup |
5 | 10 |
0.1635 |
... | ... |
@@ -1,6 +1,6 @@ |
1 | 1 |
package DBIx::Custom; |
2 | 2 |
|
3 |
-our $VERSION = '0.1636'; |
|
3 |
+our $VERSION = '0.1637'; |
|
4 | 4 |
|
5 | 5 |
use 5.008001; |
6 | 6 |
use strict; |
... | ... |
@@ -223,7 +223,7 @@ sub create_query { |
223 | 223 |
# Prepare statement handle |
224 | 224 |
my $sth; |
225 | 225 |
eval { $sth = $self->dbh->prepare($query->{sql})}; |
226 |
- $self->_croak($@, qq{. SQL: "$query->{sql}"}) if $@; |
|
226 |
+ $self->_croak($@, qq{. Following SQL is executed. "$query->{sql}"}) if $@; |
|
227 | 227 |
|
228 | 228 |
# Set statement handle |
229 | 229 |
$query->sth($sth); |
... | ... |
@@ -339,7 +339,7 @@ sub execute{ |
339 | 339 |
my $sth = $query->sth; |
340 | 340 |
my $affected; |
341 | 341 |
eval {$affected = $sth->execute(@$binds)}; |
342 |
- $self->_croak($@) if $@; |
|
342 |
+ $self->_croak($@, qq{. Following SQL is executed. "$query->{sql}"}) if $@; |
|
343 | 343 |
|
344 | 344 |
# Return resultset if select statement is executed |
345 | 345 |
if ($sth->{NUM_OF_FIELDS}) { |
... | ... |
@@ -465,9 +465,7 @@ sub register_filter { |
465 | 465 |
return $invocant; |
466 | 466 |
} |
467 | 467 |
|
468 |
-sub register_tag_processor { |
|
469 |
- return shift->query_builder->register_tag_processor(@_); |
|
470 |
-} |
|
468 |
+sub register_tag { shift->query_builder->register_tag(@_) } |
|
471 | 469 |
|
472 | 470 |
our %VALID_SELECT_ARGS |
473 | 471 |
= map { $_ => 1 } qw/table column where append relation filter query/; |
... | ... |
@@ -730,7 +728,7 @@ sub _croak { |
730 | 728 |
} |
731 | 729 |
} |
732 | 730 |
|
733 |
-# DEPRECATED! |
|
731 |
+# Following methos are DEPRECATED! |
|
734 | 732 |
__PACKAGE__->attr( |
735 | 733 |
dbi_options => sub { {} }, |
736 | 734 |
filter_check => 1 |
... | ... |
@@ -779,6 +777,10 @@ sub default_fetch_filter { |
779 | 777 |
return $self->{default_in_filter}; |
780 | 778 |
} |
781 | 779 |
|
780 |
+sub register_tag_processor { |
|
781 |
+ return shift->query_builder->register_tag_processor(@_); |
|
782 |
+} |
|
783 |
+ |
|
782 | 784 |
1; |
783 | 785 |
|
784 | 786 |
=head1 NAME |
... | ... |
@@ -1180,9 +1182,9 @@ C<default_filter> and C<filter> of C<DBIx::Custom::Result> |
1180 | 1182 |
|
1181 | 1183 |
=back |
1182 | 1184 |
|
1183 |
-=head2 C<register_tag_processor> |
|
1185 |
+=head2 C<register_tag> |
|
1184 | 1186 |
|
1185 |
- $dbi->register_tag_processor( |
|
1187 |
+ $dbi->register_tag( |
|
1186 | 1188 |
limit => sub { |
1187 | 1189 |
...; |
1188 | 1190 |
} |
... | ... |
@@ -7,27 +7,26 @@ use base 'Object::Simple'; |
7 | 7 |
|
8 | 8 |
use Carp 'croak'; |
9 | 9 |
use DBIx::Custom::Query; |
10 |
-use DBIx::Custom::TagProcessor; |
|
10 |
+use DBIx::Custom::Tag; |
|
11 | 11 |
|
12 | 12 |
# Carp trust relationship |
13 | 13 |
push @DBIx::Custom::CARP_NOT, __PACKAGE__; |
14 | 14 |
push @DBIx::Custom::Where::CARP_NOT, __PACKAGE__; |
15 | 15 |
|
16 |
- |
|
17 | 16 |
# Attributes |
18 |
-__PACKAGE__->attr('tag_processors' => sub { |
|
17 |
+__PACKAGE__->attr('tags' => sub { |
|
19 | 18 |
{ |
20 |
- '?' => \&DBIx::Custom::TagProcessor::expand_placeholder_tag, |
|
21 |
- '=' => \&DBIx::Custom::TagProcessor::expand_equal_tag, |
|
22 |
- '<>' => \&DBIx::Custom::TagProcessor::expand_not_equal_tag, |
|
23 |
- '>' => \&DBIx::Custom::TagProcessor::expand_greater_than_tag, |
|
24 |
- '<' => \&DBIx::Custom::TagProcessor::expand_lower_than_tag, |
|
25 |
- '>=' => \&DBIx::Custom::TagProcessor::expand_greater_than_equal_tag, |
|
26 |
- '<=' => \&DBIx::Custom::TagProcessor::expand_lower_than_equal_tag, |
|
27 |
- 'like' => \&DBIx::Custom::TagProcessor::expand_like_tag, |
|
28 |
- 'in' => \&DBIx::Custom::TagProcessor::expand_in_tag, |
|
29 |
- 'insert_param' => \&DBIx::Custom::TagProcessor::expand_insert_param_tag, |
|
30 |
- 'update_param' => \&DBIx::Custom::TagProcessor::expand_update_param_tag |
|
19 |
+ '?' => \&DBIx::Custom::Tag::placeholder, |
|
20 |
+ '=' => \&DBIx::Custom::Tag::equal, |
|
21 |
+ '<>' => \&DBIx::Custom::Tag::not_equal, |
|
22 |
+ '>' => \&DBIx::Custom::Tag::greater_than, |
|
23 |
+ '<' => \&DBIx::Custom::Tag::lower_than, |
|
24 |
+ '>=' => \&DBIx::Custom::Tag::greater_than_equal, |
|
25 |
+ '<=' => \&DBIx::Custom::Tag::lower_than_equal, |
|
26 |
+ 'like' => \&DBIx::Custom::Tag::like, |
|
27 |
+ 'in' => \&DBIx::Custom::Tag::in, |
|
28 |
+ 'insert_param' => \&DBIx::Custom::Tag::insert_param, |
|
29 |
+ 'update_param' => \&DBIx::Custom::Tag::update_param |
|
31 | 30 |
} |
32 | 31 |
}); |
33 | 32 |
|
... | ... |
@@ -43,12 +42,12 @@ sub build_query { |
43 | 42 |
return $query; |
44 | 43 |
} |
45 | 44 |
|
46 |
-sub register_tag_processor { |
|
45 |
+sub register_tag { |
|
47 | 46 |
my $self = shift; |
48 | 47 |
|
49 | 48 |
# Merge tag processor |
50 |
- my $tag_processors = ref $_[0] eq 'HASH' ? $_[0] : {@_}; |
|
51 |
- $self->tag_processors({%{$self->tag_processors}, %{$tag_processors}}); |
|
49 |
+ my $tags = ref $_[0] eq 'HASH' ? $_[0] : {@_}; |
|
50 |
+ $self->tags({%{$self->tags}, %$tags}); |
|
52 | 51 |
|
53 | 52 |
return $self; |
54 | 53 |
} |
... | ... |
@@ -78,7 +77,8 @@ sub _build_query { |
78 | 77 |
my $tag_args = $node->{tag_args}; |
79 | 78 |
|
80 | 79 |
# Get tag processor |
81 |
- my $tag_processor = $self->tag_processors->{$tag_name}; |
|
80 |
+ my $tag_processor = $self->tag_processors->{$tag_name} |
|
81 |
+ || $self->tags->{$tag_name}; |
|
82 | 82 |
|
83 | 83 |
# Tag processor is not registered |
84 | 84 |
croak qq{Tag "$tag_name" in "{a }" is not registered} |
... | ... |
@@ -275,6 +275,19 @@ sub _placeholder_count { |
275 | 275 |
return $count; |
276 | 276 |
} |
277 | 277 |
|
278 |
+# Follwoing methods are DEPRECATED! |
|
279 |
+__PACKAGE__->attr('tag_processors' => sub { {} }); |
|
280 |
+ |
|
281 |
+sub register_tag_processor { |
|
282 |
+ my $self = shift; |
|
283 |
+ |
|
284 |
+ # Merge tag processor |
|
285 |
+ my $tag_processors = ref $_[0] eq 'HASH' ? $_[0] : {@_}; |
|
286 |
+ $self->tag_processors({%{$self->tag_processors}, %{$tag_processors}}); |
|
287 |
+ |
|
288 |
+ return $self; |
|
289 |
+} |
|
290 |
+ |
|
278 | 291 |
1; |
279 | 292 |
|
280 | 293 |
=head1 NAME |
... | ... |
@@ -290,10 +303,10 @@ DBIx::Custom::QueryBuilder - Query builder |
290 | 303 |
|
291 | 304 |
=head1 ATTRIBUTES |
292 | 305 |
|
293 |
-=head2 C<tag_processors> |
|
306 |
+=head2 C<tags> |
|
294 | 307 |
|
295 |
- my $tag_processors = $builder->tag_processors; |
|
296 |
- $builder = $builder->tag_processors(\%tag_processors); |
|
308 |
+ my $tags = $builder->tags; |
|
309 |
+ $builder = $builder->tags(\%tags); |
|
297 | 310 |
|
298 | 311 |
Tag processors. |
299 | 312 |
|
... | ... |
@@ -328,10 +341,10 @@ Query |
328 | 341 |
columns => ['title', 'author', 'price'] |
329 | 342 |
} |
330 | 343 |
|
331 |
-=head2 C<register_tag_processor> |
|
344 |
+=head2 C<register_tag> |
|
332 | 345 |
|
333 |
- $builder->register_tag_processor(\%tag_processors); |
|
334 |
- $builder->register_tag_processor(%tag_processors); |
|
346 |
+ $builder->register_tag(\%tags); |
|
347 |
+ $builder->register_tag(%tags); |
|
335 | 348 |
|
336 | 349 |
Register tag processor. |
337 | 350 |
|
... | ... |
@@ -1,4 +1,4 @@ |
1 |
-package DBIx::Custom::TagProcessor; |
|
1 |
+package DBIx::Custom::Tag; |
|
2 | 2 |
|
3 | 3 |
use strict; |
4 | 4 |
use warnings; |
... | ... |
@@ -8,11 +8,11 @@ use Carp 'croak'; |
8 | 8 |
# Carp trust relationship |
9 | 9 |
push @DBIx::Custom::QueryBuilder::CARP_NOT, __PACKAGE__; |
10 | 10 |
|
11 |
-sub expand_equal_tag { _expand_basic_tag('=', @_) } |
|
12 |
-sub expand_greater_than_equal_tag { _expand_basic_tag('>=', @_) } |
|
13 |
-sub expand_greater_than_tag { _expand_basic_tag('>', @_) } |
|
11 |
+sub equal { _basic('=', @_) } |
|
12 |
+sub greater_than_equal { _basic('>=', @_) } |
|
13 |
+sub greater_than { _basic('>', @_) } |
|
14 | 14 |
|
15 |
-sub expand_in_tag { |
|
15 |
+sub in { |
|
16 | 16 |
my ($column, $count) = @_; |
17 | 17 |
|
18 | 18 |
# Check arguments |
... | ... |
@@ -34,7 +34,7 @@ sub expand_in_tag { |
34 | 34 |
return [$s, $columns]; |
35 | 35 |
} |
36 | 36 |
|
37 |
-sub expand_insert_param_tag { |
|
37 |
+sub insert_param { |
|
38 | 38 |
my @columns = @_; |
39 | 39 |
|
40 | 40 |
# Insert parameters |
... | ... |
@@ -50,12 +50,12 @@ sub expand_insert_param_tag { |
50 | 50 |
return [$s, \@columns]; |
51 | 51 |
} |
52 | 52 |
|
53 |
-sub expand_like_tag { _expand_basic_tag('like', @_) } |
|
54 |
-sub expand_lower_than_equal_tag { _expand_basic_tag('<=', @_) } |
|
55 |
-sub expand_lower_than_tag { _expand_basic_tag('<', @_) } |
|
56 |
-sub expand_not_equal_tag { _expand_basic_tag('<>', @_) } |
|
53 |
+sub like { _basic('like', @_) } |
|
54 |
+sub lower_than_equal { _basic('<=', @_) } |
|
55 |
+sub lower_than { _basic('<', @_) } |
|
56 |
+sub not_equal { _basic('<>', @_) } |
|
57 | 57 |
|
58 |
-sub expand_placeholder_tag { |
|
58 |
+sub placeholder { |
|
59 | 59 |
my $column = shift; |
60 | 60 |
|
61 | 61 |
# Check arguments |
... | ... |
@@ -65,7 +65,7 @@ sub expand_placeholder_tag { |
65 | 65 |
return ['?', [$column]]; |
66 | 66 |
} |
67 | 67 |
|
68 |
-sub expand_update_param_tag { |
|
68 |
+sub update_param { |
|
69 | 69 |
my @columns = @_; |
70 | 70 |
|
71 | 71 |
# Update paramters |
... | ... |
@@ -76,7 +76,7 @@ sub expand_update_param_tag { |
76 | 76 |
return [$s, \@columns]; |
77 | 77 |
} |
78 | 78 |
|
79 |
-sub _expand_basic_tag { |
|
79 |
+sub _basic { |
|
80 | 80 |
my ($name, $column) = @_; |
81 | 81 |
|
82 | 82 |
# Check arguments |
... | ... |
@@ -90,5 +90,4 @@ sub _expand_basic_tag { |
90 | 90 |
|
91 | 91 |
=head1 NAME |
92 | 92 |
|
93 |
-DBIx::Custom::TagProcessor - Tag processor |
|
94 |
- |
|
93 |
+DBIx::Custom::Tag - Tag processor |
... | ... |
@@ -14,9 +14,8 @@ use Carp 'croak'; |
14 | 14 |
push @DBIx::Custom::CARP_NOT, __PACKAGE__; |
15 | 15 |
|
16 | 16 |
__PACKAGE__->attr( |
17 |
- 'query_builder', |
|
17 |
+ [qw/param query_builder/], |
|
18 | 18 |
clause => sub { [] }, |
19 |
- param => sub { {} } |
|
20 | 19 |
); |
21 | 20 |
|
22 | 21 |
sub to_string { |
... | ... |
@@ -65,11 +64,8 @@ sub _parse { |
65 | 64 |
pop @$where; |
66 | 65 |
pop @$where; |
67 | 66 |
} |
68 |
- |
|
69 | 67 |
# End |
70 |
- else { |
|
71 |
- push @$where, ')'; |
|
72 |
- } |
|
68 |
+ else { push @$where, ')' } |
|
73 | 69 |
} |
74 | 70 |
|
75 | 71 |
# String |
... | ... |
@@ -87,15 +83,21 @@ sub _parse { |
87 | 83 |
# Push |
88 | 84 |
my $param = $self->param; |
89 | 85 |
my $pushed; |
90 |
- if (exists $param->{$column}) { |
|
91 |
- if (ref $param->{$column} eq 'ARRAY') { |
|
92 |
- $pushed = 1 if exists $param->{$column}->[$count - 1]; |
|
93 |
- } |
|
94 |
- elsif ($count == 1) { |
|
95 |
- $pushed = 1; |
|
86 |
+ if (defined $param) { |
|
87 |
+ if (exists $param->{$column}) { |
|
88 |
+ if (ref $param->{$column} eq 'ARRAY') { |
|
89 |
+ $pushed = 1 if exists $param->{$column}->[$count - 1]; |
|
90 |
+ } |
|
91 |
+ elsif ($count == 1) { |
|
92 |
+ $pushed = 1; |
|
93 |
+ } |
|
96 | 94 |
} |
95 |
+ push @$where, $clause if $pushed; |
|
96 |
+ } |
|
97 |
+ else { |
|
98 |
+ push @$where, $clause; |
|
99 |
+ $pushed = 1; |
|
97 | 100 |
} |
98 |
- push @$where, $clause if $pushed; |
|
99 | 101 |
|
100 | 102 |
return $pushed; |
101 | 103 |
} |
... | ... |
@@ -718,7 +718,7 @@ $dbi->execute($CREATE_TABLE->{0}); |
718 | 718 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2}); |
719 | 719 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 4}); |
720 | 720 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 6}); |
721 |
-$dbi->query_builder->register_tag_processor( |
|
721 |
+$dbi->register_tag( |
|
722 | 722 |
limit => sub { |
723 | 723 |
my ($count, $offset) = @_; |
724 | 724 |
|
... | ... |
@@ -825,6 +825,9 @@ $dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
825 | 825 |
$dbi->execute($CREATE_TABLE->{0}); |
826 | 826 |
$dbi->insert(table => 'table1', param => {key1 => 1, key2 => 2}); |
827 | 827 |
$dbi->insert(table => 'table1', param => {key1 => 3, key2 => 4}); |
828 |
+$where = $dbi->where->clause(['and', '{= key1}', '{= key2}']); |
|
829 |
+is("$where", "where ( {= key1} and {= key2} )", 'no param'); |
|
830 |
+ |
|
828 | 831 |
$where = $dbi->where |
829 | 832 |
->clause(['and', '{= key1}', '{= key2}']) |
830 | 833 |
->param({key1 => 1}); |
... | ... |
@@ -944,6 +947,13 @@ $dbi->register_tag_processor( |
944 | 947 |
); |
945 | 948 |
is($dbi->query_builder->tag_processors->{a}->(), 1); |
946 | 949 |
|
950 |
+test 'register_tag'; |
|
951 |
+$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
|
952 |
+$dbi->register_tag( |
|
953 |
+ b => sub { 2 } |
|
954 |
+); |
|
955 |
+is($dbi->query_builder->tags->{b}->(), 2); |
|
956 |
+ |
|
947 | 957 |
test 'table not specify exception'; |
948 | 958 |
$dbi = DBIx::Custom->connect($NEW_ARGS->{0}); |
949 | 959 |
eval {$dbi->insert}; |