@m2k-5f/pgtx 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.
- package/dist/connection.d.ts +3 -0
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +21 -6
- package/dist/protocol/connection-response-reader.d.ts +4 -2
- package/dist/protocol/connection-response-reader.d.ts.map +1 -1
- package/dist/protocol/connection-response-reader.js +64 -78
- package/dist/query.d.ts +6 -4
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +11 -23
- package/dist/queue.js +1 -1
- package/package.json +55 -55
package/dist/connection.d.ts
CHANGED
|
@@ -69,8 +69,10 @@ export declare class Connection {
|
|
|
69
69
|
private _isReconnecting;
|
|
70
70
|
private _socket;
|
|
71
71
|
private _writer;
|
|
72
|
+
private _activeQuery;
|
|
72
73
|
private _pipelinesQueue;
|
|
73
74
|
private _described;
|
|
75
|
+
private _rowMappers;
|
|
74
76
|
private _describingPending;
|
|
75
77
|
private _parsed;
|
|
76
78
|
private _parsingPending;
|
|
@@ -78,6 +80,7 @@ export declare class Connection {
|
|
|
78
80
|
private _stmtCounter;
|
|
79
81
|
private _logLevel;
|
|
80
82
|
private _nextStatement;
|
|
83
|
+
private _getRowMapper;
|
|
81
84
|
private _checkOpened;
|
|
82
85
|
private constructor();
|
|
83
86
|
/**
|
package/dist/connection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAK3C,OAAO,EAAQ,MAAM,EAAU,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEvC,KAAK,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;AAErD,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAMD,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAA;IACzB,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;IAC7B,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;IAC5B,aAAa,EAAE,aAAa,CAAA;CAC/B,CAAA;AAGD,MAAM,MAAM,gBAAgB,GAAG;IAC3B,OAAO,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,IAAI,CAAA;IAC/C,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAC9B,IAAI,EAAE,SAAS,CAAA;IACf,aAAa,EAAE,aAAa,CAAA;CAC/B,CAAA;AAGD,MAAM,MAAM,iBAAiB,GAAG;IAC5B,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAA;IAC7C,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAC9B,aAAa,EAAE,aAAa,CAAA;CAC/B,CAAA;AAKD,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;AAE5D,MAAM,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AAEpD,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAGxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAyB;
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
|
package/dist/connection.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { nextTick } from "process";
|
|
2
1
|
import { ConnectionRequestWriter } from "./protocol/connection-request-writer";
|
|
3
2
|
import { createAuthorizedSocket } from "./protocol/socket-authorization";
|
|
4
3
|
import { ResponseTypes } from "./protocol/constants";
|
|
@@ -46,6 +45,15 @@ export class Connection {
|
|
|
46
45
|
_nextStatement() {
|
|
47
46
|
return `s-${this._stmtCounter++}`;
|
|
48
47
|
}
|
|
48
|
+
_getRowMapper(statementName, descriptions) {
|
|
49
|
+
let mapper = this._rowMappers.get(statementName);
|
|
50
|
+
if (mapper)
|
|
51
|
+
return mapper;
|
|
52
|
+
const fields = descriptions.map((desc, i) => `"${desc.name}": values[${i}]`).join(',\n ');
|
|
53
|
+
mapper = new Function('values', `return ${fields}`)();
|
|
54
|
+
this._rowMappers.set(statementName, mapper);
|
|
55
|
+
return mapper;
|
|
56
|
+
}
|
|
49
57
|
_checkOpened() {
|
|
50
58
|
if (!this.isOpened)
|
|
51
59
|
throw ErrConnectionClosed;
|
|
@@ -54,8 +62,10 @@ export class Connection {
|
|
|
54
62
|
this._isFlushing = false;
|
|
55
63
|
this._isOpened = true;
|
|
56
64
|
this._isReconnecting = false;
|
|
65
|
+
this._activeQuery = null;
|
|
57
66
|
this._pipelinesQueue = new Queue();
|
|
58
67
|
this._described = new Map();
|
|
68
|
+
this._rowMappers = new Map();
|
|
59
69
|
this._describingPending = new Set();
|
|
60
70
|
this._parsed = new Map();
|
|
61
71
|
this._parsingPending = new Map();
|
|
@@ -277,7 +287,7 @@ export class Connection {
|
|
|
277
287
|
if (!this._isFlushing) {
|
|
278
288
|
this._isFlushing = true;
|
|
279
289
|
this._pipelinesQueue.push(new Queue());
|
|
280
|
-
|
|
290
|
+
setImmediate(() => {
|
|
281
291
|
this._flush();
|
|
282
292
|
});
|
|
283
293
|
}
|
|
@@ -387,11 +397,15 @@ export class Connection {
|
|
|
387
397
|
break;
|
|
388
398
|
case ResponseTypes.DataRow:
|
|
389
399
|
{
|
|
390
|
-
|
|
400
|
+
let query = this._activeQuery;
|
|
401
|
+
if (!query) {
|
|
402
|
+
query = this._getCurrentQuery();
|
|
403
|
+
this._activeQuery = query;
|
|
404
|
+
}
|
|
391
405
|
if (!query.columns) {
|
|
392
406
|
query.columns = this._described.get(query.statementName);
|
|
393
407
|
}
|
|
394
|
-
query.
|
|
408
|
+
query.push(reader.readDataRow(query.columns, this.params.int8toBigint));
|
|
395
409
|
}
|
|
396
410
|
break;
|
|
397
411
|
case ResponseTypes.ComandComplete:
|
|
@@ -401,7 +415,7 @@ export class Connection {
|
|
|
401
415
|
this.close();
|
|
402
416
|
break;
|
|
403
417
|
}
|
|
404
|
-
const query = this._getCurrentQuery();
|
|
418
|
+
const query = this._activeQuery || this._getCurrentQuery();
|
|
405
419
|
if (!query) {
|
|
406
420
|
this.close();
|
|
407
421
|
break;
|
|
@@ -411,7 +425,8 @@ export class Connection {
|
|
|
411
425
|
}
|
|
412
426
|
query.state = QueryState.Completed;
|
|
413
427
|
this._pipelinesQueue.get().next();
|
|
414
|
-
|
|
428
|
+
this._activeQuery = null;
|
|
429
|
+
query.resolve();
|
|
415
430
|
}
|
|
416
431
|
break;
|
|
417
432
|
case ResponseTypes.ErrorResponse:
|
|
@@ -22,8 +22,10 @@ export declare class ConnectionResponseBuffer {
|
|
|
22
22
|
hasFullPacket(): boolean;
|
|
23
23
|
getResidualBuffer(): Buffer<ArrayBufferLike>;
|
|
24
24
|
readBool(): boolean;
|
|
25
|
-
|
|
25
|
+
readBigInt64(): bigint;
|
|
26
|
+
readInt64(): number;
|
|
26
27
|
readFloat64(): number;
|
|
28
|
+
getBufferHash(length: number): number;
|
|
27
29
|
}
|
|
28
30
|
export declare class ConnectionResponseReader {
|
|
29
31
|
private buffer;
|
|
@@ -46,7 +48,7 @@ export declare class ConnectionResponseReader {
|
|
|
46
48
|
readSaslMechanisms(): string[];
|
|
47
49
|
readSaslMessage(): string;
|
|
48
50
|
readRowDescription(): ColumnDescription[];
|
|
49
|
-
readDataRow(descriptions: ColumnDescription[], int8toBigint?: boolean): any
|
|
51
|
+
readDataRow(descriptions: ColumnDescription[], int8toBigint?: boolean): Record<string, any>;
|
|
50
52
|
readNotificationResponse(): {
|
|
51
53
|
name: ChannelName;
|
|
52
54
|
payload: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-response-reader.d.ts","sourceRoot":"","sources":["../../src/protocol/connection-response-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA6B,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAM3C,qBAAa,wBAAwB;IAI7B,OAAO,CAAC,MAAM;IAHlB,OAAO,CAAC,KAAK,CAAI;IAEjB,OAAO;IAKP,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;IAK1B,QAAQ,IAAI,MAAM;IAOlB,SAAS,IAAI,MAAM;IAOnB,SAAS,IAAI,MAAM;IAOnB,WAAW,IAAI,MAAM;IAQrB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAOrC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAOjC,OAAO,IAAI,OAAO;IAKlB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAO3C,cAAc,IAAI,IAAI;IAOtB,mBAAmB,IAAI,IAAI;IAO3B,cAAc,IAAI,MAAM;IAaxB,SAAS,CAAC,SAAS,EAAE,MAAM;IAK3B,aAAa,IAAI,OAAO;IAaxB,iBAAiB;IAIjB,QAAQ;IAMR,
|
|
1
|
+
{"version":3,"file":"connection-response-reader.d.ts","sourceRoot":"","sources":["../../src/protocol/connection-response-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAA6B,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAM3C,qBAAa,wBAAwB;IAI7B,OAAO,CAAC,MAAM;IAHlB,OAAO,CAAC,KAAK,CAAI;IAEjB,OAAO;IAKP,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;IAK1B,QAAQ,IAAI,MAAM;IAOlB,SAAS,IAAI,MAAM;IAOnB,SAAS,IAAI,MAAM;IAOnB,WAAW,IAAI,MAAM;IAQrB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAOrC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAOjC,OAAO,IAAI,OAAO;IAKlB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAO3C,cAAc,IAAI,IAAI;IAOtB,mBAAmB,IAAI,IAAI;IAO3B,cAAc,IAAI,MAAM;IAaxB,SAAS,CAAC,SAAS,EAAE,MAAM;IAK3B,aAAa,IAAI,OAAO;IAaxB,iBAAiB;IAIjB,QAAQ;IAMR,YAAY,IAAI,MAAM;IAOtB,SAAS;IAST,WAAW,IAAI,MAAM;IAMrB,aAAa,CAAC,MAAM,EAAE,MAAM;CAW/B;AAGD,qBAAa,wBAAwB;IAI7B,OAAO,CAAC,MAAM;IAHlB,OAAO,CAAC,mBAAmB,CAAK;IAEhC,OAAO;IAKP,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM;IAK1B,QAAQ,IAC6B,YAAY;IAIjD,kBAAkB,IAGoB,kBAAkB;IAIxD,WAAW;IAKX,mBAAmB;;;;IAUnB,kBAAkB;;;;IAUlB,iBAAiB,IAAI,aAAa;IA8ClC,iBAAiB,IAEoB,iBAAiB;IAItD,kBAAkB,IAAI,MAAM,EAAE;IAa9B,eAAe,IAAI,MAAM;IAOzB,kBAAkB;IAuBlB,WAAW,CAAC,YAAY,EAAE,iBAAiB,EAAE,EAAE,YAAY,GAAE,OAAe,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IA8FlG,wBAAwB;;;;IAUxB,mBAAmB,IAAI,MAAM;IAM7B,OAAO;IAKP,aAAa;IAKb,iBAAiB;IAKjB,iBAAiB;IAKjB,gBAAgB;IAKhB,wBAAwB;IAQxB,UAAU;CAGb"}
|
|
@@ -56,12 +56,12 @@ export class ConnectionResponseBuffer {
|
|
|
56
56
|
}
|
|
57
57
|
readBinaryTimestamp() {
|
|
58
58
|
const microSecondsSince2000 = this.readInt64();
|
|
59
|
-
const msSince2000 = Number(microSecondsSince2000 /
|
|
59
|
+
const msSince2000 = Number(microSecondsSince2000 / 1000);
|
|
60
60
|
return new Date(POSTGRES_EPOCH_MS + msSince2000);
|
|
61
61
|
}
|
|
62
62
|
readBinaryTime() {
|
|
63
63
|
const microSecondsSinceMidnight = this.readInt64();
|
|
64
|
-
const totalMs = Number(microSecondsSinceMidnight /
|
|
64
|
+
const totalMs = Number(microSecondsSinceMidnight / 1000);
|
|
65
65
|
const seconds = Math.floor(totalMs / 1000);
|
|
66
66
|
const ms = totalMs % 1000;
|
|
67
67
|
const minutes = Math.floor(seconds / 60);
|
|
@@ -88,16 +88,31 @@ export class ConnectionResponseBuffer {
|
|
|
88
88
|
this.caret++;
|
|
89
89
|
return value;
|
|
90
90
|
}
|
|
91
|
-
|
|
91
|
+
readBigInt64() {
|
|
92
92
|
const value = this.buffer.readBigInt64BE(this.caret);
|
|
93
93
|
this.caret += 8;
|
|
94
94
|
return value;
|
|
95
95
|
}
|
|
96
|
+
readInt64() {
|
|
97
|
+
const hi = this.buffer.readInt32BE(this.caret);
|
|
98
|
+
const lo = this.buffer.readUInt32BE(this.caret + 4);
|
|
99
|
+
this.caret += 8;
|
|
100
|
+
return (hi * 4294967296) + lo;
|
|
101
|
+
}
|
|
96
102
|
readFloat64() {
|
|
97
103
|
const value = this.buffer.readDoubleBE(this.caret);
|
|
98
104
|
this.caret += 8;
|
|
99
105
|
return value;
|
|
100
106
|
}
|
|
107
|
+
getBufferHash(length) {
|
|
108
|
+
let hash = 2166136261;
|
|
109
|
+
const end = this.caret + length;
|
|
110
|
+
for (let i = this.caret; i < end; i++) {
|
|
111
|
+
hash ^= this.buffer[i];
|
|
112
|
+
hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);
|
|
113
|
+
}
|
|
114
|
+
return hash >>> 0;
|
|
115
|
+
}
|
|
101
116
|
}
|
|
102
117
|
export class ConnectionResponseReader {
|
|
103
118
|
constructor(buffer) {
|
|
@@ -217,81 +232,23 @@ export class ConnectionResponseReader {
|
|
|
217
232
|
readDataRow(descriptions, int8toBigint = false) {
|
|
218
233
|
this.buffer.skipBytes(4);
|
|
219
234
|
const fieldsCount = this.buffer.readInt16();
|
|
220
|
-
const
|
|
235
|
+
const row = {};
|
|
221
236
|
for (let i = 0; i < fieldsCount; i++) {
|
|
222
|
-
|
|
237
|
+
const fieldLength = this.buffer.readInt32();
|
|
238
|
+
const desc = descriptions[i];
|
|
239
|
+
const key = desc ? desc.name : `col_${i}`;
|
|
223
240
|
if (fieldLength === -1) {
|
|
224
|
-
|
|
241
|
+
row[key] = null;
|
|
225
242
|
continue;
|
|
226
243
|
}
|
|
227
|
-
const desc = descriptions[i];
|
|
228
244
|
const oid = desc ? desc.typeOID : 0;
|
|
229
245
|
switch (oid) {
|
|
230
|
-
case DataTypeOids.Jsonb:
|
|
231
|
-
{
|
|
232
|
-
this.buffer.skipBytes(1);
|
|
233
|
-
const jsonText = this.buffer.readRawString(fieldLength - 1);
|
|
234
|
-
rowValues.push(JSON.parse(jsonText));
|
|
235
|
-
}
|
|
236
|
-
break;
|
|
237
|
-
case DataTypeOids.Json:
|
|
238
|
-
{
|
|
239
|
-
const jsonText = this.buffer.readRawString(fieldLength);
|
|
240
|
-
rowValues.push(JSON.parse(jsonText));
|
|
241
|
-
}
|
|
242
|
-
break;
|
|
243
246
|
case DataTypeOids.Int4:
|
|
244
|
-
|
|
245
|
-
rowValues.push(this.buffer.readInt32());
|
|
246
|
-
}
|
|
247
|
-
break;
|
|
248
|
-
case DataTypeOids.Int2:
|
|
249
|
-
{
|
|
250
|
-
rowValues.push(this.buffer.readInt16());
|
|
251
|
-
}
|
|
252
|
-
break;
|
|
253
|
-
case DataTypeOids.Bool:
|
|
254
|
-
{
|
|
255
|
-
rowValues.push(this.buffer.readBool());
|
|
256
|
-
}
|
|
257
|
-
break;
|
|
258
|
-
case DataTypeOids.Int8:
|
|
259
|
-
{
|
|
260
|
-
const bigint = this.buffer.readInt64();
|
|
261
|
-
rowValues.push(int8toBigint ? bigint : Number(bigint));
|
|
262
|
-
}
|
|
263
|
-
break;
|
|
264
|
-
case DataTypeOids.Float8:
|
|
265
|
-
{
|
|
266
|
-
rowValues.push(this.buffer.readFloat64());
|
|
267
|
-
}
|
|
268
|
-
break;
|
|
269
|
-
case DataTypeOids.Date:
|
|
270
|
-
{
|
|
271
|
-
rowValues.push(this.buffer.readBinaryDate());
|
|
272
|
-
}
|
|
273
|
-
break;
|
|
274
|
-
case DataTypeOids.Timestamp:
|
|
275
|
-
case DataTypeOids.Timestamptz:
|
|
276
|
-
{
|
|
277
|
-
rowValues.push(this.buffer.readBinaryTimestamp());
|
|
278
|
-
}
|
|
279
|
-
break;
|
|
280
|
-
case DataTypeOids.Time:
|
|
281
|
-
{
|
|
282
|
-
rowValues.push(this.buffer.readBinaryTime());
|
|
283
|
-
}
|
|
284
|
-
break;
|
|
285
|
-
case DataTypeOids.Timetz:
|
|
286
|
-
{
|
|
287
|
-
const timeStr = this.buffer.readBinaryTime();
|
|
288
|
-
this.buffer.skipBytes(4);
|
|
289
|
-
rowValues.push(timeStr);
|
|
290
|
-
}
|
|
247
|
+
row[key] = this.buffer.readInt32();
|
|
291
248
|
break;
|
|
292
249
|
case DataTypeOids.Text:
|
|
293
250
|
case DataTypeOids.Varchar:
|
|
294
|
-
case DataTypeOids.
|
|
251
|
+
case DataTypeOids.Char:
|
|
295
252
|
{
|
|
296
253
|
if (fieldLength <= 32) {
|
|
297
254
|
let cacheForColumn = columnValueCache.get(i);
|
|
@@ -299,30 +256,59 @@ export class ConnectionResponseReader {
|
|
|
299
256
|
cacheForColumn = new Map();
|
|
300
257
|
columnValueCache.set(i, cacheForColumn);
|
|
301
258
|
}
|
|
302
|
-
const
|
|
303
|
-
let cachedString = cacheForColumn.get(
|
|
259
|
+
const byteHash = this.buffer.getBufferHash(fieldLength);
|
|
260
|
+
let cachedString = cacheForColumn.get(byteHash);
|
|
304
261
|
if (cachedString === undefined) {
|
|
305
|
-
cachedString =
|
|
262
|
+
cachedString = this.buffer.readRawString(fieldLength);
|
|
306
263
|
if (cacheForColumn.size < 512) {
|
|
307
|
-
cacheForColumn.set(
|
|
264
|
+
cacheForColumn.set(byteHash, cachedString);
|
|
308
265
|
}
|
|
309
266
|
}
|
|
310
|
-
|
|
267
|
+
else {
|
|
268
|
+
this.buffer.skipBytes(fieldLength);
|
|
269
|
+
}
|
|
270
|
+
row[key] = cachedString;
|
|
311
271
|
}
|
|
312
272
|
else {
|
|
313
|
-
|
|
273
|
+
row[key] = this.buffer.readRawString(fieldLength);
|
|
314
274
|
}
|
|
315
275
|
}
|
|
316
276
|
break;
|
|
317
|
-
|
|
277
|
+
case DataTypeOids.Int2:
|
|
278
|
+
row[key] = this.buffer.readInt16();
|
|
279
|
+
break;
|
|
280
|
+
case DataTypeOids.Bool:
|
|
281
|
+
row[key] = this.buffer.readBool();
|
|
282
|
+
break;
|
|
283
|
+
case DataTypeOids.Int8:
|
|
318
284
|
{
|
|
319
|
-
this.buffer.
|
|
320
|
-
rowValues.push(undefined);
|
|
285
|
+
row[key] = int8toBigint ? this.buffer.readBigInt64() : this.buffer.readInt64();
|
|
321
286
|
}
|
|
322
287
|
break;
|
|
288
|
+
case DataTypeOids.Float8:
|
|
289
|
+
row[key] = this.buffer.readFloat64();
|
|
290
|
+
break;
|
|
291
|
+
case DataTypeOids.Jsonb:
|
|
292
|
+
this.buffer.skipBytes(1);
|
|
293
|
+
row[key] = JSON.parse(this.buffer.readRawString(fieldLength - 1));
|
|
294
|
+
break;
|
|
295
|
+
case DataTypeOids.Json:
|
|
296
|
+
row[key] = JSON.parse(this.buffer.readRawString(fieldLength));
|
|
297
|
+
break;
|
|
298
|
+
case DataTypeOids.Date:
|
|
299
|
+
row[key] = this.buffer.readBinaryDate();
|
|
300
|
+
break;
|
|
301
|
+
case DataTypeOids.Timestamp:
|
|
302
|
+
case DataTypeOids.Timestamptz:
|
|
303
|
+
row[key] = this.buffer.readBinaryTimestamp();
|
|
304
|
+
break;
|
|
305
|
+
default:
|
|
306
|
+
this.buffer.skipBytes(fieldLength);
|
|
307
|
+
row[key] = null;
|
|
308
|
+
break;
|
|
323
309
|
}
|
|
324
310
|
}
|
|
325
|
-
return
|
|
311
|
+
return row;
|
|
326
312
|
}
|
|
327
313
|
readNotificationResponse() {
|
|
328
314
|
this.buffer.readInt32();
|
package/dist/query.d.ts
CHANGED
|
@@ -15,11 +15,13 @@ export declare class Query<T> {
|
|
|
15
15
|
statementName: StatementName;
|
|
16
16
|
columns?: ColumnDescription[] | undefined;
|
|
17
17
|
promise: Promise<T[]>;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
private _resolve;
|
|
19
|
+
private _reject;
|
|
20
|
+
private _rows;
|
|
21
21
|
constructor(text: QueryText, args: (string | null)[], state: State, statementName: StatementName, columns?: ColumnDescription[] | undefined);
|
|
22
22
|
setState(state: State): void;
|
|
23
|
-
|
|
23
|
+
push(value: T): void;
|
|
24
|
+
reject(cause: Error): void;
|
|
25
|
+
resolve(): void;
|
|
24
26
|
}
|
|
25
27
|
//# sourceMappingURL=query.d.ts.map
|
package/dist/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGrD,eAAO,MAAM,UAAU;;;;;;CAMb,CAAA;AAGV,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,UAAU,CAAC,CAAA;AAG9C,qBAAa,KAAK,CAAC,CAAC;IAOL,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IACvB,KAAK,EAAE,KAAK;IACZ,aAAa,EAAE,aAAa;IAC5B,OAAO,CAAC,EAAE,iBAAiB,EAAE;IAVxC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IACrB,OAAO,
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGrD,eAAO,MAAM,UAAU;;;;;;CAMb,CAAA;AAGV,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,UAAU,CAAC,CAAA;AAG9C,qBAAa,KAAK,CAAC,CAAC;IAOL,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IACvB,KAAK,EAAE,KAAK;IACZ,aAAa,EAAE,aAAa;IAC5B,OAAO,CAAC,EAAE,iBAAiB,EAAE;IAVxC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IACrB,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,KAAK,CAAU;gBAGZ,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EACvB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,aAAa,EAC5B,OAAO,CAAC,EAAE,iBAAiB,EAAE,YAAA;IAQxC,QAAQ,CAAC,KAAK,EAAE,KAAK;IAKrB,IAAI,CAAC,KAAK,EAAE,CAAC;IAIb,MAAM,CAAC,KAAK,EAAE,KAAK;IAKnB,OAAO;CAGV"}
|
package/dist/query.js
CHANGED
|
@@ -12,34 +12,22 @@ export class Query {
|
|
|
12
12
|
this.state = state;
|
|
13
13
|
this.statementName = statementName;
|
|
14
14
|
this.columns = columns;
|
|
15
|
-
this.
|
|
15
|
+
this._rows = [];
|
|
16
16
|
this.promise = new Promise((a, b) => {
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
17
|
+
this._resolve = a;
|
|
18
|
+
this._reject = b;
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
21
|
setState(state) {
|
|
22
22
|
this.state = state;
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
for (let c = 0; c < columnsLength; c++) {
|
|
33
|
-
colNames[c] = this.columns[c].name;
|
|
34
|
-
}
|
|
35
|
-
for (let r = 0; r < rowsLength; r++) {
|
|
36
|
-
const rawRow = this.rows[r];
|
|
37
|
-
const rowObject = {};
|
|
38
|
-
for (let c = 0; c < columnsLength; c++) {
|
|
39
|
-
rowObject[colNames[c]] = rawRow[c];
|
|
40
|
-
}
|
|
41
|
-
result.push(rowObject);
|
|
42
|
-
}
|
|
43
|
-
return result;
|
|
24
|
+
push(value) {
|
|
25
|
+
this._rows.push(value);
|
|
26
|
+
}
|
|
27
|
+
reject(cause) {
|
|
28
|
+
this._reject(cause);
|
|
29
|
+
}
|
|
30
|
+
resolve() {
|
|
31
|
+
this._resolve(this._rows);
|
|
44
32
|
}
|
|
45
33
|
}
|
package/dist/queue.js
CHANGED
package/package.json
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@m2k-5f/pgtx",
|
|
3
|
-
"version": "2.3.
|
|
4
|
-
"type": "module",
|
|
5
|
-
"description": "Blazing-fast PostgreSQL driver with pipeline support.",
|
|
6
|
-
"files": [
|
|
7
|
-
"dist",
|
|
8
|
-
"README.md"
|
|
9
|
-
],
|
|
10
|
-
"scripts": {
|
|
11
|
-
"build": "tsc",
|
|
12
|
-
"prepublishOnly": "npm run build",
|
|
13
|
-
"testGitHub": "node --import tsx --test $(find tests -name '*.test.ts')",
|
|
14
|
-
"test": "node --import tsx --test ./tests/*.test.ts",
|
|
15
|
-
"benchmark": "npx tsx benchmark.ts"
|
|
16
|
-
},
|
|
17
|
-
"repository": {
|
|
18
|
-
"type": "git",
|
|
19
|
-
"url": "git://github.com/M2K-5F/pgtx.git"
|
|
20
|
-
},
|
|
21
|
-
"keywords": [
|
|
22
|
-
"sql",
|
|
23
|
-
"postgres",
|
|
24
|
-
"driver",
|
|
25
|
-
"pipeline",
|
|
26
|
-
"query-builder",
|
|
27
|
-
"typescript",
|
|
28
|
-
"transactions",
|
|
29
|
-
"prepared-statements"
|
|
30
|
-
],
|
|
31
|
-
"author": "M2K-5F",
|
|
32
|
-
"license": "MIT",
|
|
33
|
-
"homepage": "https://github.com/M2K-5F/pgtx",
|
|
34
|
-
"bugs": {
|
|
35
|
-
"url": "https://github.com/M2K-5F/pgtx/issues"
|
|
36
|
-
},
|
|
37
|
-
"exports": {
|
|
38
|
-
".": {
|
|
39
|
-
"import": "./dist/index.js",
|
|
40
|
-
"require": "./dist/index.js",
|
|
41
|
-
"types": "./dist/index.d.ts"
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
"devDependencies": {
|
|
45
|
-
"@types/node": "^26.1.1",
|
|
46
|
-
"mitata": "^1.0.34",
|
|
47
|
-
"pg": "^8.22.0",
|
|
48
|
-
"postgres": "^3.4.9",
|
|
49
|
-
"tsx": "^4.21.0",
|
|
50
|
-
"typescript": "^5.0.0"
|
|
51
|
-
},
|
|
52
|
-
"dependencies": {
|
|
53
|
-
"fluent-future": "^1.3.2"
|
|
54
|
-
}
|
|
55
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@m2k-5f/pgtx",
|
|
3
|
+
"version": "2.3.4",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Blazing-fast PostgreSQL driver with pipeline support.",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist",
|
|
8
|
+
"README.md"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"prepublishOnly": "npm run build",
|
|
13
|
+
"testGitHub": "node --import tsx --test $(find tests -name '*.test.ts')",
|
|
14
|
+
"test": "node --import tsx --test ./tests/*.test.ts",
|
|
15
|
+
"benchmark": "npx tsx benchmark.ts"
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git://github.com/M2K-5F/pgtx.git"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"sql",
|
|
23
|
+
"postgres",
|
|
24
|
+
"driver",
|
|
25
|
+
"pipeline",
|
|
26
|
+
"query-builder",
|
|
27
|
+
"typescript",
|
|
28
|
+
"transactions",
|
|
29
|
+
"prepared-statements"
|
|
30
|
+
],
|
|
31
|
+
"author": "M2K-5F",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"homepage": "https://github.com/M2K-5F/pgtx",
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://github.com/M2K-5F/pgtx/issues"
|
|
36
|
+
},
|
|
37
|
+
"exports": {
|
|
38
|
+
".": {
|
|
39
|
+
"import": "./dist/index.js",
|
|
40
|
+
"require": "./dist/index.js",
|
|
41
|
+
"types": "./dist/index.d.ts"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/node": "^26.1.1",
|
|
46
|
+
"mitata": "^1.0.34",
|
|
47
|
+
"pg": "^8.22.0",
|
|
48
|
+
"postgres": "^3.4.9",
|
|
49
|
+
"tsx": "^4.21.0",
|
|
50
|
+
"typescript": "^5.0.0"
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"fluent-future": "^1.3.2"
|
|
54
|
+
}
|
|
55
|
+
}
|