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 | |||||