Commit 09684993bb86590b8cb5215c2ede3cb470fa4e72

Authored by Neil Blakey-Milner
1 parent a7735a5e

Only use IN BOOLEAN MODE on MySQL 4 and above.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@3430 c91229c3-7414-0410-bfa2-8a42b809f60b
presentation/lookAndFeel/knowledgeTree/search/standardSearchUI.inc
... ... @@ -36,16 +36,25 @@ function getMessage() {
36 36 function getSearchResultsByCategory($iFolderID, $sKeywords, $iStartIndex, $sCategory) {
37 37 global $default;
38 38  
  39 + // XXX: Icky MySQL-specific stuff.
  40 + $sVersion = DBUtil::getOneResultKey("SHOW VARIABLES LIKE 'version'", "Value");
  41 + if ((int)substr($sVersion, 0, 1) >= 4) {
  42 + $boolean_mode = "IN BOOLEAN MODE";
  43 + } else {
  44 + $boolean_mode = "";
  45 + }
  46 +
  47 +
39 48 /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, " .
40 49 "F.id AS folder_id, D.id AS document_id, D.name AS document_name, " .
41   - "ROUND(MATCH(DT.document_text) AGAINST (? IN BOOLEAN MODE) OR 1, 3) AS score " .
  50 + "ROUND(MATCH(DT.document_text) AGAINST (? $boolean_mode) OR 1, 3) AS score " .
42 51 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " .
43 52 "INNER JOIN $default->document_fields_link_table AS DFL ON DT.document_id=DFL.document_id " .
44 53 "INNER JOIN $default->document_fields_table AS DF ON DF.id = DFL.document_field_id " .
45 54 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " .
46 55 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " .
47 56 "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " .
48   - "WHERE MATCH(DT.document_text) AGAINST (? IN BOOLEAN MODE) " .
  57 + "WHERE MATCH(DT.document_text) AGAINST (? $boolean_mode) " .
49 58 "AND (F.is_public OR SDUL.user_id = ?) " .
50 59 "AND SL.name='Live' ";
51 60 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]);
... ... @@ -77,14 +86,23 @@ function getSearchResultsByCategory($iFolderID, $sKeywords, $iStartIndex, $sCate
77 86  
78 87 function getSearchResultsByDocumentType($iFolderID, $sKeywords, $iStartIndex, $iDocTypeID) {
79 88 global $default;
  89 +
  90 + // XXX: Icky MySQL-specific stuff.
  91 + $sVersion = DBUtil::getOneResultKey("SHOW VARIABLES LIKE 'version'", "Value");
  92 + if ((int)substr($sVersion, 0, 1) >= 4) {
  93 + $boolean_mode = "IN BOOLEAN MODE";
  94 + } else {
  95 + $boolean_mode = "";
  96 + }
  97 +
80 98 /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, " .
81 99 "F.id AS folder_id, D.id AS document_id, D.name AS document_name, " .
82   - "ROUND(MATCH(DT.document_text) AGAINST (? IN BOOLEAN MODE),3) AS score " .
  100 + "ROUND(MATCH(DT.document_text) AGAINST (? $boolean_mode),3) AS score " .
83 101 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " .
84 102 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " .
85 103 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " .
86 104 "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " .
87   - "WHERE MATCH(DT.document_text) AGAINST (? IN BOOLEAN MODE) " .
  105 + "WHERE MATCH(DT.document_text) AGAINST (? $boolean_mode) " .
88 106 "AND (F.is_public OR SDUL.user_id = ?) ";
89 107 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]);
90 108 if (isset($iDocTypeID)) {
... ... @@ -116,14 +134,23 @@ function getSearchResultsByDocumentType($iFolderID, $sKeywords, $iStartIndex, $i
116 134  
117 135 function getSeachResultsByFolder($iFolderID, $iStartIndex, $sKeywords) {
118 136 global $default;
  137 +
  138 + // XXX: Icky MySQL-specific stuff.
  139 + $sVersion = DBUtil::getOneResultKey("SHOW VARIABLES LIKE 'version'", "Value");
  140 + if ((int)substr($sVersion, 0, 1) >= 4) {
  141 + $boolean_mode = "IN BOOLEAN MODE";
  142 + } else {
  143 + $boolean_mode = "";
  144 + }
  145 +
119 146 /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, " .
120 147 "F.id AS folder_id, D.id AS document_id, D.name AS document_name, " .
121   - "ROUND(MATCH(DT.document_text) AGAINST (? IN BOOLEAN MODE),3) AS score " .
  148 + "ROUND(MATCH(DT.document_text) AGAINST (? $boolean_mode),3) AS score " .
122 149 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " .
123 150 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " .
124 151 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " .
125 152 "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " .
126   - "WHERE MATCH(DT.document_text) AGAINST (? IN BOOLEAN MODE) " .
  153 + "WHERE MATCH(DT.document_text) AGAINST (? $boolean_mode) " .
127 154 "AND (F.is_public OR SDUL.user_id = ?) " .
128 155 "AND SL.name='Live' ";
129 156 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]);
... ...