script to dump records based on edit_date in a format that marc_add_ids can ingest
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sun, 25 Jan 2009 16:40:58 +0000 (16:40 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Sun, 25 Jan 2009 16:40:58 +0000 (16:40 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@11946 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/extras/fast-extract [new file with mode: 0755]

diff --git a/Open-ILS/src/extras/fast-extract b/Open-ILS/src/extras/fast-extract
new file mode 100755 (executable)
index 0000000..a1dc7db
--- /dev/null
@@ -0,0 +1,71 @@
+#!/usr/bin/perl
+# vim:ts=4:noet:
+
+use strict;
+use DBI;
+use FileHandle;
+use Getopt::Long;
+use OpenSRF::EX qw/:try/;
+use OpenSRF::Utils::Logger qw/$logger/;
+use OpenSRF::System;
+use OpenSRF::AppSession;
+use OpenSRF::Utils::SettingsClient;
+
+use open ':utf8';
+
+binmode(STDIN, ':utf8');
+binmode(STDOUT, ':utf8');
+
+$| = 1;
+
+my ($config, $after) = ('SYSCONFDIR/opensrf_core.xml');
+
+GetOptions(
+       "after=s"       => \$after,
+       "boostrap=s"    => \$config,
+);
+
+OpenSRF::System->bootstrap_client( config_file => $config );
+
+# XXX Get this stuff from the settings server
+my $sc = OpenSRF::Utils::SettingsClient->new;
+my $db_driver = $sc->config_value( reporter => setup => database => 'driver' );
+my $db_host = $sc->config_value( reporter => setup => database => 'host' );
+my $db_port = $sc->config_value( reporter => setup => database => 'port' );
+my $db_name = $sc->config_value( reporter => setup => database => 'db' );
+if (!$db_name) {
+    $db_name = $sc->config_value( reporter => setup => database => 'name' );
+    print STDERR "WARN: <database><name> is a deprecated setting for database name. For future compatibility, you should use <database><db> instead." if $db_name; 
+}
+my $db_user = $sc->config_value( reporter => setup => database => 'user' );
+my $db_pw = $sc->config_value( reporter => setup => database => 'pw' );
+
+die "Unable to retrieve database connection information from the settings server" unless ($db_driver && $db_host && $db_port && $db_name && $db_user);
+
+my $dsn = "dbi:" . $db_driver . ":dbname=" . $db_name .';host=' . $db_host . ';port=' . $db_port;
+
+my $dbh = DBI->connect($dsn,$db_user,$db_pw, {AutoCommit => 1, pg_enable_utf8 => 1, RaiseError => 1});
+
+my $SQL = 'SELECT id FROM biblio.record_entry';
+$sql .= " WHERE edit_date > '$after'" if ($after);
+
+warn "Initial selection SQL: $SQL\n";
+
+my $ids = $dbh->selectcol_arrayref($SQL);
+
+my $sql = <<'SQL';
+SELECT  id,
+        tcn_source,
+        tcn_value,
+        REGEXP_REPLACE(marc, E'\\n','','g') AS marc
+  FROM  biblio.record_entry
+  WHERE id = ?
+SQL
+
+warn "Record retrieval SQL: $SQL\n";
+
+for my $id ( @$ids ) {
+    my $row = $dbh->selectrow_hashref( $SQL, {}, $id );
+    print "$$row{id} | $$row{tnc_source} | $$row{tcn_value} | $$row{marc}\n";
+}
+