[Lxr-commits] CVS: lxr/lib/LXR/Index Mysql.pm, 1.29, 1.30 DB.pm, 1.16, 1.17 Postgres.pm, 1.30, 1.31
Brought to you by:
ajlittoz
From: AdrianIssott <adr...@us...> - 2009-05-09 21:57:41
|
Update of /cvsroot/lxr/lxr/lib/LXR/Index In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv29829/lib/LXR/Index Modified Files: Mysql.pm DB.pm Postgres.pm Oracle.pm Log Message: Feature 1691378 (Rearchitect the DB backends) Part IX * Converted Postgres to an object-orientated style Note: an explicit call to the destructor of the LXR::Index was required since Perl wasn't doing it as part of the global destruction (on win32 v5.8.8) Index: Mysql.pm =================================================================== RCS file: /cvsroot/lxr/lxr/lib/LXR/Index/Mysql.pm,v retrieving revision 1.29 retrieving revision 1.30 diff -u -d -r1.29 -r1.30 --- Mysql.pm 9 May 2009 18:55:31 -0000 1.29 +++ Mysql.pm 9 May 2009 21:57:34 -0000 1.30 @@ -157,7 +157,7 @@ $self->{delete_files} = undef; if ($self->{dbh}) { - $self->{dbh}->disconnect(); + $self->{dbh}->disconnect() or die "Disconnect failed: $DBI::errstr"; $self->{dbh} = undef; } } Index: DB.pm =================================================================== RCS file: /cvsroot/lxr/lxr/lib/LXR/Index/DB.pm,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- DB.pm 25 Apr 2009 20:40:24 -0000 1.16 +++ DB.pm 9 May 2009 21:57:34 -0000 1.17 @@ -121,4 +121,7 @@ sub emptycache { } +sub DESTROY { +} + 1; Index: Postgres.pm =================================================================== RCS file: /cvsroot/lxr/lxr/lib/LXR/Index/Postgres.pm,v retrieving revision 1.30 retrieving revision 1.31 diff -u -d -r1.30 -r1.31 --- Postgres.pm 9 May 2009 18:55:31 -0000 1.30 +++ Postgres.pm 9 May 2009 21:57:34 -0000 1.31 @@ -24,139 +24,154 @@ use DBI; use LXR::Common; -use vars qw($dbh $transactions %files %symcache $commitlimit - $files_select $filenum_nextval $files_insert - $symbols_byname $symbols_byid $symnum_nextval - $symbols_remove $symbols_insert $indexes_select $indexes_insert - $releases_select $releases_insert $status_select $status_insert - $status_update $usage_insert $usage_select $decl_select - $declid_nextnum $decl_insert $delete_indexes $delete_usage - $delete_status $delete_releases $delete_files $prefix); +our @ISA = ("LXR::Index"); + +# +# Global variables +# +my (%files, %symcache); + +my ($commitlimit, $transactions, $dbConnection); sub new { my ($self, $dbname) = @_; $self = bless({}, $self); - $dbh ||= DBI->connect($dbname, $config->{'dbuser'}, $config->{'dbpass'}); - die($DBI::errstr) unless $dbh; - - $$dbh{'AutoCommit'} = 0; + $self->{dbh} = DBI->connect($dbname, $config->{dbuser}, $config->{dbpass}) + or fatal "Can't open connection to database: $DBI::errstr\n"; - # $dbh->trace(1); + $self->{dbh}->begin_work() or die "begin_work failed: $DBI::errstr"; + $commitlimit = 100; + $transactions = 0; + + %files = (); + %symcache = (); + my $prefix; if (defined($config->{'dbprefix'})) { $prefix = $config->{'dbprefix'}; } else { $prefix = "lxr_"; } + $self->{files_select} = + $self->{dbh}->prepare("select fileid from ${prefix}files where filename = ? and revision = ?"); + $self->{filenum_nextval} = + $self->{dbh}->prepare("select nextval('${prefix}filenum')"); + $self->{files_insert} = + $self->{dbh}->prepare("insert into ${prefix}files values (?, ?, ?)"); - $commitlimit = 100; - $transactions = 0; - %files = (); - %symcache = (); - - $files_select = - $dbh->prepare("select fileid from ${prefix}files where filename = ? and revision = ?"); - $filenum_nextval = $dbh->prepare("select nextval('${prefix}filenum')"); - $files_insert = $dbh->prepare("insert into ${prefix}files values (?, ?, ?)"); - - $symbols_byname = $dbh->prepare("select symid from ${prefix}symbols where symname = ?"); - $symbols_byid = $dbh->prepare("select symname from ${prefix}symbols where symid = ?"); - $symnum_nextval = $dbh->prepare("select nextval('${prefix}symnum')"); - $symbols_insert = $dbh->prepare("insert into ${prefix}symbols values (?, ?)"); - $symbols_remove = $dbh->prepare("delete from ${prefix}symbols where symname = ?"); + $self->{symbols_byname} = + $self->{dbh}->prepare("select symid from ${prefix}symbols where symname = ?"); + $self->{symbols_byid} = + $self->{dbh}->prepare("select symname from ${prefix}symbols where symid = ?"); + $self->{symnum_nextval} = + $self->{dbh}->prepare("select nextval('${prefix}symnum')"); + $self->{symbols_insert} = + $self->{dbh}->prepare("insert into ${prefix}symbols values (?, ?)"); + $self->{symbols_remove} = + $self->{dbh}->prepare("delete from ${prefix}symbols where symname = ?"); - $indexes_select = - $dbh->prepare("select f.filename, i.line, d.declaration, i.relsym " + $self->{indexes_select} = + $self->{dbh}->prepare("select f.filename, i.line, d.declaration, i.relsym " . "from ${prefix}symbols s, ${prefix}indexes i, ${prefix}files f, ${prefix}releases r, ${prefix}declarations d " . "where s.symid = i.symid and i.fileid = f.fileid " . "and f.fileid = r.fileid " . "and i.langid = d.langid and i.type = d.declid " . "and s.symname = ? and r.release = ? " . "order by f.filename, i.line, d.declaration"); - $indexes_insert = - $dbh->prepare("insert into ${prefix}indexes (symid, fileid, line, langid, type, relsym) " + $self->{indexes_insert} = + $self->{dbh}->prepare("insert into ${prefix}indexes (symid, fileid, line, langid, type, relsym) " . "values (?, ?, ?, ?, ?, ?)"); - $releases_select = - $dbh->prepare("select * from ${prefix}releases where fileid = ? and release = ?"); - $releases_insert = $dbh->prepare("insert into ${prefix}releases values (?, ?)"); - $status_select = $dbh->prepare("select status from ${prefix}status where fileid = ?"); - $status_insert = $dbh->prepare + $self->{releases_select} = + $self->{dbh}->prepare("select * from ${prefix}releases where fileid = ? and release = ?"); + $self->{releases_insert} = + $self->{dbh}->prepare("insert into ${prefix}releases values (?, ?)"); + + $self->{status_select} = + $self->{dbh}->prepare("select status from ${prefix}status where fileid = ?"); + $self->{status_insert} = $self->{dbh}->prepare ("insert into ${prefix}status (fileid, status) values (?, ?)"); - - $status_update = - $dbh->prepare("update ${prefix}status set status = ? where fileid = ? and status <= ?"); + $self->{status_update} = + $self->{dbh}->prepare("update ${prefix}status set status = ? where fileid = ? and status <= ?"); - $usage_insert = $dbh->prepare("insert into ${prefix}usage values (?, ?, ?)"); - $usage_select = - $dbh->prepare("select f.filename, u.line " + $self->{usage_insert} = + $self->{dbh}->prepare("insert into ${prefix}usage values (?, ?, ?)"); + $self->{usage_select} = + $self->{dbh}->prepare("select f.filename, u.line " . "from ${prefix}symbols s, ${prefix}files f, ${prefix}releases r, ${prefix}usage u " . "where s.symid = u.symid " . "and f.fileid = u.fileid " - . "and f.fileid = r.fileid and " - . "s.symname = ? and r.release = ? " + . "and u.fileid = r.fileid " + . "and s.symname = ? and r.release = ? " . "order by f.filename, u.line"); - $declid_nextnum = $dbh->prepare("select nextval('${prefix}declnum')"); + $self->{declid_nextnum} = + $self->{dbh}->prepare("select nextval('${prefix}declnum')"); - $decl_select = - $dbh->prepare( - "select declid from ${prefix}declarations where langid = ? and " . "declaration = ?"); - $decl_insert = - $dbh->prepare( + $self->{decl_select} = + $self->{dbh}->prepare( + "select declid from ${prefix}declarations where langid = ? and declaration = ?"); + $self->{decl_insert} = + $self->{dbh}->prepare( "insert into ${prefix}declarations (declid, langid, declaration) values (?, ?, ?)"); - $delete_indexes = - $dbh->prepare("delete from ${prefix}indexes " + $self->{delete_indexes} = + $self->{dbh}->prepare("delete from ${prefix}indexes " . "where fileid in " . " (select fileid from ${prefix}releases where release = ?)"); - $delete_usage = - $dbh->prepare("delete from ${prefix}usage " + $self->{delete_usage} = + $self->{dbh}->prepare("delete from ${prefix}usage " . "where fileid in " . " (select fileid from ${prefix}releases where release = ?)"); - $delete_status = - $dbh->prepare("delete from ${prefix}status " + $self->{delete_status} = + $self->{dbh}->prepare("delete from ${prefix}status " . "where fileid in " . " (select fileid from ${prefix}releases where release = ?)"); - $delete_releases = $dbh->prepare("delete from ${prefix}releases " . "where release = ?"); - $delete_files = - $dbh->prepare("delete from ${prefix}files " + $self->{delete_releases} = + $self->{dbh}->prepare("delete from ${prefix}releases where release = ?"); + $self->{delete_files} = + $self->{dbh}->prepare("delete from ${prefix}files " . "where fileid in " . " (select fileid from ${prefix}releases where release = ?)"); return $self; } -sub END { - $files_select = undef; - $filenum_nextval = undef; - $files_insert = undef; - $symbols_byname = undef; - $symbols_byid = undef; - $symnum_nextval = undef; - $symbols_remove = undef; - $symbols_insert = undef; - $indexes_select = undef; - $indexes_insert = undef; - $releases_select = undef; - $releases_insert = undef; - $status_insert = undef; - $status_update = undef; - $usage_insert = undef; - $usage_select = undef; - $decl_select = undef; - $declid_nextnum = undef; - $decl_insert = undef; - $delete_indexes = undef; - $delete_usage = undef; - $delete_status = undef; - $delete_releases = undef; - $delete_files = undef; +sub DESTROY { + my ($self) = @_; + + $self->{files_select} = undef; + $self->{filenum_nextval} = undef; + $self->{files_insert} = undef; + $self->{symbols_byname} = undef; + $self->{symbols_byid} = undef; + $self->{symnum_nextval} = undef; + $self->{symbols_remove} = undef; + $self->{symbols_insert} = undef; + $self->{indexes_select} = undef; + $self->{indexes_insert} = undef; + $self->{releases_select} = undef; + $self->{releases_insert} = undef; + $self->{status_insert} = undef; + $self->{status_update} = undef; + $self->{usage_insert} = undef; + $self->{usage_select} = undef; + $self->{decl_select} = undef; + $self->{declid_nextnum} = undef; + $self->{decl_insert} = undef; + $self->{delete_indexes} = undef; + $self->{delete_usage} = undef; + $self->{delete_status} = undef; + $self->{delete_releases} = undef; + $self->{delete_files} = undef; - $dbh->commit(); - $dbh->disconnect(); - $dbh = undef; + if ($self->{dbh}) { + $self->{dbh}->commit() or die "Commit failed: $DBI::errstr"; + $transactions = 0; + $self->{dbh}->disconnect() or die "Disconnect failed: $DBI::errstr"; + $self->{dbh} = undef; + } } # @@ -168,40 +183,42 @@ my ($fileid); unless (defined($fileid = $files{"$filename\t$revision"})) { - $files_select->execute($filename, $revision); - ($fileid) = $files_select->fetchrow_array(); + $self->{files_select}->execute($filename, $revision); + ($fileid) = $self->{files_select}->fetchrow_array(); unless ($fileid) { - $filenum_nextval->execute(); - ($fileid) = $filenum_nextval->fetchrow_array(); - $files_insert->execute($filename, $revision, $fileid); + $self->{filenum_nextval}->execute(); + ($fileid) = $self->{filenum_nextval}->fetchrow_array(); + $self->{files_insert}->execute($filename, $revision, $fileid); + $self->_commitIfLimit(); } $files{"$filename\t$revision"} = $fileid; +# $self->{files_select}->finish(); } - _commitIfLimit(); + return $fileid; } sub setfilerelease { my ($self, $fileid, $release) = @_; - $releases_select->execute($fileid + 0, $release); - my $firstrow = $releases_select->fetchrow_array(); + $self->{releases_select}->execute($fileid + 0, $release); + my $firstrow = $self->{releases_select}->fetchrow_array(); - # $releases_select->finish(); +# $self->{releases_select}->finish(); unless ($firstrow) { - $releases_insert->execute($fileid + 0, $release); + $self->{releases_insert}->execute($fileid + 0, $release); + $self->_commitIfLimit(); } - _commitIfLimit(); } sub fileindexed { my ($self, $fileid) = @_; my ($status); - $status_select->execute($fileid); - $status = $status_select->fetchrow_array(); - $status_select->finish(); + $self->{status_select}->execute($fileid); + $status = $self->{status_select}->fetchrow_array(); + $self->{status_select}->finish(); if (!defined($status)) { $status = 0; @@ -213,24 +230,25 @@ my ($self, $fileid) = @_; my ($status); - $status_select->execute($fileid); - $status = $status_select->fetchrow_array(); - $status_select->finish(); + $self->{status_select}->execute($fileid); + $status = $self->{status_select}->fetchrow_array(); + $self->{status_select}->finish(); if (!defined($status)) { - $status_insert->execute($fileid + 0, 1); + $self->{status_insert}->execute($fileid + 0, 1); } else { - $status_update->execute(1, $fileid, 0); + $self->{status_update}->execute(1, $fileid, 0); } + $self->_commitIfLimit(); } sub filereferenced { my ($self, $fileid) = @_; my ($status); - $status_select->execute($fileid); - $status = $status_select->fetchrow_array(); - $status_select->finish(); + $self->{status_select}->execute($fileid); + $status = $self->{status_select}->fetchrow_array(); + $self->{status_select}->finish(); return defined($status) && $status == 2; } @@ -239,24 +257,25 @@ my ($self, $fileid) = @_; my ($status); - $status_select->execute($fileid); - $status = $status_select->fetchrow_array(); - $status_select->finish(); + $self->{status_select}->execute($fileid); + $status = $self->{status_select}->fetchrow_array(); + $self->{status_select}->finish(); if (!defined($status)) { - $status_insert->execute($fileid + 0, 2); + $self->{status_insert}->execute($fileid + 0, 2); } else { - $status_update->execute(2, $fileid, 1); + $self->{status_update}->execute(2, $fileid, 1); } + $self->_commitIfLimit(); } sub symdeclarations { my ($self, $symname, $release) = @_; my ($rows, @ret, @row); - $rows = $indexes_select->execute("$symname", "$release"); + $rows = $self->{indexes_select }->execute("$symname", "$release"); - while (@row = $indexes_select->fetchrow_array) { + while (@row = $self->{indexes_select }->fetchrow_array) { $row[3] &&= $self->symname($row[3]); # convert the symid # Also need to remove trailing whitespace erroneously added by the db @@ -265,7 +284,7 @@ push(@ret, [@row]); } - $indexes_select->finish(); + $self->{indexes_select }->finish(); return @ret; } @@ -273,22 +292,22 @@ sub setsymdeclaration { my ($self, $symname, $fileid, $line, $langid, $type, $relsym) = @_; - $indexes_insert->execute($self->symid($symname), + $self->{indexes_insert}->execute($self->symid($symname), $fileid, $line, $langid, $type, $relsym ? $self->symid($relsym) : undef); - _commitIfLimit(); + $self->_commitIfLimit(); } sub symreferences { my ($self, $symname, $release) = @_; - my ($rows, @ret); + my ($rows, @ret, @row); - $rows = $usage_select->execute("$symname", "$release"); + $rows = $self->{usage_select}->execute("$symname", "$release"); - while ($rows-- > 0) { - push(@ret, [ $usage_select->fetchrow_array ]); + while (@row = $self->{usage_select}->fetchrow_array) { + push(@ret, [@row]); } - $usage_select->finish(); + $self->{usage_select}->finish(); return @ret; } @@ -296,16 +315,16 @@ sub setsymreference { my ($self, $symname, $fileid, $line) = @_; - $usage_insert->execute($fileid, $line, $self->symid($symname)); - _commitIfLimit(); + $self->{usage_insert}->execute($fileid, $line, $self->symid($symname)); + $self->_commitIfLimit(); } sub issymbol { - my ($self, $symname, $release) = @_; # TODO make use of $release + my ($self, $symname, $release) = @_; # TODO make full use of $release unless (exists($symcache{$symname})) { - $symbols_byname->execute($symname); - ($symcache{$symname}) = $symbols_byname->fetchrow_array(); + $self->{symbols_byname}->execute($symname); + ($symcache{$symname}) = $self->{symbols_byname}->fetchrow_array(); } return $symcache{$symname}; @@ -316,16 +335,16 @@ my ($symid); unless (defined($symid = $symcache{$symname})) { - $symbols_byname->execute($symname); - ($symid) = $symbols_byname->fetchrow_array(); + $self->{symbols_byname}->execute($symname); + ($symid) = $self->{symbols_byname}->fetchrow_array(); unless ($symid) { - $symnum_nextval->execute(); - ($symid) = $symnum_nextval->fetchrow_array(); - $symbols_insert->execute($symname, $symid); + $self->{symnum_nextval}->execute(); + ($symid) = $self->{symnum_nextval}->fetchrow_array(); + $self->{symbols_insert}->execute($symname, $symid); + $self->_commitIfLimit(); } $symcache{$symname} = $symid; } - _commitIfLimit(); return $symid; } @@ -333,8 +352,8 @@ my ($self, $symid) = @_; my ($symname); - $symbols_byid->execute($symid + 0); - ($symname) = $symbols_byid->fetchrow_array(); + $self->{symbols_byid}->execute($symid + 0); + ($symname) = $self->{symbols_byid}->fetchrow_array(); return $symname; } @@ -342,20 +361,20 @@ sub decid { my ($self, $lang, $string) = @_; - my $rows = $decl_select->execute($lang, $string); - $decl_select->finish(); + my $rows = $self->{decl_select}->execute($lang, $string); + $self->{decl_select}->finish(); unless ($rows > 0) { - $declid_nextnum->execute(); - my ($declid) = $declid_nextnum->fetchrow_array(); - $decl_insert->execute($declid, $lang, $string); + $self->{declid_nextnum}->execute(); + my ($declid) = $self->{declid_nextnum}->fetchrow_array(); + $self->{decl_insert}->execute($declid, $lang, $string); + $self->_commitIfLimit(); } - $decl_select->execute($lang, $string); - my $id = $decl_select->fetchrow_array(); - $decl_select->finish(); - - _commitIfLimit(); + $self->{decl_select}->execute($lang, $string); + my $id = $self->{decl_select}->fetchrow_array(); + $self->{decl_select}->finish(); + return $id; } @@ -373,7 +392,10 @@ $self->{delete_status}->execute($release); $self->{delete_releases}->execute($release); $self->{delete_files}->execute($release); - _commitIfLimit(); + + $self->{dbh}->commit() or die "Commit failed: $DBI::errstr"; + $self->{dbh}->begin_work() or die "begin_work failed: $DBI::errstr"; + $transactions = 0; } # @@ -381,8 +403,10 @@ # sub _commitIfLimit { + my $self = shift; unless (++$transactions % $commitlimit) { - $dbh->commit(); + $self->{dbh}->commit() or die "Commit failed: $DBI::errstr"; + $self->{dbh}->begin_work() or die "begin_work failed: $DBI::errstr"; } } Index: Oracle.pm =================================================================== RCS file: /cvsroot/lxr/lxr/lib/LXR/Index/Oracle.pm,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- Oracle.pm 9 May 2009 18:55:31 -0000 1.19 +++ Oracle.pm 9 May 2009 21:57:34 -0000 1.20 @@ -153,7 +153,7 @@ $self->{delete_files} = undef; if ($self->{dbh}) { - $self->{dbh}->disconnect(); + $self->{dbh}->disconnect() or die "Disconnect failed: $DBI::errstr"; $self->{dbh} = undef; } } |