dt-sql-parser 4.0.1 → 4.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +6 -1
  2. package/dist/lib/flink/FlinkSqlLexer.js +1 -2
  3. package/dist/lib/flink/FlinkSqlParser.d.ts +175 -174
  4. package/dist/lib/flink/FlinkSqlParser.js +2315 -2388
  5. package/dist/lib/flink/FlinkSqlParserListener.d.ts +5 -16
  6. package/dist/lib/flink/FlinkSqlParserVisitor.d.ts +3 -10
  7. package/dist/lib/hive/HiveSqlLexer.js +1 -2
  8. package/dist/lib/hive/HiveSqlParser.d.ts +3 -1
  9. package/dist/lib/hive/HiveSqlParser.js +8 -9
  10. package/dist/lib/impala/ImpalaSqlLexer.js +1 -2
  11. package/dist/lib/impala/ImpalaSqlParser.d.ts +123 -107
  12. package/dist/lib/impala/ImpalaSqlParser.js +3223 -3155
  13. package/dist/lib/impala/ImpalaSqlParserListener.d.ts +22 -0
  14. package/dist/lib/impala/ImpalaSqlParserVisitor.d.ts +14 -0
  15. package/dist/lib/mysql/MySqlLexer.js +1 -2
  16. package/dist/lib/mysql/MySqlParser.d.ts +469 -422
  17. package/dist/lib/mysql/MySqlParser.js +11463 -10512
  18. package/dist/lib/mysql/MySqlParserListener.d.ts +42 -20
  19. package/dist/lib/mysql/MySqlParserVisitor.d.ts +26 -12
  20. package/dist/lib/postgresql/PostgreSqlLexer.js +1 -2
  21. package/dist/lib/postgresql/PostgreSqlParser.d.ts +2025 -6265
  22. package/dist/lib/postgresql/PostgreSqlParser.js +60092 -88368
  23. package/dist/lib/postgresql/PostgreSqlParserListener.d.ts +1688 -6083
  24. package/dist/lib/postgresql/PostgreSqlParserVisitor.d.ts +712 -3511
  25. package/dist/lib/spark/SparkSqlLexer.js +1 -2
  26. package/dist/lib/spark/SparkSqlParser.d.ts +16 -13
  27. package/dist/lib/spark/SparkSqlParser.js +50 -51
  28. package/dist/lib/spark/SparkSqlParserListener.d.ts +10 -10
  29. package/dist/lib/spark/SparkSqlParserVisitor.d.ts +6 -6
  30. package/dist/lib/trino/TrinoSqlLexer.d.ts +323 -260
  31. package/dist/lib/trino/TrinoSqlLexer.js +1610 -1264
  32. package/dist/lib/trino/TrinoSqlListener.d.ts +1311 -200
  33. package/dist/lib/trino/TrinoSqlParser.d.ts +1908 -562
  34. package/dist/lib/trino/TrinoSqlParser.js +22629 -13412
  35. package/dist/lib/trino/TrinoSqlVisitor.d.ts +761 -69
  36. package/dist/locale/locale.d.ts +41 -0
  37. package/dist/locale/locale.js +43 -0
  38. package/dist/parser/common/basicSQL.d.ts +7 -2
  39. package/dist/parser/common/basicSQL.js +5 -15
  40. package/dist/parser/common/entityCollector.d.ts +60 -12
  41. package/dist/parser/common/entityCollector.js +141 -17
  42. package/dist/parser/common/parseErrorListener.d.ts +6 -3
  43. package/dist/parser/common/parseErrorListener.js +83 -2
  44. package/dist/parser/common/textAndWord.d.ts +6 -9
  45. package/dist/parser/common/textAndWord.js +9 -20
  46. package/dist/parser/common/transform.d.ts +8 -0
  47. package/dist/parser/common/transform.js +11 -0
  48. package/dist/parser/common/types.d.ts +1 -0
  49. package/dist/parser/flink/flinkEntityCollector.js +40 -6
  50. package/dist/parser/flink/flinkErrorListener.d.ts +9 -0
  51. package/dist/parser/flink/flinkErrorListener.js +67 -0
  52. package/dist/parser/flink/index.d.ts +3 -0
  53. package/dist/parser/flink/index.js +13 -9
  54. package/dist/parser/hive/hiveEntityCollector.js +40 -6
  55. package/dist/parser/hive/hiveErrorListener.d.ts +9 -0
  56. package/dist/parser/hive/hiveErrorListener.js +65 -0
  57. package/dist/parser/hive/index.d.ts +3 -0
  58. package/dist/parser/hive/index.js +13 -9
  59. package/dist/parser/impala/ImpalaErrorListener.d.ts +9 -0
  60. package/dist/parser/impala/ImpalaErrorListener.js +63 -0
  61. package/dist/parser/impala/impalaEntityCollector.js +51 -6
  62. package/dist/parser/impala/index.d.ts +3 -0
  63. package/dist/parser/impala/index.js +4 -0
  64. package/dist/parser/mysql/index.d.ts +3 -0
  65. package/dist/parser/mysql/index.js +4 -0
  66. package/dist/parser/mysql/mysqlEntityCollector.d.ts +3 -1
  67. package/dist/parser/mysql/mysqlEntityCollector.js +40 -5
  68. package/dist/parser/mysql/mysqlErrorListener.d.ts +9 -0
  69. package/dist/parser/mysql/mysqlErrorListener.js +63 -0
  70. package/dist/parser/postgresql/index.d.ts +3 -0
  71. package/dist/parser/postgresql/index.js +17 -13
  72. package/dist/parser/postgresql/postgreEntityCollector.d.ts +5 -1
  73. package/dist/parser/postgresql/postgreEntityCollector.js +44 -4
  74. package/dist/parser/postgresql/postgreErrorListener.d.ts +9 -0
  75. package/dist/parser/postgresql/postgreErrorListener.js +71 -0
  76. package/dist/parser/spark/index.d.ts +3 -0
  77. package/dist/parser/spark/index.js +4 -0
  78. package/dist/parser/spark/sparkEntityCollector.d.ts +1 -1
  79. package/dist/parser/spark/sparkEntityCollector.js +43 -6
  80. package/dist/parser/spark/sparkErrorListener.d.ts +9 -0
  81. package/dist/parser/spark/sparkErrorListener.js +63 -0
  82. package/dist/parser/trino/index.d.ts +3 -0
  83. package/dist/parser/trino/index.js +23 -10
  84. package/dist/parser/trino/trinoEntityCollector.d.ts +6 -4
  85. package/dist/parser/trino/trinoEntityCollector.js +44 -9
  86. package/dist/parser/trino/trinoErrorListener.d.ts +9 -0
  87. package/dist/parser/trino/trinoErrorListener.js +65 -0
  88. package/package.json +40 -12
@@ -4,6 +4,7 @@ import { BasicSQL } from '../common/basicSQL';
4
4
  import { EntityContextType } from '../common/types';
5
5
  import { ImpalaSqlSplitListener } from './impalaSplitListener';
6
6
  import { ImpalaEntityCollector } from './impalaEntityCollector';
7
+ import { ImpalaErrorListener } from './ImpalaErrorListener';
7
8
  export { ImpalaEntityCollector, ImpalaSqlSplitListener };
8
9
  export class ImpalaSQL extends BasicSQL {
9
10
  constructor() {
@@ -30,6 +31,9 @@ export class ImpalaSQL extends BasicSQL {
30
31
  get splitListener() {
31
32
  return new ImpalaSqlSplitListener();
32
33
  }
34
+ createErrorListener(_errorListener) {
35
+ return new ImpalaErrorListener(_errorListener, this.preferredRules, this.locale);
36
+ }
33
37
  createEntityCollector(input, caretTokenIndex) {
34
38
  return new ImpalaEntityCollector(input, caretTokenIndex);
35
39
  }
@@ -6,12 +6,15 @@ import { BasicSQL } from '../common/basicSQL';
6
6
  import { Suggestions } from '../common/types';
7
7
  import { MysqlSplitListener } from './mysqlSplitListener';
8
8
  import { MySqlEntityCollector } from './mysqlEntityCollector';
9
+ import { MysqlErrorListener } from './mysqlErrorListener';
10
+ import { ErrorListener } from '../common/parseErrorListener';
9
11
  export { MySqlEntityCollector, MysqlSplitListener };
10
12
  export declare class MySQL extends BasicSQL<MySqlLexer, ProgramContext, MySqlParser> {
11
13
  protected createLexerFromCharStream(charStreams: CharStream): MySqlLexer;
12
14
  protected createParserFromTokenStream(tokenStream: CommonTokenStream): MySqlParser;
13
15
  protected preferredRules: Set<number>;
14
16
  protected get splitListener(): MysqlSplitListener;
17
+ protected createErrorListener(_errorListener: ErrorListener): MysqlErrorListener;
15
18
  protected createEntityCollector(input: string, caretTokenIndex?: number): MySqlEntityCollector;
16
19
  protected processCandidates(candidates: CandidatesCollection, allTokens: Token[], caretTokenIndex: number, tokenIndexOffset: number): Suggestions<Token>;
17
20
  }
@@ -4,6 +4,7 @@ import { BasicSQL } from '../common/basicSQL';
4
4
  import { EntityContextType } from '../common/types';
5
5
  import { MysqlSplitListener } from './mysqlSplitListener';
6
6
  import { MySqlEntityCollector } from './mysqlEntityCollector';
7
+ import { MysqlErrorListener } from './mysqlErrorListener';
7
8
  export { MySqlEntityCollector, MysqlSplitListener };
8
9
  export class MySQL extends BasicSQL {
9
10
  constructor() {
@@ -30,6 +31,9 @@ export class MySQL extends BasicSQL {
30
31
  get splitListener() {
31
32
  return new MysqlSplitListener();
32
33
  }
34
+ createErrorListener(_errorListener) {
35
+ return new MysqlErrorListener(_errorListener, this.preferredRules, this.locale);
36
+ }
33
37
  createEntityCollector(input, caretTokenIndex) {
34
38
  return new MySqlEntityCollector(input, caretTokenIndex);
35
39
  }
@@ -1,4 +1,4 @@
1
- import type { ColumnCreateTableContext, ColumnNameCreateContext, CopyCreateTableContext, CreateDatabaseContext, CreateFunctionContext, CreateViewContext, DatabaseNameContext, DatabaseNameCreateContext, FunctionNameCreateContext, InsertStatementContext, QueryCreateTableContext, SelectStatementContext, SingleStatementContext, TableNameContext, TableNameCreateContext, ViewNameContext, ViewNameCreateContext } from '../../lib/mysql/MySqlParser';
1
+ import { ColumnCreateTableContext, ColumnNameCreateContext, CopyCreateTableContext, CreateDatabaseContext, CreateFunctionContext, CreateFunctionLoadableContext, CreateViewContext, DatabaseNameContext, DatabaseNameCreateContext, FunctionNameCreateContext, InsertStatementContext, QueryCreateTableContext, SelectStatementContext, SingleStatementContext, TableNameContext, TableNameCreateContext, ViewNameContext, ViewNameCreateContext } from '../../lib/mysql/MySqlParser';
2
2
  import type { MySqlParserListener } from '../../lib/mysql/MySqlParserListener';
3
3
  import { EntityCollector } from '../common/entityCollector';
4
4
  export declare class MySqlEntityCollector extends EntityCollector implements MySqlParserListener {
@@ -34,4 +34,6 @@ export declare class MySqlEntityCollector extends EntityCollector implements MyS
34
34
  exitCreateDatabase(ctx: CreateDatabaseContext): void;
35
35
  enterCreateFunction(ctx: CreateFunctionContext): void;
36
36
  exitCreateFunction(ctx: CreateFunctionContext): void;
37
+ enterCreateFunctionLoadable(ctx: CreateFunctionLoadableContext): void;
38
+ exitCreateFunctionLoadable(ctx: CreateFunctionLoadableContext): void;
37
39
  }
@@ -1,5 +1,6 @@
1
+ import { ColumnCreateTableContext, CreateDefinitionContext, CreateFunctionContext, TableSourceContext, } from '../../lib/mysql/MySqlParser';
2
+ import { AttrName, EntityCollector, StmtContextType } from '../common/entityCollector';
1
3
  import { EntityContextType } from '../common/types';
2
- import { StmtContextType, EntityCollector } from '../common/entityCollector';
3
4
  export class MySqlEntityCollector extends EntityCollector {
4
5
  /** ====== Entity Begin */
5
6
  exitDatabaseName(ctx) {
@@ -9,10 +10,24 @@ export class MySqlEntityCollector extends EntityCollector {
9
10
  this.pushEntity(ctx, EntityContextType.DATABASE_CREATE);
10
11
  }
11
12
  exitTableName(ctx) {
12
- this.pushEntity(ctx, EntityContextType.TABLE);
13
+ var _a;
14
+ const needCollectAttr = ((_a = this.getRootStmt()) === null || _a === void 0 ? void 0 : _a.stmtContextType) === StmtContextType.SELECT_STMT;
15
+ this.pushEntity(ctx, EntityContextType.TABLE, needCollectAttr
16
+ ? [
17
+ {
18
+ attrName: AttrName.alias,
19
+ endContextList: [TableSourceContext.name],
20
+ },
21
+ ]
22
+ : undefined);
13
23
  }
14
24
  exitTableNameCreate(ctx) {
15
- this.pushEntity(ctx, EntityContextType.TABLE_CREATE);
25
+ this.pushEntity(ctx, EntityContextType.TABLE_CREATE, [
26
+ {
27
+ attrName: AttrName.comment,
28
+ endContextList: [ColumnCreateTableContext.name],
29
+ },
30
+ ]);
16
31
  }
17
32
  exitViewName(ctx) {
18
33
  this.pushEntity(ctx, EntityContextType.VIEW);
@@ -21,10 +36,24 @@ export class MySqlEntityCollector extends EntityCollector {
21
36
  this.pushEntity(ctx, EntityContextType.VIEW_CREATE);
22
37
  }
23
38
  exitFunctionNameCreate(ctx) {
24
- this.pushEntity(ctx, EntityContextType.FUNCTION_CREATE);
39
+ this.pushEntity(ctx, EntityContextType.FUNCTION_CREATE, [
40
+ {
41
+ attrName: AttrName.comment,
42
+ endContextList: [CreateFunctionContext.name],
43
+ },
44
+ ]);
25
45
  }
26
46
  exitColumnNameCreate(ctx) {
27
- this.pushEntity(ctx, EntityContextType.COLUMN_CREATE);
47
+ this.pushEntity(ctx, EntityContextType.COLUMN_CREATE, [
48
+ {
49
+ attrName: AttrName.comment,
50
+ endContextList: [CreateDefinitionContext.name],
51
+ },
52
+ {
53
+ attrName: AttrName.colType,
54
+ endContextList: [CreateDefinitionContext.name],
55
+ },
56
+ ]);
28
57
  }
29
58
  /** ===== Statement begin */
30
59
  enterSingleStatement(ctx) {
@@ -93,4 +122,10 @@ export class MySqlEntityCollector extends EntityCollector {
93
122
  exitCreateFunction(ctx) {
94
123
  this.popStmt();
95
124
  }
125
+ enterCreateFunctionLoadable(ctx) {
126
+ this.pushStmt(ctx, StmtContextType.CREATE_FUNCTION_STMT);
127
+ }
128
+ exitCreateFunctionLoadable(ctx) {
129
+ this.popStmt();
130
+ }
96
131
  }
@@ -0,0 +1,9 @@
1
+ import { ErrorListener, ParseErrorListener } from '../common/parseErrorListener';
2
+ import { Parser, Token } from 'antlr4ng';
3
+ import { LOCALE_TYPE } from '../common/types';
4
+ export declare class MysqlErrorListener extends ParseErrorListener {
5
+ private preferredRules;
6
+ private objectNames;
7
+ constructor(errorListener: ErrorListener, preferredRules: Set<number>, locale: LOCALE_TYPE);
8
+ getExpectedText(parser: Parser, token: Token): string;
9
+ }
@@ -0,0 +1,63 @@
1
+ import { CodeCompletionCore } from 'antlr4-c3';
2
+ import { ParseErrorListener } from '../common/parseErrorListener';
3
+ import { MySqlParser } from '../../lib/mysql/MySqlParser';
4
+ export class MysqlErrorListener extends ParseErrorListener {
5
+ constructor(errorListener, preferredRules, locale) {
6
+ super(errorListener, locale);
7
+ this.objectNames = new Map([
8
+ [MySqlParser.RULE_databaseName, 'database'],
9
+ [MySqlParser.RULE_databaseNameCreate, 'database'],
10
+ [MySqlParser.RULE_tableName, 'table'],
11
+ [MySqlParser.RULE_tableNameCreate, 'table'],
12
+ [MySqlParser.RULE_viewName, 'view'],
13
+ [MySqlParser.RULE_viewNameCreate, 'view'],
14
+ [MySqlParser.RULE_functionName, 'function'],
15
+ [MySqlParser.RULE_functionNameCreate, 'function'],
16
+ [MySqlParser.RULE_columnName, 'column'],
17
+ [MySqlParser.RULE_columnNameCreate, 'column'],
18
+ ]);
19
+ this.preferredRules = preferredRules;
20
+ }
21
+ getExpectedText(parser, token) {
22
+ var _a;
23
+ let expectedText = '';
24
+ let currentContext = (_a = parser.context) !== null && _a !== void 0 ? _a : undefined;
25
+ while (currentContext === null || currentContext === void 0 ? void 0 : currentContext.parent) {
26
+ currentContext = currentContext.parent;
27
+ }
28
+ const core = new CodeCompletionCore(parser);
29
+ core.preferredRules = this.preferredRules;
30
+ const candidates = core.collectCandidates(token.tokenIndex, currentContext);
31
+ if (candidates.rules.size) {
32
+ const result = [];
33
+ // get expectedText as collect rules first
34
+ for (const candidate of candidates.rules) {
35
+ const [ruleType] = candidate;
36
+ const name = this.objectNames.get(ruleType);
37
+ switch (ruleType) {
38
+ case MySqlParser.RULE_databaseName:
39
+ case MySqlParser.RULE_tableName:
40
+ case MySqlParser.RULE_functionName:
41
+ case MySqlParser.RULE_viewName:
42
+ case MySqlParser.RULE_columnName: {
43
+ result.push(`{existing}${name}`);
44
+ break;
45
+ }
46
+ case MySqlParser.RULE_databaseNameCreate:
47
+ case MySqlParser.RULE_tableNameCreate:
48
+ case MySqlParser.RULE_functionNameCreate:
49
+ case MySqlParser.RULE_viewNameCreate:
50
+ case MySqlParser.RULE_columnNameCreate: {
51
+ result.push(`{new}${name}`);
52
+ break;
53
+ }
54
+ }
55
+ }
56
+ expectedText = result.join(`{or}`);
57
+ }
58
+ if (candidates.tokens.size) {
59
+ expectedText += expectedText ? '{orKeyword}' : '{keyword}';
60
+ }
61
+ return expectedText;
62
+ }
63
+ }
@@ -6,12 +6,15 @@ import { Suggestions } from '../common/types';
6
6
  import { BasicSQL } from '../common/basicSQL';
7
7
  import { PostgreSqlEntityCollector } from './postgreEntityCollector';
8
8
  import { PostgreSqlSplitListener } from './postgreSplitListener';
9
+ import { ErrorListener } from '../common/parseErrorListener';
10
+ import { PostgreSqlErrorListener } from './postgreErrorListener';
9
11
  export { PostgreSqlEntityCollector, PostgreSqlSplitListener };
10
12
  export declare class PostgreSQL extends BasicSQL<PostgreSqlLexer, ProgramContext, PostgreSqlParser> {
11
13
  protected createLexerFromCharStream(charStreams: CharStream): PostgreSqlLexer;
12
14
  protected createParserFromTokenStream(tokenStream: CommonTokenStream): PostgreSqlParser;
13
15
  protected preferredRules: Set<number>;
14
16
  protected get splitListener(): PostgreSqlSplitListener;
17
+ protected createErrorListener(_errorListener: ErrorListener): PostgreSqlErrorListener;
15
18
  protected createEntityCollector(input: string, caretTokenIndex?: number): PostgreSqlEntityCollector;
16
19
  protected processCandidates(candidates: CandidatesCollection, allTokens: Token[], caretTokenIndex: number, tokenIndexOffset: number): Suggestions<Token>;
17
20
  }
@@ -4,24 +4,25 @@ import { EntityContextType } from '../common/types';
4
4
  import { BasicSQL } from '../common/basicSQL';
5
5
  import { PostgreSqlEntityCollector } from './postgreEntityCollector';
6
6
  import { PostgreSqlSplitListener } from './postgreSplitListener';
7
+ import { PostgreSqlErrorListener } from './postgreErrorListener';
7
8
  export { PostgreSqlEntityCollector, PostgreSqlSplitListener };
8
9
  export class PostgreSQL extends BasicSQL {
9
10
  constructor() {
10
11
  super(...arguments);
11
12
  this.preferredRules = new Set([
12
- PostgreSqlParser.RULE_table_name_create,
13
- PostgreSqlParser.RULE_table_name,
14
- PostgreSqlParser.RULE_function_name,
15
- PostgreSqlParser.RULE_function_name_create,
16
- PostgreSqlParser.RULE_schema_name_create,
17
- PostgreSqlParser.RULE_schema_name,
18
- PostgreSqlParser.RULE_view_name_create,
19
- PostgreSqlParser.RULE_view_name,
20
- PostgreSqlParser.RULE_database_name_create,
21
- PostgreSqlParser.RULE_database_name,
22
- PostgreSqlParser.RULE_procedure_name_create,
23
- PostgreSqlParser.RULE_procedure_name,
24
- PostgreSqlParser.RULE_column_name_create,
13
+ PostgreSqlParser.RULE_table_name_create, // table name
14
+ PostgreSqlParser.RULE_table_name, // table name that will be created
15
+ PostgreSqlParser.RULE_function_name, // function name
16
+ PostgreSqlParser.RULE_function_name_create, // function name that will be created
17
+ PostgreSqlParser.RULE_schema_name_create, // schema name that will be created
18
+ PostgreSqlParser.RULE_schema_name, // schema name
19
+ PostgreSqlParser.RULE_view_name_create, // view name that will be created
20
+ PostgreSqlParser.RULE_view_name, // view name
21
+ PostgreSqlParser.RULE_database_name_create, // database name that will be created
22
+ PostgreSqlParser.RULE_database_name, // database name
23
+ PostgreSqlParser.RULE_procedure_name_create, // procedure name that will be created
24
+ PostgreSqlParser.RULE_procedure_name, // procedure name
25
+ PostgreSqlParser.RULE_column_name_create, // column name that will be created
25
26
  PostgreSqlParser.RULE_column_name, // column name
26
27
  ]);
27
28
  }
@@ -34,6 +35,9 @@ export class PostgreSQL extends BasicSQL {
34
35
  get splitListener() {
35
36
  return new PostgreSqlSplitListener();
36
37
  }
38
+ createErrorListener(_errorListener) {
39
+ return new PostgreSqlErrorListener(_errorListener, this.preferredRules, this.locale);
40
+ }
37
41
  createEntityCollector(input, caretTokenIndex) {
38
42
  return new PostgreSqlEntityCollector(input, caretTokenIndex);
39
43
  }
@@ -1,4 +1,4 @@
1
- import type { ColumnCreateTableContext, ColumnNameCreateContext, CreateDatabaseContext, CreateForeignTableContext, CreateMaterializedViewContext, CreatePartitionForeignTableContext, CreateViewContext, CreatefunctionstmtContext, DatabaseNameContext, DatabaseNameCreateContext, FunctionNameCreateContext, InsertStatementContext, QueryCreateTableContext, SelectStatementContext, SingleStmtContext, TableNameContext, TableNameCreateContext, ViewNameContext, ViewNameCreateContext } from '../../lib/postgresql/PostgreSqlParser';
1
+ import { type AltertablestmtContext, type ColumnCreateTableContext, type ColumnNameCreateContext, type CreateDatabaseContext, type CreateForeignTableContext, type CreatefunctionstmtContext, type CreateMaterializedViewContext, type CreatePartitionForeignTableContext, type CreateViewContext, type DatabaseNameContext, type DatabaseNameCreateContext, type FunctionNameCreateContext, type InsertStatementContext, type ProcedureNameContext, type ProcedureNameCreateContext, type QueryCreateTableContext, type SelectStatementContext, type SingleStmtContext, type TableNameContext, type TableNameCreateContext, type ViewNameContext, type ViewNameCreateContext } from '../../lib/postgresql/PostgreSqlParser';
2
2
  import type { PostgreSqlParserListener } from '../../lib/postgresql/PostgreSqlParserListener';
3
3
  import { EntityCollector } from '../common/entityCollector';
4
4
  export declare class PostgreSqlEntityCollector extends EntityCollector implements PostgreSqlParserListener {
@@ -11,6 +11,8 @@ export declare class PostgreSqlEntityCollector extends EntityCollector implement
11
11
  exitViewNameCreate(ctx: ViewNameCreateContext): void;
12
12
  exitFunctionNameCreate(ctx: FunctionNameCreateContext): void;
13
13
  exitColumnNameCreate(ctx: ColumnNameCreateContext): void;
14
+ exitProcedureName(ctx: ProcedureNameContext): void;
15
+ exitProcedureNameCreate(ctx: ProcedureNameCreateContext): void;
14
16
  /** ===== Statement begin */
15
17
  enterSingleStatement(ctx: SingleStmtContext): void;
16
18
  exitSingleStatement(ctx: SingleStmtContext): void;
@@ -34,4 +36,6 @@ export declare class PostgreSqlEntityCollector extends EntityCollector implement
34
36
  exitInsertStatement(ctx: InsertStatementContext): void;
35
37
  enterCreatefunctionstmt(ctx: CreatefunctionstmtContext): void;
36
38
  exitCreatefunctionstmt(ctx: CreatefunctionstmtContext): void;
39
+ enterAltertablestmt(ctx: AltertablestmtContext): void;
40
+ exitAltertablestmt(ctx: AltertablestmtContext): void;
37
41
  }
@@ -1,5 +1,6 @@
1
+ import { Column_defContext, Table_refContext, } from '../../lib/postgresql/PostgreSqlParser';
2
+ import { AttrName, EntityCollector, StmtContextType } from '../common/entityCollector';
1
3
  import { EntityContextType } from '../common/types';
2
- import { StmtContextType, EntityCollector } from '../common/entityCollector';
3
4
  export class PostgreSqlEntityCollector extends EntityCollector {
4
5
  /** ====== Entity Begin */
5
6
  exitDatabaseName(ctx) {
@@ -9,13 +10,31 @@ export class PostgreSqlEntityCollector extends EntityCollector {
9
10
  this.pushEntity(ctx, EntityContextType.DATABASE_CREATE);
10
11
  }
11
12
  exitTableName(ctx) {
12
- this.pushEntity(ctx, EntityContextType.TABLE);
13
+ var _a;
14
+ const needCollectAttr = ((_a = this.getRootStmt()) === null || _a === void 0 ? void 0 : _a.stmtContextType) === StmtContextType.SELECT_STMT;
15
+ this.pushEntity(ctx, EntityContextType.TABLE, needCollectAttr
16
+ ? [
17
+ {
18
+ attrName: AttrName.alias,
19
+ endContextList: [Table_refContext.name],
20
+ },
21
+ ]
22
+ : undefined);
13
23
  }
14
24
  exitTableNameCreate(ctx) {
15
25
  this.pushEntity(ctx, EntityContextType.TABLE_CREATE);
16
26
  }
17
27
  exitViewName(ctx) {
18
- this.pushEntity(ctx, EntityContextType.VIEW);
28
+ var _a;
29
+ const needCollectAttr = ((_a = this.getRootStmt()) === null || _a === void 0 ? void 0 : _a.stmtContextType) === StmtContextType.SELECT_STMT;
30
+ this.pushEntity(ctx, EntityContextType.VIEW, needCollectAttr
31
+ ? [
32
+ {
33
+ attrName: AttrName.alias,
34
+ endContextList: [Table_refContext.name],
35
+ },
36
+ ]
37
+ : undefined);
19
38
  }
20
39
  exitViewNameCreate(ctx) {
21
40
  this.pushEntity(ctx, EntityContextType.VIEW_CREATE);
@@ -24,7 +43,22 @@ export class PostgreSqlEntityCollector extends EntityCollector {
24
43
  this.pushEntity(ctx, EntityContextType.FUNCTION_CREATE);
25
44
  }
26
45
  exitColumnNameCreate(ctx) {
27
- this.pushEntity(ctx, EntityContextType.COLUMN_CREATE);
46
+ this.pushEntity(ctx, EntityContextType.COLUMN_CREATE, [
47
+ {
48
+ attrName: AttrName.comment,
49
+ endContextList: [Column_defContext.name],
50
+ },
51
+ {
52
+ attrName: AttrName.colType,
53
+ endContextList: [Column_defContext.name],
54
+ },
55
+ ]);
56
+ }
57
+ exitProcedureName(ctx) {
58
+ this.pushEntity(ctx, EntityContextType.PROCEDURE);
59
+ }
60
+ exitProcedureNameCreate(ctx) {
61
+ this.pushEntity(ctx, EntityContextType.PROCEDURE_CREATE);
28
62
  }
29
63
  /** ===== Statement begin */
30
64
  enterSingleStatement(ctx) {
@@ -93,4 +127,10 @@ export class PostgreSqlEntityCollector extends EntityCollector {
93
127
  exitCreatefunctionstmt(ctx) {
94
128
  this.popStmt();
95
129
  }
130
+ enterAltertablestmt(ctx) {
131
+ this.pushStmt(ctx, StmtContextType.ALTER_TABLE_STMT);
132
+ }
133
+ exitAltertablestmt(ctx) {
134
+ this.popStmt();
135
+ }
96
136
  }
@@ -0,0 +1,9 @@
1
+ import { ErrorListener, ParseErrorListener } from '../common/parseErrorListener';
2
+ import { Parser, Token } from 'antlr4ng';
3
+ import { LOCALE_TYPE } from '../common/types';
4
+ export declare class PostgreSqlErrorListener extends ParseErrorListener {
5
+ private preferredRules;
6
+ private objectNames;
7
+ constructor(errorListener: ErrorListener, preferredRules: Set<number>, locale: LOCALE_TYPE);
8
+ getExpectedText(parser: Parser, token: Token): string;
9
+ }
@@ -0,0 +1,71 @@
1
+ import { CodeCompletionCore } from 'antlr4-c3';
2
+ import { ParseErrorListener } from '../common/parseErrorListener';
3
+ import { PostgreSqlParser } from '../../lib/postgresql/PostgreSqlParser';
4
+ export class PostgreSqlErrorListener extends ParseErrorListener {
5
+ constructor(errorListener, preferredRules, locale) {
6
+ super(errorListener, locale);
7
+ this.objectNames = new Map([
8
+ [PostgreSqlParser.RULE_database_name, 'database'],
9
+ [PostgreSqlParser.RULE_database_name_create, 'database'],
10
+ [PostgreSqlParser.RULE_table_name, 'table'],
11
+ [PostgreSqlParser.RULE_table_name_create, 'table'],
12
+ [PostgreSqlParser.RULE_view_name, 'view'],
13
+ [PostgreSqlParser.RULE_view_name_create, 'view'],
14
+ [PostgreSqlParser.RULE_function_name, 'function'],
15
+ [PostgreSqlParser.RULE_function_name_create, 'function'],
16
+ [PostgreSqlParser.RULE_column_name, 'column'],
17
+ [PostgreSqlParser.RULE_column_name_create, 'column'],
18
+ [PostgreSqlParser.RULE_schema_name_create, 'schema'],
19
+ [PostgreSqlParser.RULE_schema_name, 'schema'],
20
+ [PostgreSqlParser.RULE_procedure_name_create, 'procedure'],
21
+ [PostgreSqlParser.RULE_procedure_name, 'procedure'],
22
+ ]);
23
+ this.preferredRules = preferredRules;
24
+ }
25
+ getExpectedText(parser, token) {
26
+ var _a;
27
+ let expectedText = '';
28
+ let currentContext = (_a = parser.context) !== null && _a !== void 0 ? _a : undefined;
29
+ while (currentContext === null || currentContext === void 0 ? void 0 : currentContext.parent) {
30
+ currentContext = currentContext.parent;
31
+ }
32
+ const core = new CodeCompletionCore(parser);
33
+ core.preferredRules = this.preferredRules;
34
+ const candidates = core.collectCandidates(token.tokenIndex, currentContext);
35
+ if (candidates.rules.size) {
36
+ const result = [];
37
+ // get expectedText as collect rules first
38
+ for (const candidate of candidates.rules) {
39
+ const [ruleType] = candidate;
40
+ const name = this.objectNames.get(ruleType);
41
+ switch (ruleType) {
42
+ case PostgreSqlParser.RULE_table_name:
43
+ case PostgreSqlParser.RULE_function_name:
44
+ case PostgreSqlParser.RULE_schema_name:
45
+ case PostgreSqlParser.RULE_view_name:
46
+ case PostgreSqlParser.RULE_database_name:
47
+ case PostgreSqlParser.RULE_procedure_name:
48
+ case PostgreSqlParser.RULE_column_name: {
49
+ result.push(`{existing}${name}`);
50
+ break;
51
+ }
52
+ case PostgreSqlParser.RULE_table_name_create:
53
+ case PostgreSqlParser.RULE_function_name_create:
54
+ case PostgreSqlParser.RULE_schema_name_create:
55
+ case PostgreSqlParser.RULE_view_name_create:
56
+ case PostgreSqlParser.RULE_database_name_create:
57
+ case PostgreSqlParser.RULE_procedure_name_create:
58
+ case PostgreSqlParser.RULE_column_name_create: {
59
+ result.push(`{new}${name}`);
60
+ break;
61
+ }
62
+ }
63
+ }
64
+ expectedText = result.join('{or}');
65
+ }
66
+ if (candidates.tokens.size) {
67
+ expectedText += expectedText ? '{orKeyword}' : '{keyword}';
68
+ }
69
+ return expectedText;
70
+ }
71
+ }
@@ -6,12 +6,15 @@ import { BasicSQL } from '../common/basicSQL';
6
6
  import { Suggestions } from '../common/types';
7
7
  import { SparkSqlSplitListener } from './sparkSplitListener';
8
8
  import { SparkEntityCollector } from './sparkEntityCollector';
9
+ import { SparkErrorListener } from './sparkErrorListener';
10
+ import { ErrorListener } from '../common/parseErrorListener';
9
11
  export { SparkSqlSplitListener, SparkEntityCollector };
10
12
  export declare class SparkSQL extends BasicSQL<SparkSqlLexer, ProgramContext, SparkSqlParser> {
11
13
  protected createLexerFromCharStream(charStreams: CharStream): SparkSqlLexer;
12
14
  protected createParserFromTokenStream(tokenStream: CommonTokenStream): SparkSqlParser;
13
15
  protected preferredRules: Set<number>;
14
16
  protected get splitListener(): SparkSqlSplitListener;
17
+ protected createErrorListener(_errorListener: ErrorListener): SparkErrorListener;
15
18
  protected createEntityCollector(input: string, caretTokenIndex?: number): SparkEntityCollector;
16
19
  protected processCandidates(candidates: CandidatesCollection, allTokens: Token[], caretTokenIndex: number, tokenIndexOffset: number): Suggestions<Token>;
17
20
  }
@@ -4,6 +4,7 @@ import { BasicSQL } from '../common/basicSQL';
4
4
  import { EntityContextType } from '../common/types';
5
5
  import { SparkSqlSplitListener } from './sparkSplitListener';
6
6
  import { SparkEntityCollector } from './sparkEntityCollector';
7
+ import { SparkErrorListener } from './sparkErrorListener';
7
8
  export { SparkSqlSplitListener, SparkEntityCollector };
8
9
  export class SparkSQL extends BasicSQL {
9
10
  constructor() {
@@ -30,6 +31,9 @@ export class SparkSQL extends BasicSQL {
30
31
  get splitListener() {
31
32
  return new SparkSqlSplitListener();
32
33
  }
34
+ createErrorListener(_errorListener) {
35
+ return new SparkErrorListener(_errorListener, this.preferredRules, this.locale);
36
+ }
33
37
  createEntityCollector(input, caretTokenIndex) {
34
38
  return new SparkEntityCollector(input, caretTokenIndex);
35
39
  }
@@ -1,4 +1,4 @@
1
- import type { NamespaceNameContext, NamespaceNameCreateContext, SingleStatementContext, TableNameContext, TableNameCreateContext, ViewNameContext, ViewNameCreateContext, FunctionNameCreateContext, ColumnNameCreateContext, CreateTableContext, CreateTableLikeContext, ReplaceTableContext, QueryStatementContext, InsertFromQueryContext, MultipleInsertContext, CreateViewContext, CreateTempViewUsingContext, CreateNamespaceContext, CreateFunctionContext } from '../../lib/spark/SparkSqlParser';
1
+ import { ColumnNameCreateContext, CreateFunctionContext, CreateNamespaceContext, CreateTableContext, CreateTableLikeContext, CreateTempViewUsingContext, CreateViewContext, FunctionNameCreateContext, InsertFromQueryContext, MultipleInsertContext, NamespaceNameContext, NamespaceNameCreateContext, QueryStatementContext, ReplaceTableContext, SingleStatementContext, TableNameContext, TableNameCreateContext, ViewNameContext, ViewNameCreateContext } from '../../lib/spark/SparkSqlParser';
2
2
  import type { SparkSqlParserListener } from '../../lib/spark/SparkSqlParserListener';
3
3
  import { EntityCollector } from '../common/entityCollector';
4
4
  export declare class SparkEntityCollector extends EntityCollector implements SparkSqlParserListener {
@@ -1,30 +1,67 @@
1
+ import { CreateNamespaceContext, CreateOrReplaceTableColTypeContext, CreateTableContext, CreateViewContext, IdentifierCommentContext, RelationPrimaryContext, } from '../../lib/spark/SparkSqlParser';
2
+ import { AttrName, EntityCollector, StmtContextType } from '../common/entityCollector';
1
3
  import { EntityContextType } from '../common/types';
2
- import { StmtContextType, EntityCollector } from '../common/entityCollector';
3
4
  export class SparkEntityCollector extends EntityCollector {
4
5
  /** ====== Entity Begin */
5
6
  exitNamespaceName(ctx) {
6
7
  this.pushEntity(ctx, EntityContextType.DATABASE);
7
8
  }
8
9
  exitNamespaceNameCreate(ctx) {
9
- this.pushEntity(ctx, EntityContextType.DATABASE_CREATE);
10
+ this.pushEntity(ctx, EntityContextType.DATABASE_CREATE, [
11
+ {
12
+ attrName: AttrName.comment,
13
+ endContextList: [CreateNamespaceContext.name],
14
+ },
15
+ ]);
10
16
  }
11
17
  exitTableName(ctx) {
12
- this.pushEntity(ctx, EntityContextType.TABLE);
18
+ var _a;
19
+ const needCollectAttr = ((_a = this.getRootStmt()) === null || _a === void 0 ? void 0 : _a.stmtContextType) === StmtContextType.SELECT_STMT;
20
+ this.pushEntity(ctx, EntityContextType.TABLE, needCollectAttr
21
+ ? [
22
+ {
23
+ attrName: AttrName.alias,
24
+ endContextList: [RelationPrimaryContext.name],
25
+ },
26
+ ]
27
+ : undefined);
13
28
  }
14
29
  exitTableNameCreate(ctx) {
15
- this.pushEntity(ctx, EntityContextType.TABLE_CREATE);
30
+ this.pushEntity(ctx, EntityContextType.TABLE_CREATE, [
31
+ {
32
+ attrName: AttrName.comment,
33
+ endContextList: [CreateTableContext.name],
34
+ },
35
+ ]);
16
36
  }
17
37
  exitViewName(ctx) {
18
38
  this.pushEntity(ctx, EntityContextType.VIEW);
19
39
  }
20
40
  exitViewNameCreate(ctx) {
21
- this.pushEntity(ctx, EntityContextType.VIEW_CREATE);
41
+ this.pushEntity(ctx, EntityContextType.VIEW_CREATE, [
42
+ {
43
+ attrName: AttrName.comment,
44
+ endContextList: [CreateViewContext.name],
45
+ },
46
+ ]);
22
47
  }
23
48
  exitFunctionNameCreate(ctx) {
24
49
  this.pushEntity(ctx, EntityContextType.FUNCTION_CREATE);
25
50
  }
26
51
  exitColumnNameCreate(ctx) {
27
- this.pushEntity(ctx, EntityContextType.COLUMN_CREATE);
52
+ this.pushEntity(ctx, EntityContextType.COLUMN_CREATE, [
53
+ {
54
+ attrName: AttrName.comment,
55
+ endContextList: [
56
+ CreateOrReplaceTableColTypeContext.name,
57
+ IdentifierCommentContext.name,
58
+ ],
59
+ },
60
+ {
61
+ attrName: AttrName.colType,
62
+ endContextList: [CreateOrReplaceTableColTypeContext.name],
63
+ },
64
+ ]);
28
65
  }
29
66
  /** ===== Statement begin */
30
67
  enterSingleStatement(ctx) {
@@ -0,0 +1,9 @@
1
+ import { ErrorListener, ParseErrorListener } from '../common/parseErrorListener';
2
+ import { Parser, Token } from 'antlr4ng';
3
+ import { LOCALE_TYPE } from '../common/types';
4
+ export declare class SparkErrorListener extends ParseErrorListener {
5
+ private preferredRules;
6
+ private objectNames;
7
+ constructor(errorListener: ErrorListener, preferredRules: Set<number>, locale: LOCALE_TYPE);
8
+ getExpectedText(parser: Parser, token: Token): string;
9
+ }