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};
|