Revision 778
- Date:
- 2019/06/21 13:15:43
- Files:
Legend:
- Added
- Removed
- Modified
-
utf8/core/lib/Contenido/Object.pm
491 491 # 492 492 # Если $id задан то мы считаем, что этот объект в базе есть. Если 493 493 # не задан, то мы считаем, что этого объекта в базе нет и создаем его. 494 # Если необходимо взять контроль над INSERT-UPDATE, следует передать 495 # hashref с параметром mode => 'update|insert' 494 496 # ---------------------------------------------------------------------------- 495 497 sub store { 496 498 my $self = shift; … … 500 502 501 503 return undef if ($self->keeper->state->readonly()); 502 504 505 my $params = shift // {}; 506 my $store_mode = lc($params->{method} || ''); 507 $store_mode = '' if $store_mode && !($store_mode eq 'insert' || $store_mode eq 'update'); 508 503 509 $self->keeper->t_connect() || do { $self->keeper->error(); return undef; }; 504 510 $self->{status} ||= 0; # Значение статуса по умолчанию = 0 505 511 … … 570 576 571 577 572 578 my $values_string = ''; 573 my $mode = 'update'; 574 if ($self->id()) { 579 my $mode = $store_mode || 'update'; 580 if ($mode eq 'update' && $self->id()) { 575 581 if (@fields) { 576 582 $values_string = join(' = ?, ', @fields).' = ?'; 577 583 $values_string .= ', '.join(', ', @default_pairs) if (@default_pairs); … … 621 627 } 622 628 $sth->finish(); 623 629 624 my $id = $self->keeper->TSQL->selectrow_array("SELECT currval('".$self->class_table->db_id_sequence()."')"); 625 $self->id($id); 626 return $self->t_abort("Документу присвоен неверный идентификатор") if (! defined($self->{id}) || ($self->{id} <= 0)); 630 unless ( $self->id ) { 631 my $id = $self->keeper->TSQL->selectrow_array("SELECT currval('".$self->class_table->db_id_sequence()."')"); 632 $self->id($id); 633 return $self->t_abort("Документу присвоен неверный идентификатор") if (! defined($self->{id}) || ($self->{id} <= 0)); 634 } 627 635 628 636 if (($self->keeper->store_method() ne 'toast') and $self->class_table->have_extra and !$self->{__light}) { 629 637 $self->store_extras(mode => $mode) || return $self->t_abort();