Skip to content

Commit 122effb

Browse files
Merge pull request taozhi8833998#405 from taozhi8833998/bug-interval
support interval string
2 parents 1992d7e + bd836ac commit 122effb

File tree

4 files changed

+26
-5
lines changed

4 files changed

+26
-5
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "node-sql-parser",
3-
"version": "3.0.3",
3+
"version": "3.0.4",
44
"description": "simple node sql parser",
55
"main": "index.js",
66
"types": "index.d.ts",

pegjs/postgresql.pegjs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
'INNER': true,
4242
'INSERT': true,
4343
'INTO': true,
44+
'INTERVAL': true,
4445
'IS': true,
4546

4647
'JOIN': true,
@@ -1872,8 +1873,8 @@ expr_list
18721873
}
18731874

18741875
interval_expr
1875-
= KW_INTERVAL __
1876-
e:expr __
1876+
= KW_INTERVAL __
1877+
e:expr __
18771878
u: interval_unit {
18781879
// => { type: 'interval', expr: expr; unit: interval_unit; }
18791880
return {
@@ -1882,6 +1883,15 @@ interval_expr
18821883
unit: u.toLowerCase(),
18831884
}
18841885
}
1886+
/ KW_INTERVAL __
1887+
e:literal_string {
1888+
// => { type: 'interval', expr: expr; unit: interval_unit; }
1889+
return {
1890+
type: 'interval',
1891+
expr: e,
1892+
unit: '',
1893+
}
1894+
}
18851895

18861896
case_expr
18871897
= KW_CASE __

src/interval.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import { toUpper } from './util'
1+
import { toUpper, hasVal } from './util'
22
import { exprToSQL } from './expr'
33

44
function intervalToSQL(intervalExpr) {
55
const { expr, unit } = intervalExpr
6-
return `INTERVAL ${exprToSQL(expr)} ${toUpper(unit)}`
6+
const result = ['INTERVAL', exprToSQL(expr), toUpper(unit)]
7+
return result.filter(hasVal).join(' ')
78
}
89

910
export {

test/ast.spec.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,16 @@ describe('AST', () => {
331331
});
332332

333333
describe('date function', () => {
334+
it('should interval string', () => {
335+
const opt = {
336+
database: 'postgresql'
337+
}
338+
expect(getParsedSql("SELECT NOW() - INTERVAL '7 DAY'", opt))
339+
.to.equal("SELECT NOW() - INTERVAL '7 DAY'");
340+
expect(getParsedSql("SELECT NOW() - INTERVAL 7 DAY", opt))
341+
.to.equal("SELECT NOW() - INTERVAL 7 DAY");
342+
})
343+
334344
it('should support adddate function', () => {
335345
expect(getParsedSql('SELECT ADDDATE(c, INTERVAL 10 DAY) as b FROM tableA'))
336346
.to.equal('SELECT ADDDATE(`c`, INTERVAL 10 DAY) AS `b` FROM `tableA`');

0 commit comments

Comments
 (0)