Commit ef867e8d448ae57ebb37b1174a66fc7dacf3e7fd

Authored by kevin_fourie
1 parent 66c803e7

Merged in from STABLE trunk...

KTS-3679
"Metadata IS NOT search returning matches"
Fixed. Catered for when no values are provided for fields.

Committed By: Conrad Vermeulen
Reviewed By: Megan Watson


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/STABLE/branches/3.5.3a-Release-Branch@9322 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing 1 changed file with 13 additions and 2 deletions
search2/search/expr.inc.php
... ... @@ -1075,19 +1075,30 @@ class SQLQueryBuilder implements QueryBuilder
1075 1075 {
1076 1076 $left = $expr->left();
1077 1077 $right = $expr->right();
  1078 + $isNot = $expr->not();
1078 1079 if ($left->isMetadataField())
1079 1080 {
1080 1081 $offset = $this->resolveMetadataOffset($expr) + 1;
1081 1082  
1082 1083 $fieldset = $left->getField();
1083   - $query = '(' . "df$offset.name='$fieldset' AND " . $right->getSQL($left, "dfl$offset.value", $expr->op(), $expr->not()) . ')';
  1084 + $query = '(';
  1085 +
  1086 + if ($isNot)
  1087 + {
  1088 + $query .= "df$offset.name IS NULL OR ";
  1089 + }
  1090 +
  1091 + $query .= '(' . "df$offset.name='$fieldset' AND " . $right->getSQL($left, "dfl$offset.value", $expr->op(), $isNot) . ')';
  1092 +
  1093 +
  1094 + $query .= ')';
1084 1095  
1085 1096 }
1086 1097 else
1087 1098 {
1088 1099 $fieldname = $this->getFieldnameFromExpr($expr);
1089 1100  
1090   - $query = $right->getSQL($left, $left->modifyName($fieldname), $expr->op(), $expr->not());;
  1101 + $query = $right->getSQL($left, $left->modifyName($fieldname), $expr->op(), $isNot);
1091 1102 }
1092 1103 return $query;
1093 1104 }
... ...