Skip to content

Commit 11de859

Browse files
authored
Multiple sqls in the one file (joe-re#190)
* bumpup version to 1.5.1 * enable to lint multiple sqls in the same file
1 parent ab6d8c3 commit 11de859

File tree

8 files changed

+196
-70
lines changed

8 files changed

+196
-70
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "sql-language-server",
33
"displayName": "SQL Language Server",
44
"description": "SQL Language Server Extension for VSC",
5-
"version": "1.5.0",
5+
"version": "1.5.1",
66
"main": "./packages/client/out/extension",
77
"repository": {
88
"type": "git",

packages/sql-parser/base/fromClauseParser.js

Lines changed: 83 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/sql-parser/base/parser.js

Lines changed: 83 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/sql-parser/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,3 +386,4 @@ type FromClauseParserResult = {
386386

387387
export function parseFromClause(sql: string): FromClauseParserResult
388388
export function parse(sql: string): AST
389+
export function parseAll(sql: string): AST[]

packages/sql-parser/index.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,17 @@ exports.parse = function (sql){
88
return ap.ast;
99
};
1010

11+
exports.parseAll = function (sql) {
12+
var ap = Parser.parse(sql);
13+
return ap.asts;
14+
}
15+
1116
exports.parseFromClause = function (sql) {
1217
return FromClauseParser.parse(sql)
1318
}
1419

1520
module.exports = {
1621
parse: exports.parse,
17-
parseFromClause: exports.parseFromClause
22+
parseFromClause: exports.parseFromClause,
23+
parseAll: exports.parseAll,
1824
}

packages/sql-parser/parser.pegjs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,18 @@
6565
}
6666

6767
start
68-
= &{ return true; } __ ast:(union_stmt / update_stmt / replace_insert_stmt / delete_stmt / create_table_stmt / alter_table_stmt / create_index_stmt) __ EOSQL? __ {
68+
= &{ return true; } __ ast:ast __ tail: ((EOSQL __ start / EOSQL))* {
6969
return {
7070
ast : ast,
71+
asts : [ast].concat(tail.map(v => v[2].ast))
7172
}
7273
}
7374
/ast:proc_stmts {
7475
return {
7576
ast : ast
7677
}
7778
}
79+
ast = union_stmt / update_stmt / replace_insert_stmt / delete_stmt / create_table_stmt / alter_table_stmt / create_index_stmt
7880

7981
union_stmt
8082
= head:select_stmt tail:(__ KW_UNION __ KW_ALL? __ select_stmt)* {

packages/sql-parser/test/select.test.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,14 @@ describe('table name with double quotes', () => {
1212
expect(result).toMatchObject({ type: 'select' })
1313
})
1414
})
15+
16+
17+
describe('multiple sqls in the same file', () => {
18+
const sql = `
19+
SELECT "T1"."COL1" FROM "T1" WHERE "T1"."num" = 1;
20+
SELECT "T1"."COL1" FROM "T1" WHERE "T1"."num" = 2;
21+
`
22+
const result = parse(sql)
23+
expect(result).toBeDefined()
24+
expect(result).toMatchObject({ type: 'select' })
25+
});

packages/sqlint/src/rules/index.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { parse, NodeRange, AST, Node, BaseNode } from '@joe-re/sql-parser'
1+
import { parseAll, NodeRange, AST, Node, BaseNode } from '@joe-re/sql-parser'
22
import log4js from 'log4js'
33
import { Fixer, FixDescription, createFixer } from '../fixer'
44
import { reservedWordCase } from './reservedWordCase'
@@ -80,8 +80,12 @@ export function execute(sql: string, config: Config): Diagnostic[] {
8080
registerRule(requireAsToRenameColumn, config, sql)
8181

8282
try {
83-
const ast = parse(sql)
84-
return walk(ast)
83+
const ast = parseAll(sql)
84+
return ast
85+
.map((v) => {
86+
return walk(v)
87+
})
88+
.flat()
8589
} catch (e) {
8690
logger.debug(e)
8791
return []

0 commit comments

Comments
 (0)