This fails because when the field is being concatenated like
`a`.`first_name`='x' OR`a`.`last_name`='x'
The lack of a space between OR and `a` is fugly but it
is parsed by mysql. However, when the value requires utf8mb4
to be supported to do the comparison it returns '0=1' if the
database does not support utf8mb (or it thinks it doesn't per
0 = 1 OR0 = 1
foreach ($clause[1] as $subclause) {
$sql_subclauses[] = $this->treeWalkClauses($subclause, $type, $depth + 1);
}
- return '(' . implode("\n" . $clause[0], $sql_subclauses) . ')';
+ return '(' . implode("\n" . $clause[0] . ' ', $sql_subclauses) . ')';
}
case 'NOT':
$this->assertEquals(['Student'], $result['Contact_RelationshipCache_Contact_01.contact_sub_type:label']);
}
+ /**
+ * @throws \API_Exception
+ */
+ public function testOrClause(): void {
+ Contact::get()
+ ->addClause('OR', ['first_name', '=', '🚂'], ['last_name', '=', '🚂'])
+ ->setCheckPermissions(FALSE)
+ ->execute();
+ }
+
}