Thread: [Lxr-commits] CVS: lxr/lib/LXR/Index Mysql.pm,1.12,1.12.2.1 Postgres.pm,1.10,1.10.2.1
Brought to you by:
ajlittoz
|
From: Malcolm B. <mb...@us...> - 2003-03-21 23:54:44
|
Update of /cvsroot/lxr/lxr/lib/LXR/Index
In directory sc8-pr-cvs1:/tmp/cvs-serv28106/lib/LXR/Index
Modified Files:
Tag: rolling-cleanup
Mysql.pm Postgres.pm
Log Message:
This branch is for experimental work on making LXR able to cope with an
evolving source base. The aim is that re-indexing the same file will remove
previous entries created for that file, keeping the database clean.:wq
Index: Mysql.pm
===================================================================
RCS file: /cvsroot/lxr/lxr/lib/LXR/Index/Mysql.pm,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -u -d -r1.12 -r1.12.2.1
--- Mysql.pm 18 Nov 2001 03:31:34 -0000 1.12
+++ Mysql.pm 21 Mar 2003 23:54:41 -0000 1.12.2.1
@@ -59,17 +59,23 @@
("delete from symbols where symname = ?");
$self->{indexes_select} = $self->{dbh}->prepare
- ("select f.filename, i.line, d.declaration, i.relsym ".
+ ("select f.filename, i.line, d.declaration, sb.symname ".
"from symbols s, indexes i, files f, releases r, 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 = ?");
+ "and s.symname = ? and r.release = ? ".
+ "and i.relsym = sb.symbid");
$self->{indexes_insert} = $self->{dbh}->prepare
("insert into indexes (symid, fileid, line, langid, type, relsym) values (?, ?, ?, ?, ?, ?)");
$self->{releases_select} = $self->{dbh}->prepare
- ("select * from releases where fileid = ? and release = ?");
+ ("select * from releases where fileid = ? and release = ?");
+ $self->{file_release_select} = $self->{dbh}->prepare
+ ("select f.fileid from files f, releases r where f.fileid = r.fileid ".
+ "and f.filename = ? and r.release =?");
+ $self->{release_remove} = $self->{dbh}->prepare
+ ("delete from releases where fileid = ? and release = ?");
$self->{releases_insert} = $self->{dbh}->prepare
("insert into releases (fileid, release) values (?, ?)");
@@ -124,19 +130,13 @@
sub getindex {
my ($self, $symname, $release) = @_;
- my ($rows, @ret);
+ my ($rows, $ret);
$rows = $self->{indexes_select}->execute("$symname", "$release");
-
- while ($rows-- > 0) {
- push(@ret, [ $self->{indexes_select}->fetchrow_array ]);
- }
-
+ $ret = $self->{indexes_select}->fetchall_arrayref ;
$self->{indexes_select}->finish();
- map { $$_[3] &&= $self->symname($$_[3]) } @ret;
-
- return @ret;
+ return @$ret;
}
sub getreference {
@@ -174,8 +174,10 @@
}
# Indicate that this filerevision is part of this release
+# If there is already a matching filename for this release, then remove
+# that fileid
sub release {
- my ($self, $fileid, $release) = @_;
+ my ($self, $fileid, $release, $pathname) = @_;
my $rows = $self->{releases_select}->execute($fileid+0, $release);
$self->{releases_select}->finish();
@@ -184,6 +186,23 @@
$self->{releases_insert}->execute($fileid, $release);
$self->{releases_insert}->finish();
}
+
+ # Now check for any duplicate entries and remove
+ # this is much harder in Mysql than Postgres thanks to the lack
+ # of subselects. Roll on Mysql 4!
+
+ $rows = $self->{file_release_select}->execute($pathname, $release, $fileid);
+ if ($rows > 0) {
+ for
+ }
+ my $all = $self->{file_release_select}->fetchall_arrayref;
+
+ foreach my $row (@$all) {
+ $self->{release_remove}->excute{$$row[0], $release);
+ }
+ $self->{file_release_select}->finish();
+
+
}
sub symid {
Index: Postgres.pm
===================================================================
RCS file: /cvsroot/lxr/lxr/lib/LXR/Index/Postgres.pm,v
retrieving revision 1.10
retrieving revision 1.10.2.1
diff -u -d -r1.10 -r1.10.2.1
--- Postgres.pm 23 Jan 2002 15:48:52 -0000 1.10
+++ Postgres.pm 21 Mar 2003 23:54:41 -0000 1.10.2.1
@@ -25,12 +25,12 @@
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_insert
- $status_update $usage_insert $usage_select $decl_select
- $declid_nextnum $decl_insert);
+ $files_select $filenum_nextval $files_insert $files_remove
+ $symbols_byname $symbols_byid $symnum_nextval $symbols_remove
+ $symbols_insert $indexes_select $indexes_insert $indexes_remove
+ $releases_select $releases_insert $releases_remove $status_insert
+ $status_update $status_remove $usage_insert $usage_select
+ $usage_remove $decl_select $declid_nextnum $decl_insert);
sub new {
@@ -53,7 +53,10 @@
$filenum_nextval = $dbh->prepare
("select nextval('filenum')");
$files_insert = $dbh->prepare
- ("insert into files values (?, ?, ?)");
+ ("insert into files values (?, ?, ?)");
+ $files_remove = $dbh->prepare
+ ("delete from files where fileid not in".
+ " (select fileid from releases)");
$symbols_byname = $dbh->prepare
("select symid from symbols where symname = ?");
@@ -64,11 +67,13 @@
$symbols_insert = $dbh->prepare
("insert into symbols values (?, ?)");
$symbols_remove = $dbh->prepare
- ("delete from symbols where symname = ?");
+ ("delete from symbols where symid not in".
+ " (select symid from indexes)");
$indexes_select = $dbh->prepare
- ("select f.filename, i.line, d.declaration, i.relsym ".
- "from symbols s, indexes i, files f, releases r, declarations d ".
+ ("select f.filename, i.line, d.declaration, sb.symname ".
+ "from symbols s, files f, releases r, declarations d, ".
+ "indexes i left join symbols sb on i.relsym = sb.symid ".
"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 ".
@@ -77,10 +82,18 @@
("insert into indexes (symid, fileid, line, langid, type, relsym) ".
"values (?, ?, ?, ?, ?, ?)");
+ $indexes_remove = $dbh->prepare
+ ("delete from indexes where fileid not in".
+ " (select fileid from releases)");
+
$releases_select = $dbh->prepare
("select * from releases where fileid = ? and release = ?");
$releases_insert = $dbh->prepare
- ("insert into releases values (?, ?)");
+ ("insert into releases values (?, ?)");
+ $releases_remove = $dbh->prepare
+ ("delete from releases where fileid in ".
+ "(select f.fileid from files f, releases r where f.fileid = r.fileid ".
+ "and f.filename = ? and r.release = ? and f.fileid <> ?)");
$status_insert = $dbh->prepare
# ("insert into status select ?, 0 except select fileid, 0 from status");
@@ -88,7 +101,10 @@
"(select * from status where fileid = ?)");
$status_update = $dbh->prepare
- ("update status set status = ? where fileid = ? and status <= ?");
+ ("update status set status = ? where fileid = ? and status <= ?");
+ $status_remove = $dbh->prepare
+ ("delete from status where fileid not in".
+ " (select fileid from releases)");
$usage_insert = $dbh->prepare
("insert into usage values (?, ?, ?)");
@@ -99,6 +115,9 @@
"and f.fileid = u.fileid ".
"and f.fileid = r.fileid and ".
"s.symname = ? and r.release = ?");
+ $usage_remove = $dbh->prepare
+ ("delete from usage where fileid not in".
+ " (select fileid from releases)");
$declid_nextnum = $dbh->prepare
("select nextval('declnum')");
@@ -145,19 +164,13 @@
sub getindex {
my ($self, $symname, $release) = @_;
- my ($rows, @ret);
+ my ($rows, $ret);
$rows = $indexes_select->execute("$symname", "$release");
-
- while ($rows-- > 0) {
- push(@ret, [ $indexes_select->fetchrow_array ]);
- }
-
+ $ret = $indexes_select->fetchall_arrayref;
$indexes_select->finish();
- map { $$_[3] &&= $self->symname($$_[3]) } @ret;
-
- return @ret;
+ return @$ret;
}
sub getreference {
@@ -206,20 +219,29 @@
return $fileid;
}
-# Indicate that this filerevision is part of this release
+# Indicate that this filerevision is part of this release If there is
+# an existing file of this name in the release, remove it from the
+# release, along with all associated data.
sub release {
- my ($self, $fileid, $release) = @_;
-
+ my ($self, $fileid, $release, $pathname) = @_;
$releases_select->execute($fileid+0, $release);
my $firstrow = $releases_select->fetchrow_array();
-
-
-# $releases_select->finish();
+ $releases_select->finish();
unless ($firstrow) {
$releases_insert->execute($fileid+0, $release);
}
+
+ my $rows=$releases_remove->execute($pathname, $release, $fileid);
+ if ($rows > 0) {
+ print "Removed $rows\n";
+ # Something was zapped, so clean up
+ # The referential integrity will clean up from these two deletes
+ $rows=$files_remove->execute;
+ $rows=$indexes_remove->execute;
+ }
+
commit_if_limit();
}
@@ -304,6 +326,7 @@
$files_select= undef;
$filenum_nextval= undef;
$files_insert = undef;
+ $files_remove = undef;
$symbols_byname= undef;
$symbols_byid= undef;
$symnum_nextval = undef;
@@ -311,12 +334,16 @@
$symbols_insert= undef;
$indexes_select= undef;
$indexes_insert = undef;
+ $indexes_remove = undef;
$releases_select= undef;
$releases_insert= undef;
+ $releases_remove = undef;
$status_insert = undef;
$status_update= undef;
+ $status_remove = undef;
$usage_insert= undef;
$usage_select= undef;
+ $usage_remove = undef;
$decl_select = undef;
$declid_nextnum= undef;
$decl_insert = undef;
|