--- db/prgsrc/db.cgi 2001/01/26 12:09:32 1.13 +++ db/prgsrc/db.cgi 2001/05/16 23:49:01 1.14 @@ -5,7 +5,7 @@ use CGI ':all'; use strict; use Time::Local; use POSIX qw(locale_h); - +my $debug=1; #added by R7 my ($PWD) = `pwd`; chomp $PWD; my ($SRCPATH) = "$PWD/../dimrub/src"; @@ -105,32 +105,64 @@ sub GetTours { # Returns list of QuestionId's, that have the search string in them. sub Search { - my ($dbh, $sstr) = @_; + my ($dbh, $sstr, $metod) = @_; my (@arr, @Questions, @fields); - my (@sar, $i, $sth); + my (@sar, $i, $sth,$where); # push @fields, 'Question'; - foreach (qw/Question Answer Sources Authors Comments/) { + +###Simple and advanced query processing. Added by R7 + if ($metod eq 'simple' || $metod eq 'advanced') + { + foreach (qw/Question Answer Sources Authors Comments/) { if (param($_)) { - push @fields, "IFNULL($_, '')"; + push @fields, $_; } } - @sar = split " ", $sstr; - for $i (0 .. $#sar) { + @fields=(qw/Question Answer Sources Authors Comments/) unless scalar @fields; + my $fields=join ",", @fields; + my $q=new Text::Query($sstr, + -parse => 'Text::Query::'. + (($metod eq 'simple') ? 'ParseSimple':'ParseAdvanced'), + -solve => 'Text::Query::SolveSQL', + -build => 'Text::Query::BuildSQLMySQL', + -fields_searched => $fields); + + $where= $$q{'matchexp'}; + my $query= "SELECT Questionid FROM Questions + WHERE $where"; + print br."Query is: $query".br if $debug; + + $sth = $dbh->prepare($query); + } else +###### + { + + + foreach (qw/Question Answer Sources Authors Comments/) { + if (param($_)) { + push @fields, "IFNULL($_, '')"; + } + } + + @sar = split " ", $sstr; + for $i (0 .. $#sar) { $sar[$i] = $dbh->quote("%${sar[$i]}%"); - } + } - my($f) = "CONCAT(" . join(',', @fields) . ")"; - if (param('all') eq 'yes') { + my($f) = "CONCAT(" . join(',', @fields) . ")"; + if (param('all') eq 'yes') { $sstr = join " AND $f LIKE ", @sar; - } else { + } else { $sstr = join " OR $f LIKE ", @sar; - } + } - $sth = $dbh->prepare("SELECT QuestionId FROM Questions + $sth = $dbh->prepare("SELECT QuestionId FROM Questions WHERE $f LIKE $sstr ORDER BY QuestionId"); + } #else -- processing old-style query (R7) + $sth->execute; while (@arr = $sth->fetchrow) { push @Questions, $arr[0]; @@ -155,8 +187,8 @@ sub NoCase { } sub PrintSearch { - my ($dbh, $sstr) = @_; - my (@Questions) = &Search($dbh, $sstr); + my ($dbh, $sstr, $metod) = @_; + my (@Questions) = &Search($dbh, $sstr,$metod); my ($output, $i, $suffix, $hits) = ('', 0, '', $#Questions + 1); if ($hits =~ /1.$/ || $hits =~ /[5-90]$/) { @@ -635,7 +667,7 @@ EOT print &PrintRandom($dbh, $type, $qnum, $text); } } elsif (param('sstr')) { - &PrintSearch($dbh, param('sstr')); + &PrintSearch($dbh, param('sstr'), param('metod')); } elsif (param('all')) { print &PrintAll($dbh, 0); } elsif (param('from_year') && param('to_year')) {