From: Moritz Bunkus Date: Wed, 6 Jun 2007 07:20:32 +0000 (+0000) Subject: 1. Umstellung von der Verwendung von COPY-Statements auf normale INSERT-Statements... X-Git-Tag: release-2.4.3^2~194 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=d65bfa97a852b44c2a713ae2f7dc266269814488;p=kivitendo-erp.git 1. Umstellung von der Verwendung von COPY-Statements auf normale INSERT-Statements. Grund ist, dass die dafür benötigten Befehle DBD::Pg::pg_putline() und pg_endcopy() nur in neueren Versionen von DBD::Pg existieren. Der Performancenachteil durch die Verwendung von INSERTs ist bei dieser geringen Datenmenge vernachlässigbar. Fix für Bug 668. 2. Die Funktion mydberror() muss definiert werden, wenn sie benutzt werden soll. 3. Kosmetik: Trailing whitespaces entfernt. --- diff --git a/sql/Pg-upgrade2/USTVA_abstraction.pl b/sql/Pg-upgrade2/USTVA_abstraction.pl index 20f512d4d..9c2171884 100644 --- a/sql/Pg-upgrade2/USTVA_abstraction.pl +++ b/sql/Pg-upgrade2/USTVA_abstraction.pl @@ -3,13 +3,19 @@ # @depends: release_2_4_2 # Abstraktionlayer between general Taxreports and USTVA -# Most of the data and structures are not used yet, but maybe in future, +# Most of the data and structures are not used yet, but maybe in future, # if there are other international customizings are requested... ################### die("This script cannot be run from the command line.") unless ($main::form); +sub mydberror { + my ($msg) = @_; + die($dbup_locale->text("Database update error:") . + "
$msg
" . $DBI::errstr); +} + sub do_query { my ($query, $may_fail) = @_; @@ -32,7 +38,7 @@ sub create_tables { description text, subdescription text ); - }, + }, q{ CREATE TABLE tax.report_headings ( id integer NOT NULL PRIMARY KEY, category_id integer NOT NULL REFERENCES tax.report_categorys(id), @@ -55,17 +61,17 @@ sub create_tables { do_query("DROP SCHEMA tax CASCADE;", 1); map({ do_query($_, 0); } @queries); - + return 1; - + } sub do_copy { my @copy_statements = ( - "COPY tax.report_categorys FROM STDIN WITH DELIMITER ';'", - "COPY tax.report_headings FROM STDIN WITH DELIMITER ';'", - "COPY tax.report_variables FROM STDIN WITH DELIMITER ';'", + "INSERT INTO tax.report_categorys (id, description, subdescription) VALUES (?, ?, ?)", + "INSERT INTO tax.report_headings (id, category_id, type, description, subdescription) VALUES (?, ?, ?, ?, ?)", + "INSERT INTO tax.report_variables (id, position, heading_id, description, taxbase, dec_places, valid_from) VALUES (?, ?, ?, ?, ?, ?, ?)", ); my @copy_data = ( @@ -138,18 +144,17 @@ sub do_copy { ); for my $statement ( 0 .. $#copy_statements ) { + my $query = $iconv->convert($copy_statements[$statement]); + my $sth = $dbh->prepare($query) || mydberror($query); - do_query($iconv->convert($copy_statements[$statement]), 0); - for my $copy_line ( 1 .. $#{$copy_data[$statement]} ) { #print $copy_data[$statement][$copy_line] . "
" - $dbh->pg_putline($iconv->convert($copy_data[$statement][$copy_line]) . "\n"); + $sth->execute(split m/;/, $iconv->convert($copy_data[$statement][$copy_line]), -1) || mydberror($query); } - $dbh->pg_endcopy; + $sth->finish(); } return 1; } return create_tables() && do_copy(); -