1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-26 08:42:41 +01:00

Update Phabricator to use intermediate tokens from the query compiler

Summary:
Depends on D17669. Ref T12137. Ref T12003. Ref T2632. Ref T7860.

Converts Phabricator to the new parse + compile workflow with intermediate tokens.

Also fixes a bug where searches for `cat"` or similar (unmatched quotes) wouldn't produce a nice exception.

Test Plan:
  - Fulltext searched.
  - Fulltext searched in Conpherence.
  - Fulltext searched with bad syntax.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T12137, T12003, T7860, T2632

Differential Revision: https://secure.phabricator.com/D17670
This commit is contained in:
epriestley 2017-04-12 15:35:18 -07:00
parent 4bf968148c
commit cb49acc2ca
3 changed files with 11 additions and 6 deletions

View file

@ -56,9 +56,9 @@ final class ConpherenceFulltextQuery
} }
if (strlen($this->fulltext)) { if (strlen($this->fulltext)) {
$compiled_query = PhabricatorSearchDocument::newQueryCompiler() $compiler = PhabricatorSearchDocument::newQueryCompiler();
->setQuery($this->fulltext) $tokens = $compiler->newTokens($this->fulltext);
->compileQuery(); $compiled_query = $compiler->compileQuery($tokens);
$where[] = qsprintf( $where[] = qsprintf(
$conn_r, $conn_r,

View file

@ -398,12 +398,13 @@ final class PhabricatorMySQLFulltextStorageEngine
$stemmer = new PhutilSearchStemmer(); $stemmer = new PhutilSearchStemmer();
$compiler = PhabricatorSearchDocument::newQueryCompiler() $compiler = PhabricatorSearchDocument::newQueryCompiler()
->setQuery($raw_query)
->setStemmer($stemmer); ->setStemmer($stemmer);
$tokens = $compiler->newTokens($raw_query);
$queries = array(); $queries = array();
$queries[] = $compiler->compileLiteralQuery(); $queries[] = $compiler->compileLiteralQuery($tokens);
$queries[] = $compiler->compileStemmedQuery(); $queries[] = $compiler->compileStemmedQuery($tokens);
return implode(' ', array_filter($queries)); return implode(' ', array_filter($queries));
} }

View file

@ -253,6 +253,10 @@ class PhabricatorSearchService
$res = $engine->executeSearch($query); $res = $engine->executeSearch($query);
// return immediately if we get results // return immediately if we get results
return $res; return $res;
} catch (PhutilSearchQueryCompilerSyntaxException $ex) {
// If there's a query compilation error, return it directly to the
// user: they issued a query with bad syntax.
throw $ex;
} catch (Exception $ex) { } catch (Exception $ex) {
$exceptions[] = $ex; $exceptions[] = $ex;
} }