Index: openacs-4/packages/tsearch2-driver/tcl/tsearch2-driver-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/tsearch2-driver/tcl/tsearch2-driver-procs.tcl,v diff -u -N -r1.16 -r1.17 --- openacs-4/packages/tsearch2-driver/tcl/tsearch2-driver-procs.tcl 13 Apr 2005 02:41:53 -0000 1.16 +++ openacs-4/packages/tsearch2-driver/tcl/tsearch2-driver-procs.tcl 13 Nov 2006 01:10:33 -0000 1.17 @@ -238,6 +238,8 @@ regsub -all {\(|\)} $query {} query } + # remove or at beginning of query + regsub -nocase "^or " $query {} query # replace boolean words with boolean operators regsub -nocase "^not " $query {!} query set query [string map {" and " " & " " or " " | " " not " " ! "} " $query "] @@ -248,14 +250,15 @@ # remove any spaces between words and operators # all remaining spaces between words turn into & while {[regexp {([-/@.\d\w\(\)])\s+?([-/@.\d\w\(\)])} $query]} { - regsub {([-/@.\d\w\(\)])\s+?([-/@.\d\w\(\)])} $query {\1\&\2} query + regsub {([-/@.\d\w\(\)])\s+?([-/@.\d\w\(\)])} $query {\1 \& \2} query } # if a ! is by itself then prepend & regsub {(\w+?)\s*(!)} $query {\1 \& !} query # if there is )( then insert an & between them # or if there is )\w or \w( insert an & between them regsub {(\))([\(\w])} $query {\1\ & \2} query regsub {([\)\w])(\()} $query {\1\ & \2} query + return $query } @@ -373,4 +376,4 @@ @error } { return {title description package_id parent_id} -} \ No newline at end of file +} Index: openacs-4/packages/tsearch2-driver/tcl/test/tsearch2-driver-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/tsearch2-driver/tcl/test/tsearch2-driver-procs.tcl,v diff -u -N -r1.2 -r1.3 --- openacs-4/packages/tsearch2-driver/tcl/test/tsearch2-driver-procs.tcl 13 Apr 2005 02:41:53 -0000 1.2 +++ openacs-4/packages/tsearch2-driver/tcl/test/tsearch2-driver-procs.tcl 13 Nov 2006 01:10:33 -0000 1.3 @@ -43,6 +43,9 @@ [string equal "one & a & two" \ [tsearch2::build_query -query $q]] - + set q "or else" + aa_true "Or at beginning by itself" \ + [string equal "else" \ + [tsearch2::build_query -query $q]] } }