* code for task #62739.

This commit is contained in:
wangyidong
2022-08-02 16:18:38 +08:00
parent b76ebc1857
commit 99c5aab19a
5 changed files with 513 additions and 259 deletions
+200
View File
@@ -0,0 +1,200 @@
ALTER TABLE `zt_acl` ENGINE='InnoDB';
ALTER TABLE `zt_action` ENGINE='InnoDB';
ALTER TABLE `zt_api_lib_release` ENGINE='InnoDB';
ALTER TABLE `zt_api` ENGINE='InnoDB';
ALTER TABLE `zt_apispec` ENGINE='InnoDB';
ALTER TABLE `zt_apistruct` ENGINE='InnoDB';
ALTER TABLE `zt_apistruct_spec` ENGINE='InnoDB';
ALTER TABLE `zt_approval` ENGINE='InnoDB';
ALTER TABLE `zt_approvalflow` ENGINE='InnoDB';
ALTER TABLE `zt_approvalflowobject` ENGINE='InnoDB';
ALTER TABLE `zt_approvalflowspec` ENGINE='InnoDB';
ALTER TABLE `zt_approvalnode` ENGINE='InnoDB';
ALTER TABLE `zt_approvalobject` ENGINE='InnoDB';
ALTER TABLE `zt_approvalrole` ENGINE='InnoDB';
ALTER TABLE `zt_block` ENGINE='InnoDB';
ALTER TABLE `zt_branch` ENGINE='InnoDB';
ALTER TABLE `zt_bug` ENGINE='InnoDB';
ALTER TABLE `zt_build` ENGINE='InnoDB';
ALTER TABLE `zt_burn` ENGINE='InnoDB';
ALTER TABLE `zt_case` ENGINE='InnoDB';
ALTER TABLE `zt_casestep` ENGINE='InnoDB';
ALTER TABLE `zt_cfd` ENGINE='InnoDB';
ALTER TABLE `zt_company` ENGINE='InnoDB';
ALTER TABLE `zt_compile` ENGINE='InnoDB';
ALTER TABLE `zt_config` ENGINE='InnoDB';
ALTER TABLE `zt_cron` ENGINE='InnoDB';
ALTER TABLE `zt_dept` ENGINE='InnoDB';
ALTER TABLE `zt_design` ENGINE='InnoDB';
ALTER TABLE `zt_designspec` ENGINE='InnoDB';
ALTER TABLE `zt_doc` ENGINE='InnoDB';
ALTER TABLE `zt_doccontent` ENGINE='InnoDB';
ALTER TABLE `zt_doclib` ENGINE='InnoDB';
ALTER TABLE `zt_effort` ENGINE='InnoDB';
ALTER TABLE `zt_entry` ENGINE='InnoDB';
ALTER TABLE `zt_expect` ENGINE='InnoDB';
ALTER TABLE `zt_extension` ENGINE='InnoDB';
ALTER TABLE `zt_file` ENGINE='InnoDB';
ALTER TABLE `zt_group` ENGINE='InnoDB';
ALTER TABLE `zt_grouppriv` ENGINE='InnoDB';
ALTER TABLE `zt_holiday` ENGINE='InnoDB';
ALTER TABLE `zt_history` ENGINE='InnoDB';
ALTER TABLE `zt_job` ENGINE='InnoDB';
ALTER TABLE `zt_kanbanspace` ENGINE='InnoDB';
ALTER TABLE `zt_kanban` ENGINE='InnoDB';
ALTER TABLE `zt_kanbanregion` ENGINE='InnoDB';
ALTER TABLE `zt_kanbancard` ENGINE='InnoDB';
ALTER TABLE `zt_kanbancell` ENGINE='InnoDB';
ALTER TABLE `zt_kanbangroup` ENGINE='InnoDB';
ALTER TABLE `zt_kanbanlane` ENGINE='InnoDB';
ALTER TABLE `zt_kanbancolumn` ENGINE='InnoDB';
ALTER TABLE `zt_lang` ENGINE='InnoDB';
ALTER TABLE `zt_log` ENGINE='InnoDB';
ALTER TABLE `zt_module` ENGINE='InnoDB';
ALTER TABLE `zt_mr` ENGINE='InnoDB';
ALTER TABLE `zt_mrapproval` ENGINE='InnoDB';
ALTER TABLE `zt_notify` ENGINE='InnoDB';
ALTER TABLE `zt_oauth` ENGINE='InnoDB';
ALTER TABLE `zt_pipeline` ENGINE='InnoDB';
ALTER TABLE `zt_planstory` ENGINE='InnoDB';
ALTER TABLE `zt_product` ENGINE='InnoDB';
ALTER TABLE `zt_productplan` ENGINE='InnoDB';
ALTER TABLE `zt_project` ENGINE='InnoDB';
ALTER TABLE `zt_projectadmin` ENGINE='InnoDB';
ALTER TABLE `zt_projectcase` ENGINE='InnoDB';
ALTER TABLE `zt_projectproduct` ENGINE='InnoDB';
ALTER TABLE `zt_projectspec` ENGINE='InnoDB';
ALTER TABLE `zt_projectstory` ENGINE='InnoDB';
ALTER TABLE `zt_relation` ENGINE='InnoDB';
ALTER TABLE `zt_release` ENGINE='InnoDB';
ALTER TABLE `zt_repo` ENGINE='InnoDB';
ALTER TABLE `zt_repobranch` ENGINE='InnoDB';
ALTER TABLE `zt_repofiles` ENGINE='InnoDB';
ALTER TABLE `zt_repohistory` ENGINE='InnoDB';
ALTER TABLE `zt_score` ENGINE='InnoDB';
ALTER TABLE `zt_searchdict` ENGINE='InnoDB';
ALTER TABLE `zt_stage` ENGINE='InnoDB';
ALTER TABLE `zt_stakeholder` ENGINE='InnoDB';
ALTER TABLE `zt_story` ENGINE='InnoDB';
ALTER TABLE `zt_storyreview` ENGINE='InnoDB';
ALTER TABLE `zt_storyestimate` ENGINE='InnoDB';
ALTER TABLE `zt_storyspec` ENGINE='InnoDB';
ALTER TABLE `zt_storystage` ENGINE='InnoDB';
ALTER TABLE `zt_suitecase` ENGINE='InnoDB';
ALTER TABLE `zt_task` ENGINE='InnoDB';
ALTER TABLE `zt_taskestimate` ENGINE='InnoDB';
ALTER TABLE `zt_taskspec` ENGINE='InnoDB';
ALTER TABLE `zt_team` ENGINE='InnoDB';
ALTER TABLE `zt_testreport` ENGINE='InnoDB';
ALTER TABLE `zt_testresult` ENGINE='InnoDB';
ALTER TABLE `zt_testrun` ENGINE='InnoDB';
ALTER TABLE `zt_testsuite` ENGINE='InnoDB';
ALTER TABLE `zt_testtask` ENGINE='InnoDB';
ALTER TABLE `zt_todo` ENGINE='InnoDB';
ALTER TABLE `zt_user` ENGINE='InnoDB';
ALTER TABLE `zt_usercontact` ENGINE='InnoDB';
ALTER TABLE `zt_usergroup` ENGINE='InnoDB';
ALTER TABLE `zt_userquery` ENGINE='InnoDB';
ALTER TABLE `zt_usertpl` ENGINE='InnoDB';
ALTER TABLE `zt_userview` ENGINE='InnoDB';
ALTER TABLE `zt_weeklyreport` ENGINE='InnoDB';
ALTER TABLE `zt_webhook` ENGINE='InnoDB';
ALTER TABLE `zt_im_chat` ENGINE='InnoDB';
ALTER TABLE `zt_im_chatuser` ENGINE='InnoDB';
ALTER TABLE `zt_im_client` ENGINE='InnoDB';
ALTER TABLE `zt_im_message` ENGINE='InnoDB';
ALTER TABLE `zt_im_message_backup` ENGINE='InnoDB';
ALTER TABLE `zt_im_message_index` ENGINE='InnoDB';
ALTER TABLE `zt_im_chat_message_index` ENGINE='InnoDB';
ALTER TABLE `zt_im_messagestatus` ENGINE='InnoDB';
ALTER TABLE `zt_im_queue` ENGINE='InnoDB';
ALTER TABLE `zt_im_conference` ENGINE='InnoDB';
ALTER TABLE `zt_im_conferenceaction` ENGINE='InnoDB';
ALTER TABLE `zt_im_userdevice` ENGINE='InnoDB';
ALTER TABLE `zt_relationoftasks` ENGINE='InnoDB';
ALTER TABLE `zt_report` ENGINE='InnoDB';
ALTER TABLE `zt_feedback` ENGINE='InnoDB';
ALTER TABLE `zt_feedbackview` ENGINE='InnoDB';
ALTER TABLE `zt_serverroom` ENGINE='InnoDB';
ALTER TABLE `zt_account` ENGINE='InnoDB';
ALTER TABLE `zt_asset` ENGINE='InnoDB';
ALTER TABLE `zt_host` ENGINE='InnoDB';
ALTER TABLE `zt_service` ENGINE='InnoDB';
ALTER TABLE `zt_attend` ENGINE='InnoDB';
ALTER TABLE `zt_attendstat` ENGINE='InnoDB';
ALTER TABLE `zt_overtime` ENGINE='InnoDB';
ALTER TABLE `zt_holiday` ENGINE='InnoDB';
ALTER TABLE `zt_leave` ENGINE='InnoDB';
ALTER TABLE `zt_lieu` ENGINE='InnoDB';
ALTER TABLE `zt_trip` ENGINE='InnoDB';
ALTER TABLE `zt_deploy` ENGINE='InnoDB';
ALTER TABLE `zt_deployproduct` ENGINE='InnoDB';
ALTER TABLE `zt_deploystep` ENGINE='InnoDB';
ALTER TABLE `zt_deployscope` ENGINE='InnoDB';
ALTER TABLE `zt_vm` ENGINE='InnoDB';
ALTER TABLE `zt_baseimage` ENGINE='InnoDB';
ALTER TABLE `zt_vmtemplate` ENGINE='InnoDB';
ALTER TABLE `zt_browser` ENGINE='InnoDB';
ALTER TABLE `zt_baseimagebrowser` ENGINE='InnoDB';
ALTER TABLE `zt_traincourse` ENGINE='InnoDB';
ALTER TABLE `zt_traincontents` ENGINE='InnoDB';
ALTER TABLE `zt_traincategory` ENGINE='InnoDB';
ALTER TABLE `zt_trainrecords` ENGINE='InnoDB';
ALTER TABLE `zt_faq` ENGINE='InnoDB';
ALTER TABLE `zt_domain` ENGINE='InnoDB';
ALTER TABLE `zt_workflow` ENGINE='InnoDB';
ALTER TABLE `zt_workflowaction` ENGINE='InnoDB';
ALTER TABLE `zt_workflowdatasource` ENGINE='InnoDB';
ALTER TABLE `zt_workflowfield` ENGINE='InnoDB';
ALTER TABLE `zt_workflowlayout` ENGINE='InnoDB';
ALTER TABLE `zt_workflowlabel` ENGINE='InnoDB';
ALTER TABLE `zt_workflowlinkdata` ENGINE='InnoDB';
ALTER TABLE `zt_workflowrelation` ENGINE='InnoDB';
ALTER TABLE `zt_workflowrelationlayout` ENGINE='InnoDB';
ALTER TABLE `zt_workflowrule` ENGINE='InnoDB';
ALTER TABLE `zt_workflowsql` ENGINE='InnoDB';
ALTER TABLE `zt_workflowversion` ENGINE='InnoDB';
ALTER TABLE `zt_workflowreport` ENGINE='InnoDB';
ALTER TABLE `zt_durationestimation` ENGINE='InnoDB';
ALTER TABLE `zt_workestimation` ENGINE='InnoDB';
ALTER TABLE `zt_intervention` ENGINE='InnoDB';
ALTER TABLE `zt_activity` ENGINE='InnoDB';
ALTER TABLE `zt_auditcl` ENGINE='InnoDB';
ALTER TABLE `zt_auditplan` ENGINE='InnoDB';
ALTER TABLE `zt_auditresult` ENGINE='InnoDB';
ALTER TABLE `zt_nc` ENGINE='InnoDB';
ALTER TABLE `zt_zoutput` ENGINE='InnoDB';
ALTER TABLE `zt_process` ENGINE='InnoDB';
ALTER TABLE `zt_programactivity` ENGINE='InnoDB';
ALTER TABLE `zt_programoutput` ENGINE='InnoDB';
ALTER TABLE `zt_programprocess` ENGINE='InnoDB';
ALTER TABLE `zt_basicmeas` ENGINE='InnoDB';
ALTER TABLE `zt_budget` ENGINE='InnoDB';
ALTER TABLE `zt_researchplan` ENGINE='InnoDB';
ALTER TABLE `zt_researchreport` ENGINE='InnoDB';
ALTER TABLE `zt_meeting` ENGINE='InnoDB';
ALTER TABLE `zt_meetingroom` ENGINE='InnoDB';
ALTER TABLE `zt_assetlib` ENGINE='InnoDB';
ALTER TABLE `zt_meastemplate` ENGINE='InnoDB';
ALTER TABLE `zt_programreport` ENGINE='InnoDB';
ALTER TABLE `zt_measrecords` ENGINE='InnoDB';
ALTER TABLE `zt_object` ENGINE='InnoDB';
ALTER TABLE `zt_review` ENGINE='InnoDB';
ALTER TABLE `zt_reviewcl` ENGINE='InnoDB';
ALTER TABLE `zt_reviewresult` ENGINE='InnoDB';
ALTER TABLE `zt_reviewissue` ENGINE='InnoDB';
ALTER TABLE `zt_reviewlist` ENGINE='InnoDB';
ALTER TABLE `zt_cmcl` ENGINE='InnoDB';
ALTER TABLE `zt_solutions` ENGINE='InnoDB';
ALTER TABLE `zt_measqueue` ENGINE='InnoDB';
ALTER TABLE `zt_issue` ENGINE='InnoDB';
ALTER TABLE `zt_risk` ENGINE='InnoDB';
ALTER TABLE `zt_riskissue` ENGINE='InnoDB';
ALTER TABLE `zt_opportunity` ENGINE='InnoDB';
ALTER TABLE `zt_trainplan` ENGINE='InnoDB';
ALTER TABLE `zt_gapanalysis` ENGINE='InnoDB';
ALTER TABLE `zt_sqlview` ENGINE='InnoDB';
ALTER TABLE `zt_searchindex` ADD FULLTEXT `title_content` (`title`, `content`);
ALTER TABLE `zt_searchindex` DROP INDEX `title`;
ALTER TABLE `zt_searchindex` DROP INDEX `content`;
+217 -217
View File
File diff suppressed because it is too large Load Diff
+4 -6
View File
@@ -227,11 +227,9 @@ class search extends control
$type = (empty($type) or $type[0] == 'all') ? 'all' : $type;
$this->app->loadClass('pager', $static = true);
$begin = time();
$results = $this->search->getList($words, $type);
$recTotal = count($results);
$pager = new pager($recTotal, $this->config->search->recPerPage, $pageID);
$results = array_chunk($results, $pager->recPerPage);
$begin = time();
$pager = new pager(0, $this->config->search->recPerPage, $pageID);
$results = $this->search->getList($words, $type, $pager);
/* Set session. */
$uri = inlink('index', "recTotal=$pager->recTotal&pageID=$pager->pageID");
@@ -264,7 +262,7 @@ class search extends control
if(strpos($this->server->http_referer, 'search') === false) $this->session->set('referer', $this->server->http_referer);
$this->view->results = empty($results) ? $results : $results[$pageID - 1];
$this->view->results = $results;
$this->view->consumed = time() - $begin;
$this->view->title = $this->lang->search->index;
$this->view->type = $type;
+77 -36
View File
@@ -567,36 +567,32 @@ class searchModel extends model
*
* @param string $keywords
* @param string $type
* @param object $pager
* @access public
* @return array
*/
public function getList($keywords, $type)
public function getList($keywords, $type, $pager = null)
{
$spliter = $this->app->loadClass('spliter');
$words = explode(' ', self::unify($keywords, ' '));
$against = '';
$againstCond = '';
$likeCondition = '';
$against = '';
$againstCond = '';
foreach($words as $word)
{
$splitedWords = $spliter->utf8Split($word);
$trimedWord = trim($splitedWords['words']);
$against .= '"' . $trimedWord . '" ';
$againstCond .= '+"' . $trimedWord . '" ';
$againstCond .= '(+"' . $trimedWord . '") ';
$likeWord = is_numeric($word) ? $word : $trimedWord;
if(is_numeric($word) and strpos($word, '.') === false and strlen($word) < 5) $likeWord = str_pad("|$likeWord|", 5, '_');
$condition = "OR title like '%{$likeWord}%' OR content like '%{$likeWord}%'";
if(is_numeric($word) and strpos($word, '.') === false and strlen($word) == 5)
{
$againstCond .= "-\" $word \" ";
$condition = "OR title REGEXP '[^ ]{$likeWord}[^ ]' OR content REGEXP '[^ ]{$likeWord}[^ ]'";
}
$likeCondition .= $condition;
if(is_numeric($word) and strpos($word, '.') === false and strlen($word) == 5) $againstCond .= "(-\" $word \") ";
}
$likeCondition = '';
/* Assisted lookup by like condition when only one word. */
if(count($words) == 1 and strpos($words[0], ' ') === false) $likeCondition = "OR title like '%{$words[0]}%' OR content like '%{$words[0]}%'";
$words = str_replace('"', '', $against);
$words = str_pad($words, 5, '_');
@@ -619,15 +615,61 @@ class searchModel extends model
}
}
$scoreColumn = "((1 * (MATCH(title) AGAINST('{$against}' IN BOOLEAN MODE))) + (0.6 * (MATCH(content) AGAINST('{$against}' IN BOOLEAN MODE))) )";
$results = $this->dao->select("*, {$scoreColumn} as score")
$scoreColumn = "(MATCH(title, content) AGAINST('{$againstCond}' IN BOOLEAN MODE))";
$stmt = $this->dao->select("*, {$scoreColumn} as score")
->from(TABLE_SEARCHINDEX)
->where("(MATCH(title) AGAINST('{$againstCond}' IN BOOLEAN MODE) >= 1 or MATCH(content) AGAINST('{$againstCond}' IN BOOLEAN MODE) >= 1 $likeCondition)")
->where("(MATCH(title,content) AGAINST('{$againstCond}' IN BOOLEAN MODE) >= 1 {$likeCondition})")
->andWhere('vision')->eq($this->config->vision)
->andWhere('objectType')->in($allowedObject)
->andWhere('addedDate')->le(helper::now())
->orderBy('score_desc, editedDate_desc')
->fetchAll('id');
->query();
$idListGroup = array();
$results = array();
while($record = $stmt->fetch())
{
$module = $record->objectType == 'case' ? 'testcase' : $record->objectType;
$idListGroup[$module][$record->objectID] = $record->objectID;
$results[$record->id] = $record;
}
$results = $this->checkPriv($results, $idListGroup);
if(empty($results)) return $results;
/* Reset pager total and get this page data. */
$pager->setRecTotal(count($results));
$pager->setPageTotal();
$pager->setPageID($pager->pageID);
$results = array_chunk($results, $pager->recPerPage, true);
$results = $results[$pager->pageID - 1];
$idListGroup = array();
foreach($results as $record)
{
$module = $record->objectType == 'case' ? 'testcase' : $record->objectType;
$idListGroup[$module][$record->objectID] = $record->objectID;
}
$objectList = array();
$linkProjectModules = ',task,bug,testcase,build,release,testtask,testsuite,testreport,trainplan,';
foreach($idListGroup as $module => $idList)
{
if(!isset($this->config->objectTables[$module])) continue;
$table = $this->config->objectTables[$module];
$fields = '';
if($module == 'issue') $fields = $this->config->edition == 'max' ? 'id,project,owner,lib' : 'id,project,owner';
if($module == 'project') $fields = 'id,model';
if($module == 'execution')$fields = 'id,type,project';
if($module == 'story') $fields = $this->config->edition == 'max' ? 'id,type,lib' : 'id,type';
if(($module == 'risk' or $module == 'opportunity') and $this->config->edition == 'max') $fields = 'id,lib';
if($module == 'doc' and $this->config->edition == 'max') $fields = 'id,assetLib,assetLibType';
if(empty($fields)) continue;
$objectList[$module] = $this->dao->select($fields)->from($table)->where('id')->in($idList)->fetchAll('id');
}
foreach($results as $record)
{
@@ -644,17 +686,14 @@ class searchModel extends model
$method = 'viewstep';
}
if(strpos(',task,bug,testcase,build,release,testtask,testsuite,testreport,trainplan,', ",$module,") !== false)
if(strpos($linkProjectModules, ",$module,") !== false)
{
if(!isset($this->config->objectTables[$record->objectType])) continue;
$table = $this->config->objectTables[$record->objectType];
$projectID = $this->dao->select('project')->from($table)->where('id')->eq($record->objectID)->fetch('project');
$record->url = helper::createLink($module, $method, "id={$record->objectID}");
}
elseif($module == 'issue')
{
$issueField = $this->config->edition == 'max' ? 'id,project,owner,lib' : 'id,project,owner';
$issue = $this->dao->select($issueField)->from(TABLE_ISSUE)->where('id')->eq($record->objectID)->fetch();
$issue = $objectList['issue'][$record->objectID];
if(!empty($issue->lib))
{
$module = 'assetlib';
@@ -666,28 +705,27 @@ class searchModel extends model
}
elseif($module == 'project')
{
$projectModel = $this->dao->select('model')->from(TABLE_PROJECT)->where('id')->eq($record->objectID)->fetch('model');
$projectModel = $objectList['project'][$record->objectID]->model;
$method = $projectModel == 'kanban' ? 'index' : 'view';
$record->url = helper::createLink('project', $method, "id={$record->objectID}");
}
elseif($module == 'execution')
{
$execution = $this->dao->select('id,type,project')->from(TABLE_EXECUTION)->where('id')->eq($record->objectID)->fetch();
$execution = $objectList['execution'][$record->objectID];
$method = $execution->type == 'kanban' ? 'kanban' : $method;
$record->url = helper::createLink('execution', $method, "id={$record->objectID}");
$record->extraType = empty($execution->type) ? '' : $execution->type;
}
elseif($module == 'story')
{
$storyField = $this->config->edition == 'max' ? 'id,type,lib' : 'id,type';
$story = $this->dao->select($storyField)->from(TABLE_STORY)->where('id')->eq($record->objectID)->fetch();
$story = $objectList['story'][$record->objectID];
if(!empty($story->lib))
{
$module = 'assetlib';
$method = 'storyView';
}
$record->url = helper::createLink($module, $method, "id={$record->objectID}", '', false, 0, true);
$record->url = helper::createLink($module, $method, "id={$record->objectID}", '', false, 0, true);
if($this->config->vision == 'lite') $record->url = helper::createLink('projectstory', $method, "storyID={$record->objectID}", '', false, 0, true);
@@ -695,8 +733,7 @@ class searchModel extends model
}
elseif(($module == 'risk' or $module == 'opportunity') and $this->config->edition == 'max')
{
$table = $this->config->objectTables[$module];
$object = $this->dao->select('id,lib')->from($table)->where('id')->eq($record->objectID)->fetch();
$object = $objectList[$module][$record->objectID];
if(!empty($object->lib))
{
$method = $module == 'risk' ? 'riskView' : 'opportunityView';
@@ -707,7 +744,7 @@ class searchModel extends model
}
elseif($module == 'doc' and $this->config->edition == 'max')
{
$doc = $this->dao->select('id,assetLib,assetLibType')->from(TABLE_DOC)->where('id')->eq($record->objectID)->fetch();
$doc = $objectList['doc'][$record->objectID];
if(!empty($doc->assetLib))
{
$module = 'assetlib';
@@ -722,7 +759,7 @@ class searchModel extends model
}
}
return $this->checkPriv($results);
return $results;
}
/**
@@ -855,10 +892,11 @@ class searchModel extends model
* Check product and project priv.
*
* @param array $results
* @param array $objectPairs
* @access public
* @return array
*/
public function checkPriv($results)
public function checkPriv($results, $objectPairs = array())
{
if($this->app->user->admin) return $results;
@@ -870,7 +908,10 @@ class searchModel extends model
$objectPairs = array();
$total = count($results);
foreach($results as $record) $objectPairs[$record->objectType][$record->objectID] = $record->id;
if(empty($objectPairs))
{
foreach($results as $record) $objectPairs[$record->objectType][$record->objectID] = $record->id;
}
foreach($objectPairs as $objectType => $objectIdList)
{
@@ -878,7 +919,7 @@ class searchModel extends model
$objectExecutions = array();
if(!isset($this->config->objectTables[$objectType])) continue;
$table = $this->config->objectTables[$objectType];
if(strpos(',bug,case,productplan,release,story,testtask,', ",$objectType,") !== false)
if(strpos(',bug,case,testcase,productplan,release,story,testtask,', ",$objectType,") !== false)
{
$objectProducts = $this->dao->select('id,product')->from($table)->where('id')->in(array_keys($objectIdList))->fetchGroup('product', 'id');
}
+15
View File
@@ -530,6 +530,8 @@ class upgradeModel extends model
break;
case '17_3':
$this->processBugLinkBug();
case '17_4':
$this->changeSearchTableEngine();
}
$this->deletePatch();
@@ -6735,4 +6737,17 @@ class upgradeModel extends model
return !dao::isError();
}
/**
* Change search table engine.
*
* @access public
* @return void
*/
public function changeSearchTableEngine()
{
$mysqlVersion = $this->loadModel('install')->getMysqlVersion();
if($mysqlVersion >= 5.6) $this->dao->exec("ALTER TABLE " . TABLE_SEARCHINDEX . " ENGINE='InnoDB'");
return true;
}
}