forked from taozhi8833998/node-sql-parser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathshow.js
More file actions
67 lines (62 loc) · 1.95 KB
/
show.js
File metadata and controls
67 lines (62 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import { exprToSQL, varToSQL } from './expr'
import { limitToSQL } from './limit'
import { tableToSQL, tablesToSQL } from './tables'
import { commonOptionConnector, hasVal, literalToSQL, toUpper } from './util'
function showEventToSQL(showEventExpr) {
const { in: inClause, from , limit } = showEventExpr
return [
commonOptionConnector('IN', literalToSQL, inClause && inClause.right),
commonOptionConnector('FROM', tablesToSQL, from),
limitToSQL(limit),
].filter(hasVal).join(' ')
}
function showLikeAndWhereToSQL(showCharacterSetExpr) {
const { expr } = showCharacterSetExpr
if (!expr) return
const { op } = expr
if (toUpper(op) === 'LIKE') return commonOptionConnector('LIKE', literalToSQL, expr.right)
return commonOptionConnector('WHERE', exprToSQL, expr)
}
function showGrantsForUser(showGrantsForExpr) {
const { for: forExpr } = showGrantsForExpr
if (!forExpr) return
const { user, host, role_list } = forExpr
let userAndHost = `'${user}'`
if (host) userAndHost += `@'${host}'`
return ['FOR', userAndHost, role_list && 'USING', role_list && role_list.map(role => `'${role}'`).join(', ')].filter(hasVal).join(' ')
}
function showToSQL(showExpr) {
let { keyword } = showExpr
const { suffix } = showExpr
let str = ''
switch (toUpper(keyword)) {
case 'BINLOG':
str = showEventToSQL(showExpr)
break
case 'CHARACTER':
case 'COLLATION':
str = showLikeAndWhereToSQL(showExpr)
break
case 'COLUMNS':
case 'INDEXES':
case 'INDEX':
str = commonOptionConnector('FROM', tablesToSQL, showExpr.from)
break
case 'GRANTS':
str = showGrantsForUser(showExpr)
break
case 'CREATE':
str = commonOptionConnector('', tableToSQL, showExpr[suffix])
break
case 'VAR':
str = varToSQL(showExpr.var)
keyword = ''
break
default:
break
}
return ['SHOW', toUpper(keyword), toUpper(suffix), str].filter(hasVal).join(' ')
}
export {
showToSQL,
}