forked from taozhi8833998/node-sql-parser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinsert.js
More file actions
27 lines (24 loc) · 865 Bytes
/
insert.js
File metadata and controls
27 lines (24 loc) · 865 Bytes
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
import { tablesToSQL } from './tables'
import { exprToSQL } from './expr'
import { identifierToSql, commonOptionConnector, hasVal } from './util'
import { selectToSQL } from './select'
/**
* @param {Array} values
* @return {string}
*/
function valuesToSQL(values) {
if (values.type === 'select') return selectToSQL(values)
const clauses = values.map(exprToSQL)
return `(${clauses.join('),(')})`
}
function insertToSQL(stmt) {
const { table, columns, values, where } = stmt
const clauses = ['INSERT INTO', tablesToSQL(table)]
if (Array.isArray(columns)) clauses.push(`(${columns.map(identifierToSql).join(', ')})`)
clauses.push(commonOptionConnector(Array.isArray(values) ? 'VALUES' : '', valuesToSQL, values))
clauses.push(commonOptionConnector('WHERE', exprToSQL, where))
return clauses.filter(hasVal).join(' ')
}
export {
insertToSQL,
}