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,19 +1075,30 @@ class SQLQueryBuilder implements QueryBuilder
1075 { 1075 {
1076 $left = $expr->left(); 1076 $left = $expr->left();
1077 $right = $expr->right(); 1077 $right = $expr->right();
  1078 + $isNot = $expr->not();
1078 if ($left->isMetadataField()) 1079 if ($left->isMetadataField())
1079 { 1080 {
1080 $offset = $this->resolveMetadataOffset($expr) + 1; 1081 $offset = $this->resolveMetadataOffset($expr) + 1;
1081 1082
1082 $fieldset = $left->getField(); 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 else 1097 else
1087 { 1098 {
1088 $fieldname = $this->getFieldnameFromExpr($expr); 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 return $query; 1103 return $query;
1093 } 1104 }