-
Notifications
You must be signed in to change notification settings - Fork 280
/
create-table-node.ts
64 lines (57 loc) · 1.58 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
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'
export type CreateTableNodeModifier = 'IfNotExists'
export interface CreateTableNode extends OperationNode {
readonly kind: 'CreateTableNode'
readonly table: TableNode
readonly columns: ReadonlyArray<ColumnDefinitionNode>
readonly modifier?: CreateTableNodeModifier
readonly constraints?: ReadonlyArray<ConstraintNode>
}
/**
* @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]),
})
},
cloneWithModifier(
createTable: CreateTableNode,
modifier: CreateTableNodeModifier
): CreateTableNode {
return freeze({
...createTable,
modifier,
})
},
cloneWithConstraint(
createTable: CreateTableNode,
constraint: ConstraintNode
): CreateTableNode {
return freeze({
...createTable,
constraints: createTable.constraints
? freeze([...createTable.constraints, constraint])
: freeze([constraint]),
})
},
})