| ... | ... |
@@ -968,10 +968,10 @@ sub select_at {
|
| 968 | 968 |
sub setup_model {
|
| 969 | 969 |
my $self = shift; |
| 970 | 970 |
|
| 971 |
+ # Setup model |
|
| 971 | 972 |
$self->each_column( |
| 972 | 973 |
sub {
|
| 973 | 974 |
my ($self, $table, $column, $column_info) = @_; |
| 974 |
- |
|
| 975 | 975 |
if (my $model = $self->models->{$table}) {
|
| 976 | 976 |
push @{$model->columns}, $column;
|
| 977 | 977 |
} |
| ... | ... |
@@ -986,15 +986,6 @@ our %UPDATE_ARGS |
| 986 | 986 |
sub update {
|
| 987 | 987 |
my ($self, %args) = @_; |
| 988 | 988 |
|
| 989 |
- # Reserved word quote |
|
| 990 |
- my $q = $self->reserved_word_quote; |
|
| 991 |
- |
|
| 992 |
- # Check argument names |
|
| 993 |
- foreach my $name (keys %args) {
|
|
| 994 |
- croak qq{Argument "$name" is wrong name}
|
|
| 995 |
- unless $UPDATE_ARGS{$name};
|
|
| 996 |
- } |
|
| 997 |
- |
|
| 998 | 989 |
# Arguments |
| 999 | 990 |
my $table = delete $args{table} || '';
|
| 1000 | 991 |
croak qq{"table" option must be specified} unless $table;
|
| ... | ... |
@@ -1003,9 +994,16 @@ sub update {
|
| 1003 | 994 |
my $append = delete $args{append} || '';
|
| 1004 | 995 |
my $allow_update_all = delete $args{allow_update_all};
|
| 1005 | 996 |
|
| 997 |
+ # Check argument names |
|
| 998 |
+ foreach my $name (keys %args) {
|
|
| 999 |
+ croak qq{Argument "$name" is wrong name}
|
|
| 1000 |
+ unless $UPDATE_ARGS{$name};
|
|
| 1001 |
+ } |
|
| 1002 |
+ |
|
| 1006 | 1003 |
# Columns |
| 1007 | 1004 |
my @columns; |
| 1008 | 1005 |
my $safety = $self->safety_character; |
| 1006 |
+ my $q = $self->reserved_word_quote; |
|
| 1009 | 1007 |
foreach my $column (keys %$param) {
|
| 1010 | 1008 |
croak qq{"$column" is not safety column name}
|
| 1011 | 1009 |
unless $column =~ /^[$safety\.]+$/; |
| ... | ... |
@@ -1018,35 +1016,18 @@ sub update {
|
| 1018 | 1016 |
my $update_clause = '{update_param ' . join(' ', @columns) . '}';
|
| 1019 | 1017 |
|
| 1020 | 1018 |
# Where |
| 1021 |
- my $w = $self->_where_to_obj($where); |
|
| 1022 |
- $where = $w->param; |
|
| 1023 |
- |
|
| 1024 |
- # String where |
|
| 1025 |
- my $swhere = "$w"; |
|
| 1026 |
- |
|
| 1019 |
+ $where = $self->_where_to_obj($where); |
|
| 1020 |
+ my $where_clause = $where->to_string; |
|
| 1027 | 1021 |
croak qq{"where" must be specified}
|
| 1028 |
- if "$swhere" eq '' && !$allow_update_all; |
|
| 1022 |
+ if "$where_clause" eq '' && !$allow_update_all; |
|
| 1029 | 1023 |
|
| 1030 |
- # SQL stack |
|
| 1024 |
+ # Update statement |
|
| 1031 | 1025 |
my @sql; |
| 1032 |
- |
|
| 1033 |
- # Update |
|
| 1034 |
- push @sql, "update $q$table$q $update_clause $swhere"; |
|
| 1026 |
+ push @sql, "update $q$table$q $update_clause $where_clause"; |
|
| 1035 | 1027 |
push @sql, $append if $append; |
| 1036 | 1028 |
|
| 1037 |
- # Rearrange parameters |
|
| 1038 |
- foreach my $wkey (keys %$where) {
|
|
| 1039 |
- |
|
| 1040 |
- if (exists $param->{$wkey}) {
|
|
| 1041 |
- $param->{$wkey} = [$param->{$wkey}]
|
|
| 1042 |
- unless ref $param->{$wkey} eq 'ARRAY';
|
|
| 1043 |
- |
|
| 1044 |
- push @{$param->{$wkey}}, $where->{$wkey};
|
|
| 1045 |
- } |
|
| 1046 |
- else {
|
|
| 1047 |
- $param->{$wkey} = $where->{$wkey};
|
|
| 1048 |
- } |
|
| 1049 |
- } |
|
| 1029 |
+ # Merge parameters |
|
| 1030 |
+ $param = $self->merge_param($param, $where->param); |
|
| 1050 | 1031 |
|
| 1051 | 1032 |
# SQL |
| 1052 | 1033 |
my $sql = join(' ', @sql);
|