--- loncom/lonsql	2001/03/27 02:09:50	1.18
+++ loncom/lonsql	2001/04/02 20:16:31	1.30
@@ -23,7 +23,18 @@ sub wanted {
     push(@metalist,"$dir/$_");
 }
 
-
+{
+    my $dbh;
+    unless (
+	    $dbh = DBI->connect("DBI:mysql:loncapa","www","123",{ RaiseError =>0,PrintError=>0})
+	    ) { 
+	print "Cannot connect to database!\n";
+	exit;
+    }
+    else {
+	$dbh->disconnect;
+    }
+}
 $childmaxattempts=10;
 $run =0;#running counter to generate the query-id
 
@@ -193,10 +204,9 @@ sub make_new_child {
 	unless (
 		$dbh = DBI->connect("DBI:mysql:loncapa","www","123",{ RaiseError =>0,PrintError=>0})
 		) { 
-	            my $st=120+int(rand(240));
+  	            sleep(10+int(rand(20)));
 		    &logthis("<font color=blue>WARNING: Couldn't connect to database  ($st secs): $@</font>");
 		    print "database handle error\n";
-		    sleep($st);
 		    exit;
 
 	  };
@@ -212,9 +222,11 @@ sub make_new_child {
 	    my $userinput = <$client>;
 	    chomp($userinput);
 	    	    
-	    my ($conserver,$querytmp,$customtmp)=split(/&/,$userinput);
+	    my ($conserver,$querytmp,
+		$customtmp,$customshowtmp)=split(/&/,$userinput);
 	    my $query=unescape($querytmp);
 	    my $custom=unescape($customtmp);
+	    my $customshow=unescape($customshowtmp);
 
             #send query id which is pid_unixdatetime_runningcounter
 	    $queryid = $thisserver;
@@ -223,32 +235,49 @@ sub make_new_child {
 	    $queryid .= $run;
 	    print $client "$queryid\n";
 	    
+	    &logthis("QUERY: $query");
+	    &logthis("QUERY: $query");
+	    sleep 1;
             #prepare and execute the query
 	    my $sth = $dbh->prepare($query);
 	    my $result;
-	    unless ($sth->execute())
-	    {
-		&logthis("<font color=blue>WARNING: Could not retrieve from database: $@</font>");
-		$result="";
-	    }
-	    else {
-		my $r1=$sth->fetchall_arrayref;
-		my @r2; map {my $a=$_; my @b=map {escape($_)} @$a; push @r2,join(",", @b)} (@$r1);
-		$result=join("&",@r2);
+	    my @files;
+	    my $subsetflag=0;
+	    if ($query) {
+		unless ($sth->execute())
+		{
+		    &logthis("<font color=blue>WARNING: Could not retrieve from database: $@</font>");
+		    $result="";
+		}
+		else {
+		    my $r1=$sth->fetchall_arrayref;
+		    my @r2;
+		    map {my $a=$_; 
+			 my @b=map {escape($_)} @$a;
+			 push @files,@{$a}[3];
+			 push @r2,join(",", @b)
+			 } (@$r1);
+		    $result=join("&",@r2);
+		}
 	    }
-
 	    # do custom metadata searching here and build into result
-	    if ($custom) {
+	    if ($custom or $customshow) {
 		&logthis("am going to do custom query for $custom");
-		@metalist=(); pop @metalist;
-		&find("$perlvar{'lonDocRoot'}/res");
-		&logthis("FILELIST:" . join(":::",@metalist));
+		if ($query) {
+		    @metalist=map {$perlvar{'lonDocRoot'}.$_.'.meta'} @files;
+		}
+		else {
+		    @metalist=(); pop @metalist;
+		    &find("$perlvar{'lonDocRoot'}/res");
+		}
+#		&logthis("FILELIST:" . join(":::",@metalist));
 		# if file is indicated in sql database and
 		# not part of sql-relevant query, do not pattern match.
 		# if file is not in sql database, output error.
 		# if file is indicated in sql database and is
 		# part of query result list, then do the pattern match.
 		my $customresult='';
+		my @r2;
 		foreach my $m (@metalist) {
 		    my $fh=IO::File->new($m);
 		    my @lines=<$fh>;
@@ -258,12 +287,27 @@ sub make_new_child {
 				       'creationdate','keywords','language',
 				       'lastrevisiondate','mime','notes',
 				       'owner','subject','title') {
-			    $stuff=~s/\<$f[^\>]*\>.*?<\/$f[^\>]*\>//;
+			    $stuff=~s/\n?\<$f[^\>]*\>.*?<\/$f[^\>]*\>\n?//;
+			}
+			my $m2=$m; my $docroot=$perlvar{'lonDocRoot'};
+			$m2=~s/^$docroot//;
+			$m2=~s/\.meta$//;
+			unless ($query) {
+			    my $q2="select * from metadata where url like '$m2'";
+			    my $sth = $dbh->prepare($q2);
+			    $sth->execute();
+			    my $r1=$sth->fetchall_arrayref;
+			    map {my $a=$_; 
+				 my @b=map {escape($_)} @$a;
+				 push @files,@{$a}[3];
+				 push @r2,join(",", @b)
+				 } (@$r1);
 			}
-			&logthis("found: $stuff");
-			$customresult.='&custom='.escape($stuff);
+#			&logthis("found: $stuff");
+			$customresult.='&custom='.escape($m2).','.escape($stuff);
 		    }
 		}
+		$result=join("&",@r2) unless $query;
 		$result.=$customresult;
 	    }
 	    # reply with result