[Lxr-commits] CVS: lxr/lib/LXR/Index Mysql.pm, 1.25, 1.26 Postgres.pm, 1.25, 1.26 Oracle.pm, 1.14,
Brought to you by:
ajlittoz
From: AdrianIssott <adr...@us...> - 2009-04-26 09:14:41
|
Update of /cvsroot/lxr/lxr/lib/LXR/Index In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv6666/lib/LXR/Index Modified Files: Mysql.pm Postgres.pm Oracle.pm Log Message: Feature 1691378 (Rearchitect the DB backends) Part V * Re-ordered DBI implementations to be in API order used in LXR::Index * No code changes Index: Mysql.pm =================================================================== RCS file: /cvsroot/lxr/lxr/lib/LXR/Index/Mysql.pm,v retrieving revision 1.25 retrieving revision 1.26 diff -u -d -r1.25 -r1.26 --- Mysql.pm 25 Apr 2009 20:40:24 -0000 1.25 +++ Mysql.pm 26 Apr 2009 09:14:37 -0000 1.26 @@ -138,18 +138,101 @@ return $self; } -sub setsymdeclaration { - my ($self, $symname, $fileid, $line, $langid, $type, $relsym) = @_; +sub DESTROY { + my ($self) = @_; + $self->{files_select} = undef; + $self->{files_insert} = undef; + $self->{symbols_byname} = undef; + $self->{symbols_byid} = undef; + $self->{symbols_insert} = undef; + $self->{indexes_insert} = 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->{decl_insert} = undef; + $self->{delete_indexes} = undef; + $self->{delete_useage} = undef; + $self->{delete_status} = undef; + $self->{delete_releases} = undef; + $self->{delete_files} = undef; - $self->{indexes_insert}->execute($self->symid($symname), - $fileid, $line, $langid, $type, $relsym ? $self->symid($relsym) : undef); + if ($self->{dbh}) { + $self->{dbh}->disconnect(); + $self->{dbh} = undef; + } } -sub setsymreference { - my ($self, $symname, $fileid, $line) = @_; +# +# LXR::Index API Implementation +# - $self->{usage_insert}->execute($fileid, $line, $self->symid($symname)); +sub fileid { + my ($self, $filename, $revision) = @_; + my ($fileid); + + unless (defined($fileid = $files{"$filename\t$revision"})) { + $self->{files_select}->execute($filename, $revision); + ($fileid) = $self->{files_select}->fetchrow_array(); + unless ($fileid) { + $self->{files_insert}->execute($filename, $revision); + $self->{files_select}->execute($filename, $revision); + ($fileid) = $self->{files_select}->fetchrow_array(); + } + $files{"$filename\t$revision"} = $fileid; + $self->{files_select}->finish(); + } + return $fileid; +} + +sub setfilerelease { + my ($self, $fileid, $release) = @_; + + my $rows = $self->{releases_select}->execute($fileid + 0, $release); + $self->{releases_select}->finish(); + + unless ($rows > 0) { + $self->{releases_insert}->execute($fileid, $release); + $self->{releases_insert}->finish(); + } +} + +sub fileindexed { + my ($self, $fileid) = @_; + my ($status); + + $self->{status_get}->execute($fileid); + $status = $self->{status_get}->fetchrow_array(); + $self->{status_get}->finish(); + + if (!defined($status)) { + $self->{status_insert}->execute($fileid + 0, 0); + } + + return $status == 0; +} +sub setfileindexed { + my ($self, $fileid) = @_; + $self->{status_update}->execute(1, $fileid, 0); +} + +sub filereferenced { + my ($self, $fileid) = @_; + my ($status); + + $self->{status_get}->execute($fileid); + $status = $self->{status_get}->fetchrow_array(); + $self->{status_get}->finish(); + + return $status < 2; +} + +sub setfilereferenced { + my ($self, $fileid) = @_; + $self->{status_update}->execute(2, $fileid, 1); } sub symdeclarations { @@ -169,6 +252,13 @@ return @ret; } +sub setsymdeclaration { + my ($self, $symname, $fileid, $line, $langid, $type, $relsym) = @_; + + $self->{indexes_insert}->execute($self->symid($symname), + $fileid, $line, $langid, $type, $relsym ? $self->symid($relsym) : undef); +} + sub symreferences { my ($self, $symname, $release) = @_; my ($rows, @ret); @@ -184,36 +274,26 @@ return @ret; } -sub fileid { - my ($self, $filename, $revision) = @_; - my ($fileid); +sub setsymreference { + my ($self, $symname, $fileid, $line) = @_; - # CAUTION: $revision is not $release! - unless (defined($fileid = $files{"$filename\t$revision"})) { - $self->{files_select}->execute($filename, $revision); - ($fileid) = $self->{files_select}->fetchrow_array(); - unless ($fileid) { - $self->{files_insert}->execute($filename, $revision); - $self->{files_select}->execute($filename, $revision); - ($fileid) = $self->{files_select}->fetchrow_array(); - } - $files{"$filename\t$revision"} = $fileid; - $self->{files_select}->finish(); - } - return $fileid; -} + $self->{usage_insert}->execute($fileid, $line, $self->symid($symname)); -# Indicate that this filerevision is part of this release -sub setfilerelease { - my ($self, $fileid, $release) = @_; +} - my $rows = $self->{releases_select}->execute($fileid + 0, $release); - $self->{releases_select}->finish(); +sub issymbol { + my ($self, $symname, $release) = @_; # TODO make use of $release + my ($symid); - unless ($rows > 0) { - $self->{releases_insert}->execute($fileid, $release); - $self->{releases_insert}->finish(); + $symid = $symcache{$symname}; + unless (defined($symid)) { + $self->{symbols_byname}->execute($symname); + ($symid) = $self->{symbols_byname}->fetchrow_array(); + $self->{symbols_byname}->finish(); + $symcache{$symname} = $symid; } + + return $symid; } sub symid { @@ -250,66 +330,6 @@ return $symname; } -sub issymbol { - my ($self, $symname, $release) = @_; # TODO make use of $release - my ($symid); - - $symid = $symcache{$symname}; - unless (defined($symid)) { - $self->{symbols_byname}->execute($symname); - ($symid) = $self->{symbols_byname}->fetchrow_array(); - $self->{symbols_byname}->finish(); - $symcache{$symname} = $symid; - } - - return $symid; -} - -# If this file has not been indexed earlier return true. Return false -# if already indexed. -sub fileindexed { - my ($self, $fileid) = @_; - my ($status); - - $self->{status_get}->execute($fileid); - $status = $self->{status_get}->fetchrow_array(); - $self->{status_get}->finish(); - - if (!defined($status)) { - $self->{status_insert}->execute($fileid + 0, 0); - } - - return $status == 0; -} - -sub setfileindexed { - my ($self, $fileid) = @_; - $self->{status_update}->execute(1, $fileid, 0); -} - -sub filereferenced { - my ($self, $fileid) = @_; - my ($status); - - $self->{status_get}->execute($fileid); - $status = $self->{status_get}->fetchrow_array(); - $self->{status_get}->finish(); - - return $status < 2; -} - -sub setfilereferenced { - my ($self, $fileid) = @_; - $self->{status_update}->execute(2, $fileid, 1); -} - -# This function should be called before parsing each new file, -# if this is not done the too much memory will be used and -# tings will become very slow. -sub emptycache { - %symcache = (); -} - sub decid { my ($self, $lang, $string) = @_; @@ -327,6 +347,10 @@ return $id; } +sub emptycache { + %symcache = (); +} + sub purge { my ($self, $version) = @_; @@ -339,31 +363,4 @@ $self->{delete_files}->execute($version); } -sub DESTROY { - my ($self) = @_; - $self->{files_select} = undef; - $self->{files_insert} = undef; - $self->{symbols_byname} = undef; - $self->{symbols_byid} = undef; - $self->{symbols_insert} = undef; - $self->{indexes_insert} = 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->{decl_insert} = undef; - $self->{delete_indexes} = undef; - $self->{delete_useage} = undef; - $self->{delete_status} = undef; - $self->{delete_releases} = undef; - $self->{delete_files} = undef; - - if ($self->{dbh}) { - $self->{dbh}->disconnect(); - $self->{dbh} = undef; - } -} - 1; Index: Postgres.pm =================================================================== RCS file: /cvsroot/lxr/lxr/lib/LXR/Index/Postgres.pm,v retrieving revision 1.25 retrieving revision 1.26 diff -u -d -r1.25 -r1.26 --- Postgres.pm 25 Apr 2009 20:40:24 -0000 1.25 +++ Postgres.pm 26 Apr 2009 09:14:37 -0000 1.26 @@ -131,29 +131,97 @@ return $self; } -sub emptycache { - %symcache = (); +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; + + $dbh->commit(); + $dbh->disconnect(); + $dbh = undef; } -sub commit_if_limit { - unless (++$transactions % $commitlimit) { - $dbh->commit(); +# +# LXR::Index API Implementation +# + +sub fileid { + my ($self, $filename, $revision) = @_; + my ($fileid); + + unless (defined($fileid = $files{"$filename\t$revision"})) { + $files_select->execute($filename, $revision); + ($fileid) = $files_select->fetchrow_array(); + unless ($fileid) { + $filenum_nextval->execute(); + ($fileid) = $filenum_nextval->fetchrow_array(); + $files_insert->execute($filename, $revision, $fileid); + } + $files{"$filename\t$revision"} = $fileid; } + _commitIfLimit(); + return $fileid; } -sub setsymdeclaration { - my ($self, $symname, $fileid, $line, $langid, $type, $relsym) = @_; +sub setfilerelease { + my ($self, $fileid, $release) = @_; - $indexes_insert->execute($self->symid($symname), - $fileid, $line, $langid, $type, $relsym ? $self->symid($relsym) : undef); - commit_if_limit(); + $releases_select->execute($fileid + 0, $release); + my $firstrow = $releases_select->fetchrow_array(); + + # $releases_select->finish(); + + unless ($firstrow) { + $releases_insert->execute($fileid + 0, $release); + } + _commitIfLimit(); } -sub setsymreference { - my ($self, $symname, $fileid, $line) = @_; +# If this file has not been indexed earlier, mark it as being indexed +# now and return true. Return false if already indexed. +sub fileindexed { + my ($self, $fileid) = @_; - $usage_insert->execute($fileid, $line, $self->symid($symname)); - commit_if_limit(); + $status_insert->execute($fileid + 0, $fileid + 0); + _commitIfLimit(); + return $status_update->execute(1, $fileid + 0, 0) > 0; +} + +sub setfileindexed { + my ($self, $fileid) = @_; + $status_update->execute(1, $fileid, 0); +} + +sub filereferenced { + my ($self, $fileid) = @_; + + return $status_update->execute(2, $fileid, 1) > 0; +} + +sub setfilereferenced { + my ($self, $fileid) = @_; + $status_update->execute(2, $fileid, 1); } sub symdeclarations { @@ -179,6 +247,14 @@ return @ret; } +sub setsymdeclaration { + my ($self, $symname, $fileid, $line, $langid, $type, $relsym) = @_; + + $indexes_insert->execute($self->symid($symname), + $fileid, $line, $langid, $type, $relsym ? $self->symid($relsym) : undef); + _commitIfLimit(); +} + sub symreferences { my ($self, $symname, $release) = @_; my ($rows, @ret); @@ -194,39 +270,22 @@ return @ret; } -sub fileid { - my ($self, $filename, $revision) = @_; - my ($fileid); - - # CAUTION: $revision is not $release! +sub setsymreference { + my ($self, $symname, $fileid, $line) = @_; - unless (defined($fileid = $files{"$filename\t$revision"})) { - $files_select->execute($filename, $revision); - ($fileid) = $files_select->fetchrow_array(); - unless ($fileid) { - $filenum_nextval->execute(); - ($fileid) = $filenum_nextval->fetchrow_array(); - $files_insert->execute($filename, $revision, $fileid); - } - $files{"$filename\t$revision"} = $fileid; - } - commit_if_limit(); - return $fileid; + $usage_insert->execute($fileid, $line, $self->symid($symname)); + _commitIfLimit(); } -# Indicate that this filerevision is part of this release -sub setfilerelease { - my ($self, $fileid, $release) = @_; - - $releases_select->execute($fileid + 0, $release); - my $firstrow = $releases_select->fetchrow_array(); - - # $releases_select->finish(); +sub issymbol { + my ($self, $symname, $release) = @_; # TODO make use of $release - unless ($firstrow) { - $releases_insert->execute($fileid + 0, $release); + unless (exists($symcache{$symname})) { + $symbols_byname->execute($symname); + ($symcache{$symname}) = $symbols_byname->fetchrow_array(); } - commit_if_limit(); + + return $symcache{$symname}; } sub symid { @@ -243,7 +302,7 @@ } $symcache{$symname} = $symid; } - commit_if_limit(); + _commitIfLimit(); return $symid; } @@ -257,33 +316,6 @@ return $symname; } -sub issymbol { - my ($self, $symname, $release) = @_; # TODO make use of $release - - unless (exists($symcache{$symname})) { - $symbols_byname->execute($symname); - ($symcache{$symname}) = $symbols_byname->fetchrow_array(); - } - - return $symcache{$symname}; -} - -# If this file has not been indexed earlier, mark it as being indexed -# now and return true. Return false if already indexed. -sub fileindexed { - my ($self, $fileid) = @_; - - $status_insert->execute($fileid + 0, $fileid + 0); - commit_if_limit(); - return $status_update->execute(1, $fileid + 0, 0) > 0; -} - -sub filereferenced { - my ($self, $fileid) = @_; - - return $status_update->execute(2, $fileid, 1) > 0; -} - sub decid { my ($self, $lang, $string) = @_; @@ -300,10 +332,14 @@ my $id = $decl_select->fetchrow_array(); $decl_select->finish(); - commit_if_limit(); + _commitIfLimit(); return $id; } +sub emptycache { + %symcache = (); +} + sub purge { my ($self, $version) = @_; @@ -314,49 +350,17 @@ $delete_status->execute($version); $delete_releases->execute($version); $delete_files->execute($version); - commit_if_limit(); -} - -sub setfileindexed { - my ($self, $fileid) = @_; - $status_update->execute(1, $fileid, 0); -} - -sub setfilereferenced { - my ($self, $fileid) = @_; - $status_update->execute(2, $fileid, 1); + _commitIfLimit(); } -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; +# +# Internal subroutines +# - $dbh->commit(); - $dbh->disconnect(); - $dbh = undef; +sub _commitIfLimit { + unless (++$transactions % $commitlimit) { + $dbh->commit(); + } } 1; Index: Oracle.pm =================================================================== RCS file: /cvsroot/lxr/lxr/lib/LXR/Index/Oracle.pm,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- Oracle.pm 25 Apr 2009 20:40:24 -0000 1.14 +++ Oracle.pm 26 Apr 2009 09:14:37 -0000 1.15 @@ -131,21 +131,104 @@ return $self; } -sub setsymdeclaration { - my ($self, $symname, $fileid, $line, $langid, $type, $relsym) = @_; +sub DESTROY { + my ($self) = @_; + $self->{files_select} = undef; + $self->{files_insert} = undef; + $self->{symbols_byname} = undef; + $self->{symbols_byid} = undef; + $self->{symbols_insert} = undef; + $self->{indexes_insert} = 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->{decl_insert} = undef; + $self->{delete_indexes} = undef; + $self->{delete_usage} = undef; + $self->{delete_status} = undef; + $self->{delete_releases} = undef; + $self->{delete_files} = undef; - $self->{indexes_insert}->execute($self->symid($symname), - $fileid, $line, $langid, $type, $relsym ? $self->symid($relsym) : undef); + if ($self->{dbh}) { + $self->{dbh}->disconnect(); + $self->{dbh} = undef; + } } -sub setsymreference { - my ($self, $symname, $fileid, $line) = @_; +# +# LXR::Index API Implementation +# - $self->{usage_insert}->execute($fileid, $line, $self->symid($symname)); +sub fileid { + my ($self, $filename, $revision) = @_; + my ($fileid); + unless (defined($fileid = $files{"$filename\t$revision"})) { + $self->{files_select}->execute($filename, $revision); + ($fileid) = $self->{files_select}->fetchrow_array(); + unless ($fileid) { + $self->{files_insert}->execute($filename, $revision); + $self->{files_select}->execute($filename, $revision); + ($fileid) = $self->{files_select}->fetchrow_array(); + } + $files{"$filename\t$revision"} = $fileid; + $self->{files_select}->finish(); + } + return $fileid; } -sub symdeclarations { # Hinzugefügt von Variable @row, While-Schleife +sub setfilerelease { + my ($self, $fileid, $release) = @_; + + my $rows = $self->{releases_select}->execute($fileid + 0, $release); + $self->{releases_select}->finish(); + + unless ($rows > 0) { + $self->{releases_insert}->execute($fileid, $release); + $self->{releases_insert}->finish(); + } +} + +sub fileindexed { + my ($self, $fileid) = @_; + my ($status); + + $self->{status_get}->execute($fileid); + $status = $self->{status_get}->fetchrow_array(); + $self->{status_get}->finish(); + + if (!defined($status)) { + $self->{status_insert}->execute($fileid + 0, 0); + } + + return $status == 0; +} + +sub setfileindexed { + my ($self, $fileid) = @_; + $self->{status_update}->execute(1, $fileid, 0); +} + +sub filereferenced { + my ($self, $fileid) = @_; + my ($status); + + $self->{status_get}->execute($fileid); + $status = $self->{status_get}->fetchrow_array(); + $self->{status_get}->finish(); + + return $status < 2; +} + +sub setfilereferenced { + my ($self, $fileid) = @_; + $self->{status_update}->execute(2, $fileid, 1); +} + +sub symdeclarations { my ($self, $symname, $release) = @_; my ($rows, @ret, @row); @@ -155,10 +238,6 @@ push(@ret, [@row]); } - #while ($rows-- > 0) { - # push(@ret, [ $self->{indexes_select}->fetchrow_array ]); - #} - $self->{indexes_select}->finish(); map { $$_[3] &&= $self->symname($$_[3]) } @ret; @@ -166,6 +245,13 @@ return @ret; } +sub setsymdeclaration { + my ($self, $symname, $fileid, $line, $langid, $type, $relsym) = @_; + + $self->{indexes_insert}->execute($self->symid($symname), + $fileid, $line, $langid, $type, $relsym ? $self->symid($relsym) : undef); +} + sub symreferences { my ($self, $symname, $release) = @_; my ($rows, @ret, @row); @@ -176,45 +262,31 @@ push(@ret, [@row]); } - #while ($rows-- > 0) { - # push(@ret, [ $self->{usage_select}->fetchrow_array ]); - #} - $self->{usage_select}->finish(); return @ret; } -sub fileid { - my ($self, $filename, $revision) = @_; - my ($fileid); +sub setsymreference { + my ($self, $symname, $fileid, $line) = @_; - # CAUTION: $revision is not $release! - unless (defined($fileid = $files{"$filename\t$revision"})) { - $self->{files_select}->execute($filename, $revision); - ($fileid) = $self->{files_select}->fetchrow_array(); - unless ($fileid) { - $self->{files_insert}->execute($filename, $revision); - $self->{files_select}->execute($filename, $revision); - ($fileid) = $self->{files_select}->fetchrow_array(); - } - $files{"$filename\t$revision"} = $fileid; - $self->{files_select}->finish(); - } - return $fileid; -} + $self->{usage_insert}->execute($fileid, $line, $self->symid($symname)); -# Indicate that this filerevision is part of this release -sub setfilerelease { - my ($self, $fileid, $release) = @_; +} - my $rows = $self->{releases_select}->execute($fileid + 0, $release); - $self->{releases_select}->finish(); +sub issymbol { + my ($self, $symname, $release) = @_; # TODO make use of $release + my ($symid); - unless ($rows > 0) { - $self->{releases_insert}->execute($fileid, $release); - $self->{releases_insert}->finish(); + $symid = $symcache{$release}{$symname}; + unless (defined($symid)) { + $self->{symbols_byname}->execute($symname); + ($symid) = $self->{symbols_byname}->fetchrow_array(); + $self->{symbols_byname}->finish(); + $symcache{$release}{$symname} = $symid; } + + return $symid; } sub symid { @@ -251,66 +323,6 @@ return $symname; } -sub issymbol { - my ($self, $symname, $release) = @_; # TODO make use of $release - my ($symid); - - $symid = $symcache{$release}{$symname}; - unless (defined($symid)) { - $self->{symbols_byname}->execute($symname); - ($symid) = $self->{symbols_byname}->fetchrow_array(); - $self->{symbols_byname}->finish(); - $symcache{$release}{$symname} = $symid; - } - - return $symid; -} - -# If this file has not been indexed earlier return true. Return false -# if already indexed. -sub fileindexed { - my ($self, $fileid) = @_; - my ($status); - - $self->{status_get}->execute($fileid); - $status = $self->{status_get}->fetchrow_array(); - $self->{status_get}->finish(); - - if (!defined($status)) { - $self->{status_insert}->execute($fileid + 0, 0); - } - - return $status == 0; -} - -sub setfileindexed { - my ($self, $fileid) = @_; - $self->{status_update}->execute(1, $fileid, 0); -} - -sub filereferenced { - my ($self, $fileid) = @_; - my ($status); - - $self->{status_get}->execute($fileid); - $status = $self->{status_get}->fetchrow_array(); - $self->{status_get}->finish(); - - return $status < 2; -} - -sub setfilereferenced { - my ($self, $fileid) = @_; - $self->{status_update}->execute(2, $fileid, 1); -} - -# This function should be called before parsing each new file, -# if this is not done the too much memory will be used and -# tings will become very slow. -sub emptycache { - %symcache = (); -} - sub decid { my ($self, $lang, $string) = @_; @@ -328,6 +340,10 @@ return $id; } +sub emptycache { + %symcache = (); +} + sub purge { my ($self, $version) = @_; @@ -340,31 +356,4 @@ $self->{delete_files}->execute($version); } -sub DESTROY { - my ($self) = @_; - $self->{files_select} = undef; - $self->{files_insert} = undef; - $self->{symbols_byname} = undef; - $self->{symbols_byid} = undef; - $self->{symbols_insert} = undef; - $self->{indexes_insert} = 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->{decl_insert} = undef; - $self->{delete_indexes} = undef; - $self->{delete_usage} = undef; - $self->{delete_status} = undef; - $self->{delete_releases} = undef; - $self->{delete_files} = undef; - - if ($self->{dbh}) { - $self->{dbh}->disconnect(); - $self->{dbh} = undef; - } -} - 1; |