node-firebird 2.3.2 → 2.3.4

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.
Files changed (49) hide show
  1. package/README.md +163 -31
  2. package/lib/index.d.ts +12 -0
  3. package/lib/pool.js +10 -1
  4. package/lib/srp.js +12 -1
  5. package/lib/wire/connection.js +39 -7
  6. package/lib/wire/socket.js +13 -1
  7. package/lib/wire/xsqlvar.js +69 -6
  8. package/package.json +1 -1
  9. package/poc/node_modules/.package-lock.json +14 -0
  10. package/poc/node_modules/node-firebird/.eslintrc.json +12 -0
  11. package/poc/node_modules/node-firebird/.github/workflows/codeql.yml +76 -0
  12. package/poc/node_modules/node-firebird/.github/workflows/node.js.yml +95 -0
  13. package/poc/node_modules/node-firebird/BIGINT_MIGRATION.md +374 -0
  14. package/poc/node_modules/node-firebird/CI_DEBUGGING_GUIDE.md +148 -0
  15. package/poc/node_modules/node-firebird/ENCRYPTION_CALLBACK.md +152 -0
  16. package/poc/node_modules/node-firebird/FIREBIRD_LOG_FEATURE.md +145 -0
  17. package/poc/node_modules/node-firebird/LICENSE +373 -0
  18. package/poc/node_modules/node-firebird/MINIMAL_CHANGES_SUMMARY.md +136 -0
  19. package/poc/node_modules/node-firebird/PR_SUMMARY.md +96 -0
  20. package/poc/node_modules/node-firebird/README.md +794 -0
  21. package/poc/node_modules/node-firebird/ROADMAP.md +223 -0
  22. package/poc/node_modules/node-firebird/SRP_PROTOCOL.md +482 -0
  23. package/poc/node_modules/node-firebird/lib/callback.js +38 -0
  24. package/poc/node_modules/node-firebird/lib/firebird.msg +0 -0
  25. package/poc/node_modules/node-firebird/lib/firebird.msg.json +1371 -0
  26. package/poc/node_modules/node-firebird/lib/gdscodes.d.ts +1524 -0
  27. package/poc/node_modules/node-firebird/lib/gdscodes.js +1531 -0
  28. package/poc/node_modules/node-firebird/lib/ieee754-decimal.js +500 -0
  29. package/poc/node_modules/node-firebird/lib/index.d.ts +316 -0
  30. package/poc/node_modules/node-firebird/lib/index.js +128 -0
  31. package/poc/node_modules/node-firebird/lib/messages.js +162 -0
  32. package/poc/node_modules/node-firebird/lib/pool.js +108 -0
  33. package/poc/node_modules/node-firebird/lib/srp.js +299 -0
  34. package/poc/node_modules/node-firebird/lib/unix-crypt.js +343 -0
  35. package/poc/node_modules/node-firebird/lib/utils.js +164 -0
  36. package/poc/node_modules/node-firebird/lib/wire/connection.js +2510 -0
  37. package/poc/node_modules/node-firebird/lib/wire/const.js +807 -0
  38. package/poc/node_modules/node-firebird/lib/wire/database.js +378 -0
  39. package/poc/node_modules/node-firebird/lib/wire/eventConnection.js +118 -0
  40. package/poc/node_modules/node-firebird/lib/wire/fbEventManager.js +326 -0
  41. package/poc/node_modules/node-firebird/lib/wire/serialize.js +588 -0
  42. package/poc/node_modules/node-firebird/lib/wire/service.js +1058 -0
  43. package/poc/node_modules/node-firebird/lib/wire/socket.js +175 -0
  44. package/poc/node_modules/node-firebird/lib/wire/statement.js +48 -0
  45. package/poc/node_modules/node-firebird/lib/wire/transaction.js +206 -0
  46. package/poc/node_modules/node-firebird/lib/wire/xsqlvar.js +703 -0
  47. package/poc/node_modules/node-firebird/package.json +38 -0
  48. package/poc/node_modules/node-firebird/vitest.config.js +24 -0
  49. package/vitest.config.js +3 -1
@@ -0,0 +1,703 @@
1
+ const Const= require('./const');
2
+
3
+ /***************************************
4
+ *
5
+ * SQLVar
6
+ *
7
+ ***************************************/
8
+
9
+ const
10
+ ScaleDivisor = [1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000,10000000000, 100000000000,1000000000000,10000000000000,100000000000000,1000000000000000];
11
+ const
12
+ DateOffset = 40587,
13
+ TimeCoeff = 86400000,
14
+ MsPerMinute = 60000;
15
+
16
+ //------------------------------------------------------
17
+
18
+ class SQLVarText {
19
+ decode(data, lowerV13) {
20
+ let ret;
21
+ if (this.subType > 1) {
22
+ // ToDo: with column charset
23
+ ret = data.readText(this.length, Const.DEFAULT_ENCODING);
24
+ } else if (this.subType === 0) {
25
+ // without charset definition
26
+ ret = data.readText(this.length, Const.DEFAULT_ENCODING);
27
+ } else {
28
+ ret = data.readBuffer(this.length);
29
+ }
30
+
31
+ if (!lowerV13 || !data.readInt()) {
32
+ return ret;
33
+ }
34
+
35
+ return null;
36
+ }
37
+
38
+ calcBlr(blr) {
39
+ blr.addByte(Const.blr_text);
40
+ blr.addWord(this.length);
41
+ }
42
+ }
43
+
44
+ //------------------------------------------------------
45
+
46
+ class SQLVarNull extends SQLVarText {
47
+ }
48
+
49
+ //------------------------------------------------------
50
+
51
+ class SQLVarString {
52
+ decode(data, lowerV13) {
53
+ let ret;
54
+ if (this.subType > 1) {
55
+ // ToDo: with column charset
56
+ ret = data.readString(Const.DEFAULT_ENCODING);
57
+ } else if (this.subType === 0) {
58
+ // without charset definition
59
+ ret = data.readString(Const.DEFAULT_ENCODING);
60
+ } else {
61
+ ret = data.readBuffer();
62
+ }
63
+
64
+ if (!lowerV13 || !data.readInt()) {
65
+ return ret;
66
+ }
67
+
68
+ return null;
69
+ }
70
+
71
+ calcBlr(blr) {
72
+ blr.addByte(Const.blr_varying);
73
+ blr.addWord(this.length);
74
+ }
75
+ }
76
+
77
+ //------------------------------------------------------
78
+
79
+ class SQLVarQuad {
80
+ decode(data, lowerV13) {
81
+ var ret = data.readQuad();
82
+
83
+ if (!lowerV13 || !data.readInt()) {
84
+ return ret;
85
+ }
86
+ return null;
87
+ }
88
+
89
+ calcBlr(blr) {
90
+ blr.addByte(Const.blr_quad);
91
+ blr.addShort(this.scale);
92
+ }
93
+ }
94
+
95
+ //------------------------------------------------------
96
+
97
+ class SQLVarBlob extends SQLVarQuad {
98
+ calcBlr(blr) {
99
+ blr.addByte(Const.blr_quad);
100
+ blr.addShort(0);
101
+ }
102
+ }
103
+
104
+ //------------------------------------------------------
105
+
106
+ class SQLVarArray extends SQLVarQuad {
107
+ calcBlr(blr) {
108
+ blr.addByte(Const.blr_quad);
109
+ blr.addShort(0);
110
+ }
111
+ }
112
+
113
+ //------------------------------------------------------
114
+
115
+ class SQLVarInt {
116
+ decode(data, lowerV13) {
117
+ var ret = data.readInt();
118
+
119
+ if (this.scale) {
120
+ ret = ret / ScaleDivisor[Math.abs(this.scale)];
121
+ }
122
+
123
+ if (!lowerV13 || !data.readInt()) {
124
+ return ret;
125
+ }
126
+
127
+ return null;
128
+ }
129
+
130
+ calcBlr(blr) {
131
+ blr.addByte(Const.blr_long);
132
+ blr.addShort(this.scale);
133
+ }
134
+ }
135
+
136
+ //------------------------------------------------------
137
+
138
+ class SQLVarShort extends SQLVarInt {
139
+ calcBlr(blr) {
140
+ blr.addByte(Const.blr_short);
141
+ blr.addShort(this.scale);
142
+ }
143
+ }
144
+
145
+ //------------------------------------------------------
146
+
147
+ class SQLVarInt64 {
148
+ decode(data, lowerV13) {
149
+ var ret = data.readInt64();
150
+
151
+ if (this.scale) {
152
+ ret = ret / ScaleDivisor[Math.abs(this.scale)];
153
+ }
154
+
155
+ if (!lowerV13 || !data.readInt()) {
156
+ return ret;
157
+ }
158
+ return null;
159
+ }
160
+
161
+ calcBlr(blr) {
162
+ blr.addByte(Const.blr_int64);
163
+ blr.addShort(this.scale);
164
+ }
165
+ }
166
+
167
+ //------------------------------------------------------
168
+
169
+ class SQLVarInt128 {
170
+ decode(data, lowerV13) {
171
+ var retBigInt = BigInt(data.readInt128())
172
+
173
+ if (retBigInt > BigInt(Number.MAX_SAFE_INTEGER)) {
174
+ var ret = retBigInt.toString();
175
+
176
+ var integerPart = ret.slice(0, Math.abs(this.scale) * -1)
177
+ var decimalPart = ret.slice(Math.abs(this.scale) * -1)
178
+
179
+ if (integerPart === '') integerPart = '0'
180
+
181
+ ret = `${integerPart}.${decimalPart}`
182
+ } else {
183
+ var ret = Number(retBigInt);
184
+ ret = ret / ScaleDivisor[Math.abs(this.scale)];
185
+ }
186
+
187
+ if (!lowerV13 || !data.readInt()) {
188
+ return ret;
189
+ }
190
+
191
+ return null;
192
+ }
193
+
194
+ calcBlr(blr) {
195
+ blr.addByte(Const.blr_int128);
196
+ blr.addShort(this.scale);
197
+ }
198
+ }
199
+
200
+ //------------------------------------------------------
201
+
202
+ class SQLVarDecFloat16 {
203
+ decode(data, lowerV13) {
204
+ var ret = data.readDecFloat16();
205
+
206
+ if (!lowerV13 || !data.readInt()) {
207
+ return ret;
208
+ }
209
+
210
+ return null;
211
+ }
212
+
213
+ calcBlr(blr) {
214
+ blr.addByte(Const.blr_dec64);
215
+ blr.addShort(0);
216
+ }
217
+ }
218
+
219
+ //------------------------------------------------------
220
+
221
+ class SQLVarDecFloat34 {
222
+ decode(data, lowerV13) {
223
+ var ret = data.readDecFloat34();
224
+
225
+ if (!lowerV13 || !data.readInt()) {
226
+ return ret;
227
+ }
228
+
229
+ return null;
230
+ }
231
+
232
+ calcBlr(blr) {
233
+ blr.addByte(Const.blr_dec128);
234
+ blr.addShort(0);
235
+ }
236
+ }
237
+
238
+ //------------------------------------------------------
239
+
240
+ class SQLVarFloat {
241
+ decode(data, lowerV13) {
242
+ var ret = data.readFloat();
243
+
244
+ if (!lowerV13 || !data.readInt()) {
245
+ return ret;
246
+ }
247
+
248
+ return null;
249
+ }
250
+
251
+ calcBlr(blr) {
252
+ blr.addByte(Const.blr_float);
253
+ }
254
+ }
255
+
256
+ //------------------------------------------------------
257
+
258
+ class SQLVarDouble {
259
+ decode(data, lowerV13) {
260
+ var ret = data.readDouble();
261
+
262
+ if (!lowerV13 || !data.readInt()) {
263
+ return ret;
264
+ }
265
+
266
+ return null;
267
+ }
268
+
269
+ calcBlr(blr) {
270
+ blr.addByte(Const.blr_double);
271
+ }
272
+ }
273
+
274
+ //------------------------------------------------------
275
+
276
+ class SQLVarDate {
277
+ decode(data, lowerV13) {
278
+ var ret = data.readInt();
279
+
280
+ if (!lowerV13 || !data.readInt()) {
281
+ var d = new Date(0);
282
+ d.setMilliseconds((ret - DateOffset) * TimeCoeff + d.getTimezoneOffset() * MsPerMinute);
283
+ return d;
284
+ }
285
+
286
+ return null;
287
+ }
288
+
289
+ calcBlr(blr) {
290
+ blr.addByte(Const.blr_sql_date);
291
+ }
292
+ }
293
+
294
+ //------------------------------------------------------
295
+
296
+ class SQLVarTime {
297
+ decode(data, lowerV13) {
298
+ var ret = data.readUInt();
299
+
300
+ if (!lowerV13 || !data.readInt()) {
301
+ var d = new Date(0);
302
+ d.setMilliseconds(Math.floor(ret / 10) + d.getTimezoneOffset() * MsPerMinute);
303
+ return d;
304
+ }
305
+ return null;
306
+ }
307
+
308
+ calcBlr(blr) {
309
+ blr.addByte(Const.blr_sql_time);
310
+ }
311
+ }
312
+
313
+ //------------------------------------------------------
314
+
315
+ class SQLVarTimeStamp {
316
+ decode(data, lowerV13) {
317
+ var date = data.readInt();
318
+ var time = data.readUInt();
319
+
320
+ if (!lowerV13 || !data.readInt()) {
321
+ var d = new Date(0);
322
+ d.setMilliseconds((date - DateOffset) * TimeCoeff + Math.floor(time / 10) + d.getTimezoneOffset() * MsPerMinute);
323
+ return d;
324
+ }
325
+
326
+ return null;
327
+ }
328
+
329
+ calcBlr(blr) {
330
+ blr.addByte(Const.blr_timestamp);
331
+ }
332
+ }
333
+
334
+ //------------------------------------------------------
335
+
336
+ class SQLVarTimeTz {
337
+ decode(data, lowerV13) {
338
+ var time = data.readUInt();
339
+ data.readInt(); // skip timezone info
340
+
341
+ if (!lowerV13 || !data.readInt()) {
342
+ var d = new Date(0);
343
+ d.setMilliseconds(Math.floor(time / 10) + d.getTimezoneOffset() * MsPerMinute);
344
+ return d;
345
+ }
346
+ return null;
347
+ }
348
+
349
+ calcBlr(blr) {
350
+ blr.addByte(Const.blr_sql_time_tz);
351
+ }
352
+ }
353
+
354
+ //------------------------------------------------------
355
+
356
+ class SQLVarTimeTzEx extends SQLVarTimeTz {
357
+ decode(data, lowerV13) {
358
+ var time = data.readUInt();
359
+ data.readInt(); // skip timezone info
360
+ data.readInt(); // skip ext_offset
361
+
362
+ if (!lowerV13 || !data.readInt()) {
363
+ var d = new Date(0);
364
+ d.setMilliseconds(Math.floor(time / 10) + d.getTimezoneOffset() * MsPerMinute);
365
+ return d;
366
+ }
367
+ return null;
368
+ }
369
+
370
+ calcBlr(blr) {
371
+ blr.addByte(Const.blr_ex_time_tz);
372
+ }
373
+ }
374
+
375
+ //------------------------------------------------------
376
+
377
+ class SQLVarTimeStampTz {
378
+ decode(data, lowerV13) {
379
+ var date = data.readInt();
380
+ var time = data.readUInt();
381
+ data.readInt(); // skip timezone info
382
+
383
+ if (!lowerV13 || !data.readInt()) {
384
+ var d = new Date(0);
385
+ d.setMilliseconds((date - DateOffset) * TimeCoeff + Math.floor(time / 10) + d.getTimezoneOffset() * MsPerMinute);
386
+ return d;
387
+ }
388
+
389
+ return null;
390
+ }
391
+
392
+ calcBlr(blr) {
393
+ blr.addByte(Const.blr_timestamp_tz);
394
+ }
395
+ }
396
+
397
+ //------------------------------------------------------
398
+
399
+ class SQLVarTimeStampTzEx extends SQLVarTimeStampTz {
400
+ decode(data, lowerV13) {
401
+ var date = data.readInt();
402
+ var time = data.readUInt();
403
+ data.readInt(); // skip timezone info
404
+ data.readInt(); // skip ext_offset
405
+
406
+ if (!lowerV13 || !data.readInt()) {
407
+ var d = new Date(0);
408
+ d.setMilliseconds((date - DateOffset) * TimeCoeff + Math.floor(time / 10) + d.getTimezoneOffset() * MsPerMinute);
409
+ return d;
410
+ }
411
+
412
+ return null;
413
+ }
414
+
415
+ calcBlr(blr) {
416
+ blr.addByte(Const.blr_ex_timestamp_tz);
417
+ }
418
+ }
419
+
420
+ //------------------------------------------------------
421
+
422
+ class SQLVarBoolean {
423
+ decode(data, lowerV13) {
424
+ var ret = data.readInt();
425
+
426
+ if (!lowerV13 || !data.readInt()) {
427
+ return Boolean(ret);
428
+ }
429
+ return null;
430
+ }
431
+
432
+ calcBlr(blr) {
433
+ blr.addByte(Const.blr_bool);
434
+ }
435
+ }
436
+
437
+ //------------------------------------------------------
438
+
439
+ class SQLParamInt {
440
+ constructor(value) {
441
+ this.value = value;
442
+ }
443
+
444
+ calcBlr(blr) {
445
+ blr.addByte(Const.blr_long);
446
+ blr.addShort(0);
447
+ }
448
+
449
+ encode(data) {
450
+ if (this.value != null) {
451
+ data.addInt(this.value);
452
+ } else {
453
+ data.addInt(0);
454
+ data.addInt(1);
455
+ }
456
+ }
457
+ }
458
+
459
+ //------------------------------------------------------
460
+
461
+ class SQLParamInt64 {
462
+ constructor(value) {
463
+ this.value = value;
464
+ }
465
+
466
+ calcBlr(blr) {
467
+ blr.addByte(Const.blr_int64);
468
+ blr.addShort(0);
469
+ }
470
+
471
+ encode(data) {
472
+ if (this.value != null) {
473
+ data.addInt64(this.value);
474
+ } else {
475
+ data.addInt64(0);
476
+ data.addInt(1);
477
+ }
478
+ }
479
+ }
480
+
481
+ //------------------------------------------------------
482
+
483
+ class SQLParamInt128 {
484
+ constructor(value) {
485
+ this.value = value;
486
+ }
487
+
488
+ calcBlr(blr) {
489
+ blr.addByte(Const.blr_int128);
490
+ blr.addShort(0);
491
+ }
492
+
493
+ encode(data) {
494
+ if (this.value != null) {
495
+ data.addInt128(this.value);
496
+ } else {
497
+ data.addInt128(0);
498
+ data.addInt(1);
499
+ }
500
+ }
501
+ }
502
+
503
+ //------------------------------------------------------
504
+
505
+ class SQLParamDecFloat16 {
506
+ constructor(value) {
507
+ this.value = value;
508
+ }
509
+
510
+ calcBlr(blr) {
511
+ blr.addByte(Const.blr_dec64);
512
+ blr.addShort(0);
513
+ }
514
+
515
+ encode(data) {
516
+ if (this.value != null) {
517
+ data.addDecFloat16(this.value);
518
+ } else {
519
+ data.addDecFloat16(0);
520
+ data.addInt(1);
521
+ }
522
+ }
523
+ }
524
+
525
+ //------------------------------------------------------
526
+
527
+ class SQLParamDecFloat34 {
528
+ constructor(value) {
529
+ this.value = value;
530
+ }
531
+
532
+ calcBlr(blr) {
533
+ blr.addByte(Const.blr_dec128);
534
+ blr.addShort(0);
535
+ }
536
+
537
+ encode(data) {
538
+ if (this.value != null) {
539
+ data.addDecFloat34(this.value);
540
+ } else {
541
+ data.addDecFloat34(0);
542
+ data.addInt(1);
543
+ }
544
+ }
545
+ }
546
+
547
+ //------------------------------------------------------
548
+
549
+ class SQLParamDouble {
550
+ constructor(value) {
551
+ this.value = value;
552
+ }
553
+
554
+ encode(data) {
555
+ if (this.value != null) {
556
+ data.addDouble(this.value);
557
+ } else {
558
+ data.addDouble(0);
559
+ data.addInt(1);
560
+ }
561
+ }
562
+
563
+ calcBlr(blr) {
564
+ blr.addByte(Const.blr_double);
565
+ }
566
+ }
567
+
568
+ //------------------------------------------------------
569
+
570
+ class SQLParamString {
571
+ constructor(value) {
572
+ this.value = value;
573
+ }
574
+
575
+ encode(data) {
576
+ if (this.value != null) {
577
+ data.addText(this.value, Const.DEFAULT_ENCODING);
578
+ } else {
579
+ data.addInt(1);
580
+ }
581
+ }
582
+
583
+ calcBlr(blr) {
584
+ blr.addByte(Const.blr_text);
585
+ var len = this.value ? Buffer.byteLength(this.value, Const.DEFAULT_ENCODING) : 0;
586
+ blr.addWord(len);
587
+ }
588
+ }
589
+
590
+ //------------------------------------------------------
591
+
592
+ class SQLParamQuad {
593
+ constructor(value) {
594
+ this.value = value;
595
+ }
596
+
597
+ encode(data) {
598
+ if (this.value != null) {
599
+ data.addInt(this.value.high);
600
+ data.addInt(this.value.low);
601
+ } else {
602
+ data.addInt(0);
603
+ data.addInt(0);
604
+ data.addInt(1);
605
+ }
606
+ }
607
+
608
+ calcBlr(blr) {
609
+ blr.addByte(Const.blr_quad);
610
+ blr.addShort(0);
611
+ }
612
+ }
613
+
614
+ //------------------------------------------------------
615
+
616
+ class SQLParamDate {
617
+ constructor(value) {
618
+ this.value = value;
619
+ }
620
+
621
+ encode(data) {
622
+ if (this.value != null) {
623
+
624
+ var value = this.value.getTime() - this.value.getTimezoneOffset() * MsPerMinute;
625
+ var time = value % TimeCoeff;
626
+ var date = (value - time) / TimeCoeff + DateOffset;
627
+ time *= 10;
628
+
629
+ // check overflow
630
+ if (time < 0) {
631
+ date--;
632
+ time = TimeCoeff*10 + time;
633
+ }
634
+
635
+ data.addInt(date);
636
+ data.addUInt(time);
637
+ } else {
638
+ data.addInt(0);
639
+ data.addUInt(0);
640
+ data.addInt(1);
641
+ }
642
+ }
643
+
644
+ calcBlr(blr) {
645
+ blr.addByte(Const.blr_timestamp);
646
+ }
647
+ }
648
+
649
+ //------------------------------------------------------
650
+
651
+ class SQLParamBool {
652
+ constructor(value) {
653
+ this.value = value;
654
+ }
655
+
656
+ encode(data) {
657
+ if (this.value != null) {
658
+ data.addInt(this.value ? 1 : 0);
659
+ } else {
660
+ data.addInt(0);
661
+ data.addInt(1);
662
+ }
663
+ }
664
+
665
+ calcBlr(blr) {
666
+ blr.addByte(Const.blr_short);
667
+ blr.addShort(0);
668
+ }
669
+ }
670
+
671
+ module.exports = {
672
+ SQLVarArray,
673
+ SQLVarDate,
674
+ SQLVarBlob,
675
+ SQLVarBoolean,
676
+ SQLVarDouble,
677
+ SQLVarInt,
678
+ SQLVarInt64,
679
+ SQLVarInt128,
680
+ SQLVarDecFloat16,
681
+ SQLVarDecFloat34,
682
+ SQLVarFloat,
683
+ SQLVarNull,
684
+ SQLVarShort,
685
+ SQLVarString,
686
+ SQLVarText,
687
+ SQLVarTime,
688
+ SQLVarTimeStamp,
689
+ SQLVarTimeTz,
690
+ SQLVarTimeTzEx,
691
+ SQLVarTimeStampTz,
692
+ SQLVarTimeStampTzEx,
693
+ SQLParamBool,
694
+ SQLParamDate,
695
+ SQLParamDouble,
696
+ SQLParamInt,
697
+ SQLParamInt64,
698
+ SQLParamInt128,
699
+ SQLParamDecFloat16,
700
+ SQLParamDecFloat34,
701
+ SQLParamQuad,
702
+ SQLParamString,
703
+ };