... | ... |
@@ -241,17 +241,17 @@ sub delete { |
241 | 241 |
if !$opt{where} && !defined $opt{id} && !$opt{allow_delete_all}; |
242 | 242 |
|
243 | 243 |
# Where |
244 |
- my $wcp = $self->_where_clause_and_param($opt{where}, $opt{where_param}, |
|
244 |
+ my $w = $self->_where_clause_and_param($opt{where}, $opt{where_param}, |
|
245 | 245 |
delete $opt{id}, $opt{primary_key}, $opt{table}); |
246 | 246 |
|
247 | 247 |
# Delete statement |
248 | 248 |
my $sql = "delete "; |
249 | 249 |
$sql .= "$opt{prefix} " if defined $opt{prefix}; |
250 |
- $sql .= "from " . $self->_q($opt{table}) . " $wcp->{clause} "; |
|
250 |
+ $sql .= "from " . $self->_q($opt{table}) . " $w->{clause} "; |
|
251 | 251 |
|
252 | 252 |
# Execute query |
253 | 253 |
$opt{statement} = 'delete'; |
254 |
- $self->execute($sql, $wcp->{param}, %opt); |
|
254 |
+ $self->execute($sql, $w->{param}, %opt); |
|
255 | 255 |
} |
256 | 256 |
|
257 | 257 |
sub delete_all { shift->delete(allow_delete_all => 1, @_) } |
... | ... |
@@ -1049,13 +1049,9 @@ sub update { |
1049 | 1049 |
# Assign clause |
1050 | 1050 |
my $assign_clause = $self->assign_clause($param, {wrap => $opt{wrap}}); |
1051 | 1051 |
|
1052 |
- # Convert id to where parameter |
|
1053 |
- my $where = defined $opt{id} |
|
1054 |
- ? $self->_id_to_param(delete $opt{id}, $opt{primary_key}, $opt{table}) |
|
1055 |
- : $opt{where}; |
|
1056 |
- |
|
1057 | 1052 |
# Where |
1058 |
- my $w = $self->_where_clause_and_param($where, $opt{where_param}); |
|
1053 |
+ my $w = $self->_where_clause_and_param($opt{where}, $opt{where_param}, |
|
1054 |
+ delete $opt{id}, $opt{primary_key}, $opt{table}); |
|
1059 | 1055 |
|
1060 | 1056 |
# Merge where parameter to parameter |
1061 | 1057 |
$param = $self->merge_param($param, $w->{param}) if keys %{$w->{param}}; |
... | ... |
@@ -1526,78 +1522,73 @@ sub _search_tables { |
1526 | 1522 |
return $tables; |
1527 | 1523 |
} |
1528 | 1524 |
|
1529 |
-sub _where_to_obj { |
|
1530 |
- my ($self, $where) = @_; |
|
1531 |
- |
|
1532 |
- my $obj; |
|
1533 |
- |
|
1534 |
- # Hash |
|
1535 |
- if (ref $where eq 'HASH') { |
|
1536 |
- my $clause = ['and']; |
|
1537 |
- my $q = $self->_quote; |
|
1538 |
- for my $column (keys %$where) { |
|
1539 |
- my $table; |
|
1540 |
- my $c; |
|
1541 |
- if ($column =~ /(?:(.*?)\.)?(.*)/) { |
|
1542 |
- $table = $1; |
|
1543 |
- $c = $2; |
|
1544 |
- } |
|
1545 |
- |
|
1546 |
- my $table_quote; |
|
1547 |
- $table_quote = $self->_q($table) if defined $table; |
|
1548 |
- my $column_quote = $self->_q($c); |
|
1549 |
- $column_quote = $table_quote . '.' . $column_quote |
|
1550 |
- if defined $table_quote; |
|
1551 |
- push @$clause, "$column_quote = :$column" for keys %$where; |
|
1552 |
- } |
|
1553 |
- $obj = $self->where(clause => $clause, param => $where); |
|
1554 |
- } |
|
1555 |
- |
|
1556 |
- # DBIx::Custom::Where object |
|
1557 |
- elsif (ref $where eq 'DBIx::Custom::Where') { |
|
1558 |
- $obj = $where; |
|
1559 |
- } |
|
1560 |
- |
|
1561 |
- # Array |
|
1562 |
- elsif (ref $where eq 'ARRAY') { |
|
1563 |
- $obj = $self->where( |
|
1564 |
- clause => $where->[0], |
|
1565 |
- param => $where->[1] |
|
1566 |
- ); |
|
1567 |
- } |
|
1568 |
- |
|
1569 |
- # Check where argument |
|
1570 |
- croak qq{"where" must be hash reference or DBIx::Custom::Where object} |
|
1571 |
- . qq{or array reference, which contains where clause and parameter} |
|
1572 |
- . _subname |
|
1573 |
- unless ref $obj eq 'DBIx::Custom::Where'; |
|
1574 |
- |
|
1575 |
- return $obj; |
|
1576 |
-} |
|
1577 |
- |
|
1578 | 1525 |
sub _where_clause_and_param { |
1579 |
- my ($self, $where, $param, $id, $primary_key, $table) = @_; |
|
1526 |
+ my ($self, $where, $where_param, $id, $primary_key, $table) = @_; |
|
1580 | 1527 |
|
1581 | 1528 |
$where ||= {}; |
1582 | 1529 |
$where = $self->_id_to_param($id, $primary_key, $table) if defined $id; |
1583 |
- $param ||= {}; |
|
1530 |
+ $where_param ||= {}; |
|
1584 | 1531 |
my $w = {}; |
1585 | 1532 |
my $where_clause = ''; |
1586 | 1533 |
|
1534 |
+ my $obj; |
|
1535 |
+ |
|
1587 | 1536 |
if (ref $where eq 'ARRAY' && !ref $where->[0]) { |
1588 | 1537 |
$w->{clause} = "where " . $where->[0]; |
1589 | 1538 |
$w->{param} = $where->[1]; |
1590 | 1539 |
} |
1591 | 1540 |
elsif (ref $where) { |
1592 |
- $where = $self->_where_to_obj($where); |
|
1593 |
- $w->{param} = keys %$param |
|
1594 |
- ? $self->merge_param($param, $where->param) |
|
1595 |
- : $where->param; |
|
1596 |
- $w->{clause} = $where->to_string; |
|
1541 |
+ |
|
1542 |
+ # Hash |
|
1543 |
+ if (ref $where eq 'HASH') { |
|
1544 |
+ my $clause = ['and']; |
|
1545 |
+ my $q = $self->_quote; |
|
1546 |
+ for my $column (keys %$where) { |
|
1547 |
+ my $table; |
|
1548 |
+ my $c; |
|
1549 |
+ if ($column =~ /(?:(.*?)\.)?(.*)/) { |
|
1550 |
+ $table = $1; |
|
1551 |
+ $c = $2; |
|
1552 |
+ } |
|
1553 |
+ |
|
1554 |
+ my $table_quote; |
|
1555 |
+ $table_quote = $self->_q($table) if defined $table; |
|
1556 |
+ my $column_quote = $self->_q($c); |
|
1557 |
+ $column_quote = $table_quote . '.' . $column_quote |
|
1558 |
+ if defined $table_quote; |
|
1559 |
+ push @$clause, "$column_quote = :$column" for keys %$where; |
|
1560 |
+ } |
|
1561 |
+ $obj = $self->where(clause => $clause, param => $where); |
|
1562 |
+ } |
|
1563 |
+ |
|
1564 |
+ # DBIx::Custom::Where object |
|
1565 |
+ elsif (ref $where eq 'DBIx::Custom::Where') { |
|
1566 |
+ $obj = $where; |
|
1567 |
+ } |
|
1568 |
+ |
|
1569 |
+ # Array |
|
1570 |
+ elsif (ref $where eq 'ARRAY') { |
|
1571 |
+ $obj = $self->where( |
|
1572 |
+ clause => $where->[0], |
|
1573 |
+ param => $where->[1] |
|
1574 |
+ ); |
|
1575 |
+ } |
|
1576 |
+ |
|
1577 |
+ # Check where argument |
|
1578 |
+ croak qq{"where" must be hash reference or DBIx::Custom::Where object} |
|
1579 |
+ . qq{or array reference, which contains where clause and parameter} |
|
1580 |
+ . _subname |
|
1581 |
+ unless ref $obj eq 'DBIx::Custom::Where'; |
|
1582 |
+ |
|
1583 |
+ |
|
1584 |
+ $w->{param} = keys %$where_param |
|
1585 |
+ ? $self->merge_param($where_param, $obj->param) |
|
1586 |
+ : $obj->param; |
|
1587 |
+ $w->{clause} = $obj->to_string; |
|
1597 | 1588 |
} |
1598 | 1589 |
elsif ($where) { |
1599 | 1590 |
$w->{clause} = "where $where"; |
1600 |
- $w->{param} = $param; |
|
1591 |
+ $w->{param} = $where_param; |
|
1601 | 1592 |
} |
1602 | 1593 |
|
1603 | 1594 |
return $w; |