Commit 2d9c2222cc9d9c38de8344e2d76e0b795bf94534
1 parent
4a0ad2ff
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/trunk@9309 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 | } | ... | ... |