[Bio] / Sprout / ERDBLoad.pm Repository:
ViewVC logotype

Diff of /Sprout/ERDBLoad.pm

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

revision 1.13, Wed Apr 19 03:34:15 2006 UTC revision 1.23, Wed Sep 3 20:56:20 2008 UTC
# Line 28  Line 28 
28    
29  =head3 new  =head3 new
30    
31  C<< my $erload = ERDBLoad->new($erdb, $relationName, $directory, $loadOnly, $ignore); >>      my $erload = ERDBLoad->new($erdb, $relationName, $directory, $loadOnly, $ignore);
32    
33  Begin loading an ERDB relation.  Begin loading an ERDB relation.
34    
# Line 82  Line 82 
82          Trace("Relation $relationName will be loaded from $fileName.") if T(2);          Trace("Relation $relationName will be loaded from $fileName.") if T(2);
83          $fileHandle = "";          $fileHandle = "";
84      } else {      } else {
85          # If this is a primary entity relation whose key is not a hash string, sort          # Compute the file namefor this relation. We will build a file on
86          # the output to remove duplicate keys.          # disk and then sort it into the real file when we're done.
87          my $fileString = ($erdb->SortNeeded($relationName) ?          my $fileString = ">$fileName.tmp";
                             "| sort +0 -1 -u -t \"\t\" >$fileName" :  
                             ">$fileName");  
88          # Open the output file and remember its handle.          # Open the output file and remember its handle.
89          $fileHandle = Open(undef, $fileString);          $fileHandle = Open(undef, $fileString);
90          Trace("Relation $relationName load file created with primary flag $primary.") if T(2);          Trace("Relation $relationName load file created with primary flag $primary.") if T(2);
# Line 110  Line 108 
108    
109  =head3 Ignore  =head3 Ignore
110    
111  C<< my $flag = $erload->Ignore; >>      my $flag = $erload->Ignore;
112    
113  Return TRUE if we are ignoring this table, else FALSE.  Return TRUE if we are ignoring this table, else FALSE.
114    
# Line 125  Line 123 
123    
124  =head3 Put  =head3 Put
125    
126  C<< my  = $erload->Put($field1, $field2, ..., $fieldN); >>      my  = $erload->Put($field1, $field2, ..., $fieldN);
127    
128  Write a line of data to the load file. This may also cause the load file to be closed  Write a line of data to the load file. This may also cause the load file to be closed
129  and data read into the table.  and data read into the table.
# Line 153  Line 151 
151          my $truncates = $self->{dbh}->VerifyFields($self->{relName}, \@rawFields);          my $truncates = $self->{dbh}->VerifyFields($self->{relName}, \@rawFields);
152          # Run through the list of field values, escaping them.          # Run through the list of field values, escaping them.
153          my @fields = map { Tracer::Escape($_) } @rawFields;          my @fields = map { Tracer::Escape($_) } @rawFields;
         # If this is a primary relation, append the new-record field.  
         if ($self->{primary}) {  
             push @fields, '0';  
         }  
154          # Form a data line from the fields.          # Form a data line from the fields.
155          my $line = join("\t", @fields) . "\n";          my $line = join("\t", @fields) . "\n";
156          # Write the new record to the load file.          # Write the new record to the load file.
# Line 176  Line 170 
170    
171  =head3 Add  =head3 Add
172    
173  C<< my  = $stats->Add($statName, $value); >>      my  = $stats->Add($statName, $value);
174    
175  Increment the specified statistic.  Increment the specified statistic.
176    
# Line 207  Line 201 
201    
202  =head3 Finish  =head3 Finish
203    
204  C<< my $stats = $erload->Finish(); >>      my $stats = $erload->Finish();
205    
206  Finish loading the table. This closes the load file and loads its contents into the database.  Finish loading the table. This closes and sorts the load file.
 It also creates the indexes if the DBMS uses post-indexing.  
207    
208  =over 4  =over 4
209    
# Line 229  Line 222 
222      if ($self->{fh}) {      if ($self->{fh}) {
223          # Close the load file.          # Close the load file.
224          close $self->{fh};          close $self->{fh};
225            # Get the ERDB object.
226            my $erdb = $self->{dbh};
227            # Get the output file name.
228            my $fileName = $self->{fileName};
229            # Get the sort command for this relation.
230            my $sortCommand = $erdb->SortNeeded($self->{relName});
231            # Open the temp file for input via sort.
232            my $ih = Open(undef, "$sortCommand <$fileName.tmp |");
233            # Open the real file for output.
234            my $oh = Open(undef, ">$fileName");
235            Trace("Sorting into $fileName with command: $sortCommand") if T(3);
236            # Set up a timer.
237            my $start = time();
238            # Sort from the temp file into the output file.
239            while (! eof $ih) {
240                print $oh (<$ih>);
241            }
242            # Record the time spent
243            $self->{stats}->Add(sortTime => (time() - $start));
244            # Delete the temp file.
245            unlink "$fileName.tmp";
246            # Tell the user we're done.
247            Trace("Load file $fileName created.") if T(3);
248    
249      }      }
250      # Return the statistics object.      # Return the statistics object.
251      return $self->{stats};      return $self->{stats};
252  }  }
253    
254    =head3 FinishAndLoad
255    
256        my $stats = $erload->FinishAndLoad();
257    
258    Finish the load and load the table, returning the statistics.
259    
260    =cut
261    
262    sub FinishAndLoad {
263        # Get the parameters.
264        my ($self) = @_;
265        # Finish the load file.
266        my $retVal = $self->Finish();
267        # Load the table.
268        my $newStats = $self->LoadTable();
269        # Accumulate the stats.
270        $retVal->Accumulate($newStats);
271        # Return the result.
272        return $retVal;
273    }
274    
275  =head3 RelName  =head3 RelName
276    
277  C<< my $name = $erload->RelName; >>      my $name = $erload->RelName;
278    
279  Name of the relation being loaded by this object.  Name of the relation being loaded by this object.
280    
# Line 249  Line 287 
287      return $self->{relName};      return $self->{relName};
288  }  }
289    
290    =head3 LoadTable
291    
292        my $stats = $erload->LoadTable();
293    
294    Load the database table from the load file and return a statistics object.
295    
296    =cut
297    
298    sub LoadTable {
299        # Get the parameters.
300        my ($self) = @_;
301        # Get the database object, the file name, and the relation name.
302        my $erdb = $self->{dbh};
303        my $fileName = $self->{fileName};
304        my $relName = $self->{relName};
305        # Load the table. The third parameter indicates this is a drop and reload.
306        my $retVal = $erdb->LoadTable($fileName, $relName, truncate => 1);
307        # Return the result.
308        return $retVal;
309    }
310    
311  1;  1;
312    

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.23

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3