From dad8b825d34ed9e654516b3086e8c7be7102d759 Mon Sep 17 00:00:00 2001 From: tgarip1957 Date: Fri, 19 May 2006 19:07:09 +0000 Subject: [PATCH] =?utf8?q?This=20script=20modif=FDes=20auth=5Fheader=20tab?= =?utf8?q?le,=20adds=20missing=20fields=20and=20populates=20with=20marc=20?= =?utf8?q?record.=20Only=20to=20be=20used=20when=20updating=20from=202.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- misc/marc_into_authority.pl | 110 ++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 misc/marc_into_authority.pl diff --git a/misc/marc_into_authority.pl b/misc/marc_into_authority.pl new file mode 100644 index 0000000000..e900d02daa --- /dev/null +++ b/misc/marc_into_authority.pl @@ -0,0 +1,110 @@ +#!/usr/bin/perl +# script that populates the authorities table with marc +# Written by TG on 10/04/2006 +use strict; + +# Koha modules used + +use C4::Context; +use MARC::Record; +use MARC::File::USMARC; +use MARC::File::XML; +use Time::HiRes qw(gettimeofday); +my $timeneeded; +my $starttime = gettimeofday; + + +my $dbh = C4::Context->dbh; +my $sthcols=$dbh->prepare("show columns from auth_header"); +$sthcols->execute(); +my %columns; +while (( my $cols)=$sthcols->fetchrow){ +$columns{$cols}=1; +} + +##Update the database if missing fields; + $dbh->do("LOCK TABLES auth_header WRITE auth_subfield_table READ"); +unless ($columns{'linkid'}){ +my $sth=$dbh->prepare("ALTER TABLE auth_header ADD COLUMN `linkid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 "); +$sth->execute(); +} +unless ($columns{'marc'}){ +my $sth=$dbh->prepare("ALTER TABLE auth_header ADD COLUMN `marc` BLOB NOT NULL DEFAULT 0 "); +$sth->execute(); +} + +my $sth=$dbh->prepare("select authid,authtypecode from auth_header "); + $sth->execute(); + +my $i=0; +my $sth2 = $dbh->prepare("UPDATE auth_header set marc=? where authid=?" ); + + +while (my ($authid,$authtypecode)=$sth->fetchrow ){ + my $record = AUTHgetauthority($dbh,$authid); +$sth2->execute($record->as_usmarc,$authid); +$timeneeded = gettimeofday - $starttime unless ($i % 1000); + print "$i in $timeneeded s\n" unless ($i % 1000); + print "." unless ($i % 500); + $i++; +} +$dbh->do("UNLOCK TABLES "); + +sub AUTHgetauthority { +# Returns MARC::Record of the biblio passed in parameter. + my ($dbh,$authid)=@_; + my $record = MARC::Record->new(); +#---- TODO : the leader is missing + $record->leader(' '); + my $sth3=$dbh->prepare("select authid,subfieldid,tag,tagorder,tag_indicator,subfieldcode,subfieldorder,subfieldvalue + from auth_subfield_table + where authid=? order by tag,tagorder,subfieldorder + "); + $sth3->execute($authid); + my $prevtagorder=1; + my $prevtag='XXX'; + my $previndicator; + my $field; # for >=10 tags + my $prevvalue; # for <10 tags + while (my $row=$sth3->fetchrow_hashref) { + if ($row->{tagorder} ne $prevtagorder || $row->{tag} ne $prevtag) { + $previndicator.=" "; + if ($prevtag <10) { + $record->add_fields((sprintf "%03s",$prevtag),$prevvalue) unless $prevtag eq "XXX"; # ignore the 1st loop + } else { + $record->add_fields($field) unless $prevtag eq "XXX"; + } + undef $field; + $prevtagorder=$row->{tagorder}; + $prevtag = $row->{tag}; + $previndicator=$row->{tag_indicator}; + if ($row->{tag}<10) { + $prevvalue = $row->{subfieldvalue}; + } else { + $field = MARC::Field->new((sprintf "%03s",$prevtag), substr($row->{tag_indicator}.' ',0,1), substr($row->{tag_indicator}.' ',1,1), $row->{'subfieldcode'}, $row->{'subfieldvalue'} ); + } + } else { + if ($row->{tag} <10) { + $record->add_fields((sprintf "%03s",$row->{tag}), $row->{'subfieldvalue'}); + } else { + $field->add_subfields($row->{'subfieldcode'}, $row->{'subfieldvalue'} ); + } + $prevtag= $row->{tag}; + $previndicator=$row->{tag_indicator}; + } + } + # the last has not been included inside the loop... do it now ! + if ($prevtag ne "XXX") { # check that we have found something. Otherwise, prevtag is still XXX and we + # must return an empty record, not make MARC::Record fail because we try to + # create a record with XXX as field :-( + if ($prevtag <10) { + $record->add_fields($prevtag,$prevvalue); + } else { + # my $field = MARC::Field->new( $prevtag, "", "", %subfieldlist); + $record->add_fields($field); + } + } + return $record; +} + +END; \ No newline at end of file -- 2.39.2