Changeset View
Changeset View
Standalone View
Standalone View
src/search/PhutilSearchQueryCompiler.php
Show First 20 Lines • Show All 265 Lines • ▼ Show 20 Lines | private function tokenizeQuery($query) { | ||||
foreach ($tokens as $token) { | foreach ($tokens as $token) { | ||||
$value = implode('', $token['value']); | $value = implode('', $token['value']); | ||||
$operator_string = implode('', $token['operator']); | $operator_string = implode('', $token['operator']); | ||||
if (!strlen($value)) { | if (!strlen($value)) { | ||||
continue; | continue; | ||||
} | } | ||||
$is_quoted = $token['quoted']; | |||||
switch ($operator_string) { | switch ($operator_string) { | ||||
case '-': | case '-': | ||||
$operator = self::OPERATOR_NOT; | $operator = self::OPERATOR_NOT; | ||||
break; | break; | ||||
case '~': | case '~': | ||||
$operator = self::OPERATOR_SUBSTRING; | $operator = self::OPERATOR_SUBSTRING; | ||||
break; | break; | ||||
case '=': | case '=': | ||||
$operator = self::OPERATOR_EXACT; | $operator = self::OPERATOR_EXACT; | ||||
break; | break; | ||||
case '': | |||||
case '+': | case '+': | ||||
$operator = self::OPERATOR_AND; | $operator = self::OPERATOR_AND; | ||||
break; | break; | ||||
case '': | |||||
// See T12995. If this query term contains Chinese, Japanese or | |||||
// Korean characters, treat the term as a substring term by default. | |||||
// These languages do not separate words with spaces, so the term | |||||
// search mode is normally useless. | |||||
if ($enable_functions && !$is_quoted && phutil_utf8_is_cjk($value)) { | |||||
$operator = self::OPERATOR_SUBSTRING; | |||||
} else { | |||||
$operator = self::OPERATOR_AND; | |||||
} | |||||
break; | |||||
default: | default: | ||||
throw new PhutilSearchQueryCompilerSyntaxException( | throw new PhutilSearchQueryCompilerSyntaxException( | ||||
pht( | pht( | ||||
'Query has an invalid sequence of operators ("%s").', | 'Query has an invalid sequence of operators ("%s").', | ||||
$operator_string)); | $operator_string)); | ||||
} | } | ||||
$result = array( | $result = array( | ||||
'operator' => $operator, | 'operator' => $operator, | ||||
'quoted' => $token['quoted'], | 'quoted' => $is_quoted, | ||||
'value' => $value, | 'value' => $value, | ||||
); | ); | ||||
if ($enable_functions) { | if ($enable_functions) { | ||||
$result['function'] = $token['function']; | $result['function'] = $token['function']; | ||||
} | } | ||||
$results[] = $result; | $results[] = $result; | ||||
▲ Show 20 Lines • Show All 57 Lines • Show Last 20 Lines |