--- loncom/lonsql	2001/03/27 19:11:12	1.25
+++ loncom/lonsql	2001/04/16 18:36:22	1.33
@@ -23,7 +23,6 @@ sub wanted {
     push(@metalist,"$dir/$_");
 }
 
-
 $childmaxattempts=10;
 $run =0;#running counter to generate the query-id
 
@@ -39,6 +38,20 @@ while ($configline=<CONFIG>) {
 }
 close(CONFIG);
 
+# ------------------------------------- Make sure that database can be accessed
+{
+    my $dbh;
+    unless (
+	    $dbh = DBI->connect("DBI:mysql:loncapa","www",$perlvar{'lonSqlAccess'},{ RaiseError =>0,PrintError=>0})
+	    ) { 
+	print "Cannot connect to database!\n";
+	exit;
+    }
+    else {
+	$dbh->disconnect;
+    }
+}
+
 # --------------------------------------------- Check if other instance running
 
 my $pidfile="$perlvar{'lonDaemons'}/logs/lonsql.pid";
@@ -60,7 +73,6 @@ while ($configline=<CONFIG>) {
     chomp($ip);
 
     $hostip{$ip}=$id;
-
     if ($id eq $perlvar{'lonHostID'}) { $thisserver=$name; }
 
     $PREFORK++;
@@ -191,12 +203,11 @@ sub make_new_child {
         #open database handle
 	# making dbh global to avoid garbage collector
 	unless (
-		$dbh = DBI->connect("DBI:mysql:loncapa","www","123",{ RaiseError =>0,PrintError=>0})
+		$dbh = DBI->connect("DBI:mysql:loncapa","www",$perlvar{'lonSqlAccess'},{ 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;
 
 	  };
@@ -233,26 +244,27 @@ sub make_new_child {
 	    my $result;
 	    my @files;
 	    my $subsetflag=0;
-	    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);
+	    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");
-		if (@files) {
+		if ($query) {
 		    @metalist=map {$perlvar{'lonDocRoot'}.$_.'.meta'} @files;
 		}
 		else {
@@ -266,6 +278,7 @@ sub make_new_child {
 		# 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>;
@@ -278,11 +291,24 @@ sub make_new_child {
 			    $stuff=~s/\n?\<$f[^\>]*\>.*?<\/$f[^\>]*\>\n?//;
 			}
 			my $m2=$m; my $docroot=$perlvar{'lonDocRoot'};
-			$m2=~s/^$docroot//; $m2=~s/\.meta$//;
+			$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($m2).','.escape($stuff);
 		    }
 		}
+		$result=join("&",@r2) unless $query;
 		$result.=$customresult;
 	    }
 	    # reply with result
@@ -337,6 +363,7 @@ sub reply {
     }
   } else {
     $answer='self_reply';
+    $answer=subreply($cmd,$server);
   } 
   return $answer;
 }