Skip to content

Commit 66786dd

Browse files
committed
feat: add all sql errorMsg unit test
1 parent 925fcab commit 66786dd

15 files changed

+535
-80
lines changed

src/locale/locale.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"orKeyword": "或者一个关键字",
1616
"keyword": "一个关键字",
1717
"missing": "缺少",
18-
"at": ""
18+
"at": "",
19+
"or": "或者"
1920
},
2021
"en_US": {
2122
"stmtInComplete": "statement is incomplete",
@@ -33,6 +34,7 @@
3334
"orKeyword": " or a keyword",
3435
"keyword": "a keyword",
3536
"missing": "missing ",
36-
"at": " at "
37+
"at": " at ",
38+
"or": " or "
3739
}
3840
}

src/parser/flink/flinkErrorListener.ts

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export class FlinkErrorListener extends ParseErrorListener {
99

1010
private objectNames: Map<number, string> = new Map([
1111
[FlinkSqlParser.RULE_catalogPath, 'catalog'],
12+
[FlinkSqlParser.RULE_catalogPathCreate, 'catalog'],
1213
[FlinkSqlParser.RULE_databasePath, 'database'],
1314
[FlinkSqlParser.RULE_databasePathCreate, 'database'],
1415
[FlinkSqlParser.RULE_tablePath, 'table'],
@@ -39,6 +40,7 @@ export class FlinkErrorListener extends ParseErrorListener {
3940
const candidates = core.collectCandidates(token.tokenIndex, currentContext);
4041

4142
if (candidates.rules.size) {
43+
const result: string[] = [];
4244
// get expectedText as collect rules first
4345
for (const candidate of candidates.rules) {
4446
const [ruleType] = candidate;
@@ -48,28 +50,23 @@ export class FlinkErrorListener extends ParseErrorListener {
4850
case FlinkSqlParser.RULE_tablePath:
4951
case FlinkSqlParser.RULE_viewPath:
5052
case FlinkSqlParser.RULE_functionName:
51-
case FlinkSqlParser.RULE_columnName: {
52-
if (!name) {
53-
expectedText = '{newObj}';
54-
} else {
55-
expectedText = `{new}${name}`;
56-
}
53+
case FlinkSqlParser.RULE_columnName:
54+
case FlinkSqlParser.RULE_catalogPath: {
55+
result.push(`{existing}${name}`);
5756
break;
5857
}
5958
case FlinkSqlParser.RULE_databasePathCreate:
6059
case FlinkSqlParser.RULE_tablePathCreate:
6160
case FlinkSqlParser.RULE_functionNameCreate:
6261
case FlinkSqlParser.RULE_viewPathCreate:
63-
case FlinkSqlParser.RULE_columnNameCreate: {
64-
if (!name) {
65-
expectedText = '{existingObj}';
66-
} else {
67-
expectedText = `{existing}${name}`;
68-
}
62+
case FlinkSqlParser.RULE_columnNameCreate:
63+
case FlinkSqlParser.RULE_catalogPathCreate: {
64+
result.push(`{new}${name}`);
6965
break;
7066
}
7167
}
7268
}
69+
expectedText = result.join('{or}');
7370
}
7471
if (candidates.tokens.size) {
7572
expectedText += expectedText ? '{orKeyword}' : '{keyword}';

src/parser/hive/hiveErrorListener.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export class HiveErrorListener extends ParseErrorListener {
3939
const candidates = core.collectCandidates(token.tokenIndex, currentContext);
4040

4141
if (candidates.rules.size) {
42+
const result: string[] = [];
4243
// get expectedText as collect rules first
4344
for (const candidate of candidates.rules) {
4445
const [ruleType] = candidate;
@@ -50,27 +51,20 @@ export class HiveErrorListener extends ParseErrorListener {
5051
case HiveSqlParser.RULE_functionNameForDDL:
5152
case HiveSqlParser.RULE_functionNameForInvoke:
5253
case HiveSqlParser.RULE_columnName: {
53-
if (!name) {
54-
expectedText = '{newObj}';
55-
} else {
56-
expectedText = `{new}${name}`;
57-
}
54+
result.push(`{existing}${name}`);
5855
break;
5956
}
6057
case HiveSqlParser.RULE_dbSchemaNameCreate:
6158
case HiveSqlParser.RULE_tableNameCreate:
6259
case HiveSqlParser.RULE_functionNameCreate:
6360
case HiveSqlParser.RULE_viewNameCreate:
6461
case HiveSqlParser.RULE_columnNameCreate: {
65-
if (!name) {
66-
expectedText = '{existingObj}';
67-
} else {
68-
expectedText = `{existing}${name}`;
69-
}
62+
result.push(`{new}${name}`);
7063
break;
7164
}
7265
}
7366
}
67+
expectedText = result.join('{or}');
7468
}
7569
if (candidates.tokens.size) {
7670
expectedText += expectedText ? '{orKeyword}' : '{keyword}';

src/parser/impala/ImpalaErrorListener.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export class ImpalaErrorListener extends ParseErrorListener {
3838
const candidates = core.collectCandidates(token.tokenIndex, currentContext);
3939

4040
if (candidates.rules.size) {
41+
const result: string[] = [];
4142
// get expectedText as collect rules first
4243
for (const candidate of candidates.rules) {
4344
const [ruleType] = candidate;
@@ -48,27 +49,20 @@ export class ImpalaErrorListener extends ParseErrorListener {
4849
case ImpalaSqlParser.RULE_functionNamePath:
4950
case ImpalaSqlParser.RULE_viewNamePath:
5051
case ImpalaSqlParser.RULE_columnNamePath: {
51-
if (!name) {
52-
expectedText = '{newObj}';
53-
} else {
54-
expectedText = `{new}${name}`;
55-
}
52+
result.push(`{existing}${name}`);
5653
break;
5754
}
5855
case ImpalaSqlParser.RULE_databaseNameCreate:
5956
case ImpalaSqlParser.RULE_tableNameCreate:
6057
case ImpalaSqlParser.RULE_functionNameCreate:
6158
case ImpalaSqlParser.RULE_viewNameCreate:
6259
case ImpalaSqlParser.RULE_columnNamePathCreate: {
63-
if (!name) {
64-
expectedText = '{existingObj}';
65-
} else {
66-
expectedText = `{existing}${name}`;
67-
}
60+
result.push(`{new}${name}`);
6861
break;
6962
}
7063
}
7164
}
65+
expectedText = result.join(`{or}`);
7266
}
7367
if (candidates.tokens.size) {
7468
expectedText += expectedText ? '{orKeyword}' : '{keyword}';

src/parser/mysql/mysqlErrorListener.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export class MysqlErrorListener extends ParseErrorListener {
3838
const candidates = core.collectCandidates(token.tokenIndex, currentContext);
3939

4040
if (candidates.rules.size) {
41+
const result: string[] = [];
4142
// get expectedText as collect rules first
4243
for (const candidate of candidates.rules) {
4344
const [ruleType] = candidate;
@@ -48,27 +49,20 @@ export class MysqlErrorListener extends ParseErrorListener {
4849
case MySqlParser.RULE_functionName:
4950
case MySqlParser.RULE_viewName:
5051
case MySqlParser.RULE_columnName: {
51-
if (!name) {
52-
expectedText = '{newObj}';
53-
} else {
54-
expectedText = `{new}${name}`;
55-
}
52+
result.push(`{existing}${name}`);
5653
break;
5754
}
5855
case MySqlParser.RULE_databaseNameCreate:
5956
case MySqlParser.RULE_tableNameCreate:
6057
case MySqlParser.RULE_functionNameCreate:
6158
case MySqlParser.RULE_viewNameCreate:
6259
case MySqlParser.RULE_columnNameCreate: {
63-
if (!name) {
64-
expectedText = '{existingObj}';
65-
} else {
66-
expectedText = `{existing}${name}`;
67-
}
60+
result.push(`{new}${name}`);
6861
break;
6962
}
7063
}
7164
}
65+
expectedText = result.join(`{or}`);
7266
}
7367
if (candidates.tokens.size) {
7468
expectedText += expectedText ? '{orKeyword}' : '{keyword}';

src/parser/postgresql/postgreErrorListener.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export class PostgreSqlErrorListener extends ParseErrorListener {
4242
const candidates = core.collectCandidates(token.tokenIndex, currentContext);
4343

4444
if (candidates.rules.size) {
45+
const result: string[] = [];
4546
// get expectedText as collect rules first
4647
for (const candidate of candidates.rules) {
4748
const [ruleType] = candidate;
@@ -54,11 +55,7 @@ export class PostgreSqlErrorListener extends ParseErrorListener {
5455
case PostgreSqlParser.RULE_database_name:
5556
case PostgreSqlParser.RULE_procedure_name:
5657
case PostgreSqlParser.RULE_column_name: {
57-
if (!name) {
58-
expectedText = '{newObj}';
59-
} else {
60-
expectedText = `{new}${name}`;
61-
}
58+
result.push(`{existing}${name}`);
6259
break;
6360
}
6461
case PostgreSqlParser.RULE_table_name_create:
@@ -68,15 +65,12 @@ export class PostgreSqlErrorListener extends ParseErrorListener {
6865
case PostgreSqlParser.RULE_database_name_create:
6966
case PostgreSqlParser.RULE_procedure_name_create:
7067
case PostgreSqlParser.RULE_column_name_create: {
71-
if (!name) {
72-
expectedText = '{existingObj}';
73-
} else {
74-
expectedText = `{existing}${name}`;
75-
}
68+
result.push(`{new}${name}`);
7669
break;
7770
}
7871
}
7972
}
73+
expectedText = result.join('{or}');
8074
}
8175
if (candidates.tokens.size) {
8276
expectedText += expectedText ? '{orKeyword}' : '{keyword}';

src/parser/spark/sparkErrorListener.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export class SparkErrorListener extends ParseErrorListener {
3838
const candidates = core.collectCandidates(token.tokenIndex, currentContext);
3939

4040
if (candidates.rules.size) {
41+
const result = [];
4142
// get expectedText as collect rules first
4243
for (const candidate of candidates.rules) {
4344
const [ruleType] = candidate;
@@ -48,27 +49,20 @@ export class SparkErrorListener extends ParseErrorListener {
4849
case SparkSqlParser.RULE_viewName:
4950
case SparkSqlParser.RULE_functionName:
5051
case SparkSqlParser.RULE_columnName: {
51-
if (!name) {
52-
expectedText = '{newObj}';
53-
} else {
54-
expectedText = `{new}${name}`;
55-
}
52+
result.push(`{existing}${name}`);
5653
break;
5754
}
5855
case SparkSqlParser.RULE_namespaceNameCreate:
5956
case SparkSqlParser.RULE_tableNameCreate:
6057
case SparkSqlParser.RULE_functionNameCreate:
6158
case SparkSqlParser.RULE_viewNameCreate:
6259
case SparkSqlParser.RULE_columnNameCreate: {
63-
if (!name) {
64-
expectedText = '{existingObj}';
65-
} else {
66-
expectedText = `{existing}${name}`;
67-
}
60+
result.push(`{new}${name}`);
6861
break;
6962
}
7063
}
7164
}
65+
expectedText = result.join('{or}');
7266
}
7367
if (candidates.tokens.size) {
7468
expectedText += expectedText ? '{orKeyword}' : '{keyword}';

src/parser/trino/trinoErrorListener.ts

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ export class TrinoErrorListener extends ParseErrorListener {
88
private preferredRules: Set<number>;
99

1010
private objectNames: Map<number, string> = new Map([
11-
[TrinoSqlParser.RULE_catalogName, 'database'],
12-
[TrinoSqlParser.RULE_catalogNameCreate, 'database'],
11+
[TrinoSqlParser.RULE_catalogName, 'catalog'],
12+
[TrinoSqlParser.RULE_catalogNameCreate, 'catalog'],
1313
[TrinoSqlParser.RULE_tableName, 'table'],
1414
[TrinoSqlParser.RULE_tableNameCreate, 'table'],
1515
[TrinoSqlParser.RULE_viewName, 'view'],
@@ -39,6 +39,7 @@ export class TrinoErrorListener extends ParseErrorListener {
3939
const candidates = core.collectCandidates(token.tokenIndex, currentContext);
4040

4141
if (candidates.rules.size) {
42+
const result: string[] = [];
4243
// get expectedText as collect rules first
4344
for (const candidate of candidates.rules) {
4445
const [ruleType] = candidate;
@@ -50,27 +51,20 @@ export class TrinoErrorListener extends ParseErrorListener {
5051
case TrinoSqlParser.RULE_viewName:
5152
case TrinoSqlParser.RULE_functionName:
5253
case TrinoSqlParser.RULE_columnName: {
53-
if (!name) {
54-
expectedText = '{newObj}';
55-
} else {
56-
expectedText = `{new}${name}`;
57-
}
54+
result.push(`{existing}${name}`);
5855
break;
5956
}
6057
case TrinoSqlParser.RULE_catalogNameCreate:
6158
case TrinoSqlParser.RULE_tableNameCreate:
6259
case TrinoSqlParser.RULE_schemaNameCreate:
6360
case TrinoSqlParser.RULE_viewNameCreate:
6461
case TrinoSqlParser.RULE_tableNameCreate: {
65-
if (!name) {
66-
expectedText = '{existingObj}';
67-
} else {
68-
expectedText = `{existing}${name}`;
69-
}
62+
result.push(`{new}${name}`);
7063
break;
7164
}
7265
}
7366
}
67+
expectedText = result.join('{or}');
7468
}
7569
if (candidates.tokens.size) {
7670
expectedText += expectedText ? '{orKeyword}' : '{keyword}';

0 commit comments

Comments
 (0)