/[pg-zoom]/zoom.sql
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /zoom.sql

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1 by dpavlin, Thu Apr 26 18:50:59 2007 UTC revision 5 by dpavlin, Thu Apr 26 20:43:00 2007 UTC
# Line 7  create table servers ( Line 7  create table servers (
7  );  );
8    
9  -- insert sample  -- insert sample
10  insert into servers values ( 'NSK', '161.53.240.27', 8090, 'voyager' );  insert into servers values ( 'nsk', '161.53.240.27', 8090, 'voyager' );
11    insert into servers values ( 'nsk-en', '161.53.240.27', 8190, 'voyager' );
12    insert into servers values ( 'loc', 'z3950.loc.gov', 7090, 'Voyager' );
13    insert into servers values ( 'ucs', 'library.usc.edu', 2200, 'unicorn' );
14    insert into servers values ( 'tera', 'z3950.inquirion.com', 210, 'Marc' );
15    insert into servers values ( 'cosmo', 'rlw.savba.sk', 8888, 'test_un_cat' );
16    insert into servers values ( 'copac', 'z3950.copac.ac.uk', 2020, 'xxdefault' );
17    --insert into servers values ( 'wcat', 'tikal.dev.oclc.org', 210, 'WorldCat' );
18    --insert into servers values ( '', '', , '' );
19    
20  create type item as (  create type item as (
21          title text,          title text,
# Line 16  create type item as ( Line 24  create type item as (
24          date text          date text
25  );  );
26    
27  create or replace function search(text)  create or replace function search(text,text)
28  returns setof item  returns setof item
29  language plperlu  language plperlu
30  as $$  as $$
31    
32  my ( $query ) = @_;  my $debug = 0;
33    
34  my ( $host, $port, $database ) =  my ( $server, $query ) = @_;
35          ( '161.53.240.27', 8090, 'voyager' );  
36    my $rv = spi_exec_query(qq{
37            select host,port,database from servers where name ilike '$server'
38    },1);
39    
40    die "can't find database $database\n" unless ( $rv->{processed} == 1 );
41    
42    my ( $host, $port, $database ) = (
43            $rv->{rows}[0]->{host},
44            $rv->{rows}[0]->{port},
45            $rv->{rows}[0]->{database},
46    );
47    
48  use ZOOM;  use ZOOM;
49  use MARC::Record;  use MARC::Record;
50    use Encode qw/encode decode/;
51    
52  my $pqf = {  my $pqf = {
53          isbn => '@attr 1=7 @attr 4=1 "%s"',          isbn => '@attr 1=7 @attr 4=1 "%s"',
# Line 51  my $conn = new ZOOM::Connection($host, $ Line 71  my $conn = new ZOOM::Connection($host, $
71    
72  $conn->option(preferredRecordSyntax => "usmarc");  $conn->option(preferredRecordSyntax => "usmarc");
73    
74  my $rs = $conn->search_pqf( q2cqf( $query ) );  my $cqf = q2cqf( $query );
75    
76    my $rs = $conn->search_pqf( $cqf );
77    
78  my $n = $rs->size();  my $n = $rs->size();
79  # fetch all results  # fetch all results
80  $rs->records(0, $n - 1, 0);  $rs->records(0, $n - 1, 0);
81    
82  warn "found $n results for $query";  warn "$n results for '$query' [$cqf]\n";
83    
84    sub strip_non_digit {
85            my $d = shift;
86            $d =~ s/^\D+//;
87            $d =~ s/\D+$//;
88            return $d;
89    }
90    
91    # fix encoding
92    sub e {
93            my $t = shift;
94            $t =~ s/éc/è/g;
95            $t =~ s/âc/æ/g;
96            $t =~ s/éz/¾/g;
97            $t =~ s/és/¹/g;
98            $t =~ s/³/ð/g;
99            $t =~ s/éC/È/g;
100            $t =~ s/âC/Æ/g;
101            $t =~ s/éZ/®/g;
102            $t =~ s/éS/©/g;
103            $t =~ s/£/Ð/g;
104            warn "## $t\n" if $debug;
105    #       $t = decode('iso-8859-2', $t);
106    #       return encode('utf-8',$t);
107            return $t;
108    }
109    
110  foreach my $i ( 1 .. $n ) {  foreach my $i ( 1 .. $n ) {
111          my $marc = new_from_usmarc MARC::Record( $rs->record( $i - 1 )->raw() );          my $marc = new_from_usmarc MARC::Record( $rs->record( $i - 1 )->raw() );
112    
113          return_next({          return_next({
114                  title => $marc->title,                  title => e( $marc->title ),
115                  author => $marc->author,                  author => e( $marc->author ),
116                  edition => $marc->edition,                  edition => e( $marc->edition ),
117                  date => $marc->publication_date,                  date => strip_non_digit( $marc->publication_date ),
118          });          });
119  }  }
120    
# Line 75  return undef; Line 123  return undef;
123  $$;  $$;
124    
125  -- if your terminal isn't iso-8859-2, change this!  -- if your terminal isn't iso-8859-2, change this!
126  set client_encoding  = 'iso-8859-2';  -- set client_encoding  = 'iso-8859-2';
127    
128    -- example
129    -- select * from search('title:djece');
130    -- select * from search('osman');
131    
132    select * from search('NSK','title:mor');
133    select * from search('NSK','grada');
134    select * from search('nsk-en','restrictions');

Legend:
Removed from v.1  
changed lines
  Added in v.5

  ViewVC Help
Powered by ViewVC 1.1.26