myorm_pg 2.5.3 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -0
- package/lib/Index.d.ts +32 -32
- package/lib/Index.js +53 -53
- package/lib/core/decorators/SchemasDecorators.d.ts +44 -44
- package/lib/core/decorators/SchemasDecorators.js +144 -144
- package/lib/core/decorators/SchemasDecorators.js.map +1 -1
- package/lib/core/design/Type.d.ts +38 -37
- package/lib/core/design/Type.d.ts.map +1 -1
- package/lib/core/design/Type.js +142 -137
- package/lib/core/design/Type.js.map +1 -1
- package/lib/core/enums/DBTypes.d.ts +18 -18
- package/lib/core/enums/DBTypes.js +22 -22
- package/lib/core/enums/DBTypes.js.map +1 -1
- package/lib/core/enums/RelationType.d.ts +6 -6
- package/lib/core/enums/RelationType.js +10 -10
- package/lib/core/enums/RelationType.js.map +1 -1
- package/lib/core/exceptions/ConnectionFailException.d.ts +4 -4
- package/lib/core/exceptions/ConnectionFailException.js +12 -12
- package/lib/core/exceptions/ConstraintFailException.d.ts +4 -4
- package/lib/core/exceptions/ConstraintFailException.js +12 -12
- package/lib/core/exceptions/Exception.d.ts +4 -4
- package/lib/core/exceptions/Exception.js +9 -9
- package/lib/core/exceptions/InvalidOperationException.d.ts +5 -5
- package/lib/core/exceptions/InvalidOperationException.js +13 -13
- package/lib/core/exceptions/NotImplementedException.d.ts +4 -4
- package/lib/core/exceptions/NotImplementedException.js +12 -12
- package/lib/core/exceptions/QueryFailException.d.ts +5 -5
- package/lib/core/exceptions/QueryFailException.js +13 -13
- package/lib/core/exceptions/TypeNotSuportedException.d.ts +4 -4
- package/lib/core/exceptions/TypeNotSuportedException.js +12 -12
- package/lib/core/objects/DBOperationLogHandler.d.ts +15 -15
- package/lib/core/objects/DBOperationLogHandler.js +16 -16
- package/lib/core/objects/DBOperationLogHandler.js.map +1 -1
- package/lib/core/objects/interfaces/IDBConnection.d.ts +13 -13
- package/lib/core/objects/interfaces/IDBConnection.js +2 -2
- package/lib/core/objects/interfaces/IDBContext.d.ts +41 -41
- package/lib/core/objects/interfaces/IDBContext.js +2 -2
- package/lib/core/objects/interfaces/IDBManager.d.ts +12 -12
- package/lib/core/objects/interfaces/IDBManager.js +2 -2
- package/lib/core/objects/interfaces/IDBSet.d.ts +41 -37
- package/lib/core/objects/interfaces/IDBSet.d.ts.map +1 -1
- package/lib/core/objects/interfaces/IDBSet.js +2 -2
- package/lib/core/objects/interfaces/IStatement.d.ts +16 -16
- package/lib/core/objects/interfaces/IStatement.js +15 -15
- package/lib/core/objects/interfaces/IStatement.js.map +1 -1
- package/lib/implementations/PGDBConnection.d.ts +18 -18
- package/lib/implementations/PGDBConnection.js +102 -102
- package/lib/implementations/PGDBContext.d.ts +55 -55
- package/lib/implementations/PGDBContext.js +298 -298
- package/lib/implementations/PGDBManager.d.ts +31 -31
- package/lib/implementations/PGDBManager.js +242 -242
- package/lib/implementations/PGDBSet.d.ts +56 -51
- package/lib/implementations/PGDBSet.d.ts.map +1 -1
- package/lib/implementations/PGDBSet.js +1072 -941
- package/lib/implementations/PGDBSet.js.map +1 -1
- package/lib/implementations/PGFluentField.d.ts +17 -17
- package/lib/implementations/PGFluentField.js +153 -153
- package/lib/implementations/PGSetHelper.d.ts +18 -18
- package/lib/implementations/PGSetHelper.js +47 -47
- package/lib/implementations/PGSetHelper.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,942 +1,1073 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const Type_1 = __importDefault(require("../core/design/Type"));
|
|
16
|
-
const DBTypes_1 = require("../core/enums/DBTypes");
|
|
17
|
-
const IStatement_1 = require("../core/objects/interfaces/IStatement");
|
|
18
|
-
const SchemasDecorators_1 = __importDefault(require("../core/decorators/SchemasDecorators"));
|
|
19
|
-
const NotImplementedException_1 = __importDefault(require("../core/exceptions/NotImplementedException"));
|
|
20
|
-
const TypeNotSuportedException_1 = __importDefault(require("../core/exceptions/TypeNotSuportedException"));
|
|
21
|
-
const InvalidOperationException_1 = __importDefault(require("../core/exceptions/InvalidOperationException"));
|
|
22
|
-
const RelationType_1 = require("../core/enums/RelationType");
|
|
23
|
-
const ConstraintFailException_1 = __importDefault(require("../core/exceptions/ConstraintFailException"));
|
|
24
|
-
const PGFluentField_1 = __importDefault(require("./PGFluentField"));
|
|
25
|
-
const PGSetHelper_1 = __importDefault(require("./PGSetHelper"));
|
|
26
|
-
class PGDBSet {
|
|
27
|
-
constructor(cTor, context) {
|
|
28
|
-
this._statements = [];
|
|
29
|
-
this._ordering = [];
|
|
30
|
-
this._includes = [];
|
|
31
|
-
this._type = cTor;
|
|
32
|
-
this._table = Type_1.default.GetTableName(cTor);
|
|
33
|
-
this._maps = Type_1.default.GetColumnNameAndType(cTor);
|
|
34
|
-
this._manager = context["_manager"];
|
|
35
|
-
this._context = context;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
let
|
|
46
|
-
let
|
|
47
|
-
let
|
|
48
|
-
let
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
let
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
let
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
let
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
let
|
|
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
|
-
let
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
if (
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
if (!
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
if (
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
});
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
return
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
this.
|
|
595
|
-
return this;
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
}
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
}
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
;
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
let
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
}
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
return
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
(
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
(
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
}
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const Type_1 = __importDefault(require("../core/design/Type"));
|
|
16
|
+
const DBTypes_1 = require("../core/enums/DBTypes");
|
|
17
|
+
const IStatement_1 = require("../core/objects/interfaces/IStatement");
|
|
18
|
+
const SchemasDecorators_1 = __importDefault(require("../core/decorators/SchemasDecorators"));
|
|
19
|
+
const NotImplementedException_1 = __importDefault(require("../core/exceptions/NotImplementedException"));
|
|
20
|
+
const TypeNotSuportedException_1 = __importDefault(require("../core/exceptions/TypeNotSuportedException"));
|
|
21
|
+
const InvalidOperationException_1 = __importDefault(require("../core/exceptions/InvalidOperationException"));
|
|
22
|
+
const RelationType_1 = require("../core/enums/RelationType");
|
|
23
|
+
const ConstraintFailException_1 = __importDefault(require("../core/exceptions/ConstraintFailException"));
|
|
24
|
+
const PGFluentField_1 = __importDefault(require("./PGFluentField"));
|
|
25
|
+
const PGSetHelper_1 = __importDefault(require("./PGSetHelper"));
|
|
26
|
+
class PGDBSet {
|
|
27
|
+
constructor(cTor, context) {
|
|
28
|
+
this._statements = [];
|
|
29
|
+
this._ordering = [];
|
|
30
|
+
this._includes = [];
|
|
31
|
+
this._type = cTor;
|
|
32
|
+
this._table = Type_1.default.GetTableName(cTor);
|
|
33
|
+
this._maps = Type_1.default.GetColumnNameAndType(cTor);
|
|
34
|
+
this._manager = context["_manager"];
|
|
35
|
+
this._context = context;
|
|
36
|
+
this._set = new PGSetValue();
|
|
37
|
+
}
|
|
38
|
+
AddAsync(obj) {
|
|
39
|
+
return this.CreatePromisse(() => __awaiter(this, void 0, void 0, function* () {
|
|
40
|
+
var _a, _b;
|
|
41
|
+
if (!obj)
|
|
42
|
+
throw new InvalidOperationException_1.default(`Cannot insert a null reference object of ${this._type.name}`);
|
|
43
|
+
if (!this.IsCorrectType(obj))
|
|
44
|
+
throw new InvalidOperationException_1.default(`The object passed as argument is not a ${this._type.name} instance`);
|
|
45
|
+
let sql = `insert into "${this._table}"(`;
|
|
46
|
+
let values = `values (`;
|
|
47
|
+
let returnKey = '';
|
|
48
|
+
let key;
|
|
49
|
+
let subTypes = [];
|
|
50
|
+
for (let map of this._maps) {
|
|
51
|
+
if (SchemasDecorators_1.default.IsPrimaryKey(this._type, map.Field)) {
|
|
52
|
+
returnKey = `returning ${map.Column}`;
|
|
53
|
+
key =
|
|
54
|
+
{
|
|
55
|
+
Column: map.Column,
|
|
56
|
+
Property: map.Field
|
|
57
|
+
};
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
let currPropValue = Reflect.get(obj, map.Field);
|
|
61
|
+
if (currPropValue == undefined || currPropValue == null) {
|
|
62
|
+
sql += `"${map.Column}",`;
|
|
63
|
+
values += `null,`;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
let relation = SchemasDecorators_1.default.GetRelationAttribute(this._type, map.Field);
|
|
67
|
+
let designType = Type_1.default.GetDesingType(this._type, map.Field);
|
|
68
|
+
if ((designType && this._context.IsMapped(designType)) || (relation && this._context.IsMapped(relation.TypeBuilder()))) {
|
|
69
|
+
subTypes.push({
|
|
70
|
+
Column: map.Column,
|
|
71
|
+
Field: map.Field,
|
|
72
|
+
Type: map.Type
|
|
73
|
+
});
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
let colType = Type_1.default.CastType(map.Type);
|
|
77
|
+
sql += `"${map.Column}",`;
|
|
78
|
+
values += `${this.CreateValueStatement(colType, Reflect.get(obj, map.Field))},`;
|
|
79
|
+
}
|
|
80
|
+
if (key == undefined) {
|
|
81
|
+
throw new InvalidOperationException_1.default(`The type ${this._type.name} must have a primary key field`);
|
|
82
|
+
}
|
|
83
|
+
sql = sql.substring(0, sql.length - 1) + ") ";
|
|
84
|
+
values = values.substring(0, values.length - 1) + ")";
|
|
85
|
+
let insert = `${sql} ${values} ${returnKey};`;
|
|
86
|
+
let retun = yield this._manager.Execute(insert);
|
|
87
|
+
if (key != undefined && retun.rows.length > 0) {
|
|
88
|
+
obj[key.Property] = retun.rows[0][key.Column];
|
|
89
|
+
}
|
|
90
|
+
let subTypesUpdates = [];
|
|
91
|
+
let updatableFields = [];
|
|
92
|
+
for (let sub of subTypes) {
|
|
93
|
+
let relation = SchemasDecorators_1.default.GetRelationAttribute(this._type, sub.Field);
|
|
94
|
+
let subType = Type_1.default.GetDesingType(this._type, sub.Field);
|
|
95
|
+
if (!subType && !relation)
|
|
96
|
+
throw new InvalidOperationException_1.default(`Can not determine the relation of the property ${this._type}.${sub.Field}`);
|
|
97
|
+
if (!subType && relation) {
|
|
98
|
+
subType = relation.TypeBuilder();
|
|
99
|
+
}
|
|
100
|
+
let isArray = subType == Array;
|
|
101
|
+
if (isArray) {
|
|
102
|
+
if (!relation)
|
|
103
|
+
continue;
|
|
104
|
+
subType = relation === null || relation === void 0 ? void 0 : relation.TypeBuilder();
|
|
105
|
+
}
|
|
106
|
+
let subObj = Reflect.get(obj, sub.Field);
|
|
107
|
+
if (subObj == undefined)
|
|
108
|
+
continue;
|
|
109
|
+
let subPK = SchemasDecorators_1.default.ExtractPrimaryKey(subType);
|
|
110
|
+
if (subPK == undefined) {
|
|
111
|
+
throw new InvalidOperationException_1.default(`The type ${subType.name} must have a primary key column`);
|
|
112
|
+
}
|
|
113
|
+
let colletion = this._context.Collection(subType);
|
|
114
|
+
if (key != undefined) {
|
|
115
|
+
for (let subKey of Type_1.default.GetProperties(subType)) {
|
|
116
|
+
let subRelation = SchemasDecorators_1.default.GetRelationAttribute(subType, subKey);
|
|
117
|
+
if (subRelation && subRelation.TypeBuilder() == this._type) {
|
|
118
|
+
if (subRelation.Field != undefined && subRelation.Field != sub.Field)
|
|
119
|
+
continue;
|
|
120
|
+
if (subRelation.Relation == RelationType_1.RelationType.ONE_TO_MANY || subRelation.Relation == RelationType_1.RelationType.MANY_TO_MANY) {
|
|
121
|
+
updatableFields.push(subKey);
|
|
122
|
+
if (isArray) {
|
|
123
|
+
for (let i of subObj) {
|
|
124
|
+
if (i == undefined)
|
|
125
|
+
continue;
|
|
126
|
+
let metadata = Type_1.default.ExtractMetadata(i).filter(s => s.Field == subKey && s.Loaded);
|
|
127
|
+
let value = [];
|
|
128
|
+
if (metadata.length > 0) {
|
|
129
|
+
value = ((_a = Reflect.get(i, subKey)) !== null && _a !== void 0 ? _a : []).filter(s => s[subPK] != obj[subPK]);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
let item = yield colletion["Where"]({ Field: subPK, Value: Reflect.get(i, subPK) })["LoadRelationOn"](subKey)["FirstOrDefaultAsync"]();
|
|
133
|
+
value = item == undefined ? [] : item[subKey];
|
|
134
|
+
value = value !== null && value !== void 0 ? value : [];
|
|
135
|
+
}
|
|
136
|
+
value.push(obj);
|
|
137
|
+
Reflect.set(i, subKey, value);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
let metadata = Type_1.default.ExtractMetadata(subObj).filter(s => s.Field == subKey && s.Loaded);
|
|
142
|
+
let value = [];
|
|
143
|
+
if (metadata.length > 0) {
|
|
144
|
+
value = ((_b = Reflect.get(subObj, subKey)) !== null && _b !== void 0 ? _b : []).filter(s => s[subPK] != obj[subPK]);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
let item = yield colletion["Where"]({ Field: subPK, Value: Reflect.get(subObj, subPK) })["LoadRelationOn"](subKey)["FirstOrDefaultAsync"]();
|
|
148
|
+
value = item == undefined ? [] : item[subKey];
|
|
149
|
+
value = value !== null && value !== void 0 ? value : [];
|
|
150
|
+
}
|
|
151
|
+
value.push(obj);
|
|
152
|
+
Reflect.set(subObj, subKey, value);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
if (subRelation.Relation == RelationType_1.RelationType.MANY_TO_ONE && isArray) {
|
|
157
|
+
for (let i of subObj) {
|
|
158
|
+
if (i == undefined)
|
|
159
|
+
continue;
|
|
160
|
+
Reflect.set(i, subKey, obj);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
Reflect.set(subObj, subKey, obj);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (isArray) {
|
|
171
|
+
for (let i of subObj) {
|
|
172
|
+
if (i == undefined)
|
|
173
|
+
continue;
|
|
174
|
+
if (!Type_1.default.HasValue(Reflect.get(i, subPK)))
|
|
175
|
+
yield colletion["AddAsync"](i);
|
|
176
|
+
else
|
|
177
|
+
yield colletion["UpdateObjectAsync"](i, false, updatableFields);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
if (subObj == undefined)
|
|
182
|
+
continue;
|
|
183
|
+
if (!Type_1.default.HasValue(Reflect.get(subObj, subPK)))
|
|
184
|
+
yield colletion["AddAsync"](subObj);
|
|
185
|
+
else
|
|
186
|
+
yield colletion["UpdateObjectAsync"](subObj, false, updatableFields);
|
|
187
|
+
}
|
|
188
|
+
let columnType = Type_1.default.CastType(Type_1.default.GetDesingTimeTypeName(subType, subPK));
|
|
189
|
+
if ((relation === null || relation === void 0 ? void 0 : relation.Relation) == RelationType_1.RelationType.MANY_TO_MANY || (relation === null || relation === void 0 ? void 0 : relation.Relation) == RelationType_1.RelationType.ONE_TO_MANY || isArray)
|
|
190
|
+
columnType = Type_1.default.AsArray(columnType);
|
|
191
|
+
if (subObj == undefined)
|
|
192
|
+
continue;
|
|
193
|
+
let updateValues = [Reflect.get(subObj, subPK)];
|
|
194
|
+
if (isArray) {
|
|
195
|
+
updateValues = [];
|
|
196
|
+
for (let i of subObj) {
|
|
197
|
+
if (i == undefined)
|
|
198
|
+
continue;
|
|
199
|
+
updateValues.push(Reflect.get(i, subPK));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
subTypesUpdates.push(`"${sub.Column}" = ${this.CreateValueStatement(columnType, isArray ? updateValues : updateValues[0])}`);
|
|
203
|
+
}
|
|
204
|
+
if (subTypesUpdates.length > 0) {
|
|
205
|
+
let subUpdate = `update "${Type_1.default.GetTableName(this._type)}" set `;
|
|
206
|
+
for (let p of subTypesUpdates) {
|
|
207
|
+
subUpdate += `${p},`;
|
|
208
|
+
}
|
|
209
|
+
subUpdate = `${subUpdate.substring(0, subUpdate.length - 1)} where `;
|
|
210
|
+
subUpdate += this.EvaluateStatement({
|
|
211
|
+
StatementType: StatementType.WHERE,
|
|
212
|
+
Statement: {
|
|
213
|
+
Field: key.Property,
|
|
214
|
+
Kind: IStatement_1.Operation.EQUALS,
|
|
215
|
+
Value: Reflect.get(obj, key.Property)
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
yield this._manager.ExecuteNonQuery(subUpdate);
|
|
219
|
+
}
|
|
220
|
+
return obj;
|
|
221
|
+
}));
|
|
222
|
+
}
|
|
223
|
+
UpdateSelectionAsync() {
|
|
224
|
+
return this.CreatePromisse(() => __awaiter(this, void 0, void 0, function* () {
|
|
225
|
+
if (!this._set || this._set.Get().length == 0)
|
|
226
|
+
throw new InvalidOperationException_1.default('Can not realize a update with no one set operation before');
|
|
227
|
+
let setters = this._set.Get();
|
|
228
|
+
let update = `update "${this._table}" set`;
|
|
229
|
+
let values = "";
|
|
230
|
+
for (let map of this._maps) {
|
|
231
|
+
let set = setters.filter(s => s.Key == map.Field);
|
|
232
|
+
if (set.length == 0)
|
|
233
|
+
continue;
|
|
234
|
+
let designType = Type_1.default.GetDesingType(this._type, map.Field);
|
|
235
|
+
let relation = SchemasDecorators_1.default.GetRelationAttribute(this._type, map.Field);
|
|
236
|
+
if ((designType && this._context.IsMapped(designType)) || (relation && this._context.IsMapped(relation.TypeBuilder())))
|
|
237
|
+
continue;
|
|
238
|
+
let colType = Type_1.default.CastType(map.Type);
|
|
239
|
+
if (SchemasDecorators_1.default.IsPrimaryKey(this._type, map.Field))
|
|
240
|
+
continue;
|
|
241
|
+
values += `"${map.Column}" = ${this.CreateValueStatement(colType, set[0].Value)},`;
|
|
242
|
+
}
|
|
243
|
+
update = `${update} ${values.substring(0, values.length - 1)}`;
|
|
244
|
+
let whereSrt = PGSetHelper_1.default.ExtractWhereData(this);
|
|
245
|
+
if (!whereSrt) {
|
|
246
|
+
if (this._whereAsString != undefined && this._statements.length > 0) {
|
|
247
|
+
throw new InvalidOperationException_1.default("Is not possible combine free and structured queries");
|
|
248
|
+
}
|
|
249
|
+
if (this._whereAsString != undefined) {
|
|
250
|
+
update += ` ${this._whereAsString} `;
|
|
251
|
+
}
|
|
252
|
+
update += this.EvaluateWhere();
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
update += whereSrt;
|
|
256
|
+
}
|
|
257
|
+
yield this._manager.ExecuteNonQuery(update);
|
|
258
|
+
}));
|
|
259
|
+
}
|
|
260
|
+
Set(key, value) {
|
|
261
|
+
let designType = Type_1.default.GetDesingType(this._type, key.toString());
|
|
262
|
+
let relation = SchemasDecorators_1.default.GetRelationAttribute(this._type, key.toString());
|
|
263
|
+
if ((designType && this._context.IsMapped(designType)) || (relation && this._context.IsMapped(relation.TypeBuilder())))
|
|
264
|
+
throw new InvalidOperationException_1.default('Can not realize a mass update in fields that has relations with another table');
|
|
265
|
+
this._set.Add(key, value);
|
|
266
|
+
return this;
|
|
267
|
+
}
|
|
268
|
+
UpdateAsync(obj) {
|
|
269
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
270
|
+
return yield this.UpdateObjectAsync(obj, false);
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
UpdateObjectAndRelationsAsync(obj, relations) {
|
|
274
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
275
|
+
Type_1.default.DeleteMetadata(obj);
|
|
276
|
+
return this.UpdateObjectAsync(obj, false, relations ? relations.map(s => s.toString()) : []);
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
UpdateObjectAsync(obj, cascade, relationsAllowed, fieldsAllowed) {
|
|
280
|
+
return this.CreatePromisse(() => __awaiter(this, void 0, void 0, function* () {
|
|
281
|
+
var _a, _b;
|
|
282
|
+
relationsAllowed = relationsAllowed !== null && relationsAllowed !== void 0 ? relationsAllowed : [];
|
|
283
|
+
if (!this.IsCorrectType(obj))
|
|
284
|
+
throw new InvalidOperationException_1.default(`The object passed as argument is not a ${this._type.name} instance`);
|
|
285
|
+
if (!obj)
|
|
286
|
+
throw new InvalidOperationException_1.default(`Cannot update a null reference object of ${this._type.name}`);
|
|
287
|
+
let keys = Type_1.default.GetProperties(this._type).filter(p => SchemasDecorators_1.default.IsPrimaryKey(this._type, p));
|
|
288
|
+
let wheres = [];
|
|
289
|
+
if (keys && keys.length > 0) {
|
|
290
|
+
keys.forEach((w, i) => {
|
|
291
|
+
let keyValue = Reflect.get(obj, w);
|
|
292
|
+
if (!keyValue)
|
|
293
|
+
throw new ConstraintFailException_1.default(`The field ${this._type.name}.${w} is a primary key but has no value`);
|
|
294
|
+
wheres.push({
|
|
295
|
+
Statement: {
|
|
296
|
+
Field: w,
|
|
297
|
+
Kind: IStatement_1.Operation.EQUALS,
|
|
298
|
+
Value: Reflect.get(obj, w)
|
|
299
|
+
},
|
|
300
|
+
StatementType: i == 0 ? StatementType.WHERE : StatementType.AND
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
let update = `update "${this._table}" set`;
|
|
305
|
+
let values = "";
|
|
306
|
+
let key;
|
|
307
|
+
let subTypes = [];
|
|
308
|
+
for (let map of this._maps) {
|
|
309
|
+
let designType = Type_1.default.GetDesingType(this._type, map.Field);
|
|
310
|
+
let relation = SchemasDecorators_1.default.GetRelationAttribute(this._type, map.Field);
|
|
311
|
+
if ((designType && this._context.IsMapped(designType)) || (relation && this._context.IsMapped(relation.TypeBuilder()))) {
|
|
312
|
+
subTypes.push({
|
|
313
|
+
Column: map.Column,
|
|
314
|
+
Field: map.Field,
|
|
315
|
+
Type: map.Type
|
|
316
|
+
});
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
let colType = Type_1.default.CastType(map.Type);
|
|
320
|
+
if (SchemasDecorators_1.default.IsPrimaryKey(this._type, map.Field)) {
|
|
321
|
+
key =
|
|
322
|
+
{
|
|
323
|
+
Column: map.Column,
|
|
324
|
+
Property: map.Field
|
|
325
|
+
};
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
if (fieldsAllowed && fieldsAllowed.filter(s => s == map.Column).length == 0)
|
|
329
|
+
continue;
|
|
330
|
+
values += `"${map.Column}" = ${this.CreateValueStatement(colType, Reflect.get(obj, map.Field))},`;
|
|
331
|
+
}
|
|
332
|
+
update = `${update} ${values.substring(0, values.length - 1)}`;
|
|
333
|
+
for (let where of wheres) {
|
|
334
|
+
update += ` ${where.StatementType} ${this.EvaluateStatement(where)} `;
|
|
335
|
+
}
|
|
336
|
+
yield this._manager.ExecuteNonQuery(update);
|
|
337
|
+
let subTypesUpdates = [];
|
|
338
|
+
for (let sub of subTypes) {
|
|
339
|
+
let subObj = Reflect.get(obj, sub.Field);
|
|
340
|
+
let metadata = Type_1.default.ExtractMetadata(obj);
|
|
341
|
+
let meta = metadata.filter(s => s.Field == sub.Field && s.Loaded);
|
|
342
|
+
if (((meta.length > 0 && meta[0].Loaded) || relationsAllowed.filter(s => s == sub.Field).length > 0) && subObj == undefined) {
|
|
343
|
+
subTypesUpdates.push(`"${sub.Column}" = null`);
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
if (meta.length == 0 && relationsAllowed.filter(s => s == sub.Field).length == 0)
|
|
347
|
+
continue;
|
|
348
|
+
let relation = SchemasDecorators_1.default.GetRelationAttribute(this._type, sub.Field);
|
|
349
|
+
let subType = Type_1.default.GetDesingType(this._type, sub.Field);
|
|
350
|
+
if (!subType && !relation)
|
|
351
|
+
throw new InvalidOperationException_1.default(`Can not determine the relation of the property ${this._type}.${sub.Field}`);
|
|
352
|
+
if (!subType && relation) {
|
|
353
|
+
subType = relation.TypeBuilder();
|
|
354
|
+
}
|
|
355
|
+
let isArray = subType == Array;
|
|
356
|
+
if (isArray) {
|
|
357
|
+
if (!relation)
|
|
358
|
+
continue;
|
|
359
|
+
subType = relation === null || relation === void 0 ? void 0 : relation.TypeBuilder();
|
|
360
|
+
}
|
|
361
|
+
let subPK = SchemasDecorators_1.default.ExtractPrimaryKey(subType);
|
|
362
|
+
if (subObj == undefined)
|
|
363
|
+
continue;
|
|
364
|
+
if (subPK == undefined) {
|
|
365
|
+
throw new InvalidOperationException_1.default(`The type ${subType.name} must have a primary key column`);
|
|
366
|
+
}
|
|
367
|
+
if (key != undefined) {
|
|
368
|
+
let colletion = this._context.Collection(subType);
|
|
369
|
+
for (let subKey of Type_1.default.GetProperties(subType)) {
|
|
370
|
+
let subRelation = SchemasDecorators_1.default.GetRelationAttribute(subType, subKey);
|
|
371
|
+
if (subRelation && subRelation.TypeBuilder() == this._type) {
|
|
372
|
+
if (subRelation.Field != undefined && subRelation.Field != sub.Field)
|
|
373
|
+
continue;
|
|
374
|
+
if (subRelation.Relation == RelationType_1.RelationType.ONE_TO_MANY || subRelation.Relation == RelationType_1.RelationType.MANY_TO_MANY) {
|
|
375
|
+
if (isArray) {
|
|
376
|
+
for (let i of subObj) {
|
|
377
|
+
if (i == undefined)
|
|
378
|
+
continue;
|
|
379
|
+
let subFKTypeIsArray = Type_1.default.GetDesingType(subType, subKey) == Array;
|
|
380
|
+
if (subFKTypeIsArray) {
|
|
381
|
+
let value = [];
|
|
382
|
+
let subMeta = Type_1.default.ExtractMetadata(i);
|
|
383
|
+
if (subMeta.length > 0 && subMeta.filter(s => s.Field == subKey && s.Loaded).length > 0) {
|
|
384
|
+
value = ((_a = Reflect.get(i, subKey)) !== null && _a !== void 0 ? _a : []).filter(s => s[subPK] != obj[subPK]);
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
let item = yield colletion["Where"]({ Field: subPK, Value: Reflect.get(i, subPK) })["LoadRelationOn"](subKey)["FirstOrDefaultAsync"]();
|
|
388
|
+
value = item == undefined ? [] : item[subKey];
|
|
389
|
+
value = value !== null && value !== void 0 ? value : [];
|
|
390
|
+
}
|
|
391
|
+
value.push(obj);
|
|
392
|
+
Reflect.set(i, subKey, value);
|
|
393
|
+
}
|
|
394
|
+
else {
|
|
395
|
+
Reflect.set(i, subKey, obj);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
let subFKTypeIsArray = Type_1.default.GetDesingType(subType, subKey) == Array;
|
|
401
|
+
if (subFKTypeIsArray) {
|
|
402
|
+
let value = [];
|
|
403
|
+
let subMeta = Type_1.default.ExtractMetadata(subObj);
|
|
404
|
+
if (subMeta.length > 0 && subMeta.filter(s => s.Field == subKey && s.Loaded).length > 0) {
|
|
405
|
+
value = ((_b = Reflect.get(subObj, subKey)) !== null && _b !== void 0 ? _b : []).filter(s => s[subPK] != obj[subPK]);
|
|
406
|
+
}
|
|
407
|
+
else {
|
|
408
|
+
let item = yield colletion["Where"]({ Field: subPK, Value: Reflect.get(subObj, subPK) })["LoadRelationOn"](subKey)["FirstOrDefaultAsync"]();
|
|
409
|
+
value = item == undefined ? [] : item[subKey];
|
|
410
|
+
value = value !== null && value !== void 0 ? value : [];
|
|
411
|
+
}
|
|
412
|
+
value.push(obj);
|
|
413
|
+
Reflect.set(subObj, subKey, value);
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
Reflect.set(subObj, subKey, obj);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
if (subRelation.Relation == RelationType_1.RelationType.MANY_TO_ONE) {
|
|
422
|
+
for (let i of subObj) {
|
|
423
|
+
if (i == undefined)
|
|
424
|
+
continue;
|
|
425
|
+
Reflect.set(i, subKey, obj);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
Reflect.set(subObj, subKey, obj);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
let colletion = this._context.Collection(subType);
|
|
436
|
+
if (isArray) {
|
|
437
|
+
for (let i of subObj) {
|
|
438
|
+
if (i == undefined)
|
|
439
|
+
continue;
|
|
440
|
+
if (!Type_1.default.HasValue(Reflect.get(i, subPK)))
|
|
441
|
+
yield colletion["AddAsync"](i);
|
|
442
|
+
else if (cascade || relationsAllowed.filter(s => s == sub.Field).length > 0)
|
|
443
|
+
yield colletion["UpdateObjectAsync"](i, false);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
if (subObj == undefined)
|
|
448
|
+
continue;
|
|
449
|
+
if (!Type_1.default.HasValue(Reflect.get(subObj, subPK)))
|
|
450
|
+
yield colletion["AddAsync"](subObj);
|
|
451
|
+
else if (cascade || relationsAllowed.filter(s => s == sub.Field).length > 0)
|
|
452
|
+
yield colletion["UpdateObjectAsync"](subObj, false);
|
|
453
|
+
}
|
|
454
|
+
let columnType = Type_1.default.CastType(Type_1.default.GetDesingTimeTypeName(subType, subPK));
|
|
455
|
+
if ((relation === null || relation === void 0 ? void 0 : relation.Relation) == RelationType_1.RelationType.MANY_TO_MANY || (relation === null || relation === void 0 ? void 0 : relation.Relation) == RelationType_1.RelationType.ONE_TO_MANY)
|
|
456
|
+
columnType = Type_1.default.AsArray(columnType);
|
|
457
|
+
if (subObj == undefined)
|
|
458
|
+
continue;
|
|
459
|
+
let updateValues = [Reflect.get(subObj, subPK)];
|
|
460
|
+
if (isArray) {
|
|
461
|
+
updateValues = [];
|
|
462
|
+
for (let i of subObj) {
|
|
463
|
+
if (i == undefined)
|
|
464
|
+
continue;
|
|
465
|
+
updateValues.push(Reflect.get(i, subPK));
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
subTypesUpdates.push(`"${sub.Column}" = ${this.CreateValueStatement(columnType, isArray ? updateValues : updateValues[0])}`);
|
|
469
|
+
}
|
|
470
|
+
if (subTypesUpdates.length > 0) {
|
|
471
|
+
let subUpdate = `update "${Type_1.default.GetTableName(this._type)}" set `;
|
|
472
|
+
for (let p of subTypesUpdates) {
|
|
473
|
+
subUpdate += `${p},`;
|
|
474
|
+
}
|
|
475
|
+
subUpdate = `${subUpdate.substring(0, subUpdate.length - 1)} where `;
|
|
476
|
+
subUpdate += this.EvaluateStatement({
|
|
477
|
+
StatementType: StatementType.WHERE,
|
|
478
|
+
Statement: {
|
|
479
|
+
Field: key.Property,
|
|
480
|
+
Kind: IStatement_1.Operation.EQUALS,
|
|
481
|
+
Value: Reflect.get(obj, key.Property)
|
|
482
|
+
}
|
|
483
|
+
});
|
|
484
|
+
yield this._manager.ExecuteNonQuery(subUpdate);
|
|
485
|
+
}
|
|
486
|
+
return obj;
|
|
487
|
+
}));
|
|
488
|
+
}
|
|
489
|
+
DeleteSelectionAsync() {
|
|
490
|
+
return this.CreatePromisse(() => __awaiter(this, void 0, void 0, function* () {
|
|
491
|
+
let whereSrt = PGSetHelper_1.default.ExtractWhereData(this);
|
|
492
|
+
let query = `delete from "${this._table}"`;
|
|
493
|
+
if (!whereSrt) {
|
|
494
|
+
if (this._whereAsString != undefined && this._statements.length > 0) {
|
|
495
|
+
throw new InvalidOperationException_1.default("Is not possible combine free and structured queries");
|
|
496
|
+
}
|
|
497
|
+
if (this._whereAsString != undefined) {
|
|
498
|
+
query += ` ${this._whereAsString} `;
|
|
499
|
+
}
|
|
500
|
+
query += this.EvaluateWhere();
|
|
501
|
+
}
|
|
502
|
+
else {
|
|
503
|
+
query += whereSrt;
|
|
504
|
+
}
|
|
505
|
+
yield this._manager.ExecuteNonQuery(query);
|
|
506
|
+
}));
|
|
507
|
+
}
|
|
508
|
+
DeleteAsync(obj) {
|
|
509
|
+
return this.CreatePromisse(() => __awaiter(this, void 0, void 0, function* () {
|
|
510
|
+
if (!obj)
|
|
511
|
+
throw new InvalidOperationException_1.default(`Cannot delete a null reference object of ${this._type.name}`);
|
|
512
|
+
if (!this.IsCorrectType(obj))
|
|
513
|
+
throw new InvalidOperationException_1.default(`The object passed as argument is not a ${this._type.name} instance`);
|
|
514
|
+
let keys = Type_1.default.GetProperties(this._type).filter(p => SchemasDecorators_1.default.IsPrimaryKey(this._type, p));
|
|
515
|
+
let wheres = [];
|
|
516
|
+
if (keys && keys.length > 0) {
|
|
517
|
+
keys.forEach((w, i) => {
|
|
518
|
+
wheres.push({
|
|
519
|
+
Statement: {
|
|
520
|
+
Field: w,
|
|
521
|
+
Kind: IStatement_1.Operation.EQUALS,
|
|
522
|
+
Value: Reflect.get(obj, w)
|
|
523
|
+
},
|
|
524
|
+
StatementType: i == 0 ? StatementType.WHERE : StatementType.AND
|
|
525
|
+
});
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
let del = `delete from "${this._table}" `;
|
|
529
|
+
for (let where of wheres) {
|
|
530
|
+
del += ` ${where.StatementType} ${this.EvaluateStatement(where)} `;
|
|
531
|
+
}
|
|
532
|
+
yield this._manager.ExecuteNonQuery(del);
|
|
533
|
+
return obj;
|
|
534
|
+
}));
|
|
535
|
+
}
|
|
536
|
+
Where(statement) {
|
|
537
|
+
var _a;
|
|
538
|
+
this.ResetFilters();
|
|
539
|
+
this._statements.push({
|
|
540
|
+
Statement: {
|
|
541
|
+
Field: statement.Field.toString(),
|
|
542
|
+
Kind: (_a = statement.Kind) !== null && _a !== void 0 ? _a : IStatement_1.Operation.EQUALS,
|
|
543
|
+
Value: statement.Value
|
|
544
|
+
},
|
|
545
|
+
StatementType: StatementType.WHERE
|
|
546
|
+
});
|
|
547
|
+
return this;
|
|
548
|
+
}
|
|
549
|
+
And(statement) {
|
|
550
|
+
var _a;
|
|
551
|
+
this._statements.push({
|
|
552
|
+
Statement: {
|
|
553
|
+
Field: statement.Field.toString(),
|
|
554
|
+
Kind: (_a = statement.Kind) !== null && _a !== void 0 ? _a : IStatement_1.Operation.EQUALS,
|
|
555
|
+
Value: statement.Value
|
|
556
|
+
},
|
|
557
|
+
StatementType: StatementType.AND
|
|
558
|
+
});
|
|
559
|
+
return this;
|
|
560
|
+
}
|
|
561
|
+
Or(statement) {
|
|
562
|
+
var _a;
|
|
563
|
+
this._statements.push({
|
|
564
|
+
Statement: {
|
|
565
|
+
Field: statement.Field.toString(),
|
|
566
|
+
Kind: (_a = statement.Kind) !== null && _a !== void 0 ? _a : IStatement_1.Operation.EQUALS,
|
|
567
|
+
Value: statement.Value
|
|
568
|
+
},
|
|
569
|
+
StatementType: StatementType.OR
|
|
570
|
+
});
|
|
571
|
+
return this;
|
|
572
|
+
}
|
|
573
|
+
OrderBy(key) {
|
|
574
|
+
this._ordering.push({
|
|
575
|
+
Field: key,
|
|
576
|
+
Order: OrderDirection.ASC
|
|
577
|
+
});
|
|
578
|
+
return this;
|
|
579
|
+
}
|
|
580
|
+
Join(key) {
|
|
581
|
+
this._includes.push({
|
|
582
|
+
Field: key
|
|
583
|
+
});
|
|
584
|
+
return this;
|
|
585
|
+
}
|
|
586
|
+
OrderDescendingBy(key) {
|
|
587
|
+
this._ordering.push({
|
|
588
|
+
Field: key,
|
|
589
|
+
Order: OrderDirection.DESC
|
|
590
|
+
});
|
|
591
|
+
return this;
|
|
592
|
+
}
|
|
593
|
+
Limit(limit) {
|
|
594
|
+
this._limit = limit >= 1 ? { Limit: limit } : undefined;
|
|
595
|
+
return this;
|
|
596
|
+
}
|
|
597
|
+
Offset(offset) {
|
|
598
|
+
this._offset = offset >= 1 ? { OffSet: offset } : undefined;
|
|
599
|
+
return this;
|
|
600
|
+
}
|
|
601
|
+
Take(quantity) {
|
|
602
|
+
return this.Limit(quantity);
|
|
603
|
+
}
|
|
604
|
+
CountAsync() {
|
|
605
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
606
|
+
return this.CreatePromisse(() => __awaiter(this, void 0, void 0, function* () {
|
|
607
|
+
let query = `select count(*) from "${this._table}"`;
|
|
608
|
+
if (this._whereAsString != undefined && this._statements.length > 0) {
|
|
609
|
+
throw new InvalidOperationException_1.default("Is not possible combine free and structured queries");
|
|
610
|
+
}
|
|
611
|
+
if (this._whereAsString != undefined) {
|
|
612
|
+
query += ` ${this._whereAsString} `;
|
|
613
|
+
}
|
|
614
|
+
query += this.EvaluateWhere();
|
|
615
|
+
let ordenation = "";
|
|
616
|
+
for (let orderby of this._ordering) {
|
|
617
|
+
ordenation += `${this.EvaluateOrderBy(orderby)},`;
|
|
618
|
+
}
|
|
619
|
+
if (this._ordering.length > 0) {
|
|
620
|
+
query += ` order by ${ordenation.substring(0, ordenation.length - 1)}`;
|
|
621
|
+
}
|
|
622
|
+
if (this._offset != undefined) {
|
|
623
|
+
query += ` offset ${this._offset.OffSet}`;
|
|
624
|
+
}
|
|
625
|
+
if (this._limit != undefined) {
|
|
626
|
+
query += ` limit ${this._limit.Limit}`;
|
|
627
|
+
}
|
|
628
|
+
var r = yield this._manager.Execute(query);
|
|
629
|
+
this.Reset();
|
|
630
|
+
return r.rows[0].count;
|
|
631
|
+
}));
|
|
632
|
+
});
|
|
633
|
+
}
|
|
634
|
+
ToListAsync() {
|
|
635
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
636
|
+
return this.CreatePromisse(() => __awaiter(this, void 0, void 0, function* () {
|
|
637
|
+
let whereSrt = PGSetHelper_1.default.ExtractWhereData(this);
|
|
638
|
+
let sqlSrt = PGSetHelper_1.default.ExtractSQLData(this);
|
|
639
|
+
let query = `select "${this._table}".* from "${this._table}"`;
|
|
640
|
+
if (sqlSrt && sqlSrt.toLowerCase().trim().startsWith(`select distinct "${this._table}".*`))
|
|
641
|
+
query = sqlSrt;
|
|
642
|
+
if (!whereSrt) {
|
|
643
|
+
if (this._whereAsString != undefined && this._statements.length > 0) {
|
|
644
|
+
throw new InvalidOperationException_1.default("Is not possible combine free and structured queries");
|
|
645
|
+
}
|
|
646
|
+
if (this._whereAsString != undefined) {
|
|
647
|
+
query += ` ${this._whereAsString} `;
|
|
648
|
+
}
|
|
649
|
+
query += this.EvaluateWhere();
|
|
650
|
+
}
|
|
651
|
+
else {
|
|
652
|
+
query += whereSrt;
|
|
653
|
+
}
|
|
654
|
+
let ordenation = "";
|
|
655
|
+
for (let orderby of this._ordering) {
|
|
656
|
+
ordenation += `${this.EvaluateOrderBy(orderby)},`;
|
|
657
|
+
}
|
|
658
|
+
if (this._ordering.length > 0) {
|
|
659
|
+
query += ` order by ${ordenation.substring(0, ordenation.length - 1)}`;
|
|
660
|
+
}
|
|
661
|
+
if (this._offset != undefined) {
|
|
662
|
+
query += ` offset ${this._offset.OffSet}`;
|
|
663
|
+
}
|
|
664
|
+
if (this._limit != undefined) {
|
|
665
|
+
query += ` limit ${this._limit.Limit}`;
|
|
666
|
+
}
|
|
667
|
+
var r = yield this._manager.Execute(query);
|
|
668
|
+
if (r.rows.length == 0) {
|
|
669
|
+
this.Reset();
|
|
670
|
+
return [];
|
|
671
|
+
}
|
|
672
|
+
let list = [];
|
|
673
|
+
list = yield this.BuildObjects(r);
|
|
674
|
+
this.Reset();
|
|
675
|
+
return list;
|
|
676
|
+
}));
|
|
677
|
+
});
|
|
678
|
+
}
|
|
679
|
+
FirstOrDefaultAsync() {
|
|
680
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
681
|
+
return this.CreatePromisse(() => __awaiter(this, void 0, void 0, function* () {
|
|
682
|
+
let rows = yield this.Limit(1).ToListAsync();
|
|
683
|
+
if (rows && rows.length > 0)
|
|
684
|
+
return rows[0];
|
|
685
|
+
return undefined;
|
|
686
|
+
}));
|
|
687
|
+
});
|
|
688
|
+
}
|
|
689
|
+
WhereField(field) {
|
|
690
|
+
this.ResetFilters();
|
|
691
|
+
return new PGFluentField_1.default(this, field, false);
|
|
692
|
+
}
|
|
693
|
+
AndField(field) {
|
|
694
|
+
return new PGFluentField_1.default(this, field, false);
|
|
695
|
+
}
|
|
696
|
+
OrField(field) {
|
|
697
|
+
return new PGFluentField_1.default(this, field, true);
|
|
698
|
+
}
|
|
699
|
+
WhereAsString(where) {
|
|
700
|
+
this.ResetFilters();
|
|
701
|
+
if (where && !where.trim().toLocaleLowerCase().startsWith("where")) {
|
|
702
|
+
where = `where ${where}`;
|
|
703
|
+
}
|
|
704
|
+
this._whereAsString = where;
|
|
705
|
+
return this;
|
|
706
|
+
}
|
|
707
|
+
LoadRelationOn(field) {
|
|
708
|
+
return this.Join(field);
|
|
709
|
+
}
|
|
710
|
+
CreatePromisse(func) {
|
|
711
|
+
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
712
|
+
try {
|
|
713
|
+
resolve(yield func());
|
|
714
|
+
}
|
|
715
|
+
catch (err) {
|
|
716
|
+
reject(err);
|
|
717
|
+
}
|
|
718
|
+
finally {
|
|
719
|
+
this.Reset();
|
|
720
|
+
}
|
|
721
|
+
}));
|
|
722
|
+
}
|
|
723
|
+
CleanQueryTree() {
|
|
724
|
+
this.Reset();
|
|
725
|
+
}
|
|
726
|
+
CreateValueStatement(colType, value) {
|
|
727
|
+
if (value == undefined || value == null)
|
|
728
|
+
return 'null';
|
|
729
|
+
if (colType == DBTypes_1.DBTypes.TEXT) {
|
|
730
|
+
return `$$${value}$$`;
|
|
731
|
+
}
|
|
732
|
+
else if (colType == DBTypes_1.DBTypes.BOOLEAN) {
|
|
733
|
+
return `${value.toString().toLowerCase()}`;
|
|
734
|
+
}
|
|
735
|
+
else if (Type_1.default.IsNumber(colType)) {
|
|
736
|
+
if (isNaN(value))
|
|
737
|
+
throw new InvalidOperationException_1.default(`Can not cast the value "${value}" in a number`);
|
|
738
|
+
return `${value}`.replace(',', '.');
|
|
739
|
+
}
|
|
740
|
+
else if (Type_1.default.IsDate(colType)) {
|
|
741
|
+
let dt;
|
|
742
|
+
if (value.constructor == Date)
|
|
743
|
+
dt = value;
|
|
744
|
+
else
|
|
745
|
+
dt = new Date(value.toString());
|
|
746
|
+
if (!dt)
|
|
747
|
+
throw new InvalidOperationException_1.default(`Can not cast the value: "${value}" in a valid date`);
|
|
748
|
+
let dtStr = `${dt.getFullYear()}-${dt.getMonth() + 1}-${dt.getDate()}`;
|
|
749
|
+
if (colType == DBTypes_1.DBTypes.DATE) {
|
|
750
|
+
return `'${dtStr}'::date`;
|
|
751
|
+
}
|
|
752
|
+
else {
|
|
753
|
+
return `'${dtStr} ${dt.getHours()}:${dt.getMinutes()}'::timestamp`;
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
else if (Type_1.default.IsArray(colType)) {
|
|
757
|
+
let valuesStr = 'array[';
|
|
758
|
+
let elementType = Type_1.default.ExtractElementType(colType);
|
|
759
|
+
let hasItens = false;
|
|
760
|
+
for (let i in value) {
|
|
761
|
+
hasItens = true;
|
|
762
|
+
valuesStr += `${this.CreateValueStatement(elementType, value[i])},`;
|
|
763
|
+
}
|
|
764
|
+
if (hasItens)
|
|
765
|
+
valuesStr = valuesStr.substring(0, valuesStr.length - 1);
|
|
766
|
+
valuesStr += `]::${this._manager["CastToPostgreSQLType"](colType)}`;
|
|
767
|
+
return valuesStr;
|
|
768
|
+
}
|
|
769
|
+
throw new TypeNotSuportedException_1.default(`The type ${colType} is not suported`);
|
|
770
|
+
}
|
|
771
|
+
EvaluateWhere() {
|
|
772
|
+
let query = "";
|
|
773
|
+
for (let i = 0; i < this._statements.length; i++) {
|
|
774
|
+
let where = this._statements[i];
|
|
775
|
+
if (i == 0 && where.StatementType != StatementType.WHERE)
|
|
776
|
+
throw new InvalidOperationException_1.default(`The query three must start with a WHERE statement`);
|
|
777
|
+
if (i > 0 && where.StatementType == StatementType.WHERE)
|
|
778
|
+
where.StatementType = StatementType.AND;
|
|
779
|
+
query += ` ${where.StatementType} ${this.EvaluateStatement(where)} `;
|
|
780
|
+
}
|
|
781
|
+
return query;
|
|
782
|
+
}
|
|
783
|
+
EvaluateStatement(pgStatement) {
|
|
784
|
+
let column = Type_1.default.GetColumnName(this._type, pgStatement.Statement.Field.toString());
|
|
785
|
+
let typeName = Type_1.default.GetDesingTimeTypeName(this._type, pgStatement.Statement.Field.toString());
|
|
786
|
+
let operation = this.GetOperators(pgStatement.Statement.Kind);
|
|
787
|
+
let type = Type_1.default.GetDesingType(this._type, pgStatement.Statement.Field.toString());
|
|
788
|
+
let isArray = type == Array;
|
|
789
|
+
let relation = SchemasDecorators_1.default.GetRelationAttribute(this._type, pgStatement.Statement.Field.toString());
|
|
790
|
+
if (!type) {
|
|
791
|
+
if (!relation) {
|
|
792
|
+
throw new InvalidOperationException_1.default(`Can not determine the correct type conversion for propety ${pgStatement.Statement.Field.toString()}`);
|
|
793
|
+
}
|
|
794
|
+
type = relation.TypeBuilder();
|
|
795
|
+
}
|
|
796
|
+
if (pgStatement.Statement.Value == undefined)
|
|
797
|
+
return `"${this._table}".${column} is null`;
|
|
798
|
+
if (this._context.IsMapped(type) || (relation && this._context.IsMapped(relation.TypeBuilder()))) {
|
|
799
|
+
if (!relation)
|
|
800
|
+
throw new InvalidOperationException_1.default(`Can not determine the correct type conversion for propety ${pgStatement.Statement.Field.toString()}`);
|
|
801
|
+
if (isArray) {
|
|
802
|
+
if (pgStatement.Statement.Value.lenght == 0)
|
|
803
|
+
return `coalesce(array_length("${this._table}".${column}, 1), 0) = 0`;
|
|
804
|
+
if (pgStatement.Statement.Value.filter(s => s == undefined || s == null).length > 0)
|
|
805
|
+
throw new InvalidOperationException_1.default(`Can not compare relations with null or undefined objets`);
|
|
806
|
+
let c = pgStatement.Statement.Value[0];
|
|
807
|
+
let k = SchemasDecorators_1.default.ExtractPrimaryKey(c.constructor);
|
|
808
|
+
if (!k)
|
|
809
|
+
throw new ConstraintFailException_1.default(`The type ${c.constructor.name} must have a key field`);
|
|
810
|
+
let elementType = Type_1.default.GetDesingTimeTypeName(c.constructor, k);
|
|
811
|
+
let internalType = Type_1.default.CastType(elementType);
|
|
812
|
+
let keyType = DBTypes_1.DBTypes.LONGARRAY;
|
|
813
|
+
if (Type_1.default.IsNumber(internalType))
|
|
814
|
+
keyType = DBTypes_1.DBTypes.LONGARRAY;
|
|
815
|
+
else if (Type_1.default.IsText(internalType))
|
|
816
|
+
keyType = DBTypes_1.DBTypes.TEXTARRAY;
|
|
817
|
+
else if (Type_1.default.IsDate(internalType))
|
|
818
|
+
keyType = DBTypes_1.DBTypes.DATEARRAY;
|
|
819
|
+
else
|
|
820
|
+
throw new InvalidOperationException_1.default(`Can not determine the correct type conversion for propety ${pgStatement.Statement.Field.toString()}`);
|
|
821
|
+
let newValues = [];
|
|
822
|
+
for (let e of pgStatement.Statement.Value) {
|
|
823
|
+
newValues = [e[k]];
|
|
824
|
+
}
|
|
825
|
+
typeName = keyType;
|
|
826
|
+
pgStatement.Statement.Value = newValues;
|
|
827
|
+
}
|
|
828
|
+
else {
|
|
829
|
+
let k = SchemasDecorators_1.default.ExtractPrimaryKey(pgStatement.Statement.Value.constructor);
|
|
830
|
+
if (!k)
|
|
831
|
+
throw new ConstraintFailException_1.default(`The type ${pgStatement.Statement.Value.constructor.name} must have a key field`);
|
|
832
|
+
let elementType = Type_1.default.GetDesingTimeTypeName(pgStatement.Statement.Value.constructor, k);
|
|
833
|
+
let internalType = Type_1.default.CastType(elementType);
|
|
834
|
+
typeName = internalType;
|
|
835
|
+
pgStatement.Statement.Value = pgStatement.Statement.Value[k];
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
if (isArray) {
|
|
839
|
+
if (!typeName)
|
|
840
|
+
throw new InvalidOperationException_1.default(`Can not determine the correct type conversion for propety ${pgStatement.Statement.Field.toString()}`);
|
|
841
|
+
if (pgStatement.Statement.Kind == IStatement_1.Operation.EQUALS) {
|
|
842
|
+
return `"${this._table}".${column} = ${this.CreateValueStatement(typeName, pgStatement.Statement.Value)}`;
|
|
843
|
+
}
|
|
844
|
+
if (pgStatement.Statement.Kind == IStatement_1.Operation.NOTEQUALS) {
|
|
845
|
+
return `"${this._table}".${column} != ${this.CreateValueStatement(typeName, pgStatement.Statement.Value)}`;
|
|
846
|
+
}
|
|
847
|
+
if (pgStatement.Statement.Kind == IStatement_1.Operation.SMALLER || pgStatement.Statement.Kind == IStatement_1.Operation.SMALLEROREQUALS) {
|
|
848
|
+
return `"${this._table}".${column} <@ ${this.CreateValueStatement(typeName, pgStatement.Statement.Value)}`;
|
|
849
|
+
}
|
|
850
|
+
if ([IStatement_1.Operation.STARTWITH, IStatement_1.Operation.CONSTAINS, IStatement_1.Operation.ENDWITH, IStatement_1.Operation.GREATHER, IStatement_1.Operation.GREATHEROREQUALS].includes(pgStatement.Statement.Kind)) {
|
|
851
|
+
return `"${this._table}".${column} @> ${this.CreateValueStatement(typeName, pgStatement.Statement.Value)}`;
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
if (Type_1.default.IsNumber(Type_1.default.CastType(typeName.toString())) || Type_1.default.IsDate(Type_1.default.CastType(typeName.toString()))) {
|
|
855
|
+
operation[1] = "";
|
|
856
|
+
operation[2] = "";
|
|
857
|
+
if (Type_1.default.IsDate(Type_1.default.CastType(typeName.toString()))) {
|
|
858
|
+
let dt = pgStatement.Statement.Value;
|
|
859
|
+
if (!dt)
|
|
860
|
+
throw new InvalidOperationException_1.default(`Can not cast the value: "${pgStatement.Statement.Value}" in a valid date`);
|
|
861
|
+
let dtStr = `${dt.getFullYear()}-${dt.getMonth() + 1}-${dt.getDate()}`;
|
|
862
|
+
if (Type_1.default.CastType(typeName.toString()) == DBTypes_1.DBTypes.DATE) {
|
|
863
|
+
pgStatement.Statement.Value = `'${dtStr}'::date`;
|
|
864
|
+
}
|
|
865
|
+
else {
|
|
866
|
+
pgStatement.Statement.Value = `'${dtStr} ${dt.getHours()}:${dt.getMinutes()}'::timestamp`;
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
if ([IStatement_1.Operation.CONSTAINS, IStatement_1.Operation.ENDWITH, IStatement_1.Operation.STARTWITH].filter(s => s == pgStatement.Statement.Kind).length > 0) {
|
|
870
|
+
throw new InvalidOperationException_1.default(`Can execute ${pgStatement.Statement.Kind.toString().toLocaleLowerCase()} only with text and array fields`);
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
else {
|
|
874
|
+
operation[1] = `$$${operation[1]}`;
|
|
875
|
+
operation[2] = `${operation[2]}$$`;
|
|
876
|
+
}
|
|
877
|
+
return `"${this._table}".${column} ${operation[0]} ${operation[1]}${pgStatement.Statement.Value}${operation[2]}`;
|
|
878
|
+
}
|
|
879
|
+
EvaluateOrderBy(ordering) {
|
|
880
|
+
let column = Type_1.default.GetColumnName(this._type, ordering.Field.toString());
|
|
881
|
+
return ` "${this._table}".${column} ${ordering.Order}`;
|
|
882
|
+
}
|
|
883
|
+
GetOperators(operation) {
|
|
884
|
+
switch (operation) {
|
|
885
|
+
case IStatement_1.Operation.EQUALS: return ["=", "", ""];
|
|
886
|
+
case IStatement_1.Operation.CONSTAINS: return ["ilike", "%", "%"];
|
|
887
|
+
case IStatement_1.Operation.STARTWITH:
|
|
888
|
+
return ["ilike", "", "%"];
|
|
889
|
+
;
|
|
890
|
+
case IStatement_1.Operation.ENDWITH:
|
|
891
|
+
return ["ilike", "%", ""];
|
|
892
|
+
;
|
|
893
|
+
case IStatement_1.Operation.GREATHER:
|
|
894
|
+
return [">", "", ""];
|
|
895
|
+
;
|
|
896
|
+
case IStatement_1.Operation.GREATHEROREQUALS:
|
|
897
|
+
return [">=", "", ""];
|
|
898
|
+
;
|
|
899
|
+
case IStatement_1.Operation.SMALLER:
|
|
900
|
+
return ["<", "", ""];
|
|
901
|
+
;
|
|
902
|
+
case IStatement_1.Operation.SMALLEROREQUALS:
|
|
903
|
+
return ["<=", "", ""];
|
|
904
|
+
;
|
|
905
|
+
case IStatement_1.Operation.NOTEQUALS:
|
|
906
|
+
return ["!=", "", ""];
|
|
907
|
+
;
|
|
908
|
+
default: throw new NotImplementedException_1.default(`The operation ${operation} is not supported`);
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
Reset() {
|
|
912
|
+
this._ordering = [];
|
|
913
|
+
this._includes = [];
|
|
914
|
+
this._limit = undefined;
|
|
915
|
+
this._set = new PGSetValue();
|
|
916
|
+
this.ResetFilters();
|
|
917
|
+
}
|
|
918
|
+
ResetFilters() {
|
|
919
|
+
this._statements = [];
|
|
920
|
+
this._whereAsString = undefined;
|
|
921
|
+
PGSetHelper_1.default.CleanORMData(this);
|
|
922
|
+
}
|
|
923
|
+
IsCorrectType(obj) {
|
|
924
|
+
let sameCTor = obj && obj.constructor && obj.constructor == this._type;
|
|
925
|
+
if (sameCTor)
|
|
926
|
+
return true;
|
|
927
|
+
if (obj.prototype == this._type)
|
|
928
|
+
return true;
|
|
929
|
+
if (obj.prototype && obj.prototype.constructor == this._type)
|
|
930
|
+
return true;
|
|
931
|
+
let objectKeys = Object.keys(obj);
|
|
932
|
+
for (let map of this._maps) {
|
|
933
|
+
let v = obj[map.Field];
|
|
934
|
+
if (v == undefined) {
|
|
935
|
+
let exists = objectKeys.filter(s => s == map.Field).length > 0;
|
|
936
|
+
if (!exists) {
|
|
937
|
+
let allowNull = SchemasDecorators_1.default.AllowNullValue(this._type, map.Field);
|
|
938
|
+
if (!allowNull)
|
|
939
|
+
return false;
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
obj.__proto__ = this._type;
|
|
944
|
+
return true;
|
|
945
|
+
}
|
|
946
|
+
BuildObjects(r) {
|
|
947
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
948
|
+
let list = [];
|
|
949
|
+
for (let row of r.rows) {
|
|
950
|
+
let instance = Reflect.construct(this._type, []);
|
|
951
|
+
for (let map of this._maps) {
|
|
952
|
+
let type = Type_1.default.GetDesingType(this._type, map.Field);
|
|
953
|
+
let relation = SchemasDecorators_1.default.GetRelationAttribute(this._type, map.Field);
|
|
954
|
+
if ((!type || type === Array) && relation)
|
|
955
|
+
type = relation.TypeBuilder();
|
|
956
|
+
if (!this._context.IsMapped(type)) {
|
|
957
|
+
let v = Reflect.get(row, map.Column);
|
|
958
|
+
let vType = Type_1.default.CastType(map.Type);
|
|
959
|
+
if (v != undefined) {
|
|
960
|
+
if ([DBTypes_1.DBTypes.INTEGER, DBTypes_1.DBTypes.LONG, DBTypes_1.DBTypes.SERIAL].includes(vType))
|
|
961
|
+
Reflect.set(instance, map.Field, Number.parseInt(v));
|
|
962
|
+
else if (DBTypes_1.DBTypes.DOUBLE == vType)
|
|
963
|
+
Reflect.set(instance, map.Field, Number.parseFloat(v));
|
|
964
|
+
else if ([DBTypes_1.DBTypes.DATE, DBTypes_1.DBTypes.DATETIME].includes(vType)) {
|
|
965
|
+
try {
|
|
966
|
+
v = new Date(v);
|
|
967
|
+
}
|
|
968
|
+
catch (_a) { }
|
|
969
|
+
Reflect.set(instance, map.Field, v);
|
|
970
|
+
}
|
|
971
|
+
else if (DBTypes_1.DBTypes.TEXT == vType)
|
|
972
|
+
Reflect.set(instance, map.Field, v.toString());
|
|
973
|
+
else
|
|
974
|
+
Reflect.set(instance, map.Field, v);
|
|
975
|
+
}
|
|
976
|
+
else
|
|
977
|
+
Reflect.set(instance, map.Field, v);
|
|
978
|
+
}
|
|
979
|
+
else {
|
|
980
|
+
if (Reflect.get(row, map.Column) == undefined) {
|
|
981
|
+
if (this._includes.filter(s => s.Field == map.Field).length > 0) {
|
|
982
|
+
Type_1.default.InjectMetadata(instance, {
|
|
983
|
+
Field: map.Field,
|
|
984
|
+
Type: map.Type,
|
|
985
|
+
Value: Reflect.get(row, map.Column),
|
|
986
|
+
Loaded: true
|
|
987
|
+
});
|
|
988
|
+
}
|
|
989
|
+
continue;
|
|
990
|
+
}
|
|
991
|
+
let includeType = this._includes.filter(s => s.Field == map.Field);
|
|
992
|
+
let loaded = false;
|
|
993
|
+
if (includeType.length > 0) {
|
|
994
|
+
loaded = true;
|
|
995
|
+
let colletion = this._context.Collection(type);
|
|
996
|
+
if (colletion == undefined)
|
|
997
|
+
continue;
|
|
998
|
+
let subKey = SchemasDecorators_1.default.ExtractPrimaryKey(type);
|
|
999
|
+
if ((relation === null || relation === void 0 ? void 0 : relation.Relation) == RelationType_1.RelationType.MANY_TO_MANY || (relation === null || relation === void 0 ? void 0 : relation.Relation) == RelationType_1.RelationType.ONE_TO_MANY) {
|
|
1000
|
+
let values = Reflect.get(row, map.Column);
|
|
1001
|
+
if (!values || values.length == 0)
|
|
1002
|
+
continue;
|
|
1003
|
+
colletion.Where({
|
|
1004
|
+
Field: subKey,
|
|
1005
|
+
Kind: IStatement_1.Operation.EQUALS,
|
|
1006
|
+
Value: values[0]
|
|
1007
|
+
});
|
|
1008
|
+
for (let i = 0; i < values.length; i++) {
|
|
1009
|
+
if (i == 0)
|
|
1010
|
+
continue;
|
|
1011
|
+
colletion.Or({
|
|
1012
|
+
Field: subKey,
|
|
1013
|
+
Kind: IStatement_1.Operation.EQUALS,
|
|
1014
|
+
Value: values[i]
|
|
1015
|
+
});
|
|
1016
|
+
}
|
|
1017
|
+
let subObjets = yield colletion.ToListAsync();
|
|
1018
|
+
Reflect.set(instance, map.Field, subObjets);
|
|
1019
|
+
}
|
|
1020
|
+
else {
|
|
1021
|
+
colletion.Where({
|
|
1022
|
+
Field: subKey,
|
|
1023
|
+
Kind: IStatement_1.Operation.EQUALS,
|
|
1024
|
+
Value: Reflect.get(row, map.Column)
|
|
1025
|
+
});
|
|
1026
|
+
let subObjet = yield colletion.FirstOrDefaultAsync();
|
|
1027
|
+
Reflect.set(instance, map.Field, subObjet);
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
Type_1.default.InjectMetadata(instance, {
|
|
1031
|
+
Field: map.Field,
|
|
1032
|
+
Type: map.Type,
|
|
1033
|
+
Value: Reflect.get(row, map.Column),
|
|
1034
|
+
Loaded: loaded
|
|
1035
|
+
});
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
list.push(instance);
|
|
1039
|
+
}
|
|
1040
|
+
return list;
|
|
1041
|
+
});
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
exports.default = PGDBSet;
|
|
1045
|
+
class PGSetValue {
|
|
1046
|
+
constructor() {
|
|
1047
|
+
this._sets = [];
|
|
1048
|
+
}
|
|
1049
|
+
Add(key, value) {
|
|
1050
|
+
let i = this._sets.filter(s => s.Key == key);
|
|
1051
|
+
if (i.length > 0) {
|
|
1052
|
+
i[0].Value = value;
|
|
1053
|
+
}
|
|
1054
|
+
else {
|
|
1055
|
+
this._sets.push({ Key: key, Value: value });
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
Get() {
|
|
1059
|
+
return this._sets;
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
var OrderDirection;
|
|
1063
|
+
(function (OrderDirection) {
|
|
1064
|
+
OrderDirection["ASC"] = "asc";
|
|
1065
|
+
OrderDirection["DESC"] = "desc";
|
|
1066
|
+
})(OrderDirection || (OrderDirection = {}));
|
|
1067
|
+
var StatementType;
|
|
1068
|
+
(function (StatementType) {
|
|
1069
|
+
StatementType["WHERE"] = "where";
|
|
1070
|
+
StatementType["OR"] = "or";
|
|
1071
|
+
StatementType["AND"] = "and";
|
|
1072
|
+
})(StatementType || (StatementType = {}));
|
|
942
1073
|
//# sourceMappingURL=PGDBSet.js.map
|