@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.
@@ -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
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
@@ -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
- nextTick(() => {
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
- const query = this._getCurrentQuery();
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.rows.push(reader.readDataRow(query.columns, this.params.int8toBigint));
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
- query.resolve(query.toObjects());
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
- readInt64(): bigint;
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,SAAS,IAAI,MAAM;IAMnB,WAAW,IAAI,MAAM;CAKxB;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,GAAG,EAAE;IAwGpF,wBAAwB;;;;IAUxB,mBAAmB,IAAI,MAAM;IAM7B,OAAO;IAKP,aAAa;IAKb,iBAAiB;IAKjB,iBAAiB;IAKjB,gBAAgB;IAKhB,wBAAwB;IAQxB,UAAU;CAGb"}
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 / 1000n);
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 / 1000n);
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
- readInt64() {
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 rowValues = [];
235
+ const row = {};
221
236
  for (let i = 0; i < fieldsCount; i++) {
222
- let fieldLength = this.buffer.readInt32();
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
- rowValues.push(null);
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.Uuid:
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 byteKey = this.buffer.readRawBinaryString(fieldLength);
303
- let cachedString = cacheForColumn.get(byteKey);
259
+ const byteHash = this.buffer.getBufferHash(fieldLength);
260
+ let cachedString = cacheForColumn.get(byteHash);
304
261
  if (cachedString === undefined) {
305
- cachedString = Buffer.from(byteKey, 'binary').toString('utf-8');
262
+ cachedString = this.buffer.readRawString(fieldLength);
306
263
  if (cacheForColumn.size < 512) {
307
- cacheForColumn.set(byteKey, cachedString);
264
+ cacheForColumn.set(byteHash, cachedString);
308
265
  }
309
266
  }
310
- rowValues.push(cachedString);
267
+ else {
268
+ this.buffer.skipBytes(fieldLength);
269
+ }
270
+ row[key] = cachedString;
311
271
  }
312
272
  else {
313
- rowValues.push(this.buffer.readRawString(fieldLength));
273
+ row[key] = this.buffer.readRawString(fieldLength);
314
274
  }
315
275
  }
316
276
  break;
317
- default:
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.skipBytes(fieldLength);
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 rowValues;
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
- resolve: (value: T[]) => void;
19
- reject: (error: Error) => void;
20
- rows: any[][];
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
- toObjects(): T[];
23
+ push(value: T): void;
24
+ reject(cause: Error): void;
25
+ resolve(): void;
24
26
  }
25
27
  //# sourceMappingURL=query.d.ts.map
@@ -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,EAAG,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAA;IAC9B,MAAM,EAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAC/B,IAAI,EAAE,GAAG,EAAE,EAAE,CAAK;gBAGP,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;IAIrB,SAAS,IAAI,CAAC,EAAE;CA2BnB"}
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.rows = [];
15
+ this._rows = [];
16
16
  this.promise = new Promise((a, b) => {
17
- this.resolve = a;
18
- this.reject = b;
17
+ this._resolve = a;
18
+ this._reject = b;
19
19
  });
20
20
  }
21
21
  setState(state) {
22
22
  this.state = state;
23
23
  }
24
- toObjects() {
25
- if (!this.rows.length || !this.columns || !this.columns.length) {
26
- return [];
27
- }
28
- const result = [];
29
- const rowsLength = this.rows.length;
30
- const columnsLength = this.columns.length;
31
- const colNames = new Array(columnsLength);
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
@@ -17,7 +17,7 @@ export class Queue {
17
17
  const item = this._queue[this._pointer];
18
18
  this._pointer++;
19
19
  if (this._pointer >= this._queue.length) {
20
- this._queue = [];
20
+ this._queue.length = 0;
21
21
  this._pointer = 0;
22
22
  }
23
23
  return item;
package/package.json CHANGED
@@ -1,55 +1,55 @@
1
- {
2
- "name": "@m2k-5f/pgtx",
3
- "version": "2.3.2",
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
+ }