* @return array query+params array
*/
function getQuery() {
-
-
$qpa = db_construct_qpa () ;
if (forge_get_config('use_fti')) {
- $qpa = db_construct_qpa ($qpa,
- 'SELECT DISTINCT x.* FROM (SELECT artifact.artifact_id, artifact.group_artifact_id, artifact.summary, artifact.open_date, users.realname, artifact_group_list.name, (ts_rank(artifact_idx.vectors, q)+ts_rank(artifact_message_idx.vectors, q)) AS rank FROM artifact LEFT OUTER JOIN artifact_message USING (artifact_id), users, artifact_group_list, to_tsquery($1) q, artifact_idx, artifact_message_idx WHERE users.user_id = artifact.submitted_by AND artifact_idx.artifact_id = artifact.artifact_id AND artifact_message_idx.id = artifact_message.id AND artifact_message_idx.artifact_id = artifact_message_idx.artifact_id AND artifact_group_list.group_artifact_id = artifact.group_artifact_id AND artifact_group_list.group_id = $2 ',
- array ($this->getFTIwords(),
- $this->groupId)) ;
- $tsmatch = "(artifact_idx.vectors @@ q OR artifact_message_idx.vectors @@ q)";
- $phraseOp = $this->getOperator();
+ $words = $this->getFTIwords();
if (count($this->phrases)) {
$qpa = db_construct_qpa ($qpa,
- 'AND ((') ;
- $qpa = $this->addMatchCondition($qpa, 'artifact.details');
+ 'SELECT x.* FROM (SELECT artifact.artifact_id, artifact.group_artifact_id, artifact.summary, artifact.open_date, users.realname, artifact.summary||$1||artifact.details||$1||coalesce(ff_string_agg(artifact_message.body), $1) as full_string_agg, artifact_idx.vectors FROM artifact LEFT OUTER JOIN artifact_message USING (artifact_id), users, artifact_group_list, artifact_idx WHERE users.user_id = artifact.submitted_by AND artifact.group_artifact_id = artifact_group_list.group_artifact_id AND artifact_group_list.group_id = $2 ',
+ array ($this->field_separator, $this->groupId)) ;
+
+ if ($this->sections != SEARCH__ALL_SECTIONS) {
+ $qpa = db_construct_qpa ($qpa,
+ 'AND artifact_group_list.group_artifact_id = ANY ($1) ',
+ array (db_int_array_to_any_clause ($this->sections))) ;
+ }
+
$qpa = db_construct_qpa ($qpa,
- ') OR (') ;
- $qpa = $this->addMatchCondition($qpa, 'artifact.summary');
+ ' AND artifact.artifact_id = artifact_idx.artifact_id AND vectors @@ to_tsquery($1) GROUP BY artifact.artifact_id, artifact.group_artifact_id, artifact.summary, artifact.open_date, users.realname, artifact.details, vectors) AS x WHERE ',
+ array ($words)) ;
+ $qpa = $this->addMatchCondition ($qpa, 'full_string_agg') ;
$qpa = db_construct_qpa ($qpa,
- ') OR (') ;
- $qpa = $this->addMatchCondition($qpa, 'artifact_message.body');
+ ' ORDER BY ts_rank(vectors, to_tsquery($1)) DESC',
+ array($words)) ;
+ } else {
$qpa = db_construct_qpa ($qpa,
- ')) ') ;
- }
- if ($this->sections != SEARCH__ALL_SECTIONS) {
- $qpa = db_construct_qpa ($qpa,
- 'AND artifact_group_list.group_artifact_id = ANY ($1) ',
- array( db_int_array_to_any_clause ($this->sections))) ;
- }
- if (!$this->showNonPublic) {
+ 'SELECT artifact.artifact_id, artifact.group_artifact_id, artifact.summary, artifact.open_date, users.realname, artifact_idx.vectors FROM artifact, users, artifact_group_list, artifact_idx WHERE users.user_id = artifact.submitted_by AND artifact.group_artifact_id = artifact_group_list.group_artifact_id AND artifact_group_list.group_id = $1 ',
+ array ($this->groupId)) ;
+
+ if ($this->sections != SEARCH__ALL_SECTIONS) {
+ $qpa = db_construct_qpa ($qpa,
+ 'AND artifact_group_list.group_artifact_id = ANY ($1) ',
+ array (db_int_array_to_any_clause ($this->sections))) ;
+ }
+
$qpa = db_construct_qpa ($qpa,
- 'AND artifact_group_list.is_public = 1 ') ;
+ 'AND artifact.artifact_id = artifact_idx.artifact_id AND vectors @@ to_tsquery($1) ORDER BY ts_rank(vectors, to_tsquery($1)) DESC',
+ array ($words)) ;
}
- $qpa = db_construct_qpa ($qpa,
- ') x') ;
- $qpa = db_construct_qpa ($qpa,
- 'ORDER BY rank DESC') ;
+
} else {
$qpa = db_construct_qpa ($qpa,
- 'SELECT DISTINCT artifact.artifact_id, artifact.group_artifact_id, artifact.summary, artifact.open_date, users.realname, artifact_group_list.name FROM artifact LEFT OUTER JOIN artifact_message USING (artifact_id), users, artifact_group_list WHERE users.user_id = artifact.submitted_by AND artifact_group_list.group_artifact_id = artifact.group_artifact_id AND artifact_group_list.group_id = $1 ',
- array ($this->groupId)) ;
+ 'SELECT x.* FROM (SELECT artifact.artifact_id, artifact.group_artifact_id, artifact.summary, artifact.open_date, users.realname, artifact.summary||$1||artifact.details||$1||coalesce(ff_string_agg(artifact_message.body), $1) as full_string_agg FROM artifact LEFT OUTER JOIN artifact_message USING (artifact_id), users, artifact_group_list WHERE users.user_id = artifact.submitted_by AND artifact.group_artifact_id = artifact_group_list.group_artifact_id AND artifact_group_list.group_id = $2 ',
+ array ($this->field_separator, $this->groupId)) ;
+
if ($this->sections != SEARCH__ALL_SECTIONS) {
$qpa = db_construct_qpa ($qpa,
'AND artifact_group_list.group_artifact_id = ANY ($1) ',
- array(db_int_array_to_any_clause ($this->sections))) ;
- }
- if (!$this->showNonPublic) {
- $qpa = db_construct_qpa ($qpa,
- 'AND artifact_group_list.is_public = 1 ') ;
+ array (db_int_array_to_any_clause ($this->sections))) ;
}
$qpa = db_construct_qpa ($qpa,
- ' AND ((') ;
- $qpa = $this->addIlikeCondition ($qpa, 'artifact.details') ;
+ 'GROUP BY artifact.artifact_id, artifact.group_artifact_id, artifact.summary, artifact.open_date, users.realname, artifact.details) AS x WHERE ',
+ array ()) ;
+ $qpa = $this->addIlikeCondition ($qpa, 'full_string_agg') ;
$qpa = db_construct_qpa ($qpa,
- ') OR (') ;
- $qpa = $this->addIlikeCondition ($qpa, 'artifact.summary') ;
- $qpa = db_construct_qpa ($qpa,
- ') OR (') ;
- $qpa = $this->addIlikeCondition ($qpa, 'artifact_message.body') ;
- $qpa = db_construct_qpa ($qpa,
- ')) ORDER BY artifact_group_list.name, artifact.artifact_id') ;
+ ' ORDER BY artifact_id') ;
}
+
return $qpa ;
}
*/
static function getSections($groupId, $showNonPublic=false) {
$sql = 'SELECT group_artifact_id, name FROM artifact_group_list WHERE group_id = $1';
- if (!$showNonPublic) {
- $sql .= ' AND artifact_group_list.is_public = 1';
- }
$sql .= ' ORDER BY name';
$res = db_query_params ($sql,
array ($groupId));
$sections = array();
while($data = db_fetch_array($res)) {
- $sections[$data['group_artifact_id']] = $data['name'];
+ if (forge_check_perm('tracker',$data['group_artifact_id'],'read')) {
+ $sections[$data['group_artifact_id']] = $data['name'];
+ }
}
return $sections;
}