Page MenuHomePhabricator

D21111.diff
No OneTemporary

D21111.diff

diff --git a/src/applications/search/compiler/PhutilSearchQueryCompiler.php b/src/applications/search/compiler/PhutilSearchQueryCompiler.php
--- a/src/applications/search/compiler/PhutilSearchQueryCompiler.php
+++ b/src/applications/search/compiler/PhutilSearchQueryCompiler.php
@@ -358,7 +358,14 @@
$result['function'] = $function;
- $is_sticky = !$result['quoted'];
+ // Note that the function remains sticky across quoted terms appearing
+ // after the function term. For example, all of these terms are title
+ // terms:
+ //
+ // title:a "b c" d
+
+ $is_sticky = (!$result['quoted'] || ($token['function'] === null));
+
switch ($operator) {
case self::OPERATOR_ABSENT:
case self::OPERATOR_PRESENT:
diff --git a/src/applications/search/compiler/__tests__/PhutilSearchQueryCompilerTestCase.php b/src/applications/search/compiler/__tests__/PhutilSearchQueryCompilerTestCase.php
--- a/src/applications/search/compiler/__tests__/PhutilSearchQueryCompilerTestCase.php
+++ b/src/applications/search/compiler/__tests__/PhutilSearchQueryCompilerTestCase.php
@@ -185,6 +185,14 @@
array(null, $op_and, 'x'),
),
+ // Functions like "title:" continue to stick across quotes if the
+ // quotes aren't the initial argument.
+ 'title:a "b c" d' => array(
+ array('title', $op_and, 'a'),
+ array('title', $op_and, 'b c'),
+ array('title', $op_and, 'd'),
+ ),
+
// These queries require a field be both present and absent, which is
// impossible.
'title:- title:x' => false,

File Metadata

Mime Type
text/plain
Expires
Wed, Oct 16, 3:16 PM (1 d, 14 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6717986
Default Alt Text
D21111.diff (1 KB)

Event Timeline