From 0a1bb97a2f84de32991684ee80250a99e3c2231d Mon Sep 17 00:00:00 2001 From: kay delaney <45561153+kaydelaney@users.noreply.github.com> Date: Tue, 2 Jul 2019 09:06:04 +0100 Subject: [PATCH] Loki: getHighlighterExpressionsFromQuery Returns null if filter term is not quoted (#17852) Closes #17687 --- .../app/plugins/datasource/loki/query_utils.test.ts | 8 ++++++++ public/app/plugins/datasource/loki/query_utils.ts | 11 +++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/public/app/plugins/datasource/loki/query_utils.test.ts b/public/app/plugins/datasource/loki/query_utils.test.ts index 964f8678a79..fc23ca2eef3 100644 --- a/public/app/plugins/datasource/loki/query_utils.test.ts +++ b/public/app/plugins/datasource/loki/query_utils.test.ts @@ -71,17 +71,25 @@ describe('getHighlighterExpressionsFromQuery', () => { it('returns no expressions for empty query', () => { expect(getHighlighterExpressionsFromQuery('')).toEqual([]); }); + it('returns a single expressions for legacy query', () => { expect(getHighlighterExpressionsFromQuery('{} x')).toEqual(['(?i)x']); expect(getHighlighterExpressionsFromQuery('{foo="bar"} x')).toEqual(['(?i)x']); }); + it('returns an expression for query with filter', () => { expect(getHighlighterExpressionsFromQuery('{foo="bar"} |= "x"')).toEqual(['x']); }); + it('returns expressions for query with filter chain', () => { expect(getHighlighterExpressionsFromQuery('{foo="bar"} |= "x" |~ "y"')).toEqual(['x', 'y']); }); + it('returns drops expressions for query with negative filter chain', () => { expect(getHighlighterExpressionsFromQuery('{foo="bar"} |= "x" != "y"')).toEqual(['x']); }); + + it('returns null if filter term is not wrapped in double quotes', () => { + expect(getHighlighterExpressionsFromQuery('{foo="bar"} |= x')).toEqual(null); + }); }); diff --git a/public/app/plugins/datasource/loki/query_utils.ts b/public/app/plugins/datasource/loki/query_utils.ts index 54fcca8809a..b4f6e31f358 100644 --- a/public/app/plugins/datasource/loki/query_utils.ts +++ b/public/app/plugins/datasource/loki/query_utils.ts @@ -59,12 +59,19 @@ export function getHighlighterExpressionsFromQuery(input: string): string[] { if (filterEnd === -1) { filterTerm = expression.trim(); } else { - filterTerm = expression.substr(0, filterEnd); + filterTerm = expression.substr(0, filterEnd).trim(); expression = expression.substr(filterEnd); } // Unwrap the filter term by removing quotes - results.push(filterTerm.replace(/^\s*"/g, '').replace(/"\s*$/g, '')); + const quotedTerm = filterTerm.match(/^"((?:[^\\"]|\\")*)"$/); + + if (quotedTerm) { + const unwrappedFilterTerm = quotedTerm[1]; + results.push(unwrappedFilterTerm); + } else { + return null; + } } return results; }