diff --git a/.eslintrc b/.eslintrc index 82e445b7..7a1f7074 100644 --- a/.eslintrc +++ b/.eslintrc @@ -6,7 +6,7 @@ "src/autocomplete/databases/*/generated/**/*", "src/autocomplete/databases/*/grammar/**/*" ], - "plugins": ["filenames"], + "plugins": ["filenames", "import"], "rules": { "array-callback-return": "off", "consistent-return": "off", @@ -23,6 +23,26 @@ {"blankLine": "always", "prev": "*", "next": "function"}, {"blankLine": "always", "prev": "export", "next": "*"}, {"blankLine": "always", "prev": "*", "next": "export"} - ] + ], + "import/no-restricted-paths": ["error", { + "zones": [ + { + "target": "./src/autocomplete/databases/clickhouse/**/*", + "from": "./src/autocomplete/databases/!(clickhouse)/**/*" + }, + { + "target": "./src/autocomplete/databases/mysql/**/*", + "from": "./src/autocomplete/databases/!(mysql)/**/*" + }, + { + "target": "./src/autocomplete/databases/postgresql/**/*", + "from": "./src/autocomplete/databases/!(postgresql)/**/*" + }, + { + "target": "./src/autocomplete/databases/yql/**/*", + "from": "./src/autocomplete/databases/!(yql)/**/*" + }, + ] + }] } } diff --git a/.gitignore b/.gitignore index 98b9e006..75c30d74 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ node_modules # Artifacts dist +dist-types .ds_store diff --git a/build.js b/build.js index 2341853c..4540c967 100644 --- a/build.js +++ b/build.js @@ -1,12 +1,16 @@ import {build} from 'esbuild'; +const databases = ['clickhouse', 'mysql', 'postgresql', 'yql']; + build({ - entryPoints: ['src/index.ts'], external: ['antlr4ng', 'antlr4-c3'], bundle: true, minify: true, keepNames: true, format: 'esm', - outfile: 'dist/index.js', tsconfig: './tsconfig.build.json', + entryPoints: databases.map((database) => `src/autocomplete/databases/${database}/index.ts`), + outbase: 'src/autocomplete/databases', + outdir: 'dist/databases', + splitting: true, }); diff --git a/package-lock.json b/package-lock.json index 4317e186..b52e8258 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "antlr4ng-cli": "^2.0.0", "esbuild": "^0.20.0", "eslint-plugin-filenames": "^1.3.2", + "eslint-plugin-import": "^2.29.1", "husky": "^8.0.3", "jest": "^29.7.0", "nano-staged": "^0.8.0", diff --git a/package.json b/package.json index 22cda63c..9ccac966 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,31 @@ "files": [ "dist/*" ], - "main": "./dist/index.js", - "types": "./dist/index.d.ts", + "exports": { + "./clickhouse": "./dist/databases/clickhouse/index.js", + "./mysql": "./dist/databases/mysql/index.js", + "./postgresql": "./dist/databases/postgresql/index.js", + "./yql": "./dist/databases/yql/index.js" + }, + "typesVersions": { + "*": { + "clickhouse": [ + "./dist/types/databases/clickhouse/index.d.ts" + ], + "mysql": [ + "./dist/types/databases/mysql/index.d.ts" + ], + "yql": [ + "./dist/types/databases/yql/index.d.ts" + ], + "postgresql": [ + "./dist/types/databases/postgresql/index.d.ts" + ], + "shared": [ + "./dist/types/shared/index.d.ts" + ] + } + }, "engines": { "node": ">=16.0" }, @@ -33,7 +56,7 @@ "generate:clickhouse": "rimraf src/autocomplete/databases/clickhouse/generated && antlr4ng -Dlanguage=TypeScript -o src/autocomplete/databases/clickhouse/generated/ -visitor -no-listener -Xexact-output-dir src/autocomplete/databases/clickhouse/grammar/ClickHouseLexer.g4 src/autocomplete/databases/clickhouse/grammar/ClickHouseParser.g4 && bash scripts/patch-generated.sh clickhouse", "generate:yql": "rimraf src/autocomplete/databases/yql/generated && antlr4ng -Dlanguage=TypeScript -o src/autocomplete/databases/yql/generated/ -visitor -no-listener -Xexact-output-dir src/autocomplete/databases/yql/grammar/YQL.g4 && bash scripts/patch-generated.sh yql", "test": "node --experimental-vm-modules ./node_modules/.bin/jest --verbose src", - "build": "rimraf dist && node build.js && tsc -p tsconfig.build.json", + "build": "rimraf dist && node build.js && tsc -p tsconfig.build.json --declarationDir dist/types", "prepublishOnly": "npm run build" }, "devDependencies": { @@ -49,6 +72,7 @@ "antlr4ng-cli": "^2.0.0", "esbuild": "^0.20.0", "eslint-plugin-filenames": "^1.3.2", + "eslint-plugin-import": "^2.29.1", "husky": "^8.0.3", "jest": "^29.7.0", "nano-staged": "^0.8.0", diff --git a/src/autocomplete/autocomplete.ts b/src/autocomplete/autocomplete.ts deleted file mode 100644 index f8d9dc75..00000000 --- a/src/autocomplete/autocomplete.ts +++ /dev/null @@ -1,236 +0,0 @@ -import { - AutocompleteResultBase, - ClickHouseAutocompleteResult, - CursorPosition, - EnrichAutocompleteResult, - GetParseTree, - KeywordSuggestion, - LexerConstructor, - MySqlAutocompleteResult, - ParserConstructor, - PostgreSqlAutocompleteResult, - YqlAutocompleteResult, -} from './autocomplete-types'; -import {postgreSqlAutocompleteData} from './databases/postgresql/postgresql-autocomplete'; -import {mySqlAutocompleteData} from './databases/mysql/mysql-autocomplete'; -import {Lexer as LexerType, ParserRuleContext, Parser as ParserType} from 'antlr4ng'; -import {TokenDictionary} from './shared/tables'; -import {createParser} from './shared/query'; -import {SqlErrorListener} from './shared/sql-error-listener'; -import * as c3 from 'antlr4-c3'; -import {findCursorTokenIndex} from './shared/cursor'; -import {clickHouseAutocompleteData} from './databases/clickhouse/clickhouse-autocomplete'; -import {yqlAutocompleteData, yqlAutocompleteDataYQ} from './databases/yql/yql-autocomplete'; - -function parseQueryWithoutCursor( - Lexer: LexerConstructor, - Parser: ParserConstructor

, - tokenDictionary: TokenDictionary, - getParseTree: GetParseTree

, - query: string, -): Pick { - const parser = createParser(Lexer, Parser, query); - const errorListener = new SqlErrorListener(tokenDictionary.SPACE); - - parser.removeErrorListeners(); - parser.addErrorListener(errorListener); - getParseTree(parser); - - return {errors: errorListener.errors}; -} - -const quotesRegex = /^'(.*)'$/; - -export function parseQuery< - A extends AutocompleteResultBase, - L extends LexerType, - P extends ParserType, ->( - Lexer: LexerConstructor, - Parser: ParserConstructor

, - tokenDictionary: TokenDictionary, - ignoredTokens: Set, - rulesToVisit: Set, - getParseTree: GetParseTree

, - enrichAutocompleteResult: EnrichAutocompleteResult, - query: string, - cursor: CursorPosition, - context?: ParserRuleContext, -): A { - const parser = createParser(Lexer, Parser, query); - const {tokenStream} = parser; - const errorListener = new SqlErrorListener(tokenDictionary.SPACE); - - parser.removeErrorListeners(); - parser.addErrorListener(errorListener); - getParseTree(parser); - - const core = new c3.CodeCompletionCore(parser); - core.ignoredTokens = ignoredTokens; - core.preferredRules = rulesToVisit; - const cursorTokenIndex = findCursorTokenIndex(tokenStream, cursor, tokenDictionary.SPACE); - - if (cursorTokenIndex === undefined) { - throw new Error( - `Could not find cursor token index for line: ${cursor.line}, column: ${cursor.column}`, - ); - } - - const suggestKeywords: KeywordSuggestion[] = []; - const {tokens, rules} = core.collectCandidates(cursorTokenIndex, context); - tokens.forEach((_, tokenType) => { - // Literal keyword names are quoted - const literalName = parser.vocabulary.getLiteralName(tokenType)?.replace(quotesRegex, '$1'); - // ClickHouse Parser does not give out literal names - const name = literalName || parser.vocabulary.getSymbolicName(tokenType); - - if (!name) { - throw new Error(`Could not get name for token ${tokenType}`); - } - - suggestKeywords.push({ - value: name, - }); - }); - - const result: AutocompleteResultBase = { - errors: errorListener.errors, - suggestKeywords, - }; - - return enrichAutocompleteResult(result, rules, tokenStream, cursorTokenIndex, cursor, query); -} - -export function parseMySqlQueryWithoutCursor( - query: string, -): Pick { - return parseQueryWithoutCursor( - mySqlAutocompleteData.Lexer, - mySqlAutocompleteData.Parser, - mySqlAutocompleteData.tokenDictionary, - mySqlAutocompleteData.getParseTree, - query, - ); -} - -export function parseMySqlQuery(query: string, cursor: CursorPosition): MySqlAutocompleteResult { - return parseQuery( - mySqlAutocompleteData.Lexer, - mySqlAutocompleteData.Parser, - mySqlAutocompleteData.tokenDictionary, - mySqlAutocompleteData.ignoredTokens, - mySqlAutocompleteData.rulesToVisit, - mySqlAutocompleteData.getParseTree, - mySqlAutocompleteData.enrichAutocompleteResult, - query, - cursor, - ); -} - -export function parsePostgreSqlQueryWithoutCursor( - query: string, -): Pick { - return parseQueryWithoutCursor( - postgreSqlAutocompleteData.Lexer, - postgreSqlAutocompleteData.Parser, - postgreSqlAutocompleteData.tokenDictionary, - postgreSqlAutocompleteData.getParseTree, - query, - ); -} - -export function parsePostgreSqlQuery( - query: string, - cursor: CursorPosition, -): PostgreSqlAutocompleteResult { - return parseQuery( - postgreSqlAutocompleteData.Lexer, - postgreSqlAutocompleteData.Parser, - postgreSqlAutocompleteData.tokenDictionary, - postgreSqlAutocompleteData.ignoredTokens, - postgreSqlAutocompleteData.rulesToVisit, - postgreSqlAutocompleteData.getParseTree, - postgreSqlAutocompleteData.enrichAutocompleteResult, - query, - cursor, - ); -} - -export function parseClickHouseQueryWithoutCursor( - query: string, -): Pick { - return parseQueryWithoutCursor( - clickHouseAutocompleteData.Lexer, - clickHouseAutocompleteData.Parser, - clickHouseAutocompleteData.tokenDictionary, - clickHouseAutocompleteData.getParseTree, - query, - ); -} - -export function parseClickHouseQuery( - query: string, - cursor: CursorPosition, -): ClickHouseAutocompleteResult { - return parseQuery( - clickHouseAutocompleteData.Lexer, - clickHouseAutocompleteData.Parser, - clickHouseAutocompleteData.tokenDictionary, - clickHouseAutocompleteData.ignoredTokens, - clickHouseAutocompleteData.rulesToVisit, - clickHouseAutocompleteData.getParseTree, - clickHouseAutocompleteData.enrichAutocompleteResult, - query, - cursor, - ); -} - -export function parseYqlQueryWithoutCursor(query: string): Pick { - return parseQueryWithoutCursor( - yqlAutocompleteData.Lexer, - yqlAutocompleteData.Parser, - yqlAutocompleteData.tokenDictionary, - yqlAutocompleteData.getParseTree, - query, - ); -} - -export function parseYqlQuery(query: string, cursor: CursorPosition): YqlAutocompleteResult { - return parseQuery( - yqlAutocompleteData.Lexer, - yqlAutocompleteData.Parser, - yqlAutocompleteData.tokenDictionary, - yqlAutocompleteData.ignoredTokens, - yqlAutocompleteData.rulesToVisit, - yqlAutocompleteData.getParseTree, - yqlAutocompleteData.enrichAutocompleteResult, - query, - cursor, - yqlAutocompleteData.context, - ); -} - -export function parseYqQueryWithoutCursor(query: string): Pick { - return parseQueryWithoutCursor( - yqlAutocompleteDataYQ.Lexer, - yqlAutocompleteDataYQ.Parser, - yqlAutocompleteDataYQ.tokenDictionary, - yqlAutocompleteDataYQ.getParseTree, - query, - ); -} - -export function parseYqQuery(query: string, cursor: CursorPosition): YqlAutocompleteResult { - return parseQuery( - yqlAutocompleteDataYQ.Lexer, - yqlAutocompleteDataYQ.Parser, - yqlAutocompleteDataYQ.tokenDictionary, - yqlAutocompleteDataYQ.ignoredTokens, - yqlAutocompleteDataYQ.rulesToVisit, - yqlAutocompleteDataYQ.getParseTree, - yqlAutocompleteDataYQ.enrichAutocompleteResult, - query, - cursor, - yqlAutocompleteDataYQ.context, - ); -} diff --git a/src/autocomplete/databases/clickhouse/clickhouse-autocomplete.ts b/src/autocomplete/databases/clickhouse/clickhouse-autocomplete.ts index 149c8315..f14315e4 100644 --- a/src/autocomplete/databases/clickhouse/clickhouse-autocomplete.ts +++ b/src/autocomplete/databases/clickhouse/clickhouse-autocomplete.ts @@ -5,12 +5,11 @@ import {ColumnAliasSymbol, TableSymbol} from '../../shared/symbol-table.js'; import { AutocompleteData, AutocompleteResultBase, - ClickHouseAutocompleteResult, CursorPosition, ISymbolTableVisitor, ProcessVisitedRulesResult, TableOrViewSuggestion, -} from '../../autocomplete-types.js'; +} from '../../shared/autocomplete-types.js'; import {ClickHouseLexer} from './generated/ClickHouseLexer.js'; import { ClickHouseParser, @@ -27,6 +26,7 @@ import { } from '../../shared/tables.js'; import {isStartingToWriteRule} from '../../shared/cursor'; import {shouldSuggestTemplates} from '../../shared/query.js'; +import {ClickHouseAutocompleteResult} from './index'; const engines = ['Null', 'Set', 'Log', 'Memory', 'TinyLog', 'StripeLog']; diff --git a/src/autocomplete/databases/clickhouse/index.ts b/src/autocomplete/databases/clickhouse/index.ts new file mode 100644 index 00000000..09fe2202 --- /dev/null +++ b/src/autocomplete/databases/clickhouse/index.ts @@ -0,0 +1,49 @@ +import { + AutocompleteResultBase, + CursorPosition, + EngineSuggestion, + TableOrViewSuggestion, +} from '../../shared/autocomplete-types'; +import {clickHouseAutocompleteData} from './clickhouse-autocomplete'; +import {parseQuery, parseQueryWithoutCursor} from '../../shared/autocomplete'; +import {separateQueryAndCursor} from '../../shared/parse-query-with-cursor'; + +export interface ClickHouseAutocompleteResult extends AutocompleteResultBase { + suggestViewsOrTables?: TableOrViewSuggestion; + suggestEngines?: EngineSuggestion; +} + +export function parseClickHouseQueryWithoutCursor( + query: string, +): Pick { + return parseQueryWithoutCursor( + clickHouseAutocompleteData.Lexer, + clickHouseAutocompleteData.Parser, + clickHouseAutocompleteData.tokenDictionary, + clickHouseAutocompleteData.getParseTree, + query, + ); +} + +export function parseClickHouseQuery( + query: string, + cursor: CursorPosition, +): ClickHouseAutocompleteResult { + return parseQuery( + clickHouseAutocompleteData.Lexer, + clickHouseAutocompleteData.Parser, + clickHouseAutocompleteData.tokenDictionary, + clickHouseAutocompleteData.ignoredTokens, + clickHouseAutocompleteData.rulesToVisit, + clickHouseAutocompleteData.getParseTree, + clickHouseAutocompleteData.enrichAutocompleteResult, + query, + cursor, + ); +} + +export function parseClickHouseQueryWithCursor( + queryWithCursor: string, +): ClickHouseAutocompleteResult { + return parseClickHouseQuery(...separateQueryAndCursor(queryWithCursor)); +} diff --git a/src/autocomplete/databases/clickhouse/tests/alter/alter.test.ts b/src/autocomplete/databases/clickhouse/tests/alter/alter.test.ts index 68c8ff0e..05e16b9f 100644 --- a/src/autocomplete/databases/clickhouse/tests/alter/alter.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/alter/alter.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; +import {parseClickHouseQueryWithCursor} from '../../index'; test('should suggest keywords after ALTER', () => { const autocompleteResult = parseClickHouseQueryWithCursor('ALTER |'); diff --git a/src/autocomplete/databases/clickhouse/tests/alter/modify-column.test.ts b/src/autocomplete/databases/clickhouse/tests/alter/modify-column.test.ts index eec53339..ecedffd0 100644 --- a/src/autocomplete/databases/clickhouse/tests/alter/modify-column.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/alter/modify-column.test.ts @@ -1,6 +1,5 @@ -import {ColumnSuggestion} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parseClickHouseQueryWithoutCursor} from '../../../../autocomplete'; +import {ColumnSuggestion} from '../../../../shared/autocomplete-types'; +import {parseClickHouseQueryWithCursor, parseClickHouseQueryWithoutCursor} from '../../index'; test('should suggest table name after MODIFY COLUMN', () => { const autocompleteResult = parseClickHouseQueryWithCursor( diff --git a/src/autocomplete/databases/clickhouse/tests/alter/rename-column.test.ts b/src/autocomplete/databases/clickhouse/tests/alter/rename-column.test.ts index d6509d27..554729a7 100644 --- a/src/autocomplete/databases/clickhouse/tests/alter/rename-column.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/alter/rename-column.test.ts @@ -1,6 +1,5 @@ -import {ColumnSuggestion, KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parseClickHouseQueryWithoutCursor} from '../../../../autocomplete'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parseClickHouseQueryWithCursor, parseClickHouseQueryWithoutCursor} from '../../index'; test('should suggest table name after RENAME COLUMN', () => { const autocompleteResult = parseClickHouseQueryWithCursor( diff --git a/src/autocomplete/databases/clickhouse/tests/create/create-database.test.ts b/src/autocomplete/databases/clickhouse/tests/create/create-database.test.ts index ed0df8cd..b271b806 100644 --- a/src/autocomplete/databases/clickhouse/tests/create/create-database.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/create/create-database.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parseClickHouseQueryWithCursor} from '../../index'; test('should suggest properly after DATABASE', () => { const autocompleteResult = parseClickHouseQueryWithCursor('CREATE DATABASE |'); diff --git a/src/autocomplete/databases/clickhouse/tests/create/create-table.test.ts b/src/autocomplete/databases/clickhouse/tests/create/create-table.test.ts index 8932badc..929650a9 100644 --- a/src/autocomplete/databases/clickhouse/tests/create/create-table.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/create/create-table.test.ts @@ -1,5 +1,5 @@ -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseClickHouseQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after TABLE', () => { const autocompleteResult = parseClickHouseQueryWithCursor('CREATE TABLE |'); diff --git a/src/autocomplete/databases/clickhouse/tests/create/create-view.test.ts b/src/autocomplete/databases/clickhouse/tests/create/create-view.test.ts index bbbcc3c7..f8d57284 100644 --- a/src/autocomplete/databases/clickhouse/tests/create/create-view.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/create/create-view.test.ts @@ -1,5 +1,5 @@ -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseClickHouseQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after VIEW', () => { const autocompleteResult = parseClickHouseQueryWithCursor('CREATE VIEW |'); diff --git a/src/autocomplete/databases/clickhouse/tests/create/create.test.ts b/src/autocomplete/databases/clickhouse/tests/create/create.test.ts index 4da33111..943634db 100644 --- a/src/autocomplete/databases/clickhouse/tests/create/create.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/create/create.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parseClickHouseQueryWithCursor} from '../../index'; test('should suggest properly after CREATE', () => { const autocompleteResult = parseClickHouseQueryWithCursor('CREATE |'); diff --git a/src/autocomplete/databases/clickhouse/tests/delete/delete.test.ts b/src/autocomplete/databases/clickhouse/tests/delete/delete.test.ts index 47acd1d2..2334263d 100644 --- a/src/autocomplete/databases/clickhouse/tests/delete/delete.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/delete/delete.test.ts @@ -1,5 +1,5 @@ -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseClickHouseQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after DELETE', () => { const autocompleteResult = parseClickHouseQueryWithCursor('DELETE |'); diff --git a/src/autocomplete/databases/clickhouse/tests/drop/drop-database.test.ts b/src/autocomplete/databases/clickhouse/tests/drop/drop-database.test.ts index a770ea2a..ac018c31 100644 --- a/src/autocomplete/databases/clickhouse/tests/drop/drop-database.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/drop/drop-database.test.ts @@ -1,6 +1,5 @@ -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parseClickHouseQueryWithoutCursor} from '../../../../autocomplete'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parseClickHouseQueryWithCursor, parseClickHouseQueryWithoutCursor} from '../../index'; test('should suggest keywords after DROP', () => { const autocompleteResult = parseClickHouseQueryWithCursor('DROP DATABASE |'); diff --git a/src/autocomplete/databases/clickhouse/tests/drop/drop.test.ts b/src/autocomplete/databases/clickhouse/tests/drop/drop.test.ts index 465413d2..d112f9a3 100644 --- a/src/autocomplete/databases/clickhouse/tests/drop/drop.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/drop/drop.test.ts @@ -1,6 +1,5 @@ -import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parseClickHouseQueryWithoutCursor} from '../../../../autocomplete'; +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; +import {parseClickHouseQueryWithCursor, parseClickHouseQueryWithoutCursor} from '../../index'; test('should suggest keywords after DROP', () => { const autocompleteResult = parseClickHouseQueryWithCursor('DROP |'); diff --git a/src/autocomplete/databases/clickhouse/tests/empty-query.test.ts b/src/autocomplete/databases/clickhouse/tests/empty-query.test.ts index be5f609a..e99264f3 100644 --- a/src/autocomplete/databases/clickhouse/tests/empty-query.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/empty-query.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion} from '../../../autocomplete-types'; -import {parseClickHouseQueryWithCursor} from '../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../shared/autocomplete-types'; +import {parseClickHouseQueryWithCursor} from '../index'; test('should suggest properly for an empty query', () => { const autocompleteResult = parseClickHouseQueryWithCursor('|'); diff --git a/src/autocomplete/databases/clickhouse/tests/explain/explain.test.ts b/src/autocomplete/databases/clickhouse/tests/explain/explain.test.ts index 15737a25..0b22e64c 100644 --- a/src/autocomplete/databases/clickhouse/tests/explain/explain.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/explain/explain.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parseClickHouseQueryWithCursor} from '../../index'; test('should suggest keywords after EXPLAIN', () => { const autocompleteResult = parseClickHouseQueryWithCursor('EXPLAIN |'); diff --git a/src/autocomplete/databases/clickhouse/tests/grant/grant.test.ts b/src/autocomplete/databases/clickhouse/tests/grant/grant.test.ts index 0e908e13..9aef21ec 100644 --- a/src/autocomplete/databases/clickhouse/tests/grant/grant.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/grant/grant.test.ts @@ -1,4 +1,4 @@ -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parseClickHouseQueryWithCursor} from '../../index'; // TODO: support grant statement test.skip('should suggest keywords after GRANT', () => { diff --git a/src/autocomplete/databases/clickhouse/tests/insert/insert.test.ts b/src/autocomplete/databases/clickhouse/tests/insert/insert.test.ts index 3f56e36d..d779f06f 100644 --- a/src/autocomplete/databases/clickhouse/tests/insert/insert.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/insert/insert.test.ts @@ -1,10 +1,9 @@ -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parseClickHouseQueryWithCursor, parseClickHouseQueryWithoutCursor} from '../../index'; import { ColumnSuggestion, KeywordSuggestion, TableOrViewSuggestion, -} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithoutCursor} from '../../../../autocomplete'; +} from '../../../../shared/autocomplete-types'; test('should suggest properly after INSERT', () => { const autocompleteResult = parseClickHouseQueryWithCursor('INSERT |'); diff --git a/src/autocomplete/databases/clickhouse/tests/multiple-statements.test.ts b/src/autocomplete/databases/clickhouse/tests/multiple-statements.test.ts index f7fd4428..e97e5094 100644 --- a/src/autocomplete/databases/clickhouse/tests/multiple-statements.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/multiple-statements.test.ts @@ -1,4 +1,4 @@ -import {parseClickHouseQueryWithoutCursor} from '../../../autocomplete'; +import {parseClickHouseQueryWithoutCursor} from '../index'; test('should not report errors on multiple statements', () => { const autocompleteResult = parseClickHouseQueryWithoutCursor(` diff --git a/src/autocomplete/databases/clickhouse/tests/newline.test.ts b/src/autocomplete/databases/clickhouse/tests/newline.test.ts index 5835c079..dda72538 100644 --- a/src/autocomplete/databases/clickhouse/tests/newline.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/newline.test.ts @@ -1,4 +1,4 @@ -import {parseClickHouseQueryWithoutCursor} from '../../../autocomplete'; +import {parseClickHouseQueryWithoutCursor} from '../index'; test('should not report errors with newlines \n', () => { const autocompleteResult = parseClickHouseQueryWithoutCursor('SELECT *\n\n\nFROM test_table'); diff --git a/src/autocomplete/databases/clickhouse/tests/select/group-by-clause.test.ts b/src/autocomplete/databases/clickhouse/tests/select/group-by-clause.test.ts index 43605872..aa0ac565 100644 --- a/src/autocomplete/databases/clickhouse/tests/select/group-by-clause.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/select/group-by-clause.test.ts @@ -1,9 +1,9 @@ -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parseClickHouseQueryWithCursor} from '../../index'; import { ColumnAliasSuggestion, ColumnSuggestion, KeywordSuggestion, -} from '../../../../autocomplete-types'; +} from '../../../../shared/autocomplete-types'; test('should suggest properly after GROUP', () => { const autocompleteResult = parseClickHouseQueryWithCursor( diff --git a/src/autocomplete/databases/clickhouse/tests/select/join-clause.test.ts b/src/autocomplete/databases/clickhouse/tests/select/join-clause.test.ts index 1fdca3da..6023a9ec 100644 --- a/src/autocomplete/databases/clickhouse/tests/select/join-clause.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/select/join-clause.test.ts @@ -1,10 +1,9 @@ -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parseClickHouseQueryWithCursor, parseClickHouseQueryWithoutCursor} from '../../index'; import { ColumnSuggestion, KeywordSuggestion, TableOrViewSuggestion, -} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithoutCursor} from '../../../../autocomplete'; +} from '../../../../shared/autocomplete-types'; test('should suggest keywords after INNER', () => { const autocompleteResult = parseClickHouseQueryWithCursor('SELECT * FROM test_table INNER |'); diff --git a/src/autocomplete/databases/clickhouse/tests/select/nested-statements.test.ts b/src/autocomplete/databases/clickhouse/tests/select/nested-statements.test.ts index c013a983..ef122868 100644 --- a/src/autocomplete/databases/clickhouse/tests/select/nested-statements.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/select/nested-statements.test.ts @@ -1,6 +1,5 @@ -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithoutCursor} from '../../../../autocomplete'; +import {parseClickHouseQueryWithCursor, parseClickHouseQueryWithoutCursor} from '../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest nested SELECT', () => { const autocompleteResult = parseClickHouseQueryWithCursor('SELECT * FROM (|'); diff --git a/src/autocomplete/databases/clickhouse/tests/select/order-by-clause.test.ts b/src/autocomplete/databases/clickhouse/tests/select/order-by-clause.test.ts index 72381f16..88074d09 100644 --- a/src/autocomplete/databases/clickhouse/tests/select/order-by-clause.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/select/order-by-clause.test.ts @@ -1,9 +1,9 @@ -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parseClickHouseQueryWithCursor} from '../../index'; import { ColumnAliasSuggestion, ColumnSuggestion, KeywordSuggestion, -} from '../../../../autocomplete-types'; +} from '../../../../shared/autocomplete-types'; test('should suggest properly after ORDER', () => { const autocompleteResult = parseClickHouseQueryWithCursor('SELECT * FROM test_table ORDER |'); diff --git a/src/autocomplete/databases/clickhouse/tests/select/select.test.ts b/src/autocomplete/databases/clickhouse/tests/select/select.test.ts index 84a87dda..dfbb1e32 100644 --- a/src/autocomplete/databases/clickhouse/tests/select/select.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/select/select.test.ts @@ -1,10 +1,9 @@ -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parseClickHouseQueryWithCursor, parseClickHouseQueryWithoutCursor} from '../../index'; import { ColumnSuggestion, KeywordSuggestion, TableOrViewSuggestion, -} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithoutCursor} from '../../../../autocomplete'; +} from '../../../../shared/autocomplete-types'; test('should suggest properly after SELECT', () => { const autocompleteResult = parseClickHouseQueryWithCursor('SELECT |'); diff --git a/src/autocomplete/databases/clickhouse/tests/select/where-clause.test.ts b/src/autocomplete/databases/clickhouse/tests/select/where-clause.test.ts index aef4b829..ad52f2cf 100644 --- a/src/autocomplete/databases/clickhouse/tests/select/where-clause.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/select/where-clause.test.ts @@ -1,6 +1,5 @@ -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithoutCursor} from '../../../../autocomplete'; +import {parseClickHouseQueryWithCursor, parseClickHouseQueryWithoutCursor} from '../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after WHERE', () => { const autocompleteResult = parseClickHouseQueryWithCursor('SELECT * FROM test_table WHERE |'); diff --git a/src/autocomplete/databases/clickhouse/tests/show/show-create-database.test.ts b/src/autocomplete/databases/clickhouse/tests/show/show-create-database.test.ts index 6df85eb7..3c974b40 100644 --- a/src/autocomplete/databases/clickhouse/tests/show/show-create-database.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/show/show-create-database.test.ts @@ -1,6 +1,5 @@ -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithoutCursor} from '../../../../autocomplete'; +import {parseClickHouseQueryWithCursor, parseClickHouseQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest keywords after SHOW CREATE', () => { const autocompleteResult = parseClickHouseQueryWithCursor('SHOW CREATE DATABASE |'); diff --git a/src/autocomplete/databases/clickhouse/tests/show/show-tables.test.ts b/src/autocomplete/databases/clickhouse/tests/show/show-tables.test.ts index 8148c0d4..1414391a 100644 --- a/src/autocomplete/databases/clickhouse/tests/show/show-tables.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/show/show-tables.test.ts @@ -1,6 +1,5 @@ -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithoutCursor} from '../../../../autocomplete'; +import {parseClickHouseQueryWithCursor, parseClickHouseQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest keywords after SHOW TABLES', () => { const autocompleteResult = parseClickHouseQueryWithCursor('SHOW TABLES FROM |'); diff --git a/src/autocomplete/databases/clickhouse/tests/use/use-database.test.ts b/src/autocomplete/databases/clickhouse/tests/use/use-database.test.ts index 3126942d..9c239ed6 100644 --- a/src/autocomplete/databases/clickhouse/tests/use/use-database.test.ts +++ b/src/autocomplete/databases/clickhouse/tests/use/use-database.test.ts @@ -1,6 +1,5 @@ -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseClickHouseQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parseClickHouseQueryWithoutCursor} from '../../../../autocomplete'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parseClickHouseQueryWithCursor, parseClickHouseQueryWithoutCursor} from '../../index'; test('should suggest keywords after USE', () => { const autocompleteResult = parseClickHouseQueryWithCursor('USE |'); diff --git a/src/autocomplete/databases/mysql/index.ts b/src/autocomplete/databases/mysql/index.ts new file mode 100644 index 00000000..dce1532f --- /dev/null +++ b/src/autocomplete/databases/mysql/index.ts @@ -0,0 +1,48 @@ +import { + AutocompleteResultBase, + ConstraintSuggestion, + CursorPosition, + TableOrViewSuggestion, +} from '../../shared/autocomplete-types'; +import {mySqlAutocompleteData} from './mysql-autocomplete'; +import {parseQuery, parseQueryWithoutCursor} from '../../shared/autocomplete'; +import {separateQueryAndCursor} from '../../shared/parse-query-with-cursor'; + +export interface MySqlAutocompleteResult extends AutocompleteResultBase { + suggestViewsOrTables?: TableOrViewSuggestion; + suggestIndexes?: boolean; + suggestTriggers?: boolean; + suggestConstraints?: ConstraintSuggestion; + suggestRoles?: boolean; + suggestUsers?: boolean; +} + +export function parseMySqlQueryWithoutCursor( + query: string, +): Pick { + return parseQueryWithoutCursor( + mySqlAutocompleteData.Lexer, + mySqlAutocompleteData.Parser, + mySqlAutocompleteData.tokenDictionary, + mySqlAutocompleteData.getParseTree, + query, + ); +} + +export function parseMySqlQuery(query: string, cursor: CursorPosition): MySqlAutocompleteResult { + return parseQuery( + mySqlAutocompleteData.Lexer, + mySqlAutocompleteData.Parser, + mySqlAutocompleteData.tokenDictionary, + mySqlAutocompleteData.ignoredTokens, + mySqlAutocompleteData.rulesToVisit, + mySqlAutocompleteData.getParseTree, + mySqlAutocompleteData.enrichAutocompleteResult, + query, + cursor, + ); +} + +export function parseMySqlQueryWithCursor(queryWithCursor: string): MySqlAutocompleteResult { + return parseMySqlQuery(...separateQueryAndCursor(queryWithCursor)); +} diff --git a/src/autocomplete/databases/mysql/mysql-autocomplete.ts b/src/autocomplete/databases/mysql/mysql-autocomplete.ts index 9f5f07ff..6e6a52d8 100644 --- a/src/autocomplete/databases/mysql/mysql-autocomplete.ts +++ b/src/autocomplete/databases/mysql/mysql-autocomplete.ts @@ -7,10 +7,9 @@ import { AutocompleteResultBase, CursorPosition, ISymbolTableVisitor, - MySqlAutocompleteResult, ProcessVisitedRulesResult, TableOrViewSuggestion, -} from '../../autocomplete-types.js'; +} from '../../shared/autocomplete-types'; import {MySqlLexer} from './generated/MySqlLexer.js'; import { AtomTableItemContext, @@ -27,6 +26,7 @@ import { } from '../../shared/tables.js'; import {isStartingToWriteRule} from '../../shared/cursor'; import {shouldSuggestTemplates} from '../../shared/query.js'; +import {MySqlAutocompleteResult} from './index.js'; const tokenDictionary: TokenDictionary = { SPACE: MySqlParser.SPACE, diff --git a/src/autocomplete/databases/mysql/tests/alter/alter-column.test.ts b/src/autocomplete/databases/mysql/tests/alter/alter-column.test.ts index 35d00007..5d487ce8 100644 --- a/src/autocomplete/databases/mysql/tests/alter/alter-column.test.ts +++ b/src/autocomplete/databases/mysql/tests/alter/alter-column.test.ts @@ -1,6 +1,5 @@ -import {ColumnSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {ColumnSuggestion} from '../../../../shared/autocomplete-types'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; test('should suggest table name after ALTER COLUMN', () => { const autocompleteResult = parseMySqlQueryWithCursor('ALTER TABLE test_table ALTER COLUMN |'); diff --git a/src/autocomplete/databases/mysql/tests/alter/alter-constraint.test.ts b/src/autocomplete/databases/mysql/tests/alter/alter-constraint.test.ts index 786b226f..a3f6447e 100644 --- a/src/autocomplete/databases/mysql/tests/alter/alter-constraint.test.ts +++ b/src/autocomplete/databases/mysql/tests/alter/alter-constraint.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {ConstraintSuggestion, KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {ConstraintSuggestion, KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest table name after ALTER CONSTRAINT', () => { const autocompleteResult = parseMySqlQueryWithCursor( diff --git a/src/autocomplete/databases/mysql/tests/alter/alter-database.test.ts b/src/autocomplete/databases/mysql/tests/alter/alter-database.test.ts index 59556d0b..2fb278ae 100644 --- a/src/autocomplete/databases/mysql/tests/alter/alter-database.test.ts +++ b/src/autocomplete/databases/mysql/tests/alter/alter-database.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest table name after ALTER', () => { const autocompleteResult = parseMySqlQueryWithCursor('ALTER DATABASE |'); diff --git a/src/autocomplete/databases/mysql/tests/alter/alter-index.test.ts b/src/autocomplete/databases/mysql/tests/alter/alter-index.test.ts index fa2fc7f6..409198c3 100644 --- a/src/autocomplete/databases/mysql/tests/alter/alter-index.test.ts +++ b/src/autocomplete/databases/mysql/tests/alter/alter-index.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest table name after ALTER INDEX', () => { const autocompleteResult = parseMySqlQueryWithCursor('ALTER TABLE test_table ALTER INDEX |'); diff --git a/src/autocomplete/databases/mysql/tests/alter/alter-user-role.test.ts b/src/autocomplete/databases/mysql/tests/alter/alter-user-role.test.ts index ecc38a36..158743ba 100644 --- a/src/autocomplete/databases/mysql/tests/alter/alter-user-role.test.ts +++ b/src/autocomplete/databases/mysql/tests/alter/alter-user-role.test.ts @@ -1,6 +1,5 @@ -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; test('should suggest table name after ALTER USER ROLE', () => { const autocompleteResult = parseMySqlQueryWithCursor('ALTER USER test_user DEFAULT ROLE |'); diff --git a/src/autocomplete/databases/mysql/tests/alter/alter-user.test.ts b/src/autocomplete/databases/mysql/tests/alter/alter-user.test.ts index 3116f0d4..d90ee0dd 100644 --- a/src/autocomplete/databases/mysql/tests/alter/alter-user.test.ts +++ b/src/autocomplete/databases/mysql/tests/alter/alter-user.test.ts @@ -1,5 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly name after ALTER USER', () => { const autocompleteResult = parseMySqlQueryWithCursor('ALTER USER |'); diff --git a/src/autocomplete/databases/mysql/tests/alter/alter.test.ts b/src/autocomplete/databases/mysql/tests/alter/alter.test.ts index f8687819..8ec39c84 100644 --- a/src/autocomplete/databases/mysql/tests/alter/alter.test.ts +++ b/src/autocomplete/databases/mysql/tests/alter/alter.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../../index'; test('should suggest keywords after ALTER', () => { const autocompleteResult = parseMySqlQueryWithCursor('ALTER |'); diff --git a/src/autocomplete/databases/mysql/tests/alter/drop-column.test.ts b/src/autocomplete/databases/mysql/tests/alter/drop-column.test.ts index fc4d7d3a..3b80356b 100644 --- a/src/autocomplete/databases/mysql/tests/alter/drop-column.test.ts +++ b/src/autocomplete/databases/mysql/tests/alter/drop-column.test.ts @@ -1,6 +1,5 @@ -import {ColumnSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {ColumnSuggestion} from '../../../../shared/autocomplete-types'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; test('should suggest table name after DROP COLUMN', () => { const autocompleteResult = parseMySqlQueryWithCursor('ALTER TABLE test_table DROP COLUMN |'); diff --git a/src/autocomplete/databases/mysql/tests/alter/drop-constraint.test.ts b/src/autocomplete/databases/mysql/tests/alter/drop-constraint.test.ts index 0bedc712..7e9e0113 100644 --- a/src/autocomplete/databases/mysql/tests/alter/drop-constraint.test.ts +++ b/src/autocomplete/databases/mysql/tests/alter/drop-constraint.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; -import {ConstraintSuggestion} from '../../../../autocomplete-types'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {ConstraintSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest table name after DROP CONSTRAINT', () => { const autocompleteResult = parseMySqlQueryWithCursor( diff --git a/src/autocomplete/databases/mysql/tests/alter/modify-column.test.ts b/src/autocomplete/databases/mysql/tests/alter/modify-column.test.ts index b2fd7fde..08681be6 100644 --- a/src/autocomplete/databases/mysql/tests/alter/modify-column.test.ts +++ b/src/autocomplete/databases/mysql/tests/alter/modify-column.test.ts @@ -1,6 +1,5 @@ -import {ColumnSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {ColumnSuggestion} from '../../../../shared/autocomplete-types'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; test('should suggest table name after MODIFY COLUMN', () => { const autocompleteResult = parseMySqlQueryWithCursor('ALTER TABLE test_table MODIFY COLUMN |'); diff --git a/src/autocomplete/databases/mysql/tests/alter/rename-column.test.ts b/src/autocomplete/databases/mysql/tests/alter/rename-column.test.ts index 234cb900..6cbd2788 100644 --- a/src/autocomplete/databases/mysql/tests/alter/rename-column.test.ts +++ b/src/autocomplete/databases/mysql/tests/alter/rename-column.test.ts @@ -1,6 +1,5 @@ -import {ColumnSuggestion, KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; test('should suggest table name after RENAME COLUMN', () => { const autocompleteResult = parseMySqlQueryWithCursor('ALTER TABLE test_table RENAME COLUMN |'); diff --git a/src/autocomplete/databases/mysql/tests/cache/cache-index.test.ts b/src/autocomplete/databases/mysql/tests/cache/cache-index.test.ts index fa982045..6bf14dbf 100644 --- a/src/autocomplete/databases/mysql/tests/cache/cache-index.test.ts +++ b/src/autocomplete/databases/mysql/tests/cache/cache-index.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest table name after CACHE INDEX', () => { const autocompleteResult = parseMySqlQueryWithCursor('CACHE INDEX test_table ( |'); diff --git a/src/autocomplete/databases/mysql/tests/create/create-database.test.ts b/src/autocomplete/databases/mysql/tests/create/create-database.test.ts index 2d5b70d4..e3b40e15 100644 --- a/src/autocomplete/databases/mysql/tests/create/create-database.test.ts +++ b/src/autocomplete/databases/mysql/tests/create/create-database.test.ts @@ -1,5 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after DATABASE', () => { const autocompleteResult = parseMySqlQueryWithCursor('CREATE DATABASE |'); diff --git a/src/autocomplete/databases/mysql/tests/create/create-function.test.ts b/src/autocomplete/databases/mysql/tests/create/create-function.test.ts index f39f3bb9..361b5b4b 100644 --- a/src/autocomplete/databases/mysql/tests/create/create-function.test.ts +++ b/src/autocomplete/databases/mysql/tests/create/create-function.test.ts @@ -1,5 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after FUNCTION', () => { const autocompleteResult = parseMySqlQueryWithCursor('CREATE FUNCTION |'); diff --git a/src/autocomplete/databases/mysql/tests/create/create-index.test.ts b/src/autocomplete/databases/mysql/tests/create/create-index.test.ts index ea4da670..4720bf0e 100644 --- a/src/autocomplete/databases/mysql/tests/create/create-index.test.ts +++ b/src/autocomplete/databases/mysql/tests/create/create-index.test.ts @@ -1,5 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after INDEX', () => { const autocompleteResult = parseMySqlQueryWithCursor('CREATE INDEX |'); diff --git a/src/autocomplete/databases/mysql/tests/create/create-role.test.ts b/src/autocomplete/databases/mysql/tests/create/create-role.test.ts index 63480de0..77de4889 100644 --- a/src/autocomplete/databases/mysql/tests/create/create-role.test.ts +++ b/src/autocomplete/databases/mysql/tests/create/create-role.test.ts @@ -1,5 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after ROLE', () => { const autocompleteResult = parseMySqlQueryWithCursor('CREATE ROLE |'); diff --git a/src/autocomplete/databases/mysql/tests/create/create-schema.test.ts b/src/autocomplete/databases/mysql/tests/create/create-schema.test.ts index e8734fa6..8386d720 100644 --- a/src/autocomplete/databases/mysql/tests/create/create-schema.test.ts +++ b/src/autocomplete/databases/mysql/tests/create/create-schema.test.ts @@ -1,5 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after SCHEMA', () => { const autocompleteResult = parseMySqlQueryWithCursor('CREATE SCHEMA |'); diff --git a/src/autocomplete/databases/mysql/tests/create/create-table.test.ts b/src/autocomplete/databases/mysql/tests/create/create-table.test.ts index 615231e6..07757dec 100644 --- a/src/autocomplete/databases/mysql/tests/create/create-table.test.ts +++ b/src/autocomplete/databases/mysql/tests/create/create-table.test.ts @@ -1,5 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after TABLE', () => { const autocompleteResult = parseMySqlQueryWithCursor('CREATE TABLE |'); diff --git a/src/autocomplete/databases/mysql/tests/create/create-trigger.test.ts b/src/autocomplete/databases/mysql/tests/create/create-trigger.test.ts index 1b3b89aa..a9fbf306 100644 --- a/src/autocomplete/databases/mysql/tests/create/create-trigger.test.ts +++ b/src/autocomplete/databases/mysql/tests/create/create-trigger.test.ts @@ -1,5 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after TRIGGER', () => { const autocompleteResult = parseMySqlQueryWithCursor('CREATE TRIGGER |'); diff --git a/src/autocomplete/databases/mysql/tests/create/create-user.test.ts b/src/autocomplete/databases/mysql/tests/create/create-user.test.ts index 64dbd879..15feeb36 100644 --- a/src/autocomplete/databases/mysql/tests/create/create-user.test.ts +++ b/src/autocomplete/databases/mysql/tests/create/create-user.test.ts @@ -1,5 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after USER', () => { const autocompleteResult = parseMySqlQueryWithCursor('CREATE USER |'); diff --git a/src/autocomplete/databases/mysql/tests/create/create-view.test.ts b/src/autocomplete/databases/mysql/tests/create/create-view.test.ts index a9844172..59576632 100644 --- a/src/autocomplete/databases/mysql/tests/create/create-view.test.ts +++ b/src/autocomplete/databases/mysql/tests/create/create-view.test.ts @@ -1,5 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after VIEW', () => { const autocompleteResult = parseMySqlQueryWithCursor('CREATE VIEW |'); diff --git a/src/autocomplete/databases/mysql/tests/create/create.test.ts b/src/autocomplete/databases/mysql/tests/create/create.test.ts index afbf2934..7e0e2ba3 100644 --- a/src/autocomplete/databases/mysql/tests/create/create.test.ts +++ b/src/autocomplete/databases/mysql/tests/create/create.test.ts @@ -1,5 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after CREATE', () => { const autocompleteResult = parseMySqlQueryWithCursor('CREATE |'); diff --git a/src/autocomplete/databases/mysql/tests/delete/delete.test.ts b/src/autocomplete/databases/mysql/tests/delete/delete.test.ts index 3823c85e..4d564e6f 100644 --- a/src/autocomplete/databases/mysql/tests/delete/delete.test.ts +++ b/src/autocomplete/databases/mysql/tests/delete/delete.test.ts @@ -1,5 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after DELETE', () => { const autocompleteResult = parseMySqlQueryWithCursor('DELETE |'); diff --git a/src/autocomplete/databases/mysql/tests/drop/drop-database.test.ts b/src/autocomplete/databases/mysql/tests/drop/drop-database.test.ts index 4d525841..370fb00f 100644 --- a/src/autocomplete/databases/mysql/tests/drop/drop-database.test.ts +++ b/src/autocomplete/databases/mysql/tests/drop/drop-database.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest table name after DROP', () => { const autocompleteResult = parseMySqlQueryWithCursor('DROP DATABASE |'); diff --git a/src/autocomplete/databases/mysql/tests/drop/drop-index.test.ts b/src/autocomplete/databases/mysql/tests/drop/drop-index.test.ts index 5c89e332..bbd612b9 100644 --- a/src/autocomplete/databases/mysql/tests/drop/drop-index.test.ts +++ b/src/autocomplete/databases/mysql/tests/drop/drop-index.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest table name after DROP INDEX', () => { const autocompleteResult = parseMySqlQueryWithCursor('DROP INDEX |'); diff --git a/src/autocomplete/databases/mysql/tests/drop/drop-role.test.ts b/src/autocomplete/databases/mysql/tests/drop/drop-role.test.ts index a3f45439..b1b1fb77 100644 --- a/src/autocomplete/databases/mysql/tests/drop/drop-role.test.ts +++ b/src/autocomplete/databases/mysql/tests/drop/drop-role.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest table name after DROP', () => { const autocompleteResult = parseMySqlQueryWithCursor('DROP ROLE |'); diff --git a/src/autocomplete/databases/mysql/tests/drop/drop-trigger.test.ts b/src/autocomplete/databases/mysql/tests/drop/drop-trigger.test.ts index f0e62a4f..81403c31 100644 --- a/src/autocomplete/databases/mysql/tests/drop/drop-trigger.test.ts +++ b/src/autocomplete/databases/mysql/tests/drop/drop-trigger.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest table name after DROP TRIGGER', () => { const autocompleteResult = parseMySqlQueryWithCursor('DROP TRIGGER |'); diff --git a/src/autocomplete/databases/mysql/tests/drop/drop-user.test.ts b/src/autocomplete/databases/mysql/tests/drop/drop-user.test.ts index f70d9478..23fbd601 100644 --- a/src/autocomplete/databases/mysql/tests/drop/drop-user.test.ts +++ b/src/autocomplete/databases/mysql/tests/drop/drop-user.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest table name after DROP', () => { const autocompleteResult = parseMySqlQueryWithCursor('DROP USER |'); diff --git a/src/autocomplete/databases/mysql/tests/drop/drop.test.ts b/src/autocomplete/databases/mysql/tests/drop/drop.test.ts index 7aeb3751..5011e1f6 100644 --- a/src/autocomplete/databases/mysql/tests/drop/drop.test.ts +++ b/src/autocomplete/databases/mysql/tests/drop/drop.test.ts @@ -1,6 +1,5 @@ -import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; test('should suggest keywords after DROP', () => { const autocompleteResult = parseMySqlQueryWithCursor('DROP |'); diff --git a/src/autocomplete/databases/mysql/tests/empty-query.test.ts b/src/autocomplete/databases/mysql/tests/empty-query.test.ts index 044e3633..a6dd88ea 100644 --- a/src/autocomplete/databases/mysql/tests/empty-query.test.ts +++ b/src/autocomplete/databases/mysql/tests/empty-query.test.ts @@ -1,5 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../index'; +import {KeywordSuggestion} from '../../../shared/autocomplete-types'; test('should suggest properly for an empty query', () => { const autocompleteResult = parseMySqlQueryWithCursor('|'); diff --git a/src/autocomplete/databases/mysql/tests/entity-multi-nesting.test.ts b/src/autocomplete/databases/mysql/tests/entity-multi-nesting.test.ts index a43d79a8..86c58313 100644 --- a/src/autocomplete/databases/mysql/tests/entity-multi-nesting.test.ts +++ b/src/autocomplete/databases/mysql/tests/entity-multi-nesting.test.ts @@ -1,4 +1,4 @@ -import {parseMySqlQueryWithCursor} from '../../../shared/parse-query-with-cursor'; +import {parseMySqlQueryWithCursor} from '../index'; // Checkout isStartingToWriteRule comment for more information about these tests diff --git a/src/autocomplete/databases/mysql/tests/explain/explain.test.ts b/src/autocomplete/databases/mysql/tests/explain/explain.test.ts index 1217137d..70f2a255 100644 --- a/src/autocomplete/databases/mysql/tests/explain/explain.test.ts +++ b/src/autocomplete/databases/mysql/tests/explain/explain.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parseMySqlQueryWithCursor} from '../../index'; test('should suggest SELECT and contain suggestTemplates with EXPLAIN prefix', () => { const autocompleteResult = parseMySqlQueryWithCursor('EXPLAIN |'); diff --git a/src/autocomplete/databases/mysql/tests/grant/grant-privilege.test.ts b/src/autocomplete/databases/mysql/tests/grant/grant-privilege.test.ts index 98c94a5c..069594cf 100644 --- a/src/autocomplete/databases/mysql/tests/grant/grant-privilege.test.ts +++ b/src/autocomplete/databases/mysql/tests/grant/grant-privilege.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest keywords after GRANT', () => { const autocompleteResult = parseMySqlQueryWithCursor('GRANT |'); diff --git a/src/autocomplete/databases/mysql/tests/grant/grant-role.test.ts b/src/autocomplete/databases/mysql/tests/grant/grant-role.test.ts index a57e5aa8..369bac76 100644 --- a/src/autocomplete/databases/mysql/tests/grant/grant-role.test.ts +++ b/src/autocomplete/databases/mysql/tests/grant/grant-role.test.ts @@ -1,5 +1,4 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; test('should suggest keywords after GRANT', () => { const autocompleteResult = parseMySqlQueryWithCursor('GRANT |'); diff --git a/src/autocomplete/databases/mysql/tests/insert/insert.test.ts b/src/autocomplete/databases/mysql/tests/insert/insert.test.ts index cf2bb784..70b298b8 100644 --- a/src/autocomplete/databases/mysql/tests/insert/insert.test.ts +++ b/src/autocomplete/databases/mysql/tests/insert/insert.test.ts @@ -1,10 +1,9 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; import { ColumnSuggestion, KeywordSuggestion, TableOrViewSuggestion, -} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +} from '../../../../shared/autocomplete-types'; test('should suggest properly after INSERT', () => { const autocompleteResult = parseMySqlQueryWithCursor('INSERT |'); diff --git a/src/autocomplete/databases/mysql/tests/load/load-index.test.ts b/src/autocomplete/databases/mysql/tests/load/load-index.test.ts index 79db617c..b6201fe9 100644 --- a/src/autocomplete/databases/mysql/tests/load/load-index.test.ts +++ b/src/autocomplete/databases/mysql/tests/load/load-index.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest table name after LOAD INDEX INTO CACHE', () => { const autocompleteResult = parseMySqlQueryWithCursor('LOAD INDEX INTO CACHE test_table (|'); diff --git a/src/autocomplete/databases/mysql/tests/multiple-statements.test.ts b/src/autocomplete/databases/mysql/tests/multiple-statements.test.ts index f7732dd2..7f75ecf3 100644 --- a/src/autocomplete/databases/mysql/tests/multiple-statements.test.ts +++ b/src/autocomplete/databases/mysql/tests/multiple-statements.test.ts @@ -1,4 +1,4 @@ -import {parseMySqlQueryWithoutCursor} from '../../../autocomplete'; +import {parseMySqlQueryWithoutCursor} from '../index'; test('should not report errors on multiple statements', () => { const autocompleteResult = parseMySqlQueryWithoutCursor(` diff --git a/src/autocomplete/databases/mysql/tests/newline.test.ts b/src/autocomplete/databases/mysql/tests/newline.test.ts index e95ded22..2f0de713 100644 --- a/src/autocomplete/databases/mysql/tests/newline.test.ts +++ b/src/autocomplete/databases/mysql/tests/newline.test.ts @@ -1,4 +1,4 @@ -import {parseMySqlQueryWithoutCursor} from '../../../autocomplete'; +import {parseMySqlQueryWithoutCursor} from '../index'; test('should not report errors with newlines \n', () => { const autocompleteResult = parseMySqlQueryWithoutCursor('SELECT *\n\n\nFROM test_table'); diff --git a/src/autocomplete/databases/mysql/tests/rename/rename-index.test.ts b/src/autocomplete/databases/mysql/tests/rename/rename-index.test.ts index 21831bde..8206a559 100644 --- a/src/autocomplete/databases/mysql/tests/rename/rename-index.test.ts +++ b/src/autocomplete/databases/mysql/tests/rename/rename-index.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest table name after RENAME INDEX', () => { const autocompleteResult = parseMySqlQueryWithCursor('ALTER TABLE test_table RENAME INDEX |'); diff --git a/src/autocomplete/databases/mysql/tests/rename/rename-user.test.ts b/src/autocomplete/databases/mysql/tests/rename/rename-user.test.ts index 7273d71c..826562db 100644 --- a/src/autocomplete/databases/mysql/tests/rename/rename-user.test.ts +++ b/src/autocomplete/databases/mysql/tests/rename/rename-user.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest table name after RENAME USER', () => { const autocompleteResult = parseMySqlQueryWithCursor('RENAME USER |'); diff --git a/src/autocomplete/databases/mysql/tests/revoke/revoke-privilege.test.ts b/src/autocomplete/databases/mysql/tests/revoke/revoke-privilege.test.ts index 2d049128..3c46882f 100644 --- a/src/autocomplete/databases/mysql/tests/revoke/revoke-privilege.test.ts +++ b/src/autocomplete/databases/mysql/tests/revoke/revoke-privilege.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest keywords after REVOKE', () => { const autocompleteResult = parseMySqlQueryWithCursor('REVOKE |'); diff --git a/src/autocomplete/databases/mysql/tests/revoke/revoke-role.test.ts b/src/autocomplete/databases/mysql/tests/revoke/revoke-role.test.ts index 6c79a8ee..dd652bcb 100644 --- a/src/autocomplete/databases/mysql/tests/revoke/revoke-role.test.ts +++ b/src/autocomplete/databases/mysql/tests/revoke/revoke-role.test.ts @@ -1,5 +1,4 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; test('should suggest roles after REVOKE', () => { const autocompleteResult = parseMySqlQueryWithCursor('REVOKE |'); diff --git a/src/autocomplete/databases/mysql/tests/select/group-by-clause.test.ts b/src/autocomplete/databases/mysql/tests/select/group-by-clause.test.ts index cc0a7e0f..afeb9480 100644 --- a/src/autocomplete/databases/mysql/tests/select/group-by-clause.test.ts +++ b/src/autocomplete/databases/mysql/tests/select/group-by-clause.test.ts @@ -1,9 +1,9 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parseMySqlQueryWithCursor} from '../../index'; import { ColumnAliasSuggestion, ColumnSuggestion, KeywordSuggestion, -} from '../../../../autocomplete-types'; +} from '../../../../shared/autocomplete-types'; test('should suggest properly after GROUP', () => { const autocompleteResult = parseMySqlQueryWithCursor('SELECT * FROM test_table as t GROUP |'); diff --git a/src/autocomplete/databases/mysql/tests/select/join-clause.test.ts b/src/autocomplete/databases/mysql/tests/select/join-clause.test.ts index dbe92213..79ffc91e 100644 --- a/src/autocomplete/databases/mysql/tests/select/join-clause.test.ts +++ b/src/autocomplete/databases/mysql/tests/select/join-clause.test.ts @@ -1,10 +1,9 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; import { ColumnSuggestion, KeywordSuggestion, TableOrViewSuggestion, -} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +} from '../../../../shared/autocomplete-types'; test('should suggest keywords after INNER', () => { const autocompleteResult = parseMySqlQueryWithCursor('SELECT * FROM test_table INNER |'); diff --git a/src/autocomplete/databases/mysql/tests/select/nested-statements.test.ts b/src/autocomplete/databases/mysql/tests/select/nested-statements.test.ts index b2b52135..8c194d85 100644 --- a/src/autocomplete/databases/mysql/tests/select/nested-statements.test.ts +++ b/src/autocomplete/databases/mysql/tests/select/nested-statements.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest nested SELECT', () => { const autocompleteResult = parseMySqlQueryWithCursor('SELECT * FROM (|'); diff --git a/src/autocomplete/databases/mysql/tests/select/order-by-clause.test.ts b/src/autocomplete/databases/mysql/tests/select/order-by-clause.test.ts index c75eaa1f..bd2334fb 100644 --- a/src/autocomplete/databases/mysql/tests/select/order-by-clause.test.ts +++ b/src/autocomplete/databases/mysql/tests/select/order-by-clause.test.ts @@ -1,9 +1,9 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parseMySqlQueryWithCursor} from '../../index'; import { ColumnAliasSuggestion, ColumnSuggestion, KeywordSuggestion, -} from '../../../../autocomplete-types'; +} from '../../../../shared/autocomplete-types'; // TODO: fix, grammar is written this way that ORDER might be an alias test.skip('should suggest properly after ORDER', () => { diff --git a/src/autocomplete/databases/mysql/tests/select/select.test.ts b/src/autocomplete/databases/mysql/tests/select/select.test.ts index ddf2eed0..5cf5ea86 100644 --- a/src/autocomplete/databases/mysql/tests/select/select.test.ts +++ b/src/autocomplete/databases/mysql/tests/select/select.test.ts @@ -1,10 +1,9 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; import { ColumnSuggestion, KeywordSuggestion, TableOrViewSuggestion, -} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +} from '../../../../shared/autocomplete-types'; test('should suggest properly after SELECT', () => { const autocompleteResult = parseMySqlQueryWithCursor('SELECT |'); diff --git a/src/autocomplete/databases/mysql/tests/select/where-clause.test.ts b/src/autocomplete/databases/mysql/tests/select/where-clause.test.ts index f3ec0412..608a4e3c 100644 --- a/src/autocomplete/databases/mysql/tests/select/where-clause.test.ts +++ b/src/autocomplete/databases/mysql/tests/select/where-clause.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after WHERE', () => { const autocompleteResult = parseMySqlQueryWithCursor('SELECT * FROM test_table WHERE |'); diff --git a/src/autocomplete/databases/mysql/tests/set/set-default-role.test.ts b/src/autocomplete/databases/mysql/tests/set/set-default-role.test.ts index 245edc0a..3ec1c64b 100644 --- a/src/autocomplete/databases/mysql/tests/set/set-default-role.test.ts +++ b/src/autocomplete/databases/mysql/tests/set/set-default-role.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest triggers after SET DEFAULT', () => { const autocompleteResult = parseMySqlQueryWithCursor('SET DEFAULT ROLE |'); diff --git a/src/autocomplete/databases/mysql/tests/set/set-role.test.ts b/src/autocomplete/databases/mysql/tests/set/set-role.test.ts index 8d7e6c87..b3d07b17 100644 --- a/src/autocomplete/databases/mysql/tests/set/set-role.test.ts +++ b/src/autocomplete/databases/mysql/tests/set/set-role.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest triggers after SET', () => { const autocompleteResult = parseMySqlQueryWithCursor('SET ROLE |'); diff --git a/src/autocomplete/databases/mysql/tests/show/show-create-database.test.ts b/src/autocomplete/databases/mysql/tests/show/show-create-database.test.ts index 386ab899..57409e19 100644 --- a/src/autocomplete/databases/mysql/tests/show/show-create-database.test.ts +++ b/src/autocomplete/databases/mysql/tests/show/show-create-database.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest triggers after SHOW CREATE', () => { const autocompleteResult = parseMySqlQueryWithCursor('SHOW CREATE DATABASE |'); diff --git a/src/autocomplete/databases/mysql/tests/show/show-create-table.test.ts b/src/autocomplete/databases/mysql/tests/show/show-create-table.test.ts index e95901e2..bde7d6da 100644 --- a/src/autocomplete/databases/mysql/tests/show/show-create-table.test.ts +++ b/src/autocomplete/databases/mysql/tests/show/show-create-table.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest triggers after SHOW CREATE TABLE', () => { const autocompleteResult = parseMySqlQueryWithCursor('SHOW CREATE TABLE |'); diff --git a/src/autocomplete/databases/mysql/tests/show/show-create-trigger.test.ts b/src/autocomplete/databases/mysql/tests/show/show-create-trigger.test.ts index 799d3d37..6d97dd7c 100644 --- a/src/autocomplete/databases/mysql/tests/show/show-create-trigger.test.ts +++ b/src/autocomplete/databases/mysql/tests/show/show-create-trigger.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest triggers after SHOW CREATE TRIGGER', () => { const autocompleteResult = parseMySqlQueryWithCursor('SHOW CREATE TRIGGER |'); diff --git a/src/autocomplete/databases/mysql/tests/show/show-create-view.test.ts b/src/autocomplete/databases/mysql/tests/show/show-create-view.test.ts index bfdbcf42..5553adad 100644 --- a/src/autocomplete/databases/mysql/tests/show/show-create-view.test.ts +++ b/src/autocomplete/databases/mysql/tests/show/show-create-view.test.ts @@ -1,6 +1,5 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest triggers after SHOW CREATE VIEW', () => { const autocompleteResult = parseMySqlQueryWithCursor('SHOW CREATE VIEW |'); diff --git a/src/autocomplete/databases/mysql/tests/update/update.test.ts b/src/autocomplete/databases/mysql/tests/update/update.test.ts index 7b462271..0d177c13 100644 --- a/src/autocomplete/databases/mysql/tests/update/update.test.ts +++ b/src/autocomplete/databases/mysql/tests/update/update.test.ts @@ -1,10 +1,9 @@ -import {parseMySqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parseMySqlQueryWithCursor, parseMySqlQueryWithoutCursor} from '../../index'; import { ColumnSuggestion, KeywordSuggestion, TableOrViewSuggestion, -} from '../../../../autocomplete-types'; -import {parseMySqlQueryWithoutCursor} from '../../../../autocomplete'; +} from '../../../../shared/autocomplete-types'; test('should suggest properly after UPDATE', () => { const autocompleteResult = parseMySqlQueryWithCursor('UPDATE |'); diff --git a/src/autocomplete/databases/postgresql/index.ts b/src/autocomplete/databases/postgresql/index.ts new file mode 100644 index 00000000..3e44bab8 --- /dev/null +++ b/src/autocomplete/databases/postgresql/index.ts @@ -0,0 +1,54 @@ +import { + AutocompleteResultBase, + ConstraintSuggestion, + CursorPosition, + TableOrViewSuggestion, +} from '../../shared/autocomplete-types'; +import {postgreSqlAutocompleteData} from './postgresql-autocomplete'; +import {parseQuery, parseQueryWithoutCursor} from '../../shared/autocomplete'; +import {separateQueryAndCursor} from '../../shared/parse-query-with-cursor'; + +export interface PostgreSqlAutocompleteResult extends AutocompleteResultBase { + suggestViewsOrTables?: TableOrViewSuggestion; + suggestIndexes?: boolean; + suggestTriggers?: boolean; + suggestConstraints?: ConstraintSuggestion; + suggestSequences?: boolean; + suggestSchemas?: boolean; + suggestRoles?: boolean; +} + +export function parsePostgreSqlQueryWithoutCursor( + query: string, +): Pick { + return parseQueryWithoutCursor( + postgreSqlAutocompleteData.Lexer, + postgreSqlAutocompleteData.Parser, + postgreSqlAutocompleteData.tokenDictionary, + postgreSqlAutocompleteData.getParseTree, + query, + ); +} + +export function parsePostgreSqlQuery( + query: string, + cursor: CursorPosition, +): PostgreSqlAutocompleteResult { + return parseQuery( + postgreSqlAutocompleteData.Lexer, + postgreSqlAutocompleteData.Parser, + postgreSqlAutocompleteData.tokenDictionary, + postgreSqlAutocompleteData.ignoredTokens, + postgreSqlAutocompleteData.rulesToVisit, + postgreSqlAutocompleteData.getParseTree, + postgreSqlAutocompleteData.enrichAutocompleteResult, + query, + cursor, + ); +} + +export function parsePostgreSqlQueryWithCursor( + queryWithCursor: string, +): PostgreSqlAutocompleteResult { + return parsePostgreSqlQuery(...separateQueryAndCursor(queryWithCursor)); +} diff --git a/src/autocomplete/databases/postgresql/postgresql-autocomplete.ts b/src/autocomplete/databases/postgresql/postgresql-autocomplete.ts index 463e4402..3b954936 100644 --- a/src/autocomplete/databases/postgresql/postgresql-autocomplete.ts +++ b/src/autocomplete/databases/postgresql/postgresql-autocomplete.ts @@ -7,10 +7,9 @@ import { AutocompleteResultBase, CursorPosition, ISymbolTableVisitor, - PostgreSqlAutocompleteResult, ProcessVisitedRulesResult, TableOrViewSuggestion, -} from '../../autocomplete-types.js'; +} from '../../shared/autocomplete-types.js'; import {PostgreSqlLexer} from './generated/PostgreSqlLexer.js'; import { InsertTargetContext, @@ -29,6 +28,7 @@ import { } from '../../shared/tables.js'; import {isStartingToWriteRule} from '../../shared/cursor'; import {shouldSuggestTemplates} from '../../shared/query.js'; +import {PostgreSqlAutocompleteResult} from './index.js'; const tokenDictionary: TokenDictionary = { SPACE: PostgreSqlParser.Whitespace, diff --git a/src/autocomplete/databases/postgresql/tests/alter/alter-column.test.ts b/src/autocomplete/databases/postgresql/tests/alter/alter-column.test.ts index 261c62ce..e10605df 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/alter-column.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/alter-column.test.ts @@ -1,6 +1,5 @@ -import {ColumnSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {ColumnSuggestion} from '../../../../shared/autocomplete-types'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; test('should suggest view name after ALTER COLUMN', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor( diff --git a/src/autocomplete/databases/postgresql/tests/alter/alter-constraint.test.ts b/src/autocomplete/databases/postgresql/tests/alter/alter-constraint.test.ts index 8122fc32..ed65277d 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/alter-constraint.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/alter-constraint.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {ConstraintSuggestion, KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {ConstraintSuggestion, KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest view name after ALTER CONSTRAINT', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor( diff --git a/src/autocomplete/databases/postgresql/tests/alter/alter-database.test.ts b/src/autocomplete/databases/postgresql/tests/alter/alter-database.test.ts index 08a79baa..dc76d910 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/alter-database.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/alter-database.test.ts @@ -1,6 +1,5 @@ -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; test('should suggest after ALTER', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('ALTER DATABASE |'); diff --git a/src/autocomplete/databases/postgresql/tests/alter/alter-enable-trigger.test.ts b/src/autocomplete/databases/postgresql/tests/alter/alter-enable-trigger.test.ts index a4876893..d3e2c774 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/alter-enable-trigger.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/alter-enable-trigger.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after ENABLE TRIGGER', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor( diff --git a/src/autocomplete/databases/postgresql/tests/alter/alter-index.test.ts b/src/autocomplete/databases/postgresql/tests/alter/alter-index.test.ts index eb63ed36..2309d5cc 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/alter-index.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/alter-index.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after ALTER INDEX', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('ALTER INDEX |'); diff --git a/src/autocomplete/databases/postgresql/tests/alter/alter-rename-trigger.test.ts b/src/autocomplete/databases/postgresql/tests/alter/alter-rename-trigger.test.ts index 6f085bee..869d6a41 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/alter-rename-trigger.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/alter-rename-trigger.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after ALTER TRIGGER', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('ALTER TRIGGER |'); diff --git a/src/autocomplete/databases/postgresql/tests/alter/alter-role.test.ts b/src/autocomplete/databases/postgresql/tests/alter/alter-role.test.ts index 72558b65..61ce4ea8 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/alter-role.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/alter-role.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after ALTER ROLE', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('ALTER ROLE |'); diff --git a/src/autocomplete/databases/postgresql/tests/alter/alter-schema.test.ts b/src/autocomplete/databases/postgresql/tests/alter/alter-schema.test.ts index aa61be32..e07d58d7 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/alter-schema.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/alter-schema.test.ts @@ -1,6 +1,5 @@ -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; test('should suggest after ALTER SCHEMA', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('ALTER SCHEMA |'); diff --git a/src/autocomplete/databases/postgresql/tests/alter/alter-sequence.test.ts b/src/autocomplete/databases/postgresql/tests/alter/alter-sequence.test.ts index 158977c4..6c40ee99 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/alter-sequence.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/alter-sequence.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after ALTER SEQUENCE', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('ALTER SEQUENCE |'); diff --git a/src/autocomplete/databases/postgresql/tests/alter/alter.test.ts b/src/autocomplete/databases/postgresql/tests/alter/alter.test.ts index 158123de..63262936 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/alter.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/alter.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; test('should suggest keywords after ALTER', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('ALTER |'); diff --git a/src/autocomplete/databases/postgresql/tests/alter/drop-column.test.ts b/src/autocomplete/databases/postgresql/tests/alter/drop-column.test.ts index e7aa01f5..1aa782dd 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/drop-column.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/drop-column.test.ts @@ -1,6 +1,5 @@ -import {ColumnSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {ColumnSuggestion} from '../../../../shared/autocomplete-types'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; test('should suggest table name after DROP COLUMN', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor( diff --git a/src/autocomplete/databases/postgresql/tests/alter/drop-constraint.test.ts b/src/autocomplete/databases/postgresql/tests/alter/drop-constraint.test.ts index fa2374ca..452eac6a 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/drop-constraint.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/drop-constraint.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {ConstraintSuggestion, KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {ConstraintSuggestion, KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest view name after DROP CONSTRAINT', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor( diff --git a/src/autocomplete/databases/postgresql/tests/alter/rename-column.test.ts b/src/autocomplete/databases/postgresql/tests/alter/rename-column.test.ts index fd826b96..92506ded 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/rename-column.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/rename-column.test.ts @@ -1,6 +1,5 @@ -import {ColumnSuggestion, KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; test('should suggest view name after RENAME COLUMN', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor( diff --git a/src/autocomplete/databases/postgresql/tests/alter/rename-constraint.test.ts b/src/autocomplete/databases/postgresql/tests/alter/rename-constraint.test.ts index 405030f9..c601031f 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/rename-constraint.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/rename-constraint.test.ts @@ -1,6 +1,5 @@ -import {ConstraintSuggestion, KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {ConstraintSuggestion, KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; test('should suggest view name after RENAME CONSTRAINT', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor( diff --git a/src/autocomplete/databases/postgresql/tests/alter/rename-sequence.test.ts b/src/autocomplete/databases/postgresql/tests/alter/rename-sequence.test.ts index 4cedf8d5..6d969636 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/rename-sequence.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/rename-sequence.test.ts @@ -1,4 +1,4 @@ -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithoutCursor} from '../../index'; test('should nor report errors on full statement', () => { const autocompleteResult = parsePostgreSqlQueryWithoutCursor( diff --git a/src/autocomplete/databases/postgresql/tests/alter/validate-constraint.test.ts b/src/autocomplete/databases/postgresql/tests/alter/validate-constraint.test.ts index f81576f6..6013c563 100644 --- a/src/autocomplete/databases/postgresql/tests/alter/validate-constraint.test.ts +++ b/src/autocomplete/databases/postgresql/tests/alter/validate-constraint.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; -import {ConstraintSuggestion} from '../../../../autocomplete-types'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {ConstraintSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest view name after VALIDATE CONSTRAINT', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor( diff --git a/src/autocomplete/databases/postgresql/tests/comment/comment-constraint.test.ts b/src/autocomplete/databases/postgresql/tests/comment/comment-constraint.test.ts index 88d574fa..b53ab2ab 100644 --- a/src/autocomplete/databases/postgresql/tests/comment/comment-constraint.test.ts +++ b/src/autocomplete/databases/postgresql/tests/comment/comment-constraint.test.ts @@ -1,5 +1,4 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; // TODO Get context of table in COMMENT statement test.skip('should suggest properly after COMMENT ON CONSTRAINT', () => { diff --git a/src/autocomplete/databases/postgresql/tests/comment/comment-trigger.test.ts b/src/autocomplete/databases/postgresql/tests/comment/comment-trigger.test.ts index edfc9597..cee09662 100644 --- a/src/autocomplete/databases/postgresql/tests/comment/comment-trigger.test.ts +++ b/src/autocomplete/databases/postgresql/tests/comment/comment-trigger.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after COMMENT ON TRIGGER', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('COMMENT ON TRIGGER |'); diff --git a/src/autocomplete/databases/postgresql/tests/create/create-database.test.ts b/src/autocomplete/databases/postgresql/tests/create/create-database.test.ts index 37af3c58..674c3c0e 100644 --- a/src/autocomplete/databases/postgresql/tests/create/create-database.test.ts +++ b/src/autocomplete/databases/postgresql/tests/create/create-database.test.ts @@ -1,5 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after DATABASE', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('CREATE DATABASE |'); diff --git a/src/autocomplete/databases/postgresql/tests/create/create-function.test.ts b/src/autocomplete/databases/postgresql/tests/create/create-function.test.ts index b639750a..742204ca 100644 --- a/src/autocomplete/databases/postgresql/tests/create/create-function.test.ts +++ b/src/autocomplete/databases/postgresql/tests/create/create-function.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after FUNCTION', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('CREATE FUNCTION |'); diff --git a/src/autocomplete/databases/postgresql/tests/create/create-index.test.ts b/src/autocomplete/databases/postgresql/tests/create/create-index.test.ts index 47ae9ad8..f31923a7 100644 --- a/src/autocomplete/databases/postgresql/tests/create/create-index.test.ts +++ b/src/autocomplete/databases/postgresql/tests/create/create-index.test.ts @@ -1,5 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after INDEX', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('CREATE INDEX |'); diff --git a/src/autocomplete/databases/postgresql/tests/create/create-role.test.ts b/src/autocomplete/databases/postgresql/tests/create/create-role.test.ts index 4adb3db5..d2fb072b 100644 --- a/src/autocomplete/databases/postgresql/tests/create/create-role.test.ts +++ b/src/autocomplete/databases/postgresql/tests/create/create-role.test.ts @@ -1,5 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after ROLE', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('CREATE ROLE |'); diff --git a/src/autocomplete/databases/postgresql/tests/create/create-schema.test.ts b/src/autocomplete/databases/postgresql/tests/create/create-schema.test.ts index c3aa4e5d..da320760 100644 --- a/src/autocomplete/databases/postgresql/tests/create/create-schema.test.ts +++ b/src/autocomplete/databases/postgresql/tests/create/create-schema.test.ts @@ -1,5 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after SCHEMA', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('CREATE SCHEMA |'); diff --git a/src/autocomplete/databases/postgresql/tests/create/create-table.test.ts b/src/autocomplete/databases/postgresql/tests/create/create-table.test.ts index 04beebe3..22c0fe2f 100644 --- a/src/autocomplete/databases/postgresql/tests/create/create-table.test.ts +++ b/src/autocomplete/databases/postgresql/tests/create/create-table.test.ts @@ -1,5 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after TABLE', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('CREATE TABLE |'); diff --git a/src/autocomplete/databases/postgresql/tests/create/create-trigger.test.ts b/src/autocomplete/databases/postgresql/tests/create/create-trigger.test.ts index bdb7c9cc..370c5193 100644 --- a/src/autocomplete/databases/postgresql/tests/create/create-trigger.test.ts +++ b/src/autocomplete/databases/postgresql/tests/create/create-trigger.test.ts @@ -1,5 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after TRIGGER', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('CREATE TRIGGER |'); diff --git a/src/autocomplete/databases/postgresql/tests/create/create-user.test.ts b/src/autocomplete/databases/postgresql/tests/create/create-user.test.ts index 0648a10e..2ad30a36 100644 --- a/src/autocomplete/databases/postgresql/tests/create/create-user.test.ts +++ b/src/autocomplete/databases/postgresql/tests/create/create-user.test.ts @@ -1,5 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after USER', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('CREATE USER |'); diff --git a/src/autocomplete/databases/postgresql/tests/create/create-view.test.ts b/src/autocomplete/databases/postgresql/tests/create/create-view.test.ts index 38358cfd..bb4a5289 100644 --- a/src/autocomplete/databases/postgresql/tests/create/create-view.test.ts +++ b/src/autocomplete/databases/postgresql/tests/create/create-view.test.ts @@ -1,5 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after VIEW', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('CREATE VIEW |'); diff --git a/src/autocomplete/databases/postgresql/tests/create/create.test.ts b/src/autocomplete/databases/postgresql/tests/create/create.test.ts index 5a7a9d0d..36d04917 100644 --- a/src/autocomplete/databases/postgresql/tests/create/create.test.ts +++ b/src/autocomplete/databases/postgresql/tests/create/create.test.ts @@ -1,5 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after CREATE', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('CREATE |'); diff --git a/src/autocomplete/databases/postgresql/tests/delete/delete.test.ts b/src/autocomplete/databases/postgresql/tests/delete/delete.test.ts index 2c5c500e..879caea5 100644 --- a/src/autocomplete/databases/postgresql/tests/delete/delete.test.ts +++ b/src/autocomplete/databases/postgresql/tests/delete/delete.test.ts @@ -1,5 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after DELETE', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('DELETE |'); diff --git a/src/autocomplete/databases/postgresql/tests/drop/drop-database.test.ts b/src/autocomplete/databases/postgresql/tests/drop/drop-database.test.ts index df579039..77a16875 100644 --- a/src/autocomplete/databases/postgresql/tests/drop/drop-database.test.ts +++ b/src/autocomplete/databases/postgresql/tests/drop/drop-database.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after DROP', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('DROP DATABASE |'); diff --git a/src/autocomplete/databases/postgresql/tests/drop/drop-index.test.ts b/src/autocomplete/databases/postgresql/tests/drop/drop-index.test.ts index dfc23b5c..8f863a18 100644 --- a/src/autocomplete/databases/postgresql/tests/drop/drop-index.test.ts +++ b/src/autocomplete/databases/postgresql/tests/drop/drop-index.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after DROP INDEX', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('DROP INDEX |'); diff --git a/src/autocomplete/databases/postgresql/tests/drop/drop-role.test.ts b/src/autocomplete/databases/postgresql/tests/drop/drop-role.test.ts index 539c40d4..59fcdcc9 100644 --- a/src/autocomplete/databases/postgresql/tests/drop/drop-role.test.ts +++ b/src/autocomplete/databases/postgresql/tests/drop/drop-role.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after DROP ROLE', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('DROP ROLE |'); diff --git a/src/autocomplete/databases/postgresql/tests/drop/drop-schema.test.ts b/src/autocomplete/databases/postgresql/tests/drop/drop-schema.test.ts index 3087a0b7..5c40f5e9 100644 --- a/src/autocomplete/databases/postgresql/tests/drop/drop-schema.test.ts +++ b/src/autocomplete/databases/postgresql/tests/drop/drop-schema.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after DROP SCHEMA', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('DROP SCHEMA |'); diff --git a/src/autocomplete/databases/postgresql/tests/drop/drop-sequence.test.ts b/src/autocomplete/databases/postgresql/tests/drop/drop-sequence.test.ts index 1d28cff2..e974774c 100644 --- a/src/autocomplete/databases/postgresql/tests/drop/drop-sequence.test.ts +++ b/src/autocomplete/databases/postgresql/tests/drop/drop-sequence.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after DROP SEQUENCE', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('DROP SEQUENCE |'); diff --git a/src/autocomplete/databases/postgresql/tests/drop/drop-trigger.test.ts b/src/autocomplete/databases/postgresql/tests/drop/drop-trigger.test.ts index 0b4f7f4a..42f95464 100644 --- a/src/autocomplete/databases/postgresql/tests/drop/drop-trigger.test.ts +++ b/src/autocomplete/databases/postgresql/tests/drop/drop-trigger.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after DROP TRIGGER', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('DROP TRIGGER |'); diff --git a/src/autocomplete/databases/postgresql/tests/drop/drop.test.ts b/src/autocomplete/databases/postgresql/tests/drop/drop.test.ts index 07cc7b2a..7257a0c2 100644 --- a/src/autocomplete/databases/postgresql/tests/drop/drop.test.ts +++ b/src/autocomplete/databases/postgresql/tests/drop/drop.test.ts @@ -1,6 +1,5 @@ -import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {KeywordSuggestion, TableOrViewSuggestion} from '../../../../shared/autocomplete-types'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; test('should suggest keywords after DROP', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('DROP |'); diff --git a/src/autocomplete/databases/postgresql/tests/empty-query.test.ts b/src/autocomplete/databases/postgresql/tests/empty-query.test.ts index de41a91f..4ff5a153 100644 --- a/src/autocomplete/databases/postgresql/tests/empty-query.test.ts +++ b/src/autocomplete/databases/postgresql/tests/empty-query.test.ts @@ -1,5 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../index'; +import {KeywordSuggestion} from '../../../shared/autocomplete-types'; test('should suggest properly for an empty query', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('|'); diff --git a/src/autocomplete/databases/postgresql/tests/entity-multi-nesting.test.ts b/src/autocomplete/databases/postgresql/tests/entity-multi-nesting.test.ts index 9256865a..1e21dc7c 100644 --- a/src/autocomplete/databases/postgresql/tests/entity-multi-nesting.test.ts +++ b/src/autocomplete/databases/postgresql/tests/entity-multi-nesting.test.ts @@ -1,4 +1,4 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../shared/parse-query-with-cursor'; +import {parsePostgreSqlQueryWithCursor} from '../index'; // Checkout isStartingToWriteRule comment for more information about these tests diff --git a/src/autocomplete/databases/postgresql/tests/explain/explain.test.ts b/src/autocomplete/databases/postgresql/tests/explain/explain.test.ts index ae5727b0..246953ec 100644 --- a/src/autocomplete/databases/postgresql/tests/explain/explain.test.ts +++ b/src/autocomplete/databases/postgresql/tests/explain/explain.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; test('should suggest SELECT and contain suggestTemplates with EXPLAIN prefix', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('EXPLAIN |'); diff --git a/src/autocomplete/databases/postgresql/tests/grant/grant.test.ts b/src/autocomplete/databases/postgresql/tests/grant/grant.test.ts index 305ff9f0..b8f02281 100644 --- a/src/autocomplete/databases/postgresql/tests/grant/grant.test.ts +++ b/src/autocomplete/databases/postgresql/tests/grant/grant.test.ts @@ -1,5 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; // TODO Grammar is not full? test('should suggest keywords after GRANT', () => { diff --git a/src/autocomplete/databases/postgresql/tests/insert/insert.test.ts b/src/autocomplete/databases/postgresql/tests/insert/insert.test.ts index c52bf11b..0d6d6516 100644 --- a/src/autocomplete/databases/postgresql/tests/insert/insert.test.ts +++ b/src/autocomplete/databases/postgresql/tests/insert/insert.test.ts @@ -1,10 +1,9 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; import { ColumnSuggestion, KeywordSuggestion, TableOrViewSuggestion, -} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +} from '../../../../shared/autocomplete-types'; test('should suggest properly after INSERT', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('INSERT |'); diff --git a/src/autocomplete/databases/postgresql/tests/multiple-statements.test.ts b/src/autocomplete/databases/postgresql/tests/multiple-statements.test.ts index 7a030461..1879c04e 100644 --- a/src/autocomplete/databases/postgresql/tests/multiple-statements.test.ts +++ b/src/autocomplete/databases/postgresql/tests/multiple-statements.test.ts @@ -1,4 +1,4 @@ -import {parsePostgreSqlQueryWithoutCursor} from '../../../autocomplete'; +import {parsePostgreSqlQueryWithoutCursor} from '../index'; test('should not report errors on multiple statements', () => { const autocompleteResult = parsePostgreSqlQueryWithoutCursor(` diff --git a/src/autocomplete/databases/postgresql/tests/newline.test.ts b/src/autocomplete/databases/postgresql/tests/newline.test.ts index d7cb01f2..a72e7ce6 100644 --- a/src/autocomplete/databases/postgresql/tests/newline.test.ts +++ b/src/autocomplete/databases/postgresql/tests/newline.test.ts @@ -1,4 +1,4 @@ -import {parsePostgreSqlQueryWithoutCursor} from '../../../autocomplete'; +import {parsePostgreSqlQueryWithoutCursor} from '../index'; test('should not report errors with newlines \n', () => { const autocompleteResult = parsePostgreSqlQueryWithoutCursor('SELECT *\n\n\nFROM test_table'); diff --git a/src/autocomplete/databases/postgresql/tests/reindex/reindex-database.test.ts b/src/autocomplete/databases/postgresql/tests/reindex/reindex-database.test.ts index cbe46f19..092f7fda 100644 --- a/src/autocomplete/databases/postgresql/tests/reindex/reindex-database.test.ts +++ b/src/autocomplete/databases/postgresql/tests/reindex/reindex-database.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after REINDEX DATABASE', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('REINDEX DATABASE |'); diff --git a/src/autocomplete/databases/postgresql/tests/reindex/reindex-index.test.ts b/src/autocomplete/databases/postgresql/tests/reindex/reindex-index.test.ts index ff16492e..7b9166c7 100644 --- a/src/autocomplete/databases/postgresql/tests/reindex/reindex-index.test.ts +++ b/src/autocomplete/databases/postgresql/tests/reindex/reindex-index.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after REINDEX INDEX', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('REINDEX INDEX |'); diff --git a/src/autocomplete/databases/postgresql/tests/reindex/reindex-schema.test.ts b/src/autocomplete/databases/postgresql/tests/reindex/reindex-schema.test.ts index e86aee4e..47880fb9 100644 --- a/src/autocomplete/databases/postgresql/tests/reindex/reindex-schema.test.ts +++ b/src/autocomplete/databases/postgresql/tests/reindex/reindex-schema.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after REINDEX SCHEMA', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('REINDEX SCHEMA |'); diff --git a/src/autocomplete/databases/postgresql/tests/revoke/revoke.test.ts b/src/autocomplete/databases/postgresql/tests/revoke/revoke.test.ts index 3fec43af..f69ba5e5 100644 --- a/src/autocomplete/databases/postgresql/tests/revoke/revoke.test.ts +++ b/src/autocomplete/databases/postgresql/tests/revoke/revoke.test.ts @@ -1,5 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; // TODO Grammar is not full? test('should suggest keywords after REVOKE', () => { diff --git a/src/autocomplete/databases/postgresql/tests/select/group-by-clause.test.ts b/src/autocomplete/databases/postgresql/tests/select/group-by-clause.test.ts index 43cb2a99..37435703 100644 --- a/src/autocomplete/databases/postgresql/tests/select/group-by-clause.test.ts +++ b/src/autocomplete/databases/postgresql/tests/select/group-by-clause.test.ts @@ -1,9 +1,9 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; import { ColumnAliasSuggestion, ColumnSuggestion, KeywordSuggestion, -} from '../../../../autocomplete-types'; +} from '../../../../shared/autocomplete-types'; test('should suggest properly after GROUP', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor( diff --git a/src/autocomplete/databases/postgresql/tests/select/join-clause.test.ts b/src/autocomplete/databases/postgresql/tests/select/join-clause.test.ts index da40b60b..1fca36f9 100644 --- a/src/autocomplete/databases/postgresql/tests/select/join-clause.test.ts +++ b/src/autocomplete/databases/postgresql/tests/select/join-clause.test.ts @@ -1,10 +1,9 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; import { ColumnSuggestion, KeywordSuggestion, TableOrViewSuggestion, -} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +} from '../../../../shared/autocomplete-types'; test('should suggest keywords after INNER', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('SELECT * FROM test_table INNER |'); diff --git a/src/autocomplete/databases/postgresql/tests/select/nested-statements.test.ts b/src/autocomplete/databases/postgresql/tests/select/nested-statements.test.ts index a160d8f3..2f6d74c6 100644 --- a/src/autocomplete/databases/postgresql/tests/select/nested-statements.test.ts +++ b/src/autocomplete/databases/postgresql/tests/select/nested-statements.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest nested SELECT', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('SELECT * FROM (|'); diff --git a/src/autocomplete/databases/postgresql/tests/select/order-by-clause.test.ts b/src/autocomplete/databases/postgresql/tests/select/order-by-clause.test.ts index f0aa33a2..08402aed 100644 --- a/src/autocomplete/databases/postgresql/tests/select/order-by-clause.test.ts +++ b/src/autocomplete/databases/postgresql/tests/select/order-by-clause.test.ts @@ -1,9 +1,9 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parsePostgreSqlQueryWithCursor} from '../../index'; import { ColumnAliasSuggestion, ColumnSuggestion, KeywordSuggestion, -} from '../../../../autocomplete-types'; +} from '../../../../shared/autocomplete-types'; test('should suggest properly after ORDER', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('SELECT * FROM test_table ORDER |'); diff --git a/src/autocomplete/databases/postgresql/tests/select/select.test.ts b/src/autocomplete/databases/postgresql/tests/select/select.test.ts index 275195a7..7463d885 100644 --- a/src/autocomplete/databases/postgresql/tests/select/select.test.ts +++ b/src/autocomplete/databases/postgresql/tests/select/select.test.ts @@ -1,10 +1,9 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; import { ColumnSuggestion, KeywordSuggestion, TableOrViewSuggestion, -} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +} from '../../../../shared/autocomplete-types'; test('should suggest properly after SELECT', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('SELECT |'); diff --git a/src/autocomplete/databases/postgresql/tests/select/where-clause.test.ts b/src/autocomplete/databases/postgresql/tests/select/where-clause.test.ts index dae27271..d3b7c8f7 100644 --- a/src/autocomplete/databases/postgresql/tests/select/where-clause.test.ts +++ b/src/autocomplete/databases/postgresql/tests/select/where-clause.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after WHERE', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('SELECT * FROM test_table WHERE |'); diff --git a/src/autocomplete/databases/postgresql/tests/set/set.test.ts b/src/autocomplete/databases/postgresql/tests/set/set.test.ts index 05a08486..257b70e9 100644 --- a/src/autocomplete/databases/postgresql/tests/set/set.test.ts +++ b/src/autocomplete/databases/postgresql/tests/set/set.test.ts @@ -1,6 +1,5 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; test('should suggest properly after SET SCHEMA', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('SET SCHEMA |'); diff --git a/src/autocomplete/databases/postgresql/tests/update/update.test.ts b/src/autocomplete/databases/postgresql/tests/update/update.test.ts index 3871403a..d4f41ec3 100644 --- a/src/autocomplete/databases/postgresql/tests/update/update.test.ts +++ b/src/autocomplete/databases/postgresql/tests/update/update.test.ts @@ -1,10 +1,9 @@ -import {parsePostgreSqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {parsePostgreSqlQueryWithCursor, parsePostgreSqlQueryWithoutCursor} from '../../index'; import { ColumnSuggestion, KeywordSuggestion, TableOrViewSuggestion, -} from '../../../../autocomplete-types'; -import {parsePostgreSqlQueryWithoutCursor} from '../../../../autocomplete'; +} from '../../../../shared/autocomplete-types'; test('should suggest properly after UPDATE', () => { const autocompleteResult = parsePostgreSqlQueryWithCursor('UPDATE |'); diff --git a/src/autocomplete/databases/yql/helpers.ts b/src/autocomplete/databases/yql/helpers.ts index c82aca4d..67824620 100644 --- a/src/autocomplete/databases/yql/helpers.ts +++ b/src/autocomplete/databases/yql/helpers.ts @@ -2,8 +2,7 @@ import * as c3 from 'antlr4-c3'; import {type TokenStream} from 'antlr4ng'; import {YQLParser} from './generated/YQLParser'; import {type TokenDictionary, getPreviousToken} from '../../shared/tables'; -import {EntitySuggestion, InternalSuggestions} from './types'; -import {YQLEntity} from '../../autocomplete-types'; +import {EntitySuggestion, InternalSuggestions, YQLEntity} from './types'; export const tokenDictionary: TokenDictionary = { SPACE: YQLParser.WS, diff --git a/src/autocomplete/databases/yql/index.ts b/src/autocomplete/databases/yql/index.ts new file mode 100644 index 00000000..33c4a4bd --- /dev/null +++ b/src/autocomplete/databases/yql/index.ts @@ -0,0 +1,65 @@ +import {CursorPosition} from '../../shared/autocomplete-types'; +import {yqlAutocompleteData, yqlAutocompleteDataYQ} from './yql-autocomplete'; +import {parseQuery, parseQueryWithoutCursor} from '../../shared/autocomplete'; +import {separateQueryAndCursor} from '../../shared/parse-query-with-cursor'; +import {YqlAutocompleteResult} from './types'; + +export type {YqlAutocompleteResult}; + +export function parseYqlQueryWithoutCursor(query: string): Pick { + return parseQueryWithoutCursor( + yqlAutocompleteData.Lexer, + yqlAutocompleteData.Parser, + yqlAutocompleteData.tokenDictionary, + yqlAutocompleteData.getParseTree, + query, + ); +} + +export function parseYqlQuery(query: string, cursor: CursorPosition): YqlAutocompleteResult { + return parseQuery( + yqlAutocompleteData.Lexer, + yqlAutocompleteData.Parser, + yqlAutocompleteData.tokenDictionary, + yqlAutocompleteData.ignoredTokens, + yqlAutocompleteData.rulesToVisit, + yqlAutocompleteData.getParseTree, + yqlAutocompleteData.enrichAutocompleteResult, + query, + cursor, + yqlAutocompleteData.context, + ); +} + +export function parseYqQueryWithoutCursor(query: string): Pick { + return parseQueryWithoutCursor( + yqlAutocompleteDataYQ.Lexer, + yqlAutocompleteDataYQ.Parser, + yqlAutocompleteDataYQ.tokenDictionary, + yqlAutocompleteDataYQ.getParseTree, + query, + ); +} + +export function parseYqQuery(query: string, cursor: CursorPosition): YqlAutocompleteResult { + return parseQuery( + yqlAutocompleteDataYQ.Lexer, + yqlAutocompleteDataYQ.Parser, + yqlAutocompleteDataYQ.tokenDictionary, + yqlAutocompleteDataYQ.ignoredTokens, + yqlAutocompleteDataYQ.rulesToVisit, + yqlAutocompleteDataYQ.getParseTree, + yqlAutocompleteDataYQ.enrichAutocompleteResult, + query, + cursor, + yqlAutocompleteDataYQ.context, + ); +} + +export function parseYqlQueryWithCursor(queryWithCursor: string): YqlAutocompleteResult { + return parseYqlQuery(...separateQueryAndCursor(queryWithCursor)); +} + +export function parseYqQueryWithCursor(queryWithCursor: string): YqlAutocompleteResult { + return parseYqQuery(...separateQueryAndCursor(queryWithCursor)); +} diff --git a/src/autocomplete/databases/yql/tests/yq/empty-query-yq.test.ts b/src/autocomplete/databases/yql/tests/yq/empty-query-yq.test.ts index 176f374a..a9545c4d 100644 --- a/src/autocomplete/databases/yql/tests/yq/empty-query-yq.test.ts +++ b/src/autocomplete/databases/yql/tests/yq/empty-query-yq.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseYqQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parseYqQueryWithCursor} from '../../index'; test('should suggest properly for an empty query', () => { const autocompleteResult = parseYqQueryWithCursor('|'); diff --git a/src/autocomplete/databases/yql/tests/yq/explain/explain.test.ts b/src/autocomplete/databases/yql/tests/yq/explain/explain.test.ts index de4c90d1..90b9f334 100644 --- a/src/autocomplete/databases/yql/tests/yq/explain/explain.test.ts +++ b/src/autocomplete/databases/yql/tests/yq/explain/explain.test.ts @@ -1,5 +1,5 @@ -import {parseYqQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqQueryWithCursor} from '../../../index'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest keywords after EXPLAIN', () => { const autocompleteResult = parseYqQueryWithCursor('EXPLAIN |'); diff --git a/src/autocomplete/databases/yql/tests/yq/insert/insert.test.ts b/src/autocomplete/databases/yql/tests/yq/insert/insert.test.ts index a696eb61..80583d79 100644 --- a/src/autocomplete/databases/yql/tests/yq/insert/insert.test.ts +++ b/src/autocomplete/databases/yql/tests/yq/insert/insert.test.ts @@ -1,5 +1,5 @@ -import {parseYqQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqQueryWithCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after INSERT', () => { const autocompleteResult = parseYqQueryWithCursor('INSERT |'); diff --git a/src/autocomplete/databases/yql/tests/yq/multiple-statements.test.ts b/src/autocomplete/databases/yql/tests/yq/multiple-statements.test.ts index 0a61a2a5..ae63a6f3 100644 --- a/src/autocomplete/databases/yql/tests/yq/multiple-statements.test.ts +++ b/src/autocomplete/databases/yql/tests/yq/multiple-statements.test.ts @@ -1,4 +1,4 @@ -import {parseYqQueryWithoutCursor} from '../../../../autocomplete'; +import {parseYqQueryWithoutCursor} from '../../index'; test('should not report errors on multiple statements', () => { const autocompleteResult = parseYqQueryWithoutCursor(` diff --git a/src/autocomplete/databases/yql/tests/yq/newline.test.ts b/src/autocomplete/databases/yql/tests/yq/newline.test.ts index 816d1daf..3dd99cf6 100644 --- a/src/autocomplete/databases/yql/tests/yq/newline.test.ts +++ b/src/autocomplete/databases/yql/tests/yq/newline.test.ts @@ -1,4 +1,4 @@ -import {parseYqQueryWithoutCursor} from '../../../../autocomplete'; +import {parseYqQueryWithoutCursor} from '../../index'; test('should not report errors with newlines \n', () => { const autocompleteResult = parseYqQueryWithoutCursor('SELECT *\n\n\nFROM test_table'); diff --git a/src/autocomplete/databases/yql/tests/yq/pragma/pragma.test.ts b/src/autocomplete/databases/yql/tests/yq/pragma/pragma.test.ts index 363d1684..4904b7b8 100644 --- a/src/autocomplete/databases/yql/tests/yq/pragma/pragma.test.ts +++ b/src/autocomplete/databases/yql/tests/yq/pragma/pragma.test.ts @@ -1,5 +1,5 @@ -import {parseYqQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqQueryWithCursor} from '../../../index'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after PRAGMA', () => { const autocompleteResult = parseYqQueryWithCursor('PRAGMA |'); diff --git a/src/autocomplete/databases/yql/tests/yq/select/group-by-clause.test.ts b/src/autocomplete/databases/yql/tests/yq/select/group-by-clause.test.ts index 600e36b4..fba5f1e6 100644 --- a/src/autocomplete/databases/yql/tests/yq/select/group-by-clause.test.ts +++ b/src/autocomplete/databases/yql/tests/yq/select/group-by-clause.test.ts @@ -1,9 +1,6 @@ -import {parseYqQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import { - ColumnSuggestion, - KeywordSuggestion, - YqlAutocompleteResult, -} from '../../../../../autocomplete-types'; +import {parseYqQueryWithCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {YqlAutocompleteResult} from '../../../types'; const afterGroupByKeywords: KeywordSuggestion[] = [ {value: 'ALL'}, diff --git a/src/autocomplete/databases/yql/tests/yq/select/join-clause.test.ts b/src/autocomplete/databases/yql/tests/yq/select/join-clause.test.ts index a5770e14..48dbe1b0 100644 --- a/src/autocomplete/databases/yql/tests/yq/select/join-clause.test.ts +++ b/src/autocomplete/databases/yql/tests/yq/select/join-clause.test.ts @@ -1,6 +1,5 @@ -import {parseYqQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqQueryWithoutCursor} from '../../../../../autocomplete'; +import {parseYqQueryWithCursor, parseYqQueryWithoutCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest keywords after INNER', () => { const autocompleteResult = parseYqQueryWithCursor('SELECT * FROM test_table INNER |'); diff --git a/src/autocomplete/databases/yql/tests/yq/select/nested-statements.test.ts b/src/autocomplete/databases/yql/tests/yq/select/nested-statements.test.ts index e563cff1..c215e71e 100644 --- a/src/autocomplete/databases/yql/tests/yq/select/nested-statements.test.ts +++ b/src/autocomplete/databases/yql/tests/yq/select/nested-statements.test.ts @@ -1,6 +1,5 @@ -import {parseYqQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqQueryWithoutCursor} from '../../../../../autocomplete'; +import {parseYqQueryWithCursor, parseYqQueryWithoutCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest nested SELECT', () => { const autocompleteResult = parseYqQueryWithCursor('SELECT * FROM (|'); diff --git a/src/autocomplete/databases/yql/tests/yq/select/order-by-clause.test.ts b/src/autocomplete/databases/yql/tests/yq/select/order-by-clause.test.ts index 247d4325..593185f6 100644 --- a/src/autocomplete/databases/yql/tests/yq/select/order-by-clause.test.ts +++ b/src/autocomplete/databases/yql/tests/yq/select/order-by-clause.test.ts @@ -1,9 +1,6 @@ -import {parseYqQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import { - ColumnSuggestion, - KeywordSuggestion, - YqlAutocompleteResult, -} from '../../../../../autocomplete-types'; +import {parseYqQueryWithCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {YqlAutocompleteResult} from '../../../types'; const afterOrderByKeywords: KeywordSuggestion[] = [ {value: 'NULL'}, diff --git a/src/autocomplete/databases/yql/tests/yq/select/select.test.ts b/src/autocomplete/databases/yql/tests/yq/select/select.test.ts index d97bd460..2c379a94 100644 --- a/src/autocomplete/databases/yql/tests/yq/select/select.test.ts +++ b/src/autocomplete/databases/yql/tests/yq/select/select.test.ts @@ -1,6 +1,5 @@ -import {parseYqQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqQueryWithoutCursor} from '../../../../../autocomplete'; +import {parseYqQueryWithCursor, parseYqQueryWithoutCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after SELECT', () => { const autocompleteResult = parseYqQueryWithCursor('SELECT |'); diff --git a/src/autocomplete/databases/yql/tests/yq/select/where-clause.test.ts b/src/autocomplete/databases/yql/tests/yq/select/where-clause.test.ts index a71c0b61..568497b6 100644 --- a/src/autocomplete/databases/yql/tests/yq/select/where-clause.test.ts +++ b/src/autocomplete/databases/yql/tests/yq/select/where-clause.test.ts @@ -1,10 +1,6 @@ -import {parseYqQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import { - ColumnSuggestion, - KeywordSuggestion, - YqlAutocompleteResult, -} from '../../../../../autocomplete-types'; -import {parseYqQueryWithoutCursor} from '../../../../../autocomplete'; +import {parseYqQueryWithCursor, parseYqQueryWithoutCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {YqlAutocompleteResult} from '../../../types'; const AfterWhereKeywords: KeywordSuggestion[] = [ {value: 'NULL'}, diff --git a/src/autocomplete/databases/yql/tests/yql/alter/alter-group.test.ts b/src/autocomplete/databases/yql/tests/yql/alter/alter-group.test.ts index 5db799d1..d4ba3564 100644 --- a/src/autocomplete/databases/yql/tests/yql/alter/alter-group.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/alter/alter-group.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; test('should suggest keywords after GROUP ', () => { const autocompleteResult = parseYqlQueryWithCursor('ALTER GROUP |'); diff --git a/src/autocomplete/databases/yql/tests/yql/alter/alter-object.test.ts b/src/autocomplete/databases/yql/tests/yql/alter/alter-object.test.ts index 234ef9e1..2a8cfec0 100644 --- a/src/autocomplete/databases/yql/tests/yql/alter/alter-object.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/alter/alter-object.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; test('should suggest keywords after OBJECT ', () => { const autocompleteResult = parseYqlQueryWithCursor('ALTER OBJECT |'); diff --git a/src/autocomplete/databases/yql/tests/yql/alter/alter-replication.test.ts b/src/autocomplete/databases/yql/tests/yql/alter/alter-replication.test.ts index 64a89609..e21eb779 100644 --- a/src/autocomplete/databases/yql/tests/yql/alter/alter-replication.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/alter/alter-replication.test.ts @@ -1,6 +1,5 @@ -import {parseYqlQueryWithoutCursor} from '../../../../../autocomplete'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {parseYqlQueryWithCursor, parseYqlQueryWithoutCursor} from '../../../index'; test('should suggest keywords after ASYNC ', () => { const autocompleteResult = parseYqlQueryWithCursor('ALTER ASYNC |'); diff --git a/src/autocomplete/databases/yql/tests/yql/alter/alter-table-store.test.ts b/src/autocomplete/databases/yql/tests/yql/alter/alter-table-store.test.ts index 3965ec7f..2870f392 100644 --- a/src/autocomplete/databases/yql/tests/yql/alter/alter-table-store.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/alter/alter-table-store.test.ts @@ -1,5 +1,5 @@ -import {ColumnSuggestion, KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; test('should suggest keywords after TABLESTORE ', () => { const autocompleteResult = parseYqlQueryWithCursor('ALTER TABLESTORE |'); diff --git a/src/autocomplete/databases/yql/tests/yql/alter/alter-table.test.ts b/src/autocomplete/databases/yql/tests/yql/alter/alter-table.test.ts index 5d6c6af2..e1354bcc 100644 --- a/src/autocomplete/databases/yql/tests/yql/alter/alter-table.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/alter/alter-table.test.ts @@ -1,10 +1,9 @@ -import {parseYqlQueryWithoutCursor} from '../../../../../autocomplete'; import { ColumnSuggestion, KeywordSuggestion, TableIndexSuggestion, -} from '../../../../../autocomplete-types'; -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; +} from '../../../../../shared/autocomplete-types'; +import {parseYqlQueryWithCursor, parseYqlQueryWithoutCursor} from '../../../index'; test('should suggest keywords after table name', () => { const autocompleteResult = parseYqlQueryWithCursor('ALTER TABLE test_table |'); diff --git a/src/autocomplete/databases/yql/tests/yql/alter/alter-topic.test.ts b/src/autocomplete/databases/yql/tests/yql/alter/alter-topic.test.ts index 86cf4703..a863925a 100644 --- a/src/autocomplete/databases/yql/tests/yql/alter/alter-topic.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/alter/alter-topic.test.ts @@ -1,6 +1,5 @@ -import {parseYqlQueryWithoutCursor} from '../../../../../autocomplete'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {parseYqlQueryWithCursor, parseYqlQueryWithoutCursor} from '../../../index'; test('should suggest keywords after TOPIC ', () => { const autocompleteResult = parseYqlQueryWithCursor('ALTER TOPIC |'); diff --git a/src/autocomplete/databases/yql/tests/yql/alter/alter-user.test.ts b/src/autocomplete/databases/yql/tests/yql/alter/alter-user.test.ts index 5880bd08..874a6d70 100644 --- a/src/autocomplete/databases/yql/tests/yql/alter/alter-user.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/alter/alter-user.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; test('should suggest keywords after USER ', () => { const autocompleteResult = parseYqlQueryWithCursor('ALTER USER |'); diff --git a/src/autocomplete/databases/yql/tests/yql/alter/alter.test.ts b/src/autocomplete/databases/yql/tests/yql/alter/alter.test.ts index 606986f5..922ecec1 100644 --- a/src/autocomplete/databases/yql/tests/yql/alter/alter.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/alter/alter.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; test('should suggest keywords after ALTER', () => { const autocompleteResult = parseYqlQueryWithCursor('ALTER |'); diff --git a/src/autocomplete/databases/yql/tests/yql/create/create-external.test.ts b/src/autocomplete/databases/yql/tests/yql/create/create-external.test.ts index 49b3ca51..63864c35 100644 --- a/src/autocomplete/databases/yql/tests/yql/create/create-external.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/create/create-external.test.ts @@ -1,5 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after EXTERNAL', () => { const autocompleteResult = parseYqlQueryWithCursor('CREATE EXTERNAL |'); diff --git a/src/autocomplete/databases/yql/tests/yql/create/create-group.test.ts b/src/autocomplete/databases/yql/tests/yql/create/create-group.test.ts index f497d02d..1416d1af 100644 --- a/src/autocomplete/databases/yql/tests/yql/create/create-group.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/create/create-group.test.ts @@ -1,5 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after GROUP', () => { const autocompleteResult = parseYqlQueryWithCursor('CREATE GROUP |'); diff --git a/src/autocomplete/databases/yql/tests/yql/create/create-object.test.ts b/src/autocomplete/databases/yql/tests/yql/create/create-object.test.ts index 46e0e3be..c0ecfecd 100644 --- a/src/autocomplete/databases/yql/tests/yql/create/create-object.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/create/create-object.test.ts @@ -1,5 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after OBJECT', () => { const autocompleteResult = parseYqlQueryWithCursor('CREATE OBJECT |'); diff --git a/src/autocomplete/databases/yql/tests/yql/create/create-replication.test.ts b/src/autocomplete/databases/yql/tests/yql/create/create-replication.test.ts index 2eb7d12e..480f5eb9 100644 --- a/src/autocomplete/databases/yql/tests/yql/create/create-replication.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/create/create-replication.test.ts @@ -1,5 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after ASYNC', () => { const autocompleteResult = parseYqlQueryWithCursor('CREATE ASYNC |'); diff --git a/src/autocomplete/databases/yql/tests/yql/create/create-table.test.ts b/src/autocomplete/databases/yql/tests/yql/create/create-table.test.ts index 22caecc8..d0cd9124 100644 --- a/src/autocomplete/databases/yql/tests/yql/create/create-table.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/create/create-table.test.ts @@ -1,5 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after TABLE', () => { const autocompleteResult = parseYqlQueryWithCursor('CREATE TABLE |'); diff --git a/src/autocomplete/databases/yql/tests/yql/create/create-topic.test.ts b/src/autocomplete/databases/yql/tests/yql/create/create-topic.test.ts index e8749525..d3baca8a 100644 --- a/src/autocomplete/databases/yql/tests/yql/create/create-topic.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/create/create-topic.test.ts @@ -1,5 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after TOPIC', () => { const autocompleteResult = parseYqlQueryWithCursor('CREATE TOPIC |'); diff --git a/src/autocomplete/databases/yql/tests/yql/create/create-user.test.ts b/src/autocomplete/databases/yql/tests/yql/create/create-user.test.ts index 39b9e818..88249342 100644 --- a/src/autocomplete/databases/yql/tests/yql/create/create-user.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/create/create-user.test.ts @@ -1,5 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after USER', () => { const autocompleteResult = parseYqlQueryWithCursor('CREATE USER |'); diff --git a/src/autocomplete/databases/yql/tests/yql/create/create-view.test.ts b/src/autocomplete/databases/yql/tests/yql/create/create-view.test.ts index 14216453..f13e2f96 100644 --- a/src/autocomplete/databases/yql/tests/yql/create/create-view.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/create/create-view.test.ts @@ -1,5 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after VIEW', () => { const autocompleteResult = parseYqlQueryWithCursor('CREATE VIEW |'); diff --git a/src/autocomplete/databases/yql/tests/yql/create/create.test.ts b/src/autocomplete/databases/yql/tests/yql/create/create.test.ts index 0766ea93..319b84da 100644 --- a/src/autocomplete/databases/yql/tests/yql/create/create.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/create/create.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; test('should suggest properly after CREATE', () => { const autocompleteResult = parseYqlQueryWithCursor('CREATE |'); diff --git a/src/autocomplete/databases/yql/tests/yql/delete/delete.test.ts b/src/autocomplete/databases/yql/tests/yql/delete/delete.test.ts index 116b2a74..8ca0f46d 100644 --- a/src/autocomplete/databases/yql/tests/yql/delete/delete.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/delete/delete.test.ts @@ -1,5 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after DELETE', () => { const autocompleteResult = parseYqlQueryWithCursor('DELETE |'); diff --git a/src/autocomplete/databases/yql/tests/yql/drop/drop.test.ts b/src/autocomplete/databases/yql/tests/yql/drop/drop.test.ts index 10401bb9..25fc4ac8 100644 --- a/src/autocomplete/databases/yql/tests/yql/drop/drop.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/drop/drop.test.ts @@ -1,5 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest keywords after DROP', () => { const autocompleteResult = parseYqlQueryWithCursor('DROP |'); diff --git a/src/autocomplete/databases/yql/tests/yql/empty-query.test.ts b/src/autocomplete/databases/yql/tests/yql/empty-query.test.ts index 653b7c0b..a0c79252 100644 --- a/src/autocomplete/databases/yql/tests/yql/empty-query.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/empty-query.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion} from '../../../../autocomplete-types'; -import {parseYqlQueryWithCursor} from '../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../shared/autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../index'; test('should suggest properly for an empty query', () => { const autocompleteResult = parseYqlQueryWithCursor('|'); diff --git a/src/autocomplete/databases/yql/tests/yql/explain/explain.test.ts b/src/autocomplete/databases/yql/tests/yql/explain/explain.test.ts index 9b9b5f5e..79a936b7 100644 --- a/src/autocomplete/databases/yql/tests/yql/explain/explain.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/explain/explain.test.ts @@ -1,5 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest keywords after EXPLAIN', () => { const autocompleteResult = parseYqlQueryWithCursor('EXPLAIN |'); diff --git a/src/autocomplete/databases/yql/tests/yql/grant/grant.test.ts b/src/autocomplete/databases/yql/tests/yql/grant/grant.test.ts index 6571b308..2979a44f 100644 --- a/src/autocomplete/databases/yql/tests/yql/grant/grant.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/grant/grant.test.ts @@ -1,5 +1,5 @@ -import {KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; test('should suggest keywords after GRANT', () => { const autocompleteResult = parseYqlQueryWithCursor('GRANT |'); diff --git a/src/autocomplete/databases/yql/tests/yql/insert/insert.test.ts b/src/autocomplete/databases/yql/tests/yql/insert/insert.test.ts index 35b6bc77..399d74ee 100644 --- a/src/autocomplete/databases/yql/tests/yql/insert/insert.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/insert/insert.test.ts @@ -1,5 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after INSERT', () => { const autocompleteResult = parseYqlQueryWithCursor('INSERT |'); diff --git a/src/autocomplete/databases/yql/tests/yql/multiple-statements.test.ts b/src/autocomplete/databases/yql/tests/yql/multiple-statements.test.ts index 5a989cd2..1dc76671 100644 --- a/src/autocomplete/databases/yql/tests/yql/multiple-statements.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/multiple-statements.test.ts @@ -1,4 +1,4 @@ -import {parseYqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseYqlQueryWithoutCursor} from '../../index'; test('should not report errors on multiple statements', () => { const autocompleteResult = parseYqlQueryWithoutCursor(` diff --git a/src/autocomplete/databases/yql/tests/yql/newline.test.ts b/src/autocomplete/databases/yql/tests/yql/newline.test.ts index 3b028acf..4ece38d1 100644 --- a/src/autocomplete/databases/yql/tests/yql/newline.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/newline.test.ts @@ -1,4 +1,4 @@ -import {parseYqlQueryWithoutCursor} from '../../../../autocomplete'; +import {parseYqlQueryWithoutCursor} from '../../index'; test('should not report errors with newlines \n', () => { const autocompleteResult = parseYqlQueryWithoutCursor('SELECT *\n\n\nFROM test_table'); diff --git a/src/autocomplete/databases/yql/tests/yql/pragma/pragma.test.ts b/src/autocomplete/databases/yql/tests/yql/pragma/pragma.test.ts index 7417e1a2..73398e54 100644 --- a/src/autocomplete/databases/yql/tests/yql/pragma/pragma.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/pragma/pragma.test.ts @@ -1,5 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {KeywordSuggestion} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after PRAGMA', () => { const autocompleteResult = parseYqlQueryWithCursor('PRAGMA |'); diff --git a/src/autocomplete/databases/yql/tests/yql/select/group-by-clause.test.ts b/src/autocomplete/databases/yql/tests/yql/select/group-by-clause.test.ts index 4d242bee..10e1f3ed 100644 --- a/src/autocomplete/databases/yql/tests/yql/select/group-by-clause.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/select/group-by-clause.test.ts @@ -1,9 +1,6 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import { - ColumnSuggestion, - KeywordSuggestion, - YqlAutocompleteResult, -} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {YqlAutocompleteResult} from '../../../types'; const afterGroupByKeywords: KeywordSuggestion[] = [ {value: 'ALL'}, diff --git a/src/autocomplete/databases/yql/tests/yql/select/join-clause.test.ts b/src/autocomplete/databases/yql/tests/yql/select/join-clause.test.ts index 015499bb..1437709b 100644 --- a/src/autocomplete/databases/yql/tests/yql/select/join-clause.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/select/join-clause.test.ts @@ -1,6 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqlQueryWithoutCursor} from '../../../../../autocomplete'; +import {parseYqlQueryWithCursor, parseYqlQueryWithoutCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest keywords after INNER', () => { const autocompleteResult = parseYqlQueryWithCursor('SELECT * FROM test_table INNER |'); diff --git a/src/autocomplete/databases/yql/tests/yql/select/nested-statements.test.ts b/src/autocomplete/databases/yql/tests/yql/select/nested-statements.test.ts index 2a6c1e54..f2c36b6f 100644 --- a/src/autocomplete/databases/yql/tests/yql/select/nested-statements.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/select/nested-statements.test.ts @@ -1,6 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqlQueryWithoutCursor} from '../../../../../autocomplete'; +import {parseYqlQueryWithCursor, parseYqlQueryWithoutCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest nested SELECT', () => { const autocompleteResult = parseYqlQueryWithCursor('SELECT * FROM (|'); diff --git a/src/autocomplete/databases/yql/tests/yql/select/order-by-clause.test.ts b/src/autocomplete/databases/yql/tests/yql/select/order-by-clause.test.ts index 285a3642..293afb2f 100644 --- a/src/autocomplete/databases/yql/tests/yql/select/order-by-clause.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/select/order-by-clause.test.ts @@ -1,9 +1,6 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import { - ColumnSuggestion, - KeywordSuggestion, - YqlAutocompleteResult, -} from '../../../../../autocomplete-types'; +import {parseYqlQueryWithCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {YqlAutocompleteResult} from '../../../types'; const afterOrderByKeywords: KeywordSuggestion[] = [ {value: 'NULL'}, diff --git a/src/autocomplete/databases/yql/tests/yql/select/select.test.ts b/src/autocomplete/databases/yql/tests/yql/select/select.test.ts index f67396cb..6f43ee77 100644 --- a/src/autocomplete/databases/yql/tests/yql/select/select.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/select/select.test.ts @@ -1,6 +1,5 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import {ColumnSuggestion, KeywordSuggestion} from '../../../../../autocomplete-types'; -import {parseYqlQueryWithoutCursor} from '../../../../../autocomplete'; +import {parseYqlQueryWithCursor, parseYqlQueryWithoutCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; test('should suggest properly after SELECT', () => { const autocompleteResult = parseYqlQueryWithCursor('SELECT |'); diff --git a/src/autocomplete/databases/yql/tests/yql/select/where-clause.test.ts b/src/autocomplete/databases/yql/tests/yql/select/where-clause.test.ts index 7fc17a81..fb9355b3 100644 --- a/src/autocomplete/databases/yql/tests/yql/select/where-clause.test.ts +++ b/src/autocomplete/databases/yql/tests/yql/select/where-clause.test.ts @@ -1,10 +1,6 @@ -import {parseYqlQueryWithCursor} from '../../../../../shared/parse-query-with-cursor'; -import { - ColumnSuggestion, - KeywordSuggestion, - YqlAutocompleteResult, -} from '../../../../../autocomplete-types'; -import {parseYqlQueryWithoutCursor} from '../../../../../autocomplete'; +import {parseYqlQueryWithCursor, parseYqlQueryWithoutCursor} from '../../../index'; +import {ColumnSuggestion, KeywordSuggestion} from '../../../../../shared/autocomplete-types'; +import {YqlAutocompleteResult} from '../../../types'; const AfterWhereKeywords: KeywordSuggestion[] = [ {value: 'NULL'}, diff --git a/src/autocomplete/databases/yql/types.ts b/src/autocomplete/databases/yql/types.ts index c5f69bc6..3a7ea648 100644 --- a/src/autocomplete/databases/yql/types.ts +++ b/src/autocomplete/databases/yql/types.ts @@ -1,4 +1,4 @@ -import {YqlAutocompleteResult} from '../../autocomplete-types'; +import {AutocompleteResultBase, TableIndexSuggestion} from '../../shared/autocomplete-types'; export type EntitySuggestion = | 'suggestObject' @@ -32,3 +32,29 @@ export interface InternalSuggestions shouldSuggestColumns?: boolean; shouldSuggestColumnAliases?: boolean; } + +export type YQLEntity = + | 'externalDataSource' + | 'externalTable' + | 'view' + | 'object' + | 'tableStore' + | 'table' + | 'replication' + | 'topic' + | 'group' + | 'user' + | 'tableIndex' + | 'topicConsumer'; + +export interface YqlAutocompleteResult extends AutocompleteResultBase { + suggestTableIndexes?: TableIndexSuggestion; + suggestEntity?: YQLEntity[]; + suggestSimpleTypes?: boolean; + suggestUdfs?: boolean; + suggestWindowFunctions?: boolean; + suggestTableFunctions?: boolean; + suggestPragmas?: boolean; + suggestTableHints?: string; + suggestEntitySettings?: YQLEntity; +} diff --git a/src/autocomplete/databases/yql/yql-autocomplete.ts b/src/autocomplete/databases/yql/yql-autocomplete.ts index f6e70dea..12316410 100644 --- a/src/autocomplete/databases/yql/yql-autocomplete.ts +++ b/src/autocomplete/databases/yql/yql-autocomplete.ts @@ -22,14 +22,13 @@ import { GetParseTree, ISymbolTableVisitor, ProcessVisitedRulesResult, - YqlAutocompleteResult, -} from '../../autocomplete-types.js'; +} from '../../shared/autocomplete-types'; import {ColumnAliasSymbol, TableSymbol} from '../../shared/symbol-table.js'; -import {TableQueryPosition, getContextSuggestions} from '../../shared/tables.js'; +import {TableQueryPosition, getContextSuggestions} from '../../shared/tables'; import {isStartingToWriteRule} from '../../shared/cursor.js'; import {shouldSuggestTemplates} from '../../shared/query.js'; import {EntitySuggestionToYqlEntity, getGranularSuggestions, tokenDictionary} from './helpers'; -import {EntitySuggestion, InternalSuggestions} from './types'; +import {EntitySuggestion, InternalSuggestions, YqlAutocompleteResult} from './types'; // These are keywords that we do not want to show in autocomplete function getIgnoredTokens(): number[] { diff --git a/src/autocomplete/autocomplete-types.ts b/src/autocomplete/shared/autocomplete-types.ts similarity index 66% rename from src/autocomplete/autocomplete-types.ts rename to src/autocomplete/shared/autocomplete-types.ts index ad940cb2..e26aa6ff 100644 --- a/src/autocomplete/autocomplete-types.ts +++ b/src/autocomplete/shared/autocomplete-types.ts @@ -10,8 +10,8 @@ import { } from 'antlr4ng'; import * as c3 from 'antlr4-c3'; -import {TokenPosition} from './shared/cursor'; -import {TableQueryPosition, TokenDictionary} from './shared/tables'; +import {TokenPosition} from './cursor'; +import {TableQueryPosition, TokenDictionary} from './tables'; export interface AutocompleteResultBase { errors: ParserSyntaxError[]; @@ -24,56 +24,6 @@ export interface AutocompleteResultBase { suggestDatabases?: boolean; } -export interface MySqlAutocompleteResult extends AutocompleteResultBase { - suggestViewsOrTables?: TableOrViewSuggestion; - suggestIndexes?: boolean; - suggestTriggers?: boolean; - suggestConstraints?: ConstraintSuggestion; - suggestRoles?: boolean; - suggestUsers?: boolean; -} - -export interface PostgreSqlAutocompleteResult extends AutocompleteResultBase { - suggestViewsOrTables?: TableOrViewSuggestion; - suggestIndexes?: boolean; - suggestTriggers?: boolean; - suggestConstraints?: ConstraintSuggestion; - suggestSequences?: boolean; - suggestSchemas?: boolean; - suggestRoles?: boolean; -} - -export interface ClickHouseAutocompleteResult extends AutocompleteResultBase { - suggestViewsOrTables?: TableOrViewSuggestion; - suggestEngines?: EngineSuggestion; -} - -export type YQLEntity = - | 'externalDataSource' - | 'externalTable' - | 'view' - | 'object' - | 'tableStore' - | 'table' - | 'replication' - | 'topic' - | 'group' - | 'user' - | 'tableIndex' - | 'topicConsumer'; - -export interface YqlAutocompleteResult extends AutocompleteResultBase { - suggestTableIndexes?: TableIndexSuggestion; - suggestEntity?: YQLEntity[]; - suggestSimpleTypes?: boolean; - suggestUdfs?: boolean; - suggestWindowFunctions?: boolean; - suggestTableFunctions?: boolean; - suggestPragmas?: boolean; - suggestTableHints?: string; - suggestEntitySettings?: YQLEntity; -} - export interface ParserSyntaxError extends TokenPosition { message: string; } diff --git a/src/autocomplete/shared/autocomplete.ts b/src/autocomplete/shared/autocomplete.ts new file mode 100644 index 00000000..7b9f2bbd --- /dev/null +++ b/src/autocomplete/shared/autocomplete.ts @@ -0,0 +1,94 @@ +import { + AutocompleteResultBase, + CursorPosition, + EnrichAutocompleteResult, + GetParseTree, + KeywordSuggestion, + LexerConstructor, + ParserConstructor, +} from './autocomplete-types'; +import {Lexer as LexerType, ParserRuleContext, Parser as ParserType} from 'antlr4ng'; +import {TokenDictionary} from './tables'; +import {createParser} from './query'; +import {SqlErrorListener} from './sql-error-listener'; +import * as c3 from 'antlr4-c3'; +import {findCursorTokenIndex} from './cursor'; + +export function parseQueryWithoutCursor( + Lexer: LexerConstructor, + Parser: ParserConstructor

, + tokenDictionary: TokenDictionary, + getParseTree: GetParseTree

, + query: string, +): Pick { + const parser = createParser(Lexer, Parser, query); + const errorListener = new SqlErrorListener(tokenDictionary.SPACE); + + parser.removeErrorListeners(); + parser.addErrorListener(errorListener); + getParseTree(parser); + + return {errors: errorListener.errors}; +} + +const quotesRegex = /^'(.*)'$/; + +export function parseQuery< + A extends AutocompleteResultBase, + L extends LexerType, + P extends ParserType, +>( + Lexer: LexerConstructor, + Parser: ParserConstructor

, + tokenDictionary: TokenDictionary, + ignoredTokens: Set, + rulesToVisit: Set, + getParseTree: GetParseTree

, + enrichAutocompleteResult: EnrichAutocompleteResult, + query: string, + cursor: CursorPosition, + context?: ParserRuleContext, +): A { + const parser = createParser(Lexer, Parser, query); + const {tokenStream} = parser; + const errorListener = new SqlErrorListener(tokenDictionary.SPACE); + + parser.removeErrorListeners(); + parser.addErrorListener(errorListener); + getParseTree(parser); + + const core = new c3.CodeCompletionCore(parser); + core.ignoredTokens = ignoredTokens; + core.preferredRules = rulesToVisit; + const cursorTokenIndex = findCursorTokenIndex(tokenStream, cursor, tokenDictionary.SPACE); + + if (cursorTokenIndex === undefined) { + throw new Error( + `Could not find cursor token index for line: ${cursor.line}, column: ${cursor.column}`, + ); + } + + const suggestKeywords: KeywordSuggestion[] = []; + const {tokens, rules} = core.collectCandidates(cursorTokenIndex, context); + tokens.forEach((_, tokenType) => { + // Literal keyword names are quoted + const literalName = parser.vocabulary.getLiteralName(tokenType)?.replace(quotesRegex, '$1'); + // ClickHouse Parser does not give out literal names + const name = literalName || parser.vocabulary.getSymbolicName(tokenType); + + if (!name) { + throw new Error(`Could not get name for token ${tokenType}`); + } + + suggestKeywords.push({ + value: name, + }); + }); + + const result: AutocompleteResultBase = { + errors: errorListener.errors, + suggestKeywords, + }; + + return enrichAutocompleteResult(result, rules, tokenStream, cursorTokenIndex, cursor, query); +} diff --git a/src/autocomplete/shared/cursor.test.ts b/src/autocomplete/shared/cursor.test.ts index 37a837c4..ab5ec745 100644 --- a/src/autocomplete/shared/cursor.test.ts +++ b/src/autocomplete/shared/cursor.test.ts @@ -2,7 +2,7 @@ import {CharStream, CommonTokenStream} from 'antlr4ng'; import {findCursorTokenIndex} from './cursor'; import {mySqlAutocompleteData} from '../databases/mysql/mysql-autocomplete'; -import {CursorPosition} from '../autocomplete-types'; +import {CursorPosition} from './autocomplete-types'; function getCursorIndex(query: string, cursor: CursorPosition): number | undefined { const inputStream = CharStream.fromString(query); diff --git a/src/autocomplete/shared/cursor.ts b/src/autocomplete/shared/cursor.ts index 422c6751..53a0f112 100644 --- a/src/autocomplete/shared/cursor.ts +++ b/src/autocomplete/shared/cursor.ts @@ -1,6 +1,6 @@ import {Token, TokenStream} from 'antlr4ng'; import {ICandidateRule} from 'antlr4-c3'; -import {CursorPosition} from '../autocomplete-types'; +import {CursorPosition} from './autocomplete-types'; export interface TokenPosition { startLine: number; diff --git a/src/autocomplete/shared/index.ts b/src/autocomplete/shared/index.ts new file mode 100644 index 00000000..8d7d9526 --- /dev/null +++ b/src/autocomplete/shared/index.ts @@ -0,0 +1,15 @@ +export * from './autocomplete'; + +export * from './autocomplete-types'; + +export * from './cursor'; + +export * from './parse-query-with-cursor'; + +export * from './query'; + +export * from './sql-error-listener'; + +export * from './symbol-table'; + +export * from './tables'; diff --git a/src/autocomplete/shared/parse-query-with-cursor.ts b/src/autocomplete/shared/parse-query-with-cursor.ts index 9cfc1d36..15f03ea4 100644 --- a/src/autocomplete/shared/parse-query-with-cursor.ts +++ b/src/autocomplete/shared/parse-query-with-cursor.ts @@ -1,42 +1,5 @@ -import { - ClickHouseAutocompleteResult, - CursorPosition, - MySqlAutocompleteResult, - PostgreSqlAutocompleteResult, - YqlAutocompleteResult, -} from '../autocomplete-types'; +import {CursorPosition} from './autocomplete-types'; import {lineSeparatorRegex} from './cursor'; -import { - parseClickHouseQuery, - parseMySqlQuery, - parsePostgreSqlQuery, - parseYqQuery, - parseYqlQuery, -} from '../autocomplete'; - -export function parseMySqlQueryWithCursor(queryWithCursor: string): MySqlAutocompleteResult { - return parseMySqlQuery(...separateQueryAndCursor(queryWithCursor)); -} - -export function parsePostgreSqlQueryWithCursor( - queryWithCursor: string, -): PostgreSqlAutocompleteResult { - return parsePostgreSqlQuery(...separateQueryAndCursor(queryWithCursor)); -} - -export function parseClickHouseQueryWithCursor( - queryWithCursor: string, -): ClickHouseAutocompleteResult { - return parseClickHouseQuery(...separateQueryAndCursor(queryWithCursor)); -} - -export function parseYqlQueryWithCursor(queryWithCursor: string): YqlAutocompleteResult { - return parseYqlQuery(...separateQueryAndCursor(queryWithCursor)); -} - -export function parseYqQueryWithCursor(queryWithCursor: string): YqlAutocompleteResult { - return parseYqQuery(...separateQueryAndCursor(queryWithCursor)); -} // separateQueryAndCursor helps to calculate cursor position based on the pipe symbol `|`. // diff --git a/src/autocomplete/shared/query.ts b/src/autocomplete/shared/query.ts index fd74b897..66c37d9f 100644 --- a/src/autocomplete/shared/query.ts +++ b/src/autocomplete/shared/query.ts @@ -1,6 +1,6 @@ import {CharStream, CommonTokenStream, Lexer as LexerType, Parser as ParserType} from 'antlr4ng'; -import {CursorPosition, LexerConstructor, ParserConstructor} from '../autocomplete-types'; +import {CursorPosition, LexerConstructor, ParserConstructor} from './autocomplete-types'; import {getCursorIndex} from './cursor'; export function getCurrentStatement( diff --git a/src/autocomplete/shared/symbol-table.ts b/src/autocomplete/shared/symbol-table.ts index 8432df55..436fbae0 100644 --- a/src/autocomplete/shared/symbol-table.ts +++ b/src/autocomplete/shared/symbol-table.ts @@ -1,5 +1,5 @@ import * as c3 from 'antlr4-c3'; -import {ColumnAliasSuggestion, SymbolTableVisitor, Table} from '../autocomplete-types'; +import {ColumnAliasSuggestion, SymbolTableVisitor, Table} from './autocomplete-types'; export class TableSymbol extends c3.TypedSymbol { name: string; diff --git a/src/autocomplete/shared/tables.ts b/src/autocomplete/shared/tables.ts index f867f14d..8bab2a47 100644 --- a/src/autocomplete/shared/tables.ts +++ b/src/autocomplete/shared/tables.ts @@ -10,7 +10,7 @@ import { ParserConstructor, SymbolTableVisitor, TableContextSuggestion, -} from '../autocomplete-types'; +} from './autocomplete-types'; interface TableQueryPositionBase { start: number; diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 3a6a24bd..00000000 --- a/src/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -export { - parseMySqlQuery, - parseMySqlQueryWithoutCursor, - parsePostgreSqlQuery, - parsePostgreSqlQueryWithoutCursor, - parseClickHouseQuery, - parseClickHouseQueryWithoutCursor, - parseYqlQuery, - parseYqlQueryWithoutCursor, - parseYqQuery, - parseYqQueryWithoutCursor, -} from './autocomplete/autocomplete'; - -export { - AutocompleteResultBase, - MySqlAutocompleteResult, - PostgreSqlAutocompleteResult, - ClickHouseAutocompleteResult, - YqlAutocompleteResult, - YQLEntity, - TableOrViewSuggestion, - KeywordSuggestion, - ParserSyntaxError, - ColumnSuggestion, - ColumnAliasSuggestion, - EngineSuggestion, - CursorPosition, - ConstraintSuggestion, - Table, -} from './autocomplete/autocomplete-types'; diff --git a/tsconfig.build.json b/tsconfig.build.json index 080da221..b788895c 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,6 +1,6 @@ { "extends": "./tsconfig.json", - "include": ["src/index.ts"], + "include": ["src"], "exclude": ["node_modules"], "compilerOptions": { "emitDeclarationOnly": true