| ... | ... |
@@ -540,20 +540,21 @@ our %INSERT_ARGS = map { $_ => 1 } @COMMON_ARGS, qw/param append/;
|
| 540 | 540 |
sub insert {
|
| 541 | 541 |
my ($self, %args) = @_; |
| 542 | 542 |
|
| 543 |
- # Reserved word quote |
|
| 544 |
- my $q = $self->reserved_word_quote; |
|
| 545 |
- |
|
| 546 |
- # Check argument names |
|
| 547 |
- foreach my $name (keys %args) {
|
|
| 548 |
- croak qq{Argument "$name" is wrong name}
|
|
| 549 |
- unless $INSERT_ARGS{$name};
|
|
| 550 |
- } |
|
| 551 |
- |
|
| 552 | 543 |
# Arguments |
| 553 | 544 |
my $table = delete $args{table};
|
| 554 | 545 |
croak qq{"table" option must be specified} unless $table;
|
| 555 | 546 |
my $param = delete $args{param} || {};
|
| 556 | 547 |
my $append = delete $args{append} || '';
|
| 548 |
+ my $query_return = delete $args{query};
|
|
| 549 |
+ |
|
| 550 |
+ # Check arguments |
|
| 551 |
+ foreach my $name (keys %args) {
|
|
| 552 |
+ croak qq{Argument "$name" is wrong name}
|
|
| 553 |
+ unless $INSERT_ARGS{$name};
|
|
| 554 |
+ } |
|
| 555 |
+ |
|
| 556 |
+ # Reserved word quote |
|
| 557 |
+ my $q = $self->reserved_word_quote; |
|
| 557 | 558 |
|
| 558 | 559 |
# Columns |
| 559 | 560 |
my @columns; |
| ... | ... |
@@ -566,70 +567,53 @@ sub insert {
|
| 566 | 567 |
push @columns, $column; |
| 567 | 568 |
} |
| 568 | 569 |
|
| 569 |
- # SQL stack |
|
| 570 |
+ # Insert statement |
|
| 570 | 571 |
my @sql; |
| 571 |
- |
|
| 572 |
- # Insert |
|
| 573 | 572 |
push @sql, "insert into $q$table$q {insert_param ". join(' ', @columns) . '}';
|
| 574 | 573 |
push @sql, $append if $append; |
| 575 |
- |
|
| 576 |
- # SQL |
|
| 577 | 574 |
my $sql = join (' ', @sql);
|
| 578 | 575 |
|
| 579 | 576 |
# Create query |
| 580 | 577 |
my $query = $self->create_query($sql); |
| 581 |
- return $query if $args{query};
|
|
| 578 |
+ return $query if $query_return; |
|
| 582 | 579 |
|
| 583 | 580 |
# Execute query |
| 584 |
- my $ret_val = $self->execute( |
|
| 581 |
+ return $self->execute( |
|
| 585 | 582 |
$query, |
| 586 |
- param => $param, |
|
| 583 |
+ param => $param, |
|
| 587 | 584 |
table => $table, |
| 588 | 585 |
%args |
| 589 | 586 |
); |
| 590 |
- |
|
| 591 |
- return $ret_val; |
|
| 592 | 587 |
} |
| 593 | 588 |
|
| 594 | 589 |
our %INSERT_AT_ARGS = (%INSERT_ARGS, where => 1, primary_key => 1); |
| 595 | 590 |
|
| 596 | 591 |
sub insert_at {
|
| 597 | 592 |
my ($self, %args) = @_; |
| 593 |
+ |
|
| 594 |
+ # Arguments |
|
| 595 |
+ my $primary_keys = delete $args{primary_key};
|
|
| 596 |
+ $primary_keys = [$primary_keys] unless ref $primary_keys; |
|
| 597 |
+ my $where = delete $args{where};
|
|
| 598 |
+ my $param = delete $args{param};
|
|
| 598 | 599 |
|
| 599 |
- # Check argument names |
|
| 600 |
+ # Check arguments |
|
| 600 | 601 |
foreach my $name (keys %args) {
|
| 601 | 602 |
croak qq{Argument "$name" is wrong name}
|
| 602 | 603 |
unless $INSERT_AT_ARGS{$name};
|
| 603 | 604 |
} |
| 604 | 605 |
|
| 605 |
- # Primary key |
|
| 606 |
- my $primary_keys = delete $args{primary_key};
|
|
| 607 |
- $primary_keys = [$primary_keys] unless ref $primary_keys; |
|
| 608 |
- |
|
| 609 |
- # Where clause |
|
| 610 |
- my $where = {};
|
|
| 611 |
- my $param = {};
|
|
| 612 |
- |
|
| 613 |
- if (exists $args{where}) {
|
|
| 614 |
- my $where_columns = delete $args{where};
|
|
| 615 |
- $where_columns = [$where_columns] unless ref $where_columns; |
|
| 616 |
- |
|
| 606 |
+ # Where |
|
| 607 |
+ my $where_param = {};
|
|
| 608 |
+ if ($where) {
|
|
| 609 |
+ $where = [$where] unless ref $where; |
|
| 617 | 610 |
croak qq{"where" must be constant value or array reference}
|
| 618 |
- unless !ref $where_columns || ref $where_columns eq 'ARRAY'; |
|
| 619 |
- |
|
| 611 |
+ unless !ref $where || ref $where eq 'ARRAY'; |
|
| 620 | 612 |
for(my $i = 0; $i < @$primary_keys; $i ++) {
|
| 621 |
- $where->{$primary_keys->[$i]} = $where_columns->[$i];
|
|
| 613 |
+ $where_param->{$primary_keys->[$i]} = $where->[$i];
|
|
| 622 | 614 |
} |
| 623 | 615 |
} |
| 624 |
- |
|
| 625 |
- if (exists $args{param}) {
|
|
| 626 |
- $param = delete $args{param};
|
|
| 627 |
- for(my $i = 0; $i < @$primary_keys; $i ++) {
|
|
| 628 |
- delete $param->{$primary_keys->[$i]};
|
|
| 629 |
- } |
|
| 630 |
- } |
|
| 631 |
- |
|
| 632 |
- $param = {%$param, %$where};
|
|
| 616 |
+ $param = $self->merge_param($where_param, $param); |
|
| 633 | 617 |
|
| 634 | 618 |
return $self->insert(param => $param, %args); |
| 635 | 619 |
} |