[LON-CAPA-cvs] cvs: loncom /metadata_database searchcat.pl
matthew
lon-capa-cvs@mail.lon-capa.org
Thu, 19 Jun 2003 20:24:58 -0000
matthew Thu Jun 19 16:24:58 2003 EDT
Modified files:
/loncom/metadata_database searchcat.pl
Log:
&dynamic_metadata
while(each) instead of keys, so we only read the db file once.
study the regular expression before we do a bunch of regex matches
metadata database update code:
Use statement handlers to do quoting
No longer bother to check if something is in the database before
telling MySQL to delete it - we just tell it to delete it and let
it do what must be done.
Index: loncom/metadata_database/searchcat.pl
diff -u loncom/metadata_database/searchcat.pl:1.33 loncom/metadata_database/searchcat.pl:1.34
--- loncom/metadata_database/searchcat.pl:1.33 Thu Jun 19 15:34:27 2003
+++ loncom/metadata_database/searchcat.pl Thu Jun 19 16:24:57 2003
@@ -2,7 +2,7 @@
# The LearningOnline Network
# searchcat.pl "Search Catalog" batch script
#
-# $Id: searchcat.pl,v 1.33 2003/06/19 19:34:27 matthew Exp $
+# $Id: searchcat.pl,v 1.34 2003/06/19 20:24:57 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -125,42 +125,42 @@
my $regexp=$url;
$regexp=~s/(\W)/\\$1/g;
$regexp='___'.$regexp.'___([a-z]+)$';
- foreach (keys %evaldata) {
- my $key=&unescape($_);
- if ($key=~/$regexp/) {
- my $ctype=$1;
- if (defined($cnt{$ctype})) {
- $cnt{$ctype}++;
- } else {
- $cnt{$ctype}=1;
+ study($regexp);
+ while (my ($key,$value) = each(%evaldata)) {
+ $key=&unescape($key);
+ next if ($key !~ /$regexp/);
+ my $ctype=$1;
+ if (defined($cnt{$ctype})) {
+ $cnt{$ctype}++;
+ } else {
+ $cnt{$ctype}=1;
+ }
+ unless ($listitems{$ctype} eq 'app') {
+ if (defined($sum{$ctype})) {
+ $sum{$ctype}+=$value;
+ } else {
+ $sum{$ctype}=$value;
}
- unless ($listitems{$ctype} eq 'app') {
- if (defined($sum{$ctype})) {
- $sum{$ctype}+=$evaldata{$_};
- } else {
- $sum{$ctype}=$evaldata{$_};
+ } else {
+ if (defined($sum{$ctype})) {
+ if ($value) {
+ $sum{$ctype}.='<hr>'.$value;
}
} else {
- if (defined($sum{$ctype})) {
- if ($evaldata{$_}) {
- $sum{$ctype}.='<hr>'.$evaldata{$_};
- }
- } else {
- $sum{$ctype}=''.$evaldata{$_};
- }
- }
- if ($ctype ne 'count') {
- $newevaldata{$_}=$evaldata{$_};
+ $sum{$ctype}=''.$value;
}
}
+ if ($ctype ne 'count') {
+ $newevaldata{$_}=$value;
+ }
}
- foreach (keys %cnt) {
- if ($listitems{$_} eq 'avg') {
- $returnhash{$_}=int(($sum{$_}/$cnt{$_})*100.0+0.5)/100.0;
- } elsif ($listitems{$_} eq 'cnt') {
- $returnhash{$_}=$cnt{$_};
+ while (my($key,$value) = each(%cnt)) {
+ if ($listitems{$key} eq 'avg') {
+ $returnhash{$key}=int(($sum{$key}/$value)*100.0+0.5)/100.0;
+ } elsif ($listitems{$key} eq 'cnt') {
+ $returnhash{$key}=$value;
} else {
- $returnhash{$_}=$sum{$_};
+ $returnhash{$key}=$sum{$key};
}
}
if ($returnhash{'count'}) {
@@ -237,6 +237,30 @@
&ishome("$perlvar{'lonDocRoot'}/res/$perlvar{'lonDefDomain'}/$_")
} grep {!/^\.\.?$/} readdir(RESOURCES);
closedir RESOURCES;
+
+#
+# Create the statement handlers we need
+my $delete_sth = $dbh->prepare
+ ("DELETE FROM metadata WHERE url LIKE BINARY ?");
+
+my $insert_sth = $dbh->prepare
+ ("INSERT INTO metadata VALUES (".
+ "?,". # title
+ "?,". # author
+ "?,". # subject
+ "?,". # m2???
+ "?,". # version
+ "?,". # current
+ "?,". # notes
+ "?,". # abstract
+ "?,". # mime
+ "?,". # language
+ "?,". # creationdate
+ "?,". # revisiondate
+ "?,". # owner
+ "?)" # copyright
+ );
+
foreach my $user (@homeusers) {
print LOG "\n=== User: ".$user."\n\n";
# Remove left-over db-files from potentially crashed searchcat run
@@ -255,30 +279,25 @@
my $m2='/res/'.&declutter($m);
$m2=~s/\.meta$//;
&dynamicmeta($m2);
- my $q2="select * from metadata where url like binary '$m2'";
- my $sth = $dbh->prepare($q2);
- $sth->execute();
- my $r1=$sth->fetchall_arrayref;
- if (@$r1) {
- $sth=$dbh->prepare("delete from metadata where url like binary '$m2'");
- $sth->execute();
- }
- $sth=$dbh->prepare('insert into metadata values ('.
- '"'.delete($ref->{'title'}).'"'.','.
- '"'.delete($ref->{'author'}).'"'.','.
- '"'.delete($ref->{'subject'}).'"'.','.
- '"'.$m2.'"'.','.
- '"'.delete($ref->{'keywords'}).'"'.','.
- '"'.'current'.'"'.','.
- '"'.delete($ref->{'notes'}).'"'.','.
- '"'.delete($ref->{'abstract'}).'"'.','.
- '"'.delete($ref->{'mime'}).'"'.','.
- '"'.delete($ref->{'language'}).'"'.','.
- '"'.sqltime(delete($ref->{'creationdate'})).'"'.','.
- '"'.sqltime(delete($ref->{'lastrevisiondate'})).'"'.','.
- '"'.delete($ref->{'owner'}).'"'.','.
- '"'.delete($ref->{'copyright'}).'"'.')');
- $sth->execute();
+ $delete_sth->execute($m2);
+ $insert_sth->execute($ref->{'title'},
+ $ref->{'author'},
+ $ref->{'subject'},
+ $m2,
+ $ref->{'keywords'},
+ 'current',
+ $ref->{'notes'},
+ $ref->{'abstract'},
+ $ref->{'mime'},
+ $ref->{'language'},
+ sqltime($ref->{'creationdate'}),
+ sqltime($ref->{'lastrevisiondate'}),
+ $ref->{'owner'},
+ $ref->{'copyright'});
+# if ($dbh->err()) {
+# print STDERR "Error:".$dbh->errstr()."\n";
+# }
+ $ref = undef;
}
# --------------------------------------------------- Clean up database