@m2k-5f/pgtx 2.3.2 → 2.3.3
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 +20 -4
- 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 +1 -1
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
|
@@ -46,6 +46,15 @@ export class Connection {
|
|
|
46
46
|
_nextStatement() {
|
|
47
47
|
return `s-${this._stmtCounter++}`;
|
|
48
48
|
}
|
|
49
|
+
_getRowMapper(statementName, descriptions) {
|
|
50
|
+
let mapper = this._rowMappers.get(statementName);
|
|
51
|
+
if (mapper)
|
|
52
|
+
return mapper;
|
|
53
|
+
const fields = descriptions.map((desc, i) => `"${desc.name}": values[${i}]`).join(',\n ');
|
|
54
|
+
mapper = new Function('values', `return ${fields}`)();
|
|
55
|
+
this._rowMappers.set(statementName, mapper);
|
|
56
|
+
return mapper;
|
|
57
|
+
}
|
|
49
58
|
_checkOpened() {
|
|
50
59
|
if (!this.isOpened)
|
|
51
60
|
throw ErrConnectionClosed;
|
|
@@ -54,8 +63,10 @@ export class Connection {
|
|
|
54
63
|
this._isFlushing = false;
|
|
55
64
|
this._isOpened = true;
|
|
56
65
|
this._isReconnecting = false;
|
|
66
|
+
this._activeQuery = null;
|
|
57
67
|
this._pipelinesQueue = new Queue();
|
|
58
68
|
this._described = new Map();
|
|
69
|
+
this._rowMappers = new Map();
|
|
59
70
|
this._describingPending = new Set();
|
|
60
71
|
this._parsed = new Map();
|
|
61
72
|
this._parsingPending = new Map();
|
|
@@ -387,11 +398,15 @@ export class Connection {
|
|
|
387
398
|
break;
|
|
388
399
|
case ResponseTypes.DataRow:
|
|
389
400
|
{
|
|
390
|
-
|
|
401
|
+
let query = this._activeQuery;
|
|
402
|
+
if (!query) {
|
|
403
|
+
query = this._getCurrentQuery();
|
|
404
|
+
this._activeQuery = query;
|
|
405
|
+
}
|
|
391
406
|
if (!query.columns) {
|
|
392
407
|
query.columns = this._described.get(query.statementName);
|
|
393
408
|
}
|
|
394
|
-
query.
|
|
409
|
+
query.push(reader.readDataRow(query.columns, this.params.int8toBigint));
|
|
395
410
|
}
|
|
396
411
|
break;
|
|
397
412
|
case ResponseTypes.ComandComplete:
|
|
@@ -401,7 +416,7 @@ export class Connection {
|
|
|
401
416
|
this.close();
|
|
402
417
|
break;
|
|
403
418
|
}
|
|
404
|
-
const query = this._getCurrentQuery();
|
|
419
|
+
const query = this._activeQuery || this._getCurrentQuery();
|
|
405
420
|
if (!query) {
|
|
406
421
|
this.close();
|
|
407
422
|
break;
|
|
@@ -411,7 +426,8 @@ export class Connection {
|
|
|
411
426
|
}
|
|
412
427
|
query.state = QueryState.Completed;
|
|
413
428
|
this._pipelinesQueue.get().next();
|
|
414
|
-
|
|
429
|
+
this._activeQuery = null;
|
|
430
|
+
query.resolve();
|
|
415
431
|
}
|
|
416
432
|
break;
|
|
417
433
|
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