Commit c24905056b9fa96f028a9f5a42da0cb7cd3f3ea4

Authored by nbm
1 parent b5e4fe2c

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,16 +36,25 @@ function getMessage() {
36 function getSearchResultsByCategory($iFolderID, $sKeywords, $iStartIndex, $sCategory) { 36 function getSearchResultsByCategory($iFolderID, $sKeywords, $iStartIndex, $sCategory) {
37 global $default; 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 /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, " . 48 /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, " .
40 "F.id AS folder_id, D.id AS document_id, D.name AS document_name, " . 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 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " . 51 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " .
43 "INNER JOIN $default->document_fields_link_table AS DFL ON DT.document_id=DFL.document_id " . 52 "INNER JOIN $default->document_fields_link_table AS DFL ON DT.document_id=DFL.document_id " .
44 "INNER JOIN $default->document_fields_table AS DF ON DF.id = DFL.document_field_id " . 53 "INNER JOIN $default->document_fields_table AS DF ON DF.id = DFL.document_field_id " .
45 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " . 54 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " .
46 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " . 55 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " .
47 "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " . 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 "AND (F.is_public OR SDUL.user_id = ?) " . 58 "AND (F.is_public OR SDUL.user_id = ?) " .
50 "AND SL.name='Live' "; 59 "AND SL.name='Live' ";
51 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]); 60 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]);
@@ -77,14 +86,23 @@ function getSearchResultsByCategory($iFolderID, $sKeywords, $iStartIndex, $sCate @@ -77,14 +86,23 @@ function getSearchResultsByCategory($iFolderID, $sKeywords, $iStartIndex, $sCate
77 86
78 function getSearchResultsByDocumentType($iFolderID, $sKeywords, $iStartIndex, $iDocTypeID) { 87 function getSearchResultsByDocumentType($iFolderID, $sKeywords, $iStartIndex, $iDocTypeID) {
79 global $default; 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 /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, " . 98 /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, " .
81 "F.id AS folder_id, D.id AS document_id, D.name AS document_name, " . 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 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " . 101 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " .
84 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " . 102 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " .
85 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " . 103 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " .
86 "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " . 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 "AND (F.is_public OR SDUL.user_id = ?) "; 106 "AND (F.is_public OR SDUL.user_id = ?) ";
89 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]); 107 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]);
90 if (isset($iDocTypeID)) { 108 if (isset($iDocTypeID)) {
@@ -116,14 +134,23 @@ function getSearchResultsByDocumentType($iFolderID, $sKeywords, $iStartIndex, $i @@ -116,14 +134,23 @@ function getSearchResultsByDocumentType($iFolderID, $sKeywords, $iStartIndex, $i
116 134
117 function getSeachResultsByFolder($iFolderID, $iStartIndex, $sKeywords) { 135 function getSeachResultsByFolder($iFolderID, $iStartIndex, $sKeywords) {
118 global $default; 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 /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, " . 146 /*ok*/ $sQuery = "SELECT DISTINCT '" . "$default->graphicsUrl/widgets/dfolder.gif" . "' AS folder_image_url, " .
120 "F.id AS folder_id, D.id AS document_id, D.name AS document_name, " . 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 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " . 149 "FROM $default->documents_table AS D INNER JOIN $default->document_text_table AS DT ON D.id = DT.document_id " .
123 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " . 150 "INNER JOIN $default->status_table AS SL ON D.status_id = SL.id " .
124 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " . 151 "INNER JOIN $default->folders_table AS F on F.ID = D.folder_id " .
125 "INNER JOIN $default->search_permissions_table AS SDUL ON SDUL.document_id = D.id " . 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 "AND (F.is_public OR SDUL.user_id = ?) " . 154 "AND (F.is_public OR SDUL.user_id = ?) " .
128 "AND SL.name='Live' "; 155 "AND SL.name='Live' ";
129 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]); 156 $aParams = array($sKeywords, $sKeywords, $_SESSION["userID"]);