forked from taozhi8833998/node-sql-parser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconstrain.js
More file actions
42 lines (40 loc) · 1.37 KB
/
constrain.js
File metadata and controls
42 lines (40 loc) · 1.37 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
import {
commonOptionConnector,
identifierToSql,
literalToSQL,
getParserOpt,
hasVal,
toUpper,
} from './util'
import { indexTypeAndOptionToSQL } from './index-definition'
import { columnReferenceDefinitionToSQL } from './column'
function constraintDefinitionToSQL(constraintDefinition) {
if (!constraintDefinition) return
const {
constraint,
constraint_type: constraintType,
enforced,
index,
keyword,
reference_definition: referenceDefinition,
for: forColumn,
with_values: withValues,
} = constraintDefinition
const constraintSQL = []
const { database } = getParserOpt()
constraintSQL.push(toUpper(keyword))
constraintSQL.push(identifierToSql(constraint))
let constraintTypeStr = toUpper(constraintType)
if (database.toLowerCase() === 'sqlite' && constraintTypeStr === 'UNIQUE KEY') constraintTypeStr = 'UNIQUE'
constraintSQL.push(constraintTypeStr)
constraintSQL.push(database.toLowerCase() !== 'sqlite' && identifierToSql(index))
constraintSQL.push(...indexTypeAndOptionToSQL(constraintDefinition))
constraintSQL.push(...columnReferenceDefinitionToSQL(referenceDefinition))
constraintSQL.push(toUpper(enforced))
constraintSQL.push(commonOptionConnector('FOR', identifierToSql, forColumn))
constraintSQL.push(literalToSQL(withValues))
return constraintSQL.filter(hasVal).join(' ')
}
export {
constraintDefinitionToSQL,
}