File Coverage

blib/lib/Plucene/Index/FieldsWriter.pm
Criterion Covered Total %
statement 22 25 88.0
branch n/a
condition n/a
subroutine 6 7 85.7
pod 3 3 100.0
total 31 35 88.5


line stmt bran cond sub pod time code
1             package Plucene::Index::FieldsWriter;
2              
3             =head1 NAME
4              
5             Plucene::Index::FieldsWriter - writes Fields to a Document
6              
7             =head1 SYNOPSIS
8              
9             my $writer = Plucene::Index::FieldsWriter->new(
10             $dir_name, $segment, $field_infos);
11              
12             $writer->add_document(Plucene::Document $doc);
13              
14             =head1 DESCRIPTION
15              
16             This class add documents to the appropriate files.
17              
18             =head1 METHODS
19              
20             =cut
21              
22 17     17   96 use strict;
  17         39  
  17         560  
23 17     17   92 use warnings;
  17         38  
  17         426  
24              
25 17     17   673 use Plucene::Store::OutputStream;
  17         37  
  17         425  
26 17     17   95 use Plucene::Index::FieldInfos;
  17         41  
  17         6067  
27              
28             =head2 new
29              
30             my $writer = Plucene::Index::FieldsWriter->new(
31             $dir_name, $segment, $field_infos);
32              
33             This will create a new Plucene::Index::FieldsWriter object with the passed
34             directory name, segment and field infos.
35            
36             =cut
37              
38             # private FieldInfos fieldInfos;
39             # private OutputStream fieldsStream;
40             # private OutputStream indexStream;
41              
42             # FieldsWriter(Directory d, String segment, FieldInfos fn)
43             # throws IOException {
44             # fieldInfos = fn;
45             # fieldsStream = d.createFile(segment + ".fdt");
46             # indexStream = d.createFile(segment + ".fdx");
47             # }
48              
49             sub new {
50 296     296 1 3149 my ($self, $d, $segment, $fn) = @_;
51 296         3059 bless {
52             field_infos => $fn,
53             segment => $segment,
54             fields_stream => Plucene::Store::OutputStream->new("$d/$segment.fdt"),
55             index_stream => Plucene::Store::OutputStream->new("$d/$segment.fdx"),
56             }, $self;
57             }
58              
59             =head2 close
60              
61             $writer->close;
62              
63             =cut
64              
65             # final void close() throws IOException {
66             # fieldsStream.close();
67             # indexStream.close();
68             # }
69              
70             sub close {
71 0     0 1 0 my $self = shift;
72 0         0 $self->{fields_stream}->close;
73 0         0 $self->{index_stream}->close;
74             }
75              
76             =head2 add_document
77              
78             $writer->add_document(Plucene::Document $doc);
79              
80             This will add the passed Plucene::Document.
81              
82             =cut
83              
84             # final void addDocument(Document doc) throws IOException {
85             # indexStream.writeLong(fieldsStream.getFilePointer());
86             #
87             # int storedCount = 0;
88             # Enumeration fields = doc.fields();
89             # while (fields.hasMoreElements()) {
90             # Field field = (Field)fields.nextElement();
91             # if (field.isStored())
92             # storedCount++;
93             # }
94             # fieldsStream.writeVInt(storedCount);
95             #
96             # fields = doc.fields();
97             # while (fields.hasMoreElements()) {
98             # Field field = (Field)fields.nextElement();
99             # if (field.isStored()) {
100             # fieldsStream.writeVInt(fieldInfos.fieldNumber(field.name()));
101             #
102             # byte bits = 0;
103             # if (field.isTokenized())
104             # bits |= 1;
105             # fieldsStream.writeByte(bits);
106             #
107             # fieldsStream.writeString(field.stringValue());
108             # }
109             # }
110             # }
111              
112             sub add_document {
113 646     646 1 1182 my ($self, $doc) = @_;
114 646         2988 $self->{index_stream}->write_long($self->{fields_stream}->tell);
115 646         2501 my @stored = grep $_->is_stored, $doc->fields;
116 646         5996 $self->{fields_stream}->write_vint(scalar @stored);
117 646         1430 for my $field (@stored) {
118 816         3122 $self->{fields_stream}
119             ->write_vint($self->{field_infos}->field_number($field->name));
120 816         3350 $self->{fields_stream}->print(chr($field->is_tokenized));
121 816         2860 $self->{fields_stream}->write_string($field->string);
122             }
123             }
124              
125             1;