| ... | ... |
@@ -329,49 +329,38 @@ sub execute {
|
| 329 | 329 |
$self->last_sql($query->sql); |
| 330 | 330 |
|
| 331 | 331 |
return $query if $query_return; |
| 332 |
+ |
|
| 333 |
+ # DEPRECATED! Merge query filter |
|
| 332 | 334 |
$filter ||= $query->{filter} || {};
|
| 333 | 335 |
|
| 334 | 336 |
# Tables |
| 335 | 337 |
unshift @$tables, @{$query->{tables} || []};
|
| 336 | 338 |
my $main_table = @{$tables}[-1];
|
| 337 | 339 |
|
| 338 |
- # DEPRECATED! |
|
| 340 |
+ # DEPRECATED! Cleanup tables |
|
| 339 | 341 |
$tables = $self->_remove_duplicate_table($tables, $main_table) |
| 340 | 342 |
if @$tables > 1; |
| 341 | 343 |
|
| 342 | 344 |
# Type rule |
| 343 | 345 |
my $type_filters = {};
|
| 344 | 346 |
unless ($type_rule_off) {
|
| 345 |
- foreach my $name (keys %$param) {
|
|
| 346 |
- my $table; |
|
| 347 |
- my $column; |
|
| 348 |
- if ($name =~ /(?:(.+)\.)?(.+)/) {
|
|
| 349 |
- $table = $1; |
|
| 350 |
- $column = $2; |
|
| 351 |
- } |
|
| 352 |
- $table ||= $main_table; |
|
| 353 |
- |
|
| 354 |
- foreach my $i (1 .. 2) {
|
|
| 355 |
- unless ($type_rule_off_parts->{$i}) {
|
|
| 356 |
- my $into = $self->{"_into$i"} || {};
|
|
| 357 |
- |
|
| 358 |
- my $alias = $table; |
|
| 359 |
- $table = $table_alias->{$alias}
|
|
| 360 |
- if defined $alias && $table_alias->{$alias};
|
|
| 347 |
+ foreach my $i (1, 2) {
|
|
| 348 |
+ unless ($type_rule_off_parts->{$i}) {
|
|
| 349 |
+ $type_filters->{$i} = {};
|
|
| 350 |
+ foreach my $alias (keys %$table_alias) {
|
|
| 351 |
+ my $table = $table_alias->{$alias};
|
|
| 361 | 352 |
|
| 362 |
- if (defined $table && $into->{$table} &&
|
|
| 363 |
- (my $rule = $into->{$table}->{$column}))
|
|
| 364 |
- {
|
|
| 365 |
- $type_filters->{$i}->{$column} = $rule;
|
|
| 366 |
- $type_filters->{$i}->{"$table.$column"} = $rule;
|
|
| 367 |
- $type_filters->{$i}->{"$alias.$column"} = $rule if $alias ne $table;
|
|
| 353 |
+ foreach my $column (keys %{$self->{"_into$i"}{key}{$table} || {}}) {
|
|
| 354 |
+ $type_filters->{$i}->{"$alias.$column"} = $self->{"_into$i"}{key}{$table}{$column};
|
|
| 368 | 355 |
} |
| 369 | 356 |
} |
| 357 |
+ $type_filters->{$i} = {%{$type_filters->{$i}}, %{$self->{"_into$i"}{key}{$main_table} || {}}}
|
|
| 358 |
+ if $main_table; |
|
| 370 | 359 |
} |
| 371 | 360 |
} |
| 372 | 361 |
} |
| 373 | 362 |
|
| 374 |
- # Applied filter(DEPRECATED!) |
|
| 363 |
+ # DEPRECATED! Applied filter |
|
| 375 | 364 |
if ($self->{filter}{on}) {
|
| 376 | 365 |
my $applied_filter = {};
|
| 377 | 366 |
foreach my $table (@$tables) {
|
| ... | ... |
@@ -420,10 +409,8 @@ sub execute {
|
| 420 | 409 |
$affected = $sth->execute; |
| 421 | 410 |
}; |
| 422 | 411 |
|
| 423 |
- if ($@) {
|
|
| 424 |
- $self->_croak($@, qq{. Following SQL is executed.\n}
|
|
| 425 |
- . qq{$query->{sql}\n} . _subname);
|
|
| 426 |
- } |
|
| 412 |
+ $self->_croak($@, qq{. Following SQL is executed.\n}
|
|
| 413 |
+ . qq{$query->{sql}\n} . _subname) if $@;
|
|
| 427 | 414 |
|
| 428 | 415 |
# DEBUG message |
| 429 | 416 |
if (DEBUG) {
|
| ... | ... |
@@ -980,7 +967,8 @@ sub type_rule {
|
| 980 | 967 |
$filter = $self->filters->{$fname};
|
| 981 | 968 |
} |
| 982 | 969 |
|
| 983 |
- $self->{"_$into"}{$table}{$column} = $filter;
|
|
| 970 |
+ $self->{"_$into"}{key}{$table}{$column} = $filter;
|
|
| 971 |
+ $self->{"_$into"}{dot}{"$table.$column"} = $filter;
|
|
| 984 | 972 |
} |
| 985 | 973 |
}); |
| 986 | 974 |
} |
| ... | ... |
@@ -1201,7 +1189,7 @@ sub _create_bind_values {
|
| 1201 | 1189 |
# Type rule |
| 1202 | 1190 |
foreach my $i (1 .. 2) {
|
| 1203 | 1191 |
my $type_filter = $type_filters->{$i};
|
| 1204 |
- my $tf = $type_filter->{$column};
|
|
| 1192 |
+ my $tf = $self->{"_into$i"}->{dot}->{$column} || $type_filter->{$column};
|
|
| 1205 | 1193 |
$value = $tf->($value) if $tf; |
| 1206 | 1194 |
} |
| 1207 | 1195 |
|