LP1054322 - libparent-perl not needed for Ubuntu Precise
[working/Evergreen.git] / Open-ILS / src / extras / fast-extract.in
1 #!/usr/bin/perl
2 # vim:ts=4:noet:
3
4 use strict;
5 use DBI;
6 use FileHandle;
7 use Getopt::Long;
8 use OpenSRF::EX qw/:try/;
9 use OpenSRF::Utils::Logger qw/$logger/;
10 use OpenSRF::System;
11 use OpenSRF::AppSession;
12 use OpenSRF::Utils::SettingsClient;
13
14 use open ':utf8';
15
16 binmode(STDIN, ':utf8');
17 binmode(STDOUT, ':utf8');
18
19 $| = 1;
20
21 my ($config, $delim, $after,$deleted) = ('@sysconfdir@/opensrf_core.xml', ' | ');
22
23 GetOptions(
24         "after=s"       => \$after,
25         "bootstrap=s"   => \$config,
26         "delimiter=s"   => \$delim,
27         "include-deleted"       => \$deleted,
28 );
29
30 OpenSRF::System->bootstrap_client( config_file => $config );
31
32 # XXX Get this stuff from the settings server
33 my $sc = OpenSRF::Utils::SettingsClient->new;
34 my $db_driver = $sc->config_value( reporter => setup => database => 'driver' );
35 my $db_host = $sc->config_value( reporter => setup => database => 'host' );
36 my $db_port = $sc->config_value( reporter => setup => database => 'port' );
37 my $db_name = $sc->config_value( reporter => setup => database => 'db' );
38 if (!$db_name) {
39     $db_name = $sc->config_value( reporter => setup => database => 'name' );
40     print STDERR "WARN: <database><name> is a deprecated setting for database name. For future compatibility, you should use <database><db> instead." if $db_name; 
41 }
42 my $db_user = $sc->config_value( reporter => setup => database => 'user' );
43 my $db_pw = $sc->config_value( reporter => setup => database => 'pw' );
44
45 die "Unable to retrieve database connection information from the settings server" unless ($db_driver && $db_host && $db_port && $db_name && $db_user);
46
47 my $dsn = "dbi:" . $db_driver . ":dbname=" . $db_name .';host=' . $db_host . ';port=' . $db_port;
48
49 my $dbh = DBI->connect($dsn,$db_user,$db_pw, {AutoCommit => 1, pg_enable_utf8 => 1, RaiseError => 1});
50
51 my $SQL = 'SELECT id FROM biblio.record_entry WHERE id > 0';
52 $SQL .= " AND edit_date > '$after'" if ($after);
53 $SQL .= " AND deleted IS FALSE" if (!$deleted);
54
55 my $ids = $dbh->selectcol_arrayref($SQL);
56
57 $SQL = <<'SQL';
58 SELECT  id,
59         tcn_source,
60         tcn_value,
61         deleted,
62         REGEXP_REPLACE(marc, E'\\n','','g') AS marc
63   FROM  biblio.record_entry
64   WHERE id = ?
65 SQL
66
67 for my $id ( @$ids ) {
68     my $row = $dbh->selectrow_hashref( $SQL, {}, $id );
69     print "$$row{deleted}$delim$$row{id}$delim$$row{tcn_source}$delim$$row{tcn_value}$delim$$row{marc}\n";
70 }
71