1 package Vss2Svn
::DataCache
;
8 # SQLite can get a bit slow when doing lots of sequential inserts, so we speed
9 # that up by using the sqlite2 "COPY" command, which allows reading in a tab-
10 # delimited file of data all at once. Each table that will be filled has a
11 # DataCache object created; the 'add' method adds a row of data to the cache,
12 # and the 'commit' method performs the COPY operation.
14 ###############################################################################
16 ###############################################################################
18 my($class, $table, $autoinc) = @_;
25 verbose
=> $gCfg{verbose
},
27 file
=> "$gCfg{cachedir}\\datachache.$table.tmp.txt",
30 $self = bless($self, $class);
32 if ($self->{verbose
}) {
33 print "\nSTARTING CACHE FOR $table\n";
36 $self->_delete_table();
38 if ((-e
$self->{file
}) && !(unlink($self->{file
}))) {
39 print "\nERROR: Could not delete existing cache file '$self->{file}'\n";
43 if ( !open($self->{fh
}, ">$self->{file}") ) {
44 print "\nERROR: Could not open file '$self->{file}'\n";
51 ###############################################################################
53 ###############################################################################
57 my $sth = $gCfg{dbh
}->prepare("DELETE FROM $self->{table}");
62 ###############################################################################
64 ###############################################################################
66 my($self, @data) = @_;
68 if (ref($data[0]) eq 'ARRAY') {
69 @data = @
{ $data[0] };
72 if ($self->{autoinc
}) {
73 unshift(@data, ++$self->{pkey
});
77 print $fh join("\t", map {&FormatCacheData
($_)} @data), "\n";
81 ###############################################################################
83 ###############################################################################
91 if ($self->{verbose
}) {
92 print "\n\nCOMMITTING CACHE '$self->{table}' TO DATABASE\n"
95 $sql = "COPY $self->{table} FROM '$self->{file}'";
97 $sth = $gCfg{dbh
}->prepare($sql);
102 ###############################################################################
104 ###############################################################################
105 sub FormatCacheData
{
107 return '\\N' if !defined($data);
109 $data =~ s/([\t\n\\])/\\$1/g;
112 } # End FormatCacheData
114 ###############################################################################
116 ###############################################################################
118 my($class, $dir) = @_;
120 $gCfg{cachedir
} = $dir;
123 ###############################################################################
125 ###############################################################################
127 my($class, $dbh) = @_;
132 ###############################################################################
134 ###############################################################################
136 my($class, $verbose) = @_;
138 $gCfg{verbose
} = $verbose;