156 |
} |
} |
157 |
|
|
158 |
# create lookup |
# create lookup |
159 |
|
my $rec = $self->{'data'}->{$mfn}; |
160 |
|
$self->create_lookup($rec, @{$arg->{'lookup'}}); |
161 |
|
|
|
foreach my $i (@{$arg->{lookup}}) { |
|
|
my $rec = $self->{'data'}->{$mfn}; |
|
|
if ($i->{'eval'}) { |
|
|
my $eval = $self->fill_in($rec,$i->{'eval'}); |
|
|
my $key = $self->fill_in($rec,$i->{'key'}); |
|
|
my @val = $self->fill_in($rec,$i->{'val'}); |
|
|
if ($key && @val && eval $eval) { |
|
|
push @{$self->{'lookup'}->{$key}}, @val; |
|
|
} |
|
|
} else { |
|
|
my $key = $self->fill_in($rec,$i->{'key'}); |
|
|
my @val = $self->fill_in($rec,$i->{'val'}); |
|
|
if ($key && @val) { |
|
|
push @{$self->{'lookup'}->{$key}}, @val; |
|
|
} |
|
|
} |
|
|
} |
|
162 |
} |
} |
163 |
|
|
164 |
# store max mfn and return it. |
# store max mfn and return it. |
165 |
return $self->{'max_mfn'} = $maxmfn; |
return $self->{'max_mfn'} = $maxmfn; |
166 |
} |
} |
167 |
|
|
168 |
|
=head2 create_lookup |
169 |
|
|
170 |
|
Create lookup from record using lookup definition. |
171 |
|
|
172 |
|
=cut |
173 |
|
|
174 |
|
sub create_lookup { |
175 |
|
my $self = shift; |
176 |
|
|
177 |
|
my $rec = shift || confess "need record to create lookup"; |
178 |
|
confess("need HASH as first argument!") if ($rec !~ /HASH/o); |
179 |
|
|
180 |
|
foreach my $i (@_) { |
181 |
|
if ($i->{'eval'}) { |
182 |
|
my $eval = $self->fill_in($rec,$i->{'eval'}); |
183 |
|
my $key = $self->fill_in($rec,$i->{'key'}); |
184 |
|
my @val = $self->fill_in($rec,$i->{'val'}); |
185 |
|
if ($key && @val && eval $eval) { |
186 |
|
push @{$self->{'lookup'}->{$key}}, @val; |
187 |
|
} |
188 |
|
} else { |
189 |
|
my $key = $self->fill_in($rec,$i->{'key'}); |
190 |
|
my @val = $self->fill_in($rec,$i->{'val'}); |
191 |
|
if ($key && @val) { |
192 |
|
push @{$self->{'lookup'}->{$key}}, @val; |
193 |
|
} |
194 |
|
} |
195 |
|
} |
196 |
|
} |
197 |
|
|
198 |
=head2 fill_in |
=head2 fill_in |
199 |
|
|
200 |
Workhourse of all: takes record from in-memory structure of database and |
Workhourse of all: takes record from in-memory structure of database and |
224 |
my $i = shift || 0; |
my $i = shift || 0; |
225 |
|
|
226 |
# FIXME remove for speedup? |
# FIXME remove for speedup? |
227 |
if ($rec !~ /HASH/o) { |
confess("need HASH as first argument!") if ($rec !~ /HASH/o); |
|
confess("need HASH as first argument!"); |
|
|
} |
|
228 |
|
|
229 |
my $found = 0; |
my $found = 0; |
230 |
|
|
268 |
|
|
269 |
=head2 lookup |
=head2 lookup |
270 |
|
|
271 |
This function will perform lookups on format supplied to it. |
Perform lookups on format supplied to it. |
272 |
|
|
273 |
my $txt = $self->lookup('[v900]'); |
my $txt = $self->lookup('[v900]'); |
274 |
|
|
275 |
|
Lookups can be nested (like C<[d:[a:[v900]]]>). |
276 |
|
|
277 |
=cut |
=cut |
278 |
|
|
279 |
sub lookup { |
sub lookup { |