4 use lib '/openils/lib/perl5/';
7 use OpenSRF::EX qw/:try/;
8 use OpenSRF::Utils::SettingsClient;
9 use OpenILS::Utils::Fieldmapper;
10 use OpenSRF::Utils::JSON;
13 use Time::HiRes qw/time/;
17 my ($config, $output, @auto, @order, @wipe, $quiet) =
18 ('/openils/conf/opensrf_core.xml');
21 GetOptions( 'config=s' => \$config,
22 'output=s' => \$output,
24 'autoprimary=s' => \@auto,
26 'nocommit|n' => \$nocommit,
33 OpenSRF::System->bootstrap_client( config_file => $config );
34 Fieldmapper->import(IDL => OpenSRF::Utils::SettingsClient->new->config_value("IDL"));
38 while ( my $rec = <> ) {
43 $row = OpenSRF::Utils::JSON->JSON2perl($rec);
46 warn "\n\n !!! Error : $e \n\n at or around line $count\n";
50 my $class = $row->class_name;
51 my $hint = $row->json_hint;
53 if (!$lineset{$hint}) {
55 my @cols = $row->real_fields;
56 if (grep { $_ eq $hint} @auto) {
57 @cols = grep { $_ ne $class->Identity } @cols;
61 { table => $class->Table,
62 sequence => $class->Sequence,
63 pkey => $class->Identity,
67 #XXX it burnnnsssessss
68 $fieldcache{$hint}{table} =~ s/\.full_rec/.real_full_rec/o if ($hint eq 'mfr');
71 push @{ $lineset{$hint} }, [map { $row->$_ } @{ $fieldcache{$hint}{fields} }];
73 if (!$quiet && !($count % 500)) {
74 print STDERR "\r$count\t". $count / (time - $starttime);
80 print STDERR "\nWriting file ...\n" if (!$quiet);
82 $output = '&STDOUT' unless ($output);
83 $output = FileHandle->new(">$output") if ($output);
85 binmode($output,'utf8');
87 $output->print("SET CLIENT_ENCODING TO 'UNICODE';\n\n");
88 $output->print("BEGIN;\n\n");
90 my $after_commit = '';
92 # continue if there was no data for this table
93 next unless ($fieldcache{$h});
95 my $fields = join(',', @{ $fieldcache{$h}{fields} });
96 $output->print( "DELETE FROM $fieldcache{$h}{table};\n" ) if (grep {$_ eq $h } @wipe);
97 # Speed up loading of bib records
98 $output->print( "COPY $fieldcache{$h}{table} ($fields) FROM STDIN;\n" );
100 for my $line (@{ $lineset{$h} }) {
113 if ($h eq 'bre' and $fieldcache{$h}{fields}[$x] eq 'quality') {
114 $d = int($d) if ($d ne '\N');
119 $output->print( join("\t", @data)."\n" );
122 $output->print('\.'."\n\n");
125 $output->print("SELECT reporter.enable_materialized_simple_record_trigger();\n");
126 $output->print("SELECT reporter.disable_materialized_simple_record_trigger();\n");
129 $after_commit .= "SELECT setval('$fieldcache{$h}{sequence}'::TEXT, (SELECT MAX($fieldcache{$h}{pkey}) FROM $fieldcache{$h}{table}), TRUE);\n"
130 if (!grep { $_ eq $h} @auto);
133 $output->print("COMMIT;\n\n") unless $nocommit;
134 $output->print($after_commit);