-
Notifications
You must be signed in to change notification settings - Fork 280
/
create-table-node.ts
104 lines (94 loc) · 2.62 KB
/
create-table-node.ts
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import { freeze } from '../util/object-utils.js'
import { OperationNode } from './operation-node.js'
import { TableNode } from './table-node.js'
import { ConstraintNode } from './constraint-node.js'
import { ColumnDefinitionNode } from './column-definition-node.js'
import { ArrayItemType } from '../util/type-utils.js'
export const ON_COMMIT_ACTIONS = ['preserve rows', 'delete rows', 'drop']
export type OnCommitAction = ArrayItemType<typeof ON_COMMIT_ACTIONS>
export type CreateTableNodeParams = Omit<
CreateTableNode,
| 'kind'
| 'table'
| 'columns'
| 'constraints'
| 'frontModifiers'
| 'endModifiers'
>
export interface CreateTableNode extends OperationNode {
readonly kind: 'CreateTableNode'
readonly table: TableNode
readonly columns: ReadonlyArray<ColumnDefinitionNode>
readonly constraints?: ReadonlyArray<ConstraintNode>
readonly temporary?: boolean
readonly ifNotExists?: boolean
readonly onCommit?: OnCommitAction
readonly frontModifiers?: ReadonlyArray<OperationNode>
readonly endModifiers?: ReadonlyArray<OperationNode>
}
/**
* @internal
*/
export const CreateTableNode = freeze({
is(node: OperationNode): node is CreateTableNode {
return node.kind === 'CreateTableNode'
},
create(table: TableNode): CreateTableNode {
return freeze({
kind: 'CreateTableNode',
table,
columns: freeze([]),
})
},
cloneWithColumn(
createTable: CreateTableNode,
column: ColumnDefinitionNode
): CreateTableNode {
return freeze({
...createTable,
columns: freeze([...createTable.columns, column]),
})
},
cloneWithConstraint(
createTable: CreateTableNode,
constraint: ConstraintNode
): CreateTableNode {
return freeze({
...createTable,
constraints: createTable.constraints
? freeze([...createTable.constraints, constraint])
: freeze([constraint]),
})
},
cloneWithFrontModifier(
createTable: CreateTableNode,
modifier: OperationNode
): CreateTableNode {
return freeze({
...createTable,
frontModifiers: createTable.frontModifiers
? freeze([...createTable.frontModifiers, modifier])
: freeze([modifier]),
})
},
cloneWithEndModifier(
createTable: CreateTableNode,
modifier: OperationNode
): CreateTableNode {
return freeze({
...createTable,
endModifiers: createTable.endModifiers
? freeze([...createTable.endModifiers, modifier])
: freeze([modifier]),
})
},
cloneWith(
createTable: CreateTableNode,
params: CreateTableNodeParams
): CreateTableNode {
return freeze({
...createTable,
...params,
})
},
})