dd7dcb64cde9bf15606081e8e1ac9e3776401033
[NoSQL-toys.git] / koha / koha2riak-search.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4 use DBI;
5 use RiakSearch;
6 use Data::Dump qw/dump/;
7
8
9 my ( $riak_url, $table, $dbi ) = @ARGV;
10
11 $riak_url ||= 'http://10.60.0.92:8098';
12 $table    ||= 'biblioitems';
13 $dbi      ||= 'DBI:mysql:dbname=koha;host=10.60.0.10;port=3306';
14
15 my $batch_size = 1000;
16 my $offset = $ENV{OFFSET} || 0;
17
18 my $dbh = DBI->connect($dbi,"","") || die $DBI::errstr;
19 my $riak = RiakSearch->new( $riak_url );
20 #$riak->{args} = 'w=1';
21
22
23 sub riak_search_kv_hook {
24         my $bucket = shift;
25         $riak->request( 'PUT' => $bucket, { props => {
26                 precommit => [ { mod => 'riak_search_kv_hook', fun => 'precommit' } ],
27 #               precommit => [],
28 #               last_write_wins => 'true',
29                 }
30         });
31         warn "riak_search_kv_hook $bucket ", $riak->request( 'GET' => '/koha.marcxml' );
32 }
33
34 riak_search_kv_hook 'koha.marcxml';
35 riak_search_kv_hook "koha.$table";
36
37 while(1) {
38
39         my $limit = "LIMIT $batch_size OFFSET $offset";
40         warn "SELECT * FROM $table $limit\n";
41
42     my $sth = $dbh->prepare(qq{ select * from $table $limit}) || die $dbh->errstr();
43     $sth->execute || die $sth->errstr();
44     my @pk = $dbh->primary_key( undef, undef, $table );
45
46     print "import ", $sth->rows, " rows from $table pk:",dump( @pk ),"...\n";
47
48     while (my $row = $sth->fetchrow_hashref() ) {
49
50         my $key = join('_', map { $row->{$_} } @pk);
51                 $key ||= "o.$offset";
52                 my $biblionumber = $row->{biblionumber};
53
54         if ( my $marcxml = delete $row->{marcxml} ) {
55                         $riak->request( 'PUT' => "/koha.marcxml/$key", $marcxml, {
56                                 'Content-Type' => 'text/xml',
57                                 'Link' => qq|</riak/koha.$table/$biblionumber>; riaktag="biblio"|,
58                         } );
59         }
60
61 #               warn "## $key ",dump($row);
62
63                 my $headers;
64                 foreach my $reference ( qw(biblio biblioitems borrowers items) ) {
65                         my $singular = $1 if $reference =~ m/^(\w+?)s?$/;
66                         my $col = $singular . 'number';
67                         next if $key =~ m/$col/;
68                         my $number = $row->{$col} || next;
69                         push @{ $headers->{Link} }, qq|</riak/koha.$reference/$number>; riaktag="$reference"|;
70                 }
71
72                 $riak->request( 'PUT' => "/koha.$table/$key", $row, $headers );
73
74                 $offset++;
75     }
76
77         last if $sth->rows < $batch_size;
78
79 }
80
81 warn "END total_rows $offset\n";