dt-sql-parser 4.4.2 → 4.5.0-beta.1

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 (61) hide show
  1. package/README.md +140 -3
  2. package/dist/lib/SQLParserBase.d.ts +13 -1
  3. package/dist/lib/SQLParserBase.js +40 -5
  4. package/dist/lib/flink/FlinkSqlLexer.d.ts +397 -399
  5. package/dist/lib/flink/FlinkSqlLexer.js +2489 -2504
  6. package/dist/lib/flink/FlinkSqlParser.d.ts +726 -728
  7. package/dist/lib/flink/FlinkSqlParser.js +4727 -5330
  8. package/dist/lib/flink/FlinkSqlParserListener.d.ts +132 -90
  9. package/dist/lib/flink/FlinkSqlParserVisitor.d.ts +84 -57
  10. package/dist/lib/hive/HiveSqlParser.d.ts +338 -239
  11. package/dist/lib/hive/HiveSqlParser.js +6466 -5794
  12. package/dist/lib/hive/HiveSqlParserListener.d.ts +88 -0
  13. package/dist/lib/hive/HiveSqlParserVisitor.d.ts +56 -0
  14. package/dist/lib/impala/ImpalaSqlParser.d.ts +236 -125
  15. package/dist/lib/impala/ImpalaSqlParser.js +4257 -3483
  16. package/dist/lib/impala/ImpalaSqlParserListener.d.ts +109 -14
  17. package/dist/lib/impala/ImpalaSqlParserVisitor.d.ts +69 -8
  18. package/dist/lib/mysql/MySqlParser.d.ts +403 -306
  19. package/dist/lib/mysql/MySqlParser.js +10694 -10030
  20. package/dist/lib/mysql/MySqlParserListener.d.ts +121 -18
  21. package/dist/lib/mysql/MySqlParserVisitor.d.ts +75 -10
  22. package/dist/lib/postgresql/PostgreSqlParser.d.ts +256 -173
  23. package/dist/lib/postgresql/PostgreSqlParser.js +14934 -11710
  24. package/dist/lib/postgresql/PostgreSqlParserListener.d.ts +97 -5
  25. package/dist/lib/postgresql/PostgreSqlParserVisitor.d.ts +61 -3
  26. package/dist/lib/spark/SparkSqlParser.d.ts +314 -149
  27. package/dist/lib/spark/SparkSqlParser.js +6185 -5227
  28. package/dist/lib/spark/SparkSqlParserListener.d.ts +180 -5
  29. package/dist/lib/spark/SparkSqlParserVisitor.d.ts +113 -3
  30. package/dist/lib/trino/TrinoSqlListener.d.ts +90 -37
  31. package/dist/lib/trino/TrinoSqlParser.d.ts +219 -165
  32. package/dist/lib/trino/TrinoSqlParser.js +4942 -4615
  33. package/dist/lib/trino/TrinoSqlVisitor.d.ts +55 -21
  34. package/dist/parser/common/basicSQL.d.ts +5 -5
  35. package/dist/parser/common/basicSQL.js +4 -2
  36. package/dist/parser/common/entityCollector.d.ts +91 -4
  37. package/dist/parser/common/entityCollector.js +227 -11
  38. package/dist/parser/common/textAndWord.d.ts +9 -1
  39. package/dist/parser/common/textAndWord.js +2 -0
  40. package/dist/parser/common/types.d.ts +2 -0
  41. package/dist/parser/common/types.js +2 -0
  42. package/dist/parser/flink/flinkEntityCollector.d.ts +10 -2
  43. package/dist/parser/flink/flinkEntityCollector.js +76 -14
  44. package/dist/parser/flink/index.js +5 -2
  45. package/dist/parser/hive/hiveEntityCollector.d.ts +13 -1
  46. package/dist/parser/hive/hiveEntityCollector.js +85 -12
  47. package/dist/parser/impala/impalaEntityCollector.d.ts +7 -1
  48. package/dist/parser/impala/impalaEntityCollector.js +63 -12
  49. package/dist/parser/impala/index.js +2 -1
  50. package/dist/parser/mysql/index.js +3 -1
  51. package/dist/parser/mysql/mysqlEntityCollector.d.ts +10 -1
  52. package/dist/parser/mysql/mysqlEntityCollector.js +65 -12
  53. package/dist/parser/mysql/mysqlErrorListener.js +2 -0
  54. package/dist/parser/postgresql/postgreEntityCollector.d.ts +12 -1
  55. package/dist/parser/postgresql/postgreEntityCollector.js +99 -22
  56. package/dist/parser/spark/index.js +3 -1
  57. package/dist/parser/spark/sparkEntityCollector.d.ts +13 -1
  58. package/dist/parser/spark/sparkEntityCollector.js +88 -12
  59. package/dist/parser/trino/trinoEntityCollector.d.ts +7 -1
  60. package/dist/parser/trino/trinoEntityCollector.js +53 -12
  61. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
- import { ColumnNameCommentContext, ColumnNameTypeConstraintContext, CreateDatabaseStatementContext, CreateTableStatementContext, CreateViewStatementContext, TableSourceContext, UniqueJoinSourceContext, } from '../../lib/hive/HiveSqlParser';
2
- import { AttrName, EntityCollector, StmtContextType } from '../common/entityCollector';
1
+ import { ColumnNameCommentContext, ColumnNameTypeConstraintContext, CreateDatabaseStatementContext, CreateTableStatementContext, CreateViewStatementContext, HiveSqlParser, PartitionedTableFunctionContext, SelectItemContext, SubQuerySourceContext, TableSourceContext, UniqueJoinSourceContext, VirtualTableSourceContext, } from '../../lib/hive/HiveSqlParser';
2
+ import { AttrName, ColumnDeclareType, EntityCollector, isChildContextOf, StmtContextType, TableDeclareType, } from '../common/entityCollector';
3
3
  import { EntityContextType } from '../common/types';
4
4
  export class HiveEntityCollector extends EntityCollector {
5
5
  /** ====== Entity Begin */
@@ -11,18 +11,57 @@ export class HiveEntityCollector extends EntityCollector {
11
11
  },
12
12
  ]);
13
13
  }
14
+ /** Table Entity Rules */
14
15
  exitTableName(ctx) {
15
- var _a;
16
- const needCollectAttr = ((_a = this.getRootStmt()) === null || _a === void 0 ? void 0 : _a.stmtContextType) === StmtContextType.SELECT_STMT;
17
- this.pushEntity(ctx, EntityContextType.TABLE, needCollectAttr
18
- ? [
19
- {
20
- attrName: AttrName.alias,
21
- endContextList: [TableSourceContext.name, UniqueJoinSourceContext.name],
22
- },
23
- ]
24
- : undefined);
16
+ this.pushEntity(ctx, EntityContextType.TABLE, [
17
+ {
18
+ attrName: AttrName.alias,
19
+ endContextList: [TableSourceContext.name, UniqueJoinSourceContext.name],
20
+ },
21
+ ], {
22
+ declareType: TableDeclareType.LITERAL,
23
+ });
24
+ }
25
+ /** Virtual Table Entity Rules */
26
+ exitAtomValuesClause(ctx) {
27
+ if (!isChildContextOf(ctx, HiveSqlParser.RULE_fromClause))
28
+ return;
29
+ this.pushEntity(ctx, EntityContextType.TABLE, [
30
+ {
31
+ attrName: AttrName.alias,
32
+ endContextList: [VirtualTableSourceContext.name],
33
+ },
34
+ ], {
35
+ declareType: TableDeclareType.EXPRESSION,
36
+ });
37
+ }
38
+ /** SubQuery Table Entity Rules */
39
+ exitQueryStatementExpression(ctx) {
40
+ if (!isChildContextOf(ctx, HiveSqlParser.RULE_fromClause))
41
+ return;
42
+ this.pushEntity(ctx, EntityContextType.TABLE, [
43
+ {
44
+ attrName: AttrName.alias,
45
+ endContextList: [SubQuerySourceContext.name],
46
+ },
47
+ ], {
48
+ declareType: TableDeclareType.EXPRESSION,
49
+ });
50
+ }
51
+ /** Partitioned Table Entity Rules */
52
+ exitAtomPartitionedTableFunction(ctx) {
53
+ if (!isChildContextOf(ctx, HiveSqlParser.RULE_fromClause))
54
+ return;
55
+ this.pushEntity(ctx, EntityContextType.TABLE, [
56
+ {
57
+ attrName: AttrName.alias,
58
+ endContextList: [PartitionedTableFunctionContext.name],
59
+ },
60
+ ], {
61
+ declareType: TableDeclareType.EXPRESSION,
62
+ });
25
63
  }
64
+ /** Column Entity Rules */
26
65
  exitColumnNameCreate(ctx) {
27
66
  this.pushEntity(ctx, EntityContextType.COLUMN_CREATE, [
28
67
  {
@@ -35,6 +74,37 @@ export class HiveEntityCollector extends EntityCollector {
35
74
  },
36
75
  ]);
37
76
  }
77
+ exitSelectLiteralColumnName(ctx) {
78
+ if (!isChildContextOf(ctx, HiveSqlParser.RULE_selectItem))
79
+ return;
80
+ this.pushEntity(ctx, EntityContextType.COLUMN, [
81
+ {
82
+ attrName: AttrName.alias,
83
+ endContextList: [SelectItemContext.name],
84
+ },
85
+ ], {
86
+ declareType: ColumnDeclareType.LITERAL,
87
+ });
88
+ }
89
+ exitSelectExpressionColumnName(ctx) {
90
+ if (!isChildContextOf(ctx, HiveSqlParser.RULE_selectItem))
91
+ return;
92
+ this.pushEntity(ctx, EntityContextType.COLUMN, [
93
+ {
94
+ attrName: AttrName.alias,
95
+ endContextList: [SelectItemContext.name],
96
+ },
97
+ ], {
98
+ declareType: ColumnDeclareType.EXPRESSION,
99
+ });
100
+ }
101
+ exitTableAllColumns(ctx) {
102
+ if (!isChildContextOf(ctx, HiveSqlParser.RULE_selectItem))
103
+ return;
104
+ this.pushEntity(ctx, EntityContextType.COLUMN, [], {
105
+ declareType: ColumnDeclareType.ALL,
106
+ });
107
+ }
38
108
  exitViewNameCreate(ctx) {
39
109
  this.pushEntity(ctx, EntityContextType.VIEW_CREATE, [
40
110
  {
@@ -43,6 +113,9 @@ export class HiveEntityCollector extends EntityCollector {
43
113
  },
44
114
  ]);
45
115
  }
116
+ exitSelectList(ctx) {
117
+ this.pushEntity(ctx, EntityContextType.QUERY_RESULT);
118
+ }
46
119
  exitViewName(ctx) {
47
120
  this.pushEntity(ctx, EntityContextType.VIEW);
48
121
  }
@@ -1,16 +1,22 @@
1
1
  import { ImpalaSqlParserListener } from '../../lib';
2
- import { ColumnNamePathCreateContext, CreateAggregateFunctionContext, CreateFunctionContext, CreateKuduTableAsSelectContext, CreateSchemaContext, CreateTableLikeContext, CreateTableSelectContext, CreateViewContext, DatabaseNameCreateContext, DatabaseNamePathContext, FunctionNameCreateContext, InsertStatementContext, QueryStatementContext, SingleStatementContext, TableNameCreateContext, TableNamePathContext, ViewNameCreateContext, ViewNamePathContext } from '../../lib/impala/ImpalaSqlParser';
2
+ import { AtomSubQueryTableSourceContext, ColumnNamePathCreateContext, CreateAggregateFunctionContext, CreateFunctionContext, CreateKuduTableAsSelectContext, CreateSchemaContext, CreateTableLikeContext, CreateTableSelectContext, CreateViewContext, DatabaseNameCreateContext, DatabaseNamePathContext, FunctionNameCreateContext, InsertStatementContext, QueryStatementContext, SelectExpressionColumnNameContext, SelectListContext, SelectLiteralColumnNameContext, SingleStatementContext, TableAllColumnsContext, TableNameCreateContext, TableNamePathContext, UnnestContext, ViewNameCreateContext, ViewNamePathContext } from '../../lib/impala/ImpalaSqlParser';
3
3
  import { EntityCollector } from '../common/entityCollector';
4
4
  export declare class ImpalaEntityCollector extends EntityCollector implements ImpalaSqlParserListener {
5
5
  /** ===== Entity begin */
6
6
  exitTableNameCreate(ctx: TableNameCreateContext): void;
7
7
  exitTableNamePath(ctx: TableNamePathContext): void;
8
+ exitAtomSubQueryTableSource(ctx: AtomSubQueryTableSourceContext): void;
9
+ exitUnnest(ctx: UnnestContext): void;
8
10
  exitColumnNamePathCreate(ctx: ColumnNamePathCreateContext): void;
9
11
  exitViewNameCreate(ctx: ViewNameCreateContext): void;
10
12
  exitViewNamePath(ctx: ViewNamePathContext): void;
11
13
  exitDatabaseNamePath(ctx: DatabaseNamePathContext): void;
12
14
  exitDatabaseNameCreate(ctx: DatabaseNameCreateContext): void;
13
15
  exitFunctionNameCreate(ctx: FunctionNameCreateContext): void;
16
+ exitSelectList(ctx: SelectListContext): void;
17
+ exitSelectLiteralColumnName(ctx: SelectLiteralColumnNameContext): void;
18
+ exitSelectExpressionColumnName(ctx: SelectExpressionColumnNameContext): void;
19
+ exitTableAllColumns(ctx: TableAllColumnsContext): void;
14
20
  /** ===== Statement begin */
15
21
  enterSingleStatement(ctx: SingleStatementContext): void;
16
22
  exitSingleStatement(ctx: SingleStatementContext): void;
@@ -1,5 +1,5 @@
1
- import { ColumnDefinitionContext, CreateKuduTableAsSelectContext, CreateSchemaContext, CreateTableSelectContext, CreateViewContext, KuduTableElementContext, SampledRelationContext, ViewColumnItemContext, } from '../../lib/impala/ImpalaSqlParser';
2
- import { AttrName, EntityCollector, StmtContextType } from '../common/entityCollector';
1
+ import { AliasedRelationContext, ColumnDefinitionContext, CreateKuduTableAsSelectContext, CreateSchemaContext, CreateTableSelectContext, CreateViewContext, KuduTableElementContext, SelectItemContext, ViewColumnItemContext, } from '../../lib/impala/ImpalaSqlParser';
2
+ import { AttrName, ColumnDeclareType, EntityCollector, StmtContextType, TableDeclareType, } from '../common/entityCollector';
3
3
  import { EntityContextType } from '../common/types';
4
4
  export class ImpalaEntityCollector extends EntityCollector {
5
5
  /** ===== Entity begin */
@@ -15,16 +15,34 @@ export class ImpalaEntityCollector extends EntityCollector {
15
15
  ]);
16
16
  }
17
17
  exitTableNamePath(ctx) {
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: [SampledRelationContext.name],
25
- },
26
- ]
27
- : undefined);
18
+ this.pushEntity(ctx, EntityContextType.TABLE, [
19
+ {
20
+ attrName: AttrName.alias,
21
+ endContextList: [AliasedRelationContext.name],
22
+ },
23
+ ], {
24
+ declareType: TableDeclareType.LITERAL,
25
+ });
26
+ }
27
+ exitAtomSubQueryTableSource(ctx) {
28
+ this.pushEntity(ctx, EntityContextType.TABLE, [
29
+ {
30
+ attrName: AttrName.alias,
31
+ endContextList: [AliasedRelationContext.name],
32
+ },
33
+ ], {
34
+ declareType: TableDeclareType.EXPRESSION,
35
+ });
36
+ }
37
+ exitUnnest(ctx) {
38
+ this.pushEntity(ctx, EntityContextType.TABLE, [
39
+ {
40
+ attrName: AttrName.alias,
41
+ endContextList: [AliasedRelationContext.name],
42
+ },
43
+ ], {
44
+ declareType: TableDeclareType.EXPRESSION,
45
+ });
28
46
  }
29
47
  exitColumnNamePathCreate(ctx) {
30
48
  this.pushEntity(ctx, EntityContextType.COLUMN_CREATE, [
@@ -71,6 +89,39 @@ export class ImpalaEntityCollector extends EntityCollector {
71
89
  exitFunctionNameCreate(ctx) {
72
90
  this.pushEntity(ctx, EntityContextType.FUNCTION_CREATE);
73
91
  }
92
+ exitSelectList(ctx) {
93
+ this.pushEntity(ctx, EntityContextType.QUERY_RESULT);
94
+ }
95
+ exitSelectLiteralColumnName(ctx) {
96
+ this.pushEntity(ctx, EntityContextType.COLUMN, [
97
+ {
98
+ attrName: AttrName.alias,
99
+ endContextList: [SelectItemContext.name],
100
+ },
101
+ ], {
102
+ declareType: ColumnDeclareType.LITERAL,
103
+ });
104
+ }
105
+ exitSelectExpressionColumnName(ctx) {
106
+ this.pushEntity(ctx, EntityContextType.COLUMN, [
107
+ {
108
+ attrName: AttrName.alias,
109
+ endContextList: [SelectItemContext.name],
110
+ },
111
+ ], {
112
+ declareType: ColumnDeclareType.EXPRESSION,
113
+ });
114
+ }
115
+ exitTableAllColumns(ctx) {
116
+ this.pushEntity(ctx, EntityContextType.COLUMN, [
117
+ {
118
+ attrName: AttrName.alias,
119
+ endContextList: [SelectItemContext.name],
120
+ },
121
+ ], {
122
+ declareType: ColumnDeclareType.ALL,
123
+ });
124
+ }
74
125
  /** ===== Statement begin */
75
126
  enterSingleStatement(ctx) {
76
127
  this.pushStmt(ctx, StmtContextType.COMMON_STMT);
@@ -102,7 +102,8 @@ export class ImpalaSQL extends BasicSQL {
102
102
  candidateRule.ruleList.includes(ImpalaSqlParser.RULE_whereClause) ||
103
103
  candidateRule.ruleList.includes(ImpalaSqlParser.RULE_whenClause) ||
104
104
  candidateRule.ruleList.includes(ImpalaSqlParser.RULE_partitionByClause) ||
105
- candidateRule.ruleList.includes(ImpalaSqlParser.RULE_relation)) {
105
+ candidateRule.ruleList.includes(ImpalaSqlParser.RULE_relation) ||
106
+ candidateRule.ruleList.includes(ImpalaSqlParser.RULE_functionCallExpression)) {
106
107
  syntaxContextType = EntityContextType.COLUMN;
107
108
  }
108
109
  }
@@ -25,6 +25,7 @@ export class MySQL extends BasicSQL {
25
25
  MySqlParser.RULE_functionName,
26
26
  MySqlParser.RULE_functionNameCreate,
27
27
  MySqlParser.RULE_columnName,
28
+ MySqlParser.RULE_columnNamePath,
28
29
  MySqlParser.RULE_columnNameCreate,
29
30
  ...this.excludeKeywordRules,
30
31
  ]);
@@ -88,7 +89,8 @@ export class MySQL extends BasicSQL {
88
89
  syntaxContextType = EntityContextType.FUNCTION_CREATE;
89
90
  break;
90
91
  }
91
- case MySqlParser.RULE_columnName: {
92
+ case MySqlParser.RULE_columnName:
93
+ case MySqlParser.RULE_columnNamePath: {
92
94
  syntaxContextType = EntityContextType.COLUMN;
93
95
  break;
94
96
  }
@@ -1,16 +1,25 @@
1
- import { ColumnCreateTableContext, ColumnNameCreateContext, CopyCreateTableContext, CreateDatabaseContext, CreateFunctionContext, CreateFunctionLoadableContext, 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, SelectElementsContext, SelectExpressionElementContext, SelectLiteralColumnNameContext, SelectStatementContext, SingleStatementContext, TableNameContext, TableNameCreateContext, ViewNameContext, ViewNameCreateContext, TableAllColumnsContext, AtomSubQueryTableSourceContext, PureAllColumnsContext, SelectElement_dot_emptyContext } 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 {
5
5
  /** ====== Entity Begin */
6
6
  exitDatabaseName(ctx: DatabaseNameContext): void;
7
7
  exitDatabaseNameCreate(ctx: DatabaseNameCreateContext): void;
8
+ /** Table Entity Rules */
8
9
  exitTableName(ctx: TableNameContext): void;
10
+ /** SubQuery Table Entity Rules */
11
+ exitAtomSubQueryTableSource(ctx: AtomSubQueryTableSourceContext): void;
9
12
  exitTableNameCreate(ctx: TableNameCreateContext): void;
10
13
  exitViewName(ctx: ViewNameContext): void;
11
14
  exitViewNameCreate(ctx: ViewNameCreateContext): void;
12
15
  exitFunctionNameCreate(ctx: FunctionNameCreateContext): void;
16
+ exitSelectElements(ctx: SelectElementsContext): void;
13
17
  exitColumnNameCreate(ctx: ColumnNameCreateContext): void;
18
+ exitTableAllColumns(ctx: TableAllColumnsContext): void;
19
+ exitPureAllColumns(ctx: PureAllColumnsContext): void;
20
+ exitSelectLiteralColumnName(ctx: SelectLiteralColumnNameContext): void;
21
+ exitSelectElement_dot_empty(ctx: SelectElement_dot_emptyContext): void;
22
+ exitSelectExpressionElement(ctx: SelectExpressionElementContext): void;
14
23
  /** ===== Statement begin */
15
24
  enterSingleStatement(ctx: SingleStatementContext): void;
16
25
  exitSingleStatement(ctx: SingleStatementContext): void;
@@ -1,5 +1,5 @@
1
- import { ColumnCreateTableContext, CreateDefinitionContext, CreateFunctionContext, TableSourceContext, } from '../../lib/mysql/MySqlParser';
2
- import { AttrName, EntityCollector, StmtContextType } from '../common/entityCollector';
1
+ import { ColumnCreateTableContext, CreateDefinitionContext, CreateFunctionContext, TableSourceItemContext, AtomTableItemContext, SubqueryTableItemContext, SelectElement_labelContext, SelectElement_exprContext, } from '../../lib/mysql/MySqlParser';
2
+ import { AttrName, ColumnDeclareType, EntityCollector, StmtContextType, TableDeclareType, } from '../common/entityCollector';
3
3
  import { EntityContextType } from '../common/types';
4
4
  export class MySqlEntityCollector extends EntityCollector {
5
5
  /** ====== Entity Begin */
@@ -9,17 +9,27 @@ export class MySqlEntityCollector extends EntityCollector {
9
9
  exitDatabaseNameCreate(ctx) {
10
10
  this.pushEntity(ctx, EntityContextType.DATABASE_CREATE);
11
11
  }
12
+ /** Table Entity Rules */
12
13
  exitTableName(ctx) {
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);
14
+ this.pushEntity(ctx, EntityContextType.TABLE, [
15
+ {
16
+ attrName: AttrName.alias,
17
+ endContextList: [TableSourceItemContext.name, AtomTableItemContext.name],
18
+ },
19
+ ], {
20
+ declareType: TableDeclareType.LITERAL,
21
+ });
22
+ }
23
+ /** SubQuery Table Entity Rules */
24
+ exitAtomSubQueryTableSource(ctx) {
25
+ this.pushEntity(ctx, EntityContextType.TABLE, [
26
+ {
27
+ attrName: AttrName.alias,
28
+ endContextList: [TableSourceItemContext.name, SubqueryTableItemContext.name],
29
+ },
30
+ ], {
31
+ declareType: TableDeclareType.EXPRESSION,
32
+ });
23
33
  }
24
34
  exitTableNameCreate(ctx) {
25
35
  this.pushEntity(ctx, EntityContextType.TABLE_CREATE, [
@@ -43,6 +53,9 @@ export class MySqlEntityCollector extends EntityCollector {
43
53
  },
44
54
  ]);
45
55
  }
56
+ exitSelectElements(ctx) {
57
+ this.pushEntity(ctx, EntityContextType.QUERY_RESULT);
58
+ }
46
59
  exitColumnNameCreate(ctx) {
47
60
  this.pushEntity(ctx, EntityContextType.COLUMN_CREATE, [
48
61
  {
@@ -55,6 +68,46 @@ export class MySqlEntityCollector extends EntityCollector {
55
68
  },
56
69
  ]);
57
70
  }
71
+ exitTableAllColumns(ctx) {
72
+ this.pushEntity(ctx, EntityContextType.COLUMN, [], {
73
+ declareType: ColumnDeclareType.ALL,
74
+ });
75
+ }
76
+ exitPureAllColumns(ctx) {
77
+ this.pushEntity(ctx, EntityContextType.COLUMN, [], {
78
+ declareType: ColumnDeclareType.ALL,
79
+ });
80
+ }
81
+ exitSelectLiteralColumnName(ctx) {
82
+ // Handle empty column case (e.g., "select from")
83
+ // When emptyColumn matches, the context has no actual tokens
84
+ if (!ctx.start || !ctx.stop || ctx.start.start > ctx.stop.stop) {
85
+ return;
86
+ }
87
+ this.pushEntity(ctx, EntityContextType.COLUMN, [
88
+ {
89
+ attrName: AttrName.alias,
90
+ endContextList: [SelectElement_labelContext.name],
91
+ },
92
+ ], {
93
+ declareType: ColumnDeclareType.LITERAL,
94
+ });
95
+ }
96
+ exitSelectElement_dot_empty(ctx) {
97
+ this.pushEntity(ctx, EntityContextType.COLUMN, [], {
98
+ declareType: ColumnDeclareType.LITERAL,
99
+ });
100
+ }
101
+ exitSelectExpressionElement(ctx) {
102
+ this.pushEntity(ctx, EntityContextType.COLUMN, [
103
+ {
104
+ attrName: AttrName.alias,
105
+ endContextList: [SelectElement_exprContext.name],
106
+ },
107
+ ], {
108
+ declareType: ColumnDeclareType.EXPRESSION,
109
+ });
110
+ }
58
111
  /** ===== Statement begin */
59
112
  enterSingleStatement(ctx) {
60
113
  this.pushStmt(ctx, StmtContextType.COMMON_STMT);
@@ -14,6 +14,7 @@ export class MysqlErrorListener extends ParseErrorListener {
14
14
  [MySqlParser.RULE_functionName, 'function'],
15
15
  [MySqlParser.RULE_functionNameCreate, 'function'],
16
16
  [MySqlParser.RULE_columnName, 'column'],
17
+ [MySqlParser.RULE_columnNamePath, 'column'],
17
18
  [MySqlParser.RULE_columnNameCreate, 'column'],
18
19
  ]);
19
20
  }
@@ -48,6 +49,7 @@ export class MysqlErrorListener extends ParseErrorListener {
48
49
  case MySqlParser.RULE_tableName:
49
50
  case MySqlParser.RULE_functionName:
50
51
  case MySqlParser.RULE_viewName:
52
+ case MySqlParser.RULE_columnNamePath:
51
53
  case MySqlParser.RULE_columnName: {
52
54
  if (!result.includes(`{existing}${name}`)) {
53
55
  result.push(`{existing}${name}`);
@@ -1,4 +1,4 @@
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';
1
+ import { type AlterTableStmtContext, type ColumnCreateTableContext, type ColumnNameCreateContext, type CreateDatabaseContext, type CreateForeignTableContext, type CreateFunctionStmtContext, type CreateMaterializedViewContext, type CreatePartitionForeignTableContext, type CreateViewContext, type DatabaseNameContext, type DatabaseNameCreateContext, FuncTableContext, type FunctionNameCreateContext, type InsertStatementContext, type ProcedureNameContext, type ProcedureNameCreateContext, type QueryCreateTableContext, SelectExpressionColumnNameContext, SelectLiteralColumnNameContext, SelectNoParensContext, type SelectStatementContext, SelectWithParensContext, type SingleStmtContext, TableAllColumnsContext, type TableNameContext, type TableNameCreateContext, Target_dot_emptyContext, Target_emptyContext, TargetListContext, type ViewNameContext, type ViewNameCreateContext, XmlTableContext } 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 {
@@ -6,11 +6,20 @@ export declare class PostgreSqlEntityCollector extends EntityCollector implement
6
6
  exitDatabaseName(ctx: DatabaseNameContext): void;
7
7
  exitDatabaseNameCreate(ctx: DatabaseNameCreateContext): void;
8
8
  exitTableName(ctx: TableNameContext): void;
9
+ exitXmlTable(ctx: XmlTableContext): void;
10
+ exitFuncTable(ctx: FuncTableContext): void;
11
+ exitSelectWithParens(ctx: SelectWithParensContext): void;
9
12
  exitTableNameCreate(ctx: TableNameCreateContext): void;
10
13
  exitViewName(ctx: ViewNameContext): void;
11
14
  exitViewNameCreate(ctx: ViewNameCreateContext): void;
12
15
  exitFunctionNameCreate(ctx: FunctionNameCreateContext): void;
13
16
  exitColumnNameCreate(ctx: ColumnNameCreateContext): void;
17
+ exitTargetList(ctx: TargetListContext): void;
18
+ exitTableAllColumns(ctx: TableAllColumnsContext): void;
19
+ exitTarget_empty(ctx: Target_emptyContext): void;
20
+ exitTarget_dot_empty(ctx: Target_dot_emptyContext): void;
21
+ exitSelectExpressionColumnName(ctx: SelectExpressionColumnNameContext): void;
22
+ exitSelectLiteralColumnName(ctx: SelectLiteralColumnNameContext): void;
14
23
  exitProcedureName(ctx: ProcedureNameContext): void;
15
24
  exitProcedureNameCreate(ctx: ProcedureNameCreateContext): void;
16
25
  /** ===== Statement begin */
@@ -32,6 +41,8 @@ export declare class PostgreSqlEntityCollector extends EntityCollector implement
32
41
  exitCreateMaterializedView(ctx: CreateMaterializedViewContext): void;
33
42
  enterSelectStatement(ctx: SelectStatementContext): void;
34
43
  exitSelectStatement(ctx: SelectStatementContext): void;
44
+ enterSelectNoParens(ctx: SelectNoParensContext): void;
45
+ exitSelectNoParens(ctx: SelectNoParensContext): void;
35
46
  enterInsertStatement(ctx: InsertStatementContext): void;
36
47
  exitInsertStatement(ctx: InsertStatementContext): void;
37
48
  enterCreateFunctionStmt(ctx: CreateFunctionStmtContext): void;
@@ -1,5 +1,5 @@
1
- import { Column_defContext, TableRefContext, } from '../../lib/postgresql/PostgreSqlParser';
2
- import { AttrName, EntityCollector, StmtContextType } from '../common/entityCollector';
1
+ import { Column_defContext, ExpressionTableContext, PostgreSqlParser, TableRefContext, Target_labelContext, } from '../../lib/postgresql/PostgreSqlParser';
2
+ import { AttrName, ColumnDeclareType, EntityCollector, isChildContextOf, StmtContextType, TableDeclareType, } from '../common/entityCollector';
3
3
  import { EntityContextType } from '../common/types';
4
4
  export class PostgreSqlEntityCollector extends EntityCollector {
5
5
  /** ====== Entity Begin */
@@ -10,31 +10,57 @@ export class PostgreSqlEntityCollector extends EntityCollector {
10
10
  this.pushEntity(ctx, EntityContextType.DATABASE_CREATE);
11
11
  }
12
12
  exitTableName(ctx) {
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: [TableRefContext.name],
20
- },
21
- ]
22
- : undefined);
13
+ this.pushEntity(ctx, EntityContextType.TABLE, [
14
+ {
15
+ attrName: AttrName.alias,
16
+ endContextList: [TableRefContext.name],
17
+ },
18
+ ], {
19
+ declareType: TableDeclareType.LITERAL,
20
+ });
21
+ }
22
+ exitXmlTable(ctx) {
23
+ this.pushEntity(ctx, EntityContextType.TABLE, [
24
+ {
25
+ attrName: AttrName.alias,
26
+ endContextList: [ExpressionTableContext.name],
27
+ },
28
+ ], {
29
+ declareType: TableDeclareType.EXPRESSION,
30
+ });
31
+ }
32
+ exitFuncTable(ctx) {
33
+ this.pushEntity(ctx, EntityContextType.TABLE, [
34
+ {
35
+ attrName: AttrName.alias,
36
+ endContextList: [ExpressionTableContext.name],
37
+ },
38
+ ], {
39
+ declareType: TableDeclareType.EXPRESSION,
40
+ });
41
+ }
42
+ exitSelectWithParens(ctx) {
43
+ if (!isChildContextOf(ctx, PostgreSqlParser.RULE_expressionTable))
44
+ return;
45
+ this.pushEntity(ctx, EntityContextType.TABLE, [
46
+ {
47
+ attrName: AttrName.alias,
48
+ endContextList: [ExpressionTableContext.name],
49
+ },
50
+ ], {
51
+ declareType: TableDeclareType.EXPRESSION,
52
+ });
23
53
  }
24
54
  exitTableNameCreate(ctx) {
25
55
  this.pushEntity(ctx, EntityContextType.TABLE_CREATE);
26
56
  }
27
57
  exitViewName(ctx) {
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: [TableRefContext.name],
35
- },
36
- ]
37
- : undefined);
58
+ this.pushEntity(ctx, EntityContextType.VIEW, [
59
+ {
60
+ attrName: AttrName.alias,
61
+ endContextList: [TableRefContext.name],
62
+ },
63
+ ]);
38
64
  }
39
65
  exitViewNameCreate(ctx) {
40
66
  this.pushEntity(ctx, EntityContextType.VIEW_CREATE);
@@ -54,6 +80,51 @@ export class PostgreSqlEntityCollector extends EntityCollector {
54
80
  },
55
81
  ]);
56
82
  }
83
+ exitTargetList(ctx) {
84
+ // Only create QUERY_RESULT for targetList that is direct child of simpleSelect
85
+ if (!isChildContextOf(ctx, PostgreSqlParser.RULE_simpleSelect))
86
+ return;
87
+ this.pushEntity(ctx, EntityContextType.QUERY_RESULT);
88
+ }
89
+ exitTableAllColumns(ctx) {
90
+ if (!isChildContextOf(ctx, PostgreSqlParser.RULE_targetList))
91
+ return;
92
+ this.pushEntity(ctx, EntityContextType.COLUMN, [], {
93
+ declareType: ColumnDeclareType.ALL,
94
+ });
95
+ }
96
+ exitTarget_empty(ctx) {
97
+ // Don't create entity for empty column here
98
+ // The targetList will create QUERY_RESULT entity
99
+ // Empty targetEl means the QUERY_RESULT has no columns
100
+ }
101
+ exitTarget_dot_empty(ctx) {
102
+ // Create COLUMN entity for incomplete column reference (e.g., "tb.|")
103
+ // This allows completion to suggest columns from table "tb"
104
+ this.pushEntity(ctx, EntityContextType.COLUMN, [], {
105
+ declareType: ColumnDeclareType.LITERAL,
106
+ });
107
+ }
108
+ exitSelectExpressionColumnName(ctx) {
109
+ this.pushEntity(ctx, EntityContextType.COLUMN, [
110
+ {
111
+ attrName: AttrName.alias,
112
+ endContextList: [Target_labelContext.name],
113
+ },
114
+ ], {
115
+ declareType: ColumnDeclareType.EXPRESSION,
116
+ });
117
+ }
118
+ exitSelectLiteralColumnName(ctx) {
119
+ this.pushEntity(ctx, EntityContextType.COLUMN, [
120
+ {
121
+ attrName: AttrName.alias,
122
+ endContextList: [Target_labelContext.name],
123
+ },
124
+ ], {
125
+ declareType: ColumnDeclareType.LITERAL,
126
+ });
127
+ }
57
128
  exitProcedureName(ctx) {
58
129
  this.pushEntity(ctx, EntityContextType.PROCEDURE);
59
130
  }
@@ -115,6 +186,12 @@ export class PostgreSqlEntityCollector extends EntityCollector {
115
186
  exitSelectStatement(ctx) {
116
187
  this.popStmt();
117
188
  }
189
+ enterSelectNoParens(ctx) {
190
+ this.pushStmt(ctx, StmtContextType.SELECT_STMT);
191
+ }
192
+ exitSelectNoParens(ctx) {
193
+ this.popStmt();
194
+ }
118
195
  enterInsertStatement(ctx) {
119
196
  this.pushStmt(ctx, StmtContextType.INSERT_STMT);
120
197
  }
@@ -30,6 +30,7 @@ export class SparkSQL extends BasicSQL {
30
30
  SparkSqlParser.RULE_functionNameCreate,
31
31
  SparkSqlParser.RULE_columnName,
32
32
  SparkSqlParser.RULE_columnNamePath,
33
+ SparkSqlParser.RULE_columnNamePathAllowEmpty,
33
34
  SparkSqlParser.RULE_columnNameCreate,
34
35
  ...this.excludeKeywordRules,
35
36
  ]);
@@ -101,7 +102,8 @@ export class SparkSQL extends BasicSQL {
101
102
  syntaxContextType = EntityContextType.COLUMN_CREATE;
102
103
  break;
103
104
  }
104
- case SparkSqlParser.RULE_columnNamePath: {
105
+ case SparkSqlParser.RULE_columnNamePath:
106
+ case SparkSqlParser.RULE_columnNamePathAllowEmpty: {
105
107
  if (candidateRule.ruleList.includes(SparkSqlParser.RULE_whenClause) ||
106
108
  candidateRule.ruleList.includes(SparkSqlParser.RULE_whereClause) ||
107
109
  candidateRule.ruleList.includes(SparkSqlParser.RULE_joinRelation) ||
@@ -1,16 +1,28 @@
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';
1
+ import { AtomSubQueryTableSourceContext, ColumnNameCreateContext, CreateFunctionContext, CreateNamespaceContext, CreateTableContext, CreateTableLikeContext, CreateTempViewUsingContext, CreateViewContext, FunctionNameCreateContext, FunctionTableSourceContext, InlineTableSourceContext, InsertFromQueryContext, MultipleInsertContext, NamespaceNameContext, NamespaceNameCreateContext, QueryStatementContext, ReplaceTableContext, SelectExpressionColumnNameContext, SelectListContext, SelectLiteralColumnNameContext, SingleStatementContext, TableAllColumnsContext, 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 {
5
5
  /** ====== Entity Begin */
6
6
  exitNamespaceName(ctx: NamespaceNameContext): void;
7
7
  exitNamespaceNameCreate(ctx: NamespaceNameCreateContext): void;
8
+ /** Table Entity Rules */
8
9
  exitTableName(ctx: TableNameContext): void;
10
+ /** Inline Table Entity Rules */
11
+ exitInlineTableSource(ctx: InlineTableSourceContext): void;
12
+ /** Function Table Entity Rules */
13
+ exitFunctionTableSource(ctx: FunctionTableSourceContext): void;
14
+ /** SubQuery Table Entity Rules */
15
+ exitAtomSubQueryTableSource(ctx: AtomSubQueryTableSourceContext): void;
9
16
  exitTableNameCreate(ctx: TableNameCreateContext): void;
10
17
  exitViewName(ctx: ViewNameContext): void;
18
+ exitSelectList(ctx: SelectListContext): void;
11
19
  exitViewNameCreate(ctx: ViewNameCreateContext): void;
12
20
  exitFunctionNameCreate(ctx: FunctionNameCreateContext): void;
21
+ /** Column Entity Rules */
13
22
  exitColumnNameCreate(ctx: ColumnNameCreateContext): void;
23
+ exitSelectLiteralColumnName(ctx: SelectLiteralColumnNameContext): void;
24
+ exitSelectExpressionColumnName(ctx: SelectExpressionColumnNameContext): void;
25
+ exitTableAllColumns(ctx: TableAllColumnsContext): void;
14
26
  /** ===== Statement begin */
15
27
  enterSingleStatement(ctx: SingleStatementContext): void;
16
28
  exitSingleStatement(ctx: SingleStatementContext): void;