--- convert.pl 2001/06/12 08:38:53 1.1 +++ convert.pl 2001/06/12 10:11:24 1.2 @@ -3,10 +3,11 @@ $| = 1; my $debug = 0; -my $raise = 1; +my $raise = 0; my $log = "log"; my $xbase = "./registar"; my $db = "registar"; +my $refresh_timeout = 10; open(LOG, ">$log") || die "can't open log: $!"; @@ -15,7 +16,7 @@ { 'RaiseError' => $raise }) || die $DBI::errstr; my $pgdbh = DBI->connect("DBI:Pg:dbname=$db", "dpavlin", "", { 'RaiseError' => $raise }) || die $DBI::errstr; -# $SIG{'__WARN__'} = sub { }; # inhibit DBI warnings. +$SIG{'__WARN__'} = sub { }; # inhibit DBI warnings. my @tables = (); if (@ARGV > 0) { @@ -79,6 +80,15 @@ return "$msg\n"; } +sub CondInsert { + my ($table, $name, $key, $fields, $values) = @_; + my $sql = "SELECT $name FROM $table WHERE ($name = $key)"; + my $cnt = $pgdbh->do($sql); + return 0 if ($cnt > 0); + $sql = "INSERT INTO $table $fields VALUES $values"; + return $pgdbh->do($sql); +} + sub tblATK { my ($table, $fields, $data) = @_; my $count = 0; @@ -101,7 +111,7 @@ $tmp ||= 0; $tmp = 0 if ($tmp < 0); $count += $tmp; - if (++$refresh >= 20) { + if (++$refresh >= $refresh_timeout) { $refresh = 0; print Progress($count, scalar(@$data)); } @@ -139,7 +149,7 @@ } $tmp = 0 if ($tmp < 0); $count += $tmp; - if (++$refresh >= 20) { + if (++$refresh >= $refresh_timeout) { $refresh = 0; print Progress($count, scalar(@$data)); } @@ -181,7 +191,7 @@ $tel = &ConvertString($tel); $fax = &ConvertString($fax); my $tmp = $sth->execute($sifra, $naziv, $drzava, - $zastupnistvo, $zip, $mjesto, $ulica_i_broj, + $zastupnistvo, $mjesto, $zip, $ulica_i_broj, $razno, $tel, $fax); unless (defined($tmp)) { print &Log("[$table-execute] ".$pgdbh->errstr); @@ -189,52 +199,56 @@ } $tmp = 0 if ($tmp < 0); $count += $tmp; - if (++$refresh >= 20) { + if (++$refresh >= $refresh_timeout) { $refresh = 0; print Progress($count, scalar(@$data)); } } $sth->finish(); - return 0; + return $count; } sub tblVodeca { my ($table, $fields, $data) = @_; my $count = 0; - my $sth = $pgdbh->prepare("INSERT INTO vodeca (sifra, naziv) VALUES (?, ?)"); - unless ($sth) { - print &Log("[$table-prepare] ".$pgdbh->errstr); - return 0; - } my $refresh = 0; foreach my $row (@$data) { my ($sifra, $naziv) = @$row; + $sifra =~ s/^(..)//; + my $code = $1; + $sifra = &ConvertString($sifra); $naziv = &ConvertString($naziv); - $drzava = &ConvertString($drzava); - $zastupnistvo = &ConvertString($zastupnistvo); - $zip = &ConvertString($zip); - $mjesto = &ConvertString($mjesto); - $ulica_i_broj = &ConvertString($ulica_i_broj); - $razno = &ConvertString($razno); - $tel = &ConvertString($tel); - $fax = &ConvertString($fax); - my $tmp = $sth->execute($sifra, $naziv, $drzava, - $zastupnistvo, $zip, $mjesto, $ulica_i_broj, - $razno, $tel, $fax); - unless (defined($tmp)) { - print &Log("[$table-execute] ".$pgdbh->errstr); - next; + my $tmp = 0; + if ($code eq "06") { + $tmp += CondInsert("nacin_izdavanja", "sifra", $sifra, + "(sifra, opis)", "($sifra, $naziv)"); + } elsif ($code eq "07") { + $tmp += CondInsert("list_fond", "sifra", $sifra, + "(sifra, opis)", "($sifra, $naziv)"); + } elsif ($code eq "08") { + $tmp += CondInsert("trudnoca", "sifra", $sifra, + "(sifra, opis)", "($sifra, $naziv)"); + } elsif ($code eq "09") { + $tmp += CondInsert("dojencad", "sifra", $sifra, + "(sifra, opis)", "($sifra, $naziv)"); + } elsif ($code eq "10") { + $tmp += CondInsert("vozac", "sifra", $sifra, + "(sifra, opis)", "($sifra, $naziv)"); + } elsif ($code eq "11") { + $tmp += CondInsert("droga", "sifra", $sifra, + "(sifra, opis)", "($sifra, $naziv)"); + } else { + # UNKNOWN CODE!!! + print &Log("[WARNING: unknown code \"$code\"]"); } $tmp = 0 if ($tmp < 0); $count += $tmp; - if (++$refresh >= 20) { + if (++$refresh >= $refresh_timeout) { $refresh = 0; print Progress($count, scalar(@$data)); } } - $sth->finish(); - # ... - return 0; + return $count; } my (%dbf) = ( @@ -294,5 +308,5 @@ close(LOG); $xbdbh->disconnect(); $pgdbh->disconnect(); -print "Log left in file \"$log\"\n"; +print "Log left in file \"$log\".\n"; exit $?;