-
-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathdb.js
134 lines (115 loc) · 4.71 KB
/
db.js
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
const rdb = require('../src/index');
const nameSchema = {
type: 'string',
};
function validateName(value) {
if (value && value.length > 10)
throw new Error('Length cannot exceed 10 characters');
}
function truthy(value) {
if (!value)
throw new Error('Name must be set');
}
const map = rdb.map(x => ({
customer: x.table('customer').map(({ column }) => ({
id: column('id').numeric().primary().notNullExceptInsert(),
name: column('name').string().validate(validateName).validate(truthy).JSONSchema(nameSchema),
balance: column('balance').numeric(),
isActive: column('isActive').boolean(),
})),
withSchema: x.table('withSchema').map(({ column }) => ({
id: column('id').numeric().primary().notNullExceptInsert(),
name: column('name').string(),
})),
vendor: x.table('vendor').map(({ column }) => ({
id: column('id').numeric().primary().notNull(),
name: column('name').string().validate(validateName).validate(truthy).JSONSchema(nameSchema),
balance: column('balance').numeric(),
isActive: column('isActive').boolean(),
})),
vendorDiscr: x.table('vendor').map(({ column }) => ({
id: column('id').numeric().primary().notNull(),
name: column('name').string(),
isActive: column('isActive').boolean(),
})).columnDiscriminators('balance=1'),
customer2: x.table('customer').map(({ column }) => ({
id: column('id').numeric().primary().notNullExceptInsert(),
name: column('name').string().validate(validateName).validate(truthy).JSONSchema(nameSchema),
balance: column('balance').numeric(),
isActive: column('isActive').boolean(),
data: column('data').json(),
picture: column('picture').binary()
})),
customerDefault: x.table('customer').map(({ column }) => ({
id: column('id').numeric().primary().notNullExceptInsert(),
name: column('name').string(),
balance: column('balance').numeric().default(0),
isActive: column('isActive').boolean().default(true),
})),
customerDbNull: x.table('customer').map(({ column }) => ({
id: column('id').numeric().primary().notNullExceptInsert(),
name: column('name').string().validate(validateName).dbNull('foo'),
balance: column('balance').numeric(),
isActive: column('isActive').boolean(),
})),
package: x.table('package').map(({ column }) => ({
id: column('packageId').numeric().primary().notNullExceptInsert(),
lineId: column('lineId').numeric().notNullExceptInsert(),
sscc: column('sscc').string()
})),
compositeOrder: x.table('compositeOrder').map(({ column }) => ({
companyId: column('companyId').string().primary().notNullExceptInsert(),
orderNo: column('orderNo').numeric().primary().notNullExceptInsert(),
})),
compositeOrderLine: x.table('compositeOrderLine').map(({ column }) => ({
companyId: column('companyId').string().primary().notNullExceptInsert(),
orderNo: column('orderNo').numeric().primary().notNullExceptInsert(),
lineNo: column('lineNo').numeric().primary().notNullExceptInsert(),
product: column('product').string(),
})),
order: x.table('order').map(({ column }) => ({
id: column('id').numeric().primary().notNullExceptInsert(),
orderDate: column('orderDate').date().notNull(),
customerId: column('customerId').numeric().notNullExceptInsert(),
})),
orderLine: x.table('orderLine').map(({ column }) => ({
id: column('id').numeric().primary().notNullExceptInsert(),
orderId: column('orderId').numeric(),
product: column('product').string(),
amount: column('amount').numeric(),
})),
deliveryAddress: x.table('deliveryAddress').map(({ column }) => ({
id: column('id').numeric().primary().notNullExceptInsert(),
orderId: column('orderId').numeric(),
name: column('name').string(),
street: column('street').string(),
postalCode: column('postalCode').string(),
postalPlace: column('postalPlace').string(),
countryCode: column('countryCode').string(),
})),
datetest: x.table('datetest').map(({ column }) => ({
id: column('id').numeric().primary().notNullExceptInsert(),
date: column('date').date(),
datetime: column('tdatetime').date(),
})),
datetestWithTz: x.table('datetest').map(({ column }) => ({
id: column('id').numeric().primary().notNullExceptInsert(),
date: column('date').date(),
datetime: column('tdatetime').date(),
datetime_tz: column('tdatetime_tz').dateWithTimeZone()
}))
})).map(x => ({
orderLine: x.orderLine.map(({ hasMany }) => ({
packages: hasMany(x.package).by('lineId')
}))
})).map(x => ({
order: x.order.map(({ hasOne, hasMany, references }) => ({
customer: references(x.customer).by('customerId').notNull(),
deliveryAddress: hasOne(x.deliveryAddress).by('orderId').notNull(),
lines: hasMany(x.orderLine).by('orderId')
})),
compositeOrder: x.compositeOrder.map(({ hasMany }) => ({
lines: hasMany(x.compositeOrderLine).by('companyId', 'orderNo')
}))
}));
module.exports = map;