Skip to content

Commit db6ec22

Browse files
committed
feat: support except in db2
1 parent 7d90085 commit db6ec22

2 files changed

Lines changed: 24 additions & 3 deletions

File tree

pegjs/db2.pegjs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
'ELSE': true,
2828
'END': true,
2929
'EXISTS': true,
30+
'EXCEPT': true,
3031
'EXPLAIN': true,
3132

3233
'FALSE': true,
@@ -252,8 +253,8 @@ multiple_stmt
252253
}
253254
}
254255
set_op
255-
= KW_UNION __ s:(KW_ALL / KW_DISTINCT)? {
256-
return s ? `union ${s.toLowerCase()}` : 'union'
256+
= u:(KW_UNION / KW_INTERSECT / KW_EXCEPT) __ s:(KW_ALL / KW_DISTINCT)? {
257+
return s ? `${u.toLowerCase()} ${s.toLowerCase()}` : `${u.toLowerCase()}`
257258
}
258259

259260
union_stmt
@@ -2297,7 +2298,9 @@ KW_INNER = "INNER"i !ident_start
22972298
KW_JOIN = "JOIN"i !ident_start
22982299
KW_OUTER = "OUTER"i !ident_start
22992300
KW_OVER = "OVER"i !ident_start
2300-
KW_UNION = "UNION"i !ident_start
2301+
KW_UNION = "UNION"i !ident_start { return 'UNION'; }
2302+
KW_INTERSECT = "INTERSECT"i !ident_start { return 'INTERSECT'; }
2303+
KW_EXCEPT = "EXCEPT"i !ident_start { return 'EXCEPT'; }
23012304
KW_VALUES = "VALUES"i !ident_start
23022305
KW_USING = "USING"i !ident_start
23032306

test/db2.spec.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,22 @@ describe('db2', () => {
1616
sql = 'SELECT * FROM "FGVST2"."CONTACT_TABLE25" FETCH FIRST 10 ROWS ONLY'
1717
expect(getParsedSql(sql)).to.be.equal('SELECT * FROM FGVST2.CONTACT_TABLE25 FETCH FIRST 10 ROWS ONLY')
1818
})
19+
20+
SQL_LIST = [
21+
{
22+
title: 'except multiple select stmt',
23+
sql: [
24+
`SELECT CUSTOMER_NUMBER FROM "ORG"."CUSTOMER_INFO_1"
25+
EXCEPT
26+
SELECT CUSTOMER_NUMBER FROM "ORG"."CUSTOMER_BACKUP";`,
27+
'SELECT CUSTOMER_NUMBER FROM ORG.CUSTOMER_INFO_1 EXCEPT SELECT CUSTOMER_NUMBER FROM ORG.CUSTOMER_BACKUP'
28+
]
29+
},
30+
]
31+
SQL_LIST.forEach(sqlInfo => {
32+
const { title, sql } = sqlInfo
33+
it(`should support ${title}`, () => {
34+
expect(getParsedSql(sql[0])).to.equal(sql[1])
35+
})
36+
})
1937
})

0 commit comments

Comments
 (0)