From dbfa943527899a9477aa843cd054d935075bf9ae Mon Sep 17 00:00:00 2001 From: cccs-jc Date: Tue, 18 Jan 2022 17:16:57 +0000 Subject: [PATCH] fix bug completing functions function did not complete with a SELECT * FROM TAB1 WHERE func1 it did work for cases where the columns are declared in the select SELECT a,b FROM TAB1 WHERE func1 it now works with select star also --- packages/server/src/complete.ts | 10 ++++++++++ packages/server/test/complete.test.ts | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/packages/server/src/complete.ts b/packages/server/src/complete.ts index d7c0d36e..d47f9403 100644 --- a/packages/server/src/complete.ts +++ b/packages/server/src/complete.ts @@ -592,6 +592,16 @@ class Completer { if (logger.isDebugEnabled()) logger.debug(JSON.stringify(columnRef)) return columnRef } + else if (columns.type == 'star') { + if (ast.type === 'select' && ast.where?.expression) { + // columns in where clause + const columnRefs = [ast.where.expression] + // column at position + const columnRef = this.getColumnRefByPos(columnRefs) + if (logger.isDebugEnabled()) logger.debug(JSON.stringify(columnRef)) + return columnRef + } + } return undefined } diff --git a/packages/server/test/complete.test.ts b/packages/server/test/complete.test.ts index 2d5a09ab..fe51ef93 100644 --- a/packages/server/test/complete.test.ts +++ b/packages/server/test/complete.test.ts @@ -169,6 +169,26 @@ describe('on blank space', () => { ] expect(result.candidates).toEqual(expect.arrayContaining(expected)) }) + + test("complete function inside WHERE select star", () => { + const result = complete('SELECT * FROM tab1 WHERE arr', { line: 0, column: 28 }, SIMPLE_SCHEMA) + expect(result.candidates.length).toEqual(2) // TODO whare are they? + let expected = [ + expect.objectContaining({ label: 'array_concat()' }), + expect.objectContaining({ label: 'array_contains()' }), + ] + expect(result.candidates).toEqual(expect.arrayContaining(expected)) + }) + + test("complete function inside WHERE", () => { + const result = complete('SELECT col1 FROM tab1 WHERE arr', { line: 0, column: 31 }, SIMPLE_SCHEMA) + expect(result.candidates.length).toEqual(2) // TODO whare are they? + let expected = [ + expect.objectContaining({ label: 'array_concat()' }), + expect.objectContaining({ label: 'array_contains()' }), + ] + expect(result.candidates).toEqual(expect.arrayContaining(expected)) + }) }) describe('TableName completion', () => {