View | Details | Raw Unified | Return to bug 27569
Collapse All | Expand All

(-)a/C4/ImportExportFramework.pm (-28 / +5 lines)
Lines 848-883 sub _import_table Link Here
848
# Insert/Update the row from the spreadsheet in the database
848
# Insert/Update the row from the spreadsheet in the database
849
sub _processRow_DB
849
sub _processRow_DB
850
{
850
{
851
    my ($dbh, $db_scheme, $table, $fields, $dataStr, $updateStr, $dataFields, $dataFieldsHash, $PKArray, $fieldsPK, $fields2Delete) = @_;
851
    my ($dbh, $table, $fields, $dataStr, $updateStr, $dataFields, $dataFieldsHash, $PKArray, $fieldsPK, $fields2Delete) = @_;
852
852
853
    my $ok = 0;
853
    my $ok = 0;
854
    my $query;
854
    my $query;
855
    if ($db_scheme eq 'mysql') {
855
    $query = 'INSERT INTO ' . $table . ' (' . $fields . ') VALUES (' . $dataStr . ') ON DUPLICATE KEY UPDATE ' . $updateStr;
856
        $query = 'INSERT INTO ' . $table . ' (' . $fields . ') VALUES (' . $dataStr . ') ON DUPLICATE KEY UPDATE ' . $updateStr;
857
    } else {
858
        $query = 'INSERT INTO ' . $table . ' (' . $fields . ') VALUES (' . $dataStr . ')';
859
    }
860
    eval {
856
    eval {
861
        my $sth = $dbh->prepare($query);
857
        my $sth = $dbh->prepare($query);
862
        if ($db_scheme eq 'mysql') {
858
        $sth->execute((@$dataFields, @$dataFields));
863
            $sth->execute((@$dataFields, @$dataFields));
864
        } else {
865
            $sth->execute(@$dataFields);
866
        }
867
    };
859
    };
868
    if ($@) {
860
    if ($@) {
869
        unless ($db_scheme eq 'mysql') {
870
            $query = 'UPDATE ' . $table . ' SET ' . $updateStr . ' WHERE ';
871
            map {$query .= $_ . '=? AND ';} @$PKArray;
872
            $query = substr($query, 0, -4);
873
            eval {
874
                my $sth2 = $dbh->prepare($query);
875
                my @dataPK = ();
876
                map {push @dataPK, $dataFieldsHash->{$_};} @$PKArray;
877
                $sth2->execute((@$dataFields, @dataPK));
878
            };
879
            $ok = 1 unless ($@);
880
        }
881
        $debug and warn "Error _processRows_Table $@\n";
861
        $debug and warn "Error _processRows_Table $@\n";
882
    } else {
862
    } else {
883
        $ok = 1;
863
        $ok = 1;
Lines 903-909 sub _processRows_Table Link Here
903
    my $dataStr = '';
883
    my $dataStr = '';
904
    my $updateStr = '';
884
    my $updateStr = '';
905
    my $j = 0;
885
    my $j = 0;
906
    my $db_scheme = C4::Context->config("db_scheme");
907
    my $ok = 0;
886
    my $ok = 0;
908
    my @fieldsPK = @$PKArray;
887
    my @fieldsPK = @$PKArray;
909
    shift @fieldsPK;
888
    shift @fieldsPK;
Lines 924-930 sub _processRows_Table Link Here
924
                # Get data from row
903
                # Get data from row
925
                my ($dataFields, $dataFieldsR) = _getDataFields($frameworkcode, $nodeR, \@fields, $format);
904
                my ($dataFields, $dataFieldsR) = _getDataFields($frameworkcode, $nodeR, \@fields, $format);
926
                if (scalar(@fields) == scalar(@$dataFieldsR)) {
905
                if (scalar(@fields) == scalar(@$dataFieldsR)) {
927
                    $ok = _processRow_DB($dbh, $db_scheme, $table, $fields, $dataStr, $updateStr, $dataFieldsR, $dataFields, $PKArray, \@fieldsPK, $fields2Delete);
906
                    $ok = _processRow_DB($dbh, $table, $fields, $dataStr, $updateStr, $dataFieldsR, $dataFields, $PKArray, \@fieldsPK, $fields2Delete);
928
                }
907
                }
929
            }
908
            }
930
            $j++;
909
            $j++;
Lines 948-954 sub _import_table_csv Link Here
948
    my $fieldsNameRead = 0;
927
    my $fieldsNameRead = 0;
949
    my @arrData;
928
    my @arrData;
950
    my ($fieldsStr, $dataStr, $updateStr);
929
    my ($fieldsStr, $dataStr, $updateStr);
951
    my $db_scheme = C4::Context->config("db_scheme");
952
    my @fieldsPK = @$PKArray;
930
    my @fieldsPK = @$PKArray;
953
    shift @fieldsPK;
931
    shift @fieldsPK;
954
    my $ok = 0;
932
    my $ok = 0;
Lines 1005-1011 sub _import_table_csv Link Here
1005
                        }
983
                        }
1006
                        $j++
984
                        $j++
1007
                    }
985
                    }
1008
                    $ok = _processRow_DB($dbh, $db_scheme, $table, $fieldsStr, $dataStr, $updateStr, \@arrData, \%dataFields, $PKArray, \@fieldsPK, $fields2Delete);
986
                    $ok = _processRow_DB($dbh, $table, $fieldsStr, $dataStr, $updateStr, \@arrData, \%dataFields, $PKArray, \@fieldsPK, $fields2Delete);
1009
                }
987
                }
1010
                $pos = tell($dom);
988
                $pos = tell($dom);
1011
            }
989
            }
1012
- 

Return to bug 27569