import fs from 'fs'; import path from 'path'; import PostgresSQL from 'src/parser/pgsql'; import { CaretPosition, EntityContextType } from 'src/parser/common/basic-parser-types'; const syntaxSql = fs.readFileSync( path.join(__dirname, 'fixtures', 'multipleStatement.sql'), 'utf-8' ); describe('PgSQL Multiple Statements Syntax Suggestion', () => { const parser = new PostgresSQL(); test('Create table ', () => { const pos: CaretPosition = { lineNumber: 1, column: 14, }; const syntaxes = parser.getSuggestionAtCaretPosition(syntaxSql, pos)?.syntax; const suggestion = syntaxes?.find( (syn) => syn.syntaxContextType === EntityContextType.TABLE_CREATE ); expect(suggestion).not.toBeUndefined(); expect(suggestion?.wordRanges.map((token) => token.text)).toEqual([]); }); test('Select from table or view', () => { const pos: CaretPosition = { lineNumber: 9, column: 18, }; const syntaxes = parser.getSuggestionAtCaretPosition(syntaxSql, pos)?.syntax; const suggestion = syntaxes?.find( (syn) => syn.syntaxContextType === EntityContextType.TABLE ); const suggestionVw = syntaxes?.find( (syn) => syn.syntaxContextType === EntityContextType.VIEW ); expect(suggestion).not.toBeUndefined(); expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['db', '.']); expect(suggestionVw).not.toBeUndefined(); expect(suggestionVw?.wordRanges.map((token) => token.text)).toEqual(['db', '.']); }); test('Insert into table ', () => { const pos: CaretPosition = { lineNumber: 15, column: 13, }; const syntaxes = parser.getSuggestionAtCaretPosition(syntaxSql, pos)?.syntax; const suggestion = syntaxes?.find( (syn) => syn.syntaxContextType === EntityContextType.TABLE ); expect(suggestion).not.toBeUndefined(); expect(suggestion?.wordRanges.map((token) => token.text)).toEqual([]); }); test('Insert into select from table ', () => { const pos: CaretPosition = { lineNumber: 21, column: 65, }; const syntaxes = parser.getSuggestionAtCaretPosition(syntaxSql, pos)?.syntax; const suggestion = syntaxes?.find( (syn) => syn.syntaxContextType === EntityContextType.TABLE ); expect(suggestion).not.toBeUndefined(); expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['db', '.']); }); });