/[wait]/trunk/lib/WAIT/IndexScan.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/lib/WAIT/IndexScan.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 85 - (hide annotations)
Fri May 3 16:16:10 2002 UTC (22 years ago) by ulpfr
Original Path: cvs-head/lib/WAIT/IndexScan.pm
File size: 1441 byte(s)
First stab at moving backend from DB_File to BerkeleyDB.

1 ulpfr 10 # -*- Mode: Perl -*-
2     # IndexScan.pm --
3     # ITIID : $ITI$ $Header $__Header$
4     # Author : Ulrich Pfeifer
5     # Created On : Mon Aug 12 14:05:14 1996
6     # Last Modified By: Ulrich Pfeifer
7 ulpfr 85 # Last Modified On: Sat Apr 27 17:46:53 2002
8 ulpfr 10 # Language : CPerl
9 ulpfr 85 # Update Count : 92
10 ulpfr 10 # Status : Unknown, Use with caution!
11     #
12     # Copyright (c) 1996-1997, Ulrich Pfeifer
13     #
14    
15     package WAIT::IndexScan;
16    
17     use strict;
18 ulpfr 85 use BerkeleyDB;
19 ulpfr 10 use Fcntl;
20    
21     sub new {
22     my $type = shift;
23     my $index = shift;
24     my $code = shift;
25 ulpfr 85 my $cursor;
26 ulpfr 10
27     # find the first key
28 ulpfr 85 unless ($cursor = $index->{dbh}->db_cursor()) {
29 ulpfr 13 require Carp;
30     Carp::croak("Could not open scan");
31     }
32 ulpfr 85 # Not sure about this. DB_FIRST sets $tid to no-of-records?
33     # $index->{dbh}->seq($first, $tid, DB_NEXT);
34 ulpfr 10 # register to avoid unnecessary position calls
35    
36 ulpfr 85 bless {code => $code, cursor => $cursor, Index => $index},
37     $type or ref($type);
38 ulpfr 10 }
39    
40     sub next {
41     my $self = shift;
42 ulpfr 85 my $cursor = $self->{cursor};
43     my ($key, $tid) = ('', '');
44 ulpfr 10
45 ulpfr 85 $cursor->c_get($key, $tid, DB_NEXT) == 0 or return;
46 ulpfr 13
47 ulpfr 85 my @tuple = split /$;/, $key;
48 ulpfr 13
49 ulpfr 85 my %tuple = (_id => $tid);
50     for (@{$self->{Index}->{attr}}) {
51     $tuple{$_} = shift @tuple;
52     }
53 ulpfr 10
54 ulpfr 85
55     if ($self->{code}) { # test condition
56     &{$self->{code}}(\%tuple)? %tuple : $self->next;
57 ulpfr 10 } else {
58 ulpfr 85 %tuple;
59 ulpfr 10 }
60     }
61    
62 ulpfr 85 sub close {
63     my $self = shift;
64     delete $self->{cursor};
65 ulpfr 10 }
66    
67     1;

Properties

Name Value
cvs2svn:cvs-rev 1.2

  ViewVC Help
Powered by ViewVC 1.1.26