Skip to content

Commit 6d2097e

Browse files
KQL removes leading zero and breaks query (#62748) (#64400)
* KQL removes leading zero and breaks query * correctly parse numbers started from '.' Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com> Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com>
1 parent 3c62a6f commit 6d2097e

File tree

3 files changed

+32
-7
lines changed

3 files changed

+32
-7
lines changed

src/plugins/data/common/es_query/kuery/ast/_generated_/kuery.js

Lines changed: 3 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/plugins/data/common/es_query/kuery/ast/ast.test.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,33 @@ describe('kuery AST API', () => {
278278
expect(fromLiteralExpression('true')).toEqual(booleanTrueLiteral);
279279
expect(fromLiteralExpression('false')).toEqual(booleanFalseLiteral);
280280
expect(fromLiteralExpression('42')).toEqual(numberLiteral);
281+
282+
expect(fromLiteralExpression('.3').value).toEqual(0.3);
283+
expect(fromLiteralExpression('.36').value).toEqual(0.36);
284+
expect(fromLiteralExpression('.00001').value).toEqual(0.00001);
285+
expect(fromLiteralExpression('3').value).toEqual(3);
286+
expect(fromLiteralExpression('-4').value).toEqual(-4);
287+
expect(fromLiteralExpression('0').value).toEqual(0);
288+
expect(fromLiteralExpression('0.0').value).toEqual(0);
289+
expect(fromLiteralExpression('2.0').value).toEqual(2.0);
290+
expect(fromLiteralExpression('0.8').value).toEqual(0.8);
291+
expect(fromLiteralExpression('790.9').value).toEqual(790.9);
292+
expect(fromLiteralExpression('0.0001').value).toEqual(0.0001);
293+
expect(fromLiteralExpression('96565646732345').value).toEqual(96565646732345);
294+
295+
expect(fromLiteralExpression('..4').value).toEqual('..4');
296+
expect(fromLiteralExpression('.3text').value).toEqual('.3text');
297+
expect(fromLiteralExpression('text').value).toEqual('text');
298+
expect(fromLiteralExpression('.').value).toEqual('.');
299+
expect(fromLiteralExpression('-').value).toEqual('-');
300+
expect(fromLiteralExpression('001').value).toEqual('001');
301+
expect(fromLiteralExpression('00.2').value).toEqual('00.2');
302+
expect(fromLiteralExpression('0.0.1').value).toEqual('0.0.1');
303+
expect(fromLiteralExpression('3.').value).toEqual('3.');
304+
expect(fromLiteralExpression('--4').value).toEqual('--4');
305+
expect(fromLiteralExpression('-.4').value).toEqual('-.4');
306+
expect(fromLiteralExpression('-0').value).toEqual('-0');
307+
expect(fromLiteralExpression('00949').value).toEqual('00949');
281308
});
282309

283310
test('should allow escaping of special characters with a backslash', () => {

src/plugins/data/common/es_query/kuery/ast/kuery.peg

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,8 @@ UnquotedLiteral
247247
if (sequence === 'true') return buildLiteralNode(true);
248248
if (sequence === 'false') return buildLiteralNode(false);
249249
if (chars.includes(wildcardSymbol)) return buildWildcardNode(sequence);
250-
const number = Number(sequence);
251-
const value = isNaN(number) ? sequence : number;
252-
return buildLiteralNode(value);
250+
const isNumberPattern = /^(-?[1-9]+\d*([.]\d+)?)$|^(-?0[.]\d*[1-9]+)$|^0$|^0.0$|^[.]\d{1,}$/
251+
return buildLiteralNode(isNumberPattern.test(sequence) ? Number(sequence) : sequence);
253252
}
254253

255254
UnquotedCharacter

0 commit comments

Comments
 (0)