Revision 779

Date:
2019/06/25 15:35:50
Author:
ahitrov
Revision Log:
store mode=insert|update

Files:

Legend:

 
Added
 
Removed
 
Modified
  • utf8/core/lib/Contenido/Object.pm

     
    503 503 return undef if ($self->keeper->state->readonly());
    504 504
    505 505 my $params = shift // {};
    506 my $store_mode = lc($params->{method} || '');
    506 my $store_mode = lc($params->{mode} || '');
    507 507 $store_mode = '' if $store_mode && !($store_mode eq 'insert' || $store_mode eq 'update');
    508 508
    509 509 $self->keeper->t_connect() || do { $self->keeper->error(); return undef; };
     
    525 525 $value = undef if lc $_->{db_type} eq 'integer_ref[]' && ref $value ne 'ARRAY';
    526 526 }
    527 527
    528 #пропустить readonly если у документа уже есть id
    529 if ($self->id() and $_->{readonly}) {
    528 # выставить id, если у документа есть id и установлен режим 'insert'
    529 if ($_->{db_field} eq 'id' && $store_mode eq 'insert' && $self->id()) {
    530 push @fields, $_->{db_field};
    531 push @values, $value;
    530 532
    531 #нет поля в базе у атрибута
    533 # пропустить readonly, если у документа уже есть id
    534 } elsif ($store_mode ne 'insert' && $self->id() and $_->{readonly}) {
    535
    536
    537 # нет поля в базе у атрибута
    532 538 } elsif (!$_->{db_field}) {
    533 539
    534 #установка default если оно есть и стоит авто или нет значения у поля
    540 # установка default если оно есть и стоит авто или нет значения у поля
    535 541 } elsif (defined($_->{default}) and ($_->{auto} or !defined($value))) {
    536 542 push @default_fields, $_->{db_field};
    537 543 push @default_values, $_->{default};
    538 544 push @default_pairs, "$_->{db_field}=$_->{default}";
    539 545
    540 #пропустить auto без default
    546 # пропустить auto без default
    541 547 } elsif ($_->{auto}) {
    542 548
    543 549 #установка валидных полей
     
    586 592 $values_string = join(', ', @default_pairs) if (@default_pairs);
    587 593 }
    588 594 my $sql='UPDATE '.$self->class_table->db_table.' SET '.$values_string." WHERE ".$self->class_table()->id_field()." = ?";
    595 warn "$sql\n" if $DEBUG;
    589 596
    590 597 my $sth=$self->keeper->TSQL->prepare_cached($sql, {}, 1) || return $self->t_abort();
    591 598 #settin special escape for bytea column type!!!
     
    614 621 $values_string = join(', ', @default_values) if (@default_values);
    615 622 }
    616 623 my $sql='INSERT INTO '.$self->class_table->db_table.' ('.join(', ', (@fields, @default_fields)).') VALUES ('.$values_string.')';
    624 warn "$sql\n" if $DEBUG;
    617 625
    618 626 my $sth=$self->keeper->TSQL->prepare_cached($sql, {}, 1) || return $self->t_abort();
    619 627 #settin special escape for bytea column type!!!