@m2k-5f/pgtx 2.5.2 → 2.6.0

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 (39) hide show
  1. package/dist/batch.d.ts +14 -0
  2. package/dist/batch.d.ts.map +1 -0
  3. package/dist/batch.js +35 -0
  4. package/dist/clauses/array.clause.js +2 -2
  5. package/dist/clauses/exclude.clause.d.ts.map +1 -1
  6. package/dist/clauses/exclude.clause.js +2 -2
  7. package/dist/clauses/fragment.clause.d.ts.map +1 -1
  8. package/dist/clauses/fragment.clause.js +2 -5
  9. package/dist/clauses/iden.caluse.js +1 -1
  10. package/dist/clauses/insert.clause.d.ts.map +1 -1
  11. package/dist/clauses/insert.clause.js +10 -9
  12. package/dist/clauses/literal.clause.js +1 -1
  13. package/dist/clauses/update.clause.js +2 -2
  14. package/dist/clauses/where.clause.js +2 -2
  15. package/dist/connection.d.ts +14 -14
  16. package/dist/connection.d.ts.map +1 -1
  17. package/dist/connection.js +151 -204
  18. package/dist/error.d.ts +3 -0
  19. package/dist/error.d.ts.map +1 -1
  20. package/dist/error.js +3 -0
  21. package/dist/pool.d.ts.map +1 -1
  22. package/dist/pool.js +2 -2
  23. package/dist/protocol/connection-request-writer.d.ts.map +1 -1
  24. package/dist/protocol/connection-request-writer.js +1 -0
  25. package/dist/query.d.ts +29 -22
  26. package/dist/query.d.ts.map +1 -1
  27. package/dist/query.js +41 -32
  28. package/dist/queue.d.ts +17 -0
  29. package/dist/queue.d.ts.map +1 -1
  30. package/dist/queue.js +44 -4
  31. package/dist/transaction.d.ts +3 -3
  32. package/dist/transaction.d.ts.map +1 -1
  33. package/dist/transaction.js +2 -4
  34. package/dist/types.d.ts +1 -1
  35. package/dist/types.d.ts.map +1 -1
  36. package/dist/utils/template-compiler.d.ts +2 -2
  37. package/dist/utils/template-compiler.d.ts.map +1 -1
  38. package/dist/utils/template-compiler.js +14 -9
  39. package/package.json +8 -6
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC,eAAO,MAAM,UAAU;;;;;;CAMb,CAAA;AAGV,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,UAAU,CAAC,CAAA;AAG9C,qBAAa,KAAK,CAAC,CAAC;IASL,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;IAZxC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;IAClC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,KAAK,CAAU;IAEvB,OAAO,CAAC,MAAM,CAAC,CAAgB;gBAGpB,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,YAAY,CAAC,OAAO,EAAE,MAAM;IAO5B,QAAQ,CAAC,KAAK,EAAE,KAAK;IAKrB,IAAI,CAAC,KAAK,EAAE,CAAC;IAKb,MAAM,CAAC,KAAK,EAAE,aAAa;IAM3B,OAAO;CAIV;AAED,qBAAa,WAAW,CAAC,CAAC;IAKX,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IACvB,KAAK,EAAE,KAAK;IACZ,aAAa,EAAE,aAAa;IACnC,OAAO,CAAC,WAAW;IACZ,OAAO,CAAC,EAAE,iBAAiB,EAAE;IARxC,OAAO,CAAC,MAAM,CAAC,CAAgB;gBAGpB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EACvB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,aAAa,EAC3B,WAAW,EAAE,+BAA+B,CAAC,CAAC,CAAC,EAChD,OAAO,CAAC,EAAE,iBAAiB,EAAE,YAAA;IAGxC,QAAQ,CAAC,KAAK,EAAE,KAAK;IAIrB,YAAY,CAAC,OAAO,EAAE,MAAM;IAM5B,IAAI,CAAC,KAAK,EAAE,CAAC;IAIb,MAAM,CAAC,KAAK,EAAE,aAAa;IAK3B,OAAO;CAIV"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAmB,aAAa,EAAE,MAAM,SAAS,CAAC;AAGzD,eAAO,MAAM,UAAU;;;;;CAKb,CAAA;AAGV,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,UAAU,CAAC,CAAA;AAE9C,8BAAsB,KAAK;IAIZ,SAAS,EAAE,aAAa;IAHnC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAA;gBAGtB,SAAS,EAAE,aAAa;IAGnC,YAAY,CAAC,OAAO,EAAE,MAAM;IAM5B,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAE3C,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CACzC;AAGD,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,KAAK;IAQ1B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IACvB,OAAO,EAAE,iBAAiB,EAAE;IAThC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;IACzC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,KAAK,CAAU;gBAGnB,SAAS,EAAE,aAAa,EACjB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EACvB,OAAO,EAAE,iBAAiB,EAAE;IAWvC,IAAI,CAAC,KAAK,EAAE,CAAC;IAKb,MAAM,CAAC,KAAK,EAAE,aAAa;IAM3B,OAAO;CAIV;AAGD,qBAAa,UAAW,SAAQ,KAAK;IAOtB,IAAI,EAAE,SAAS;IANnB,MAAM,EAAE,MAAM,CAAC,SAAS,EAAG,aAAa,CAAC,CAAA;IAChD,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,OAAO,CAAiC;gBAG5C,SAAS,EAAE,aAAa,EACjB,IAAI,EAAE,SAAS;IAW1B,MAAM,CAAC,KAAK,EAAE,aAAa;IAM3B,OAAO,CAAC,IAAI,EAAE,SAAS;CAI1B;AAGD,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,KAAK;IAG1B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IACvB,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC;IAC9C,OAAO,EAAE,iBAAiB,EAAE;gBAJnC,SAAS,EAAE,aAAa,EACjB,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EACvB,UAAU,EAAE,+BAA+B,CAAC,CAAC,CAAC,EAC9C,OAAO,EAAE,iBAAiB,EAAE;IAMvC,IAAI,CAAC,KAAK,EAAE,CAAC;IAKb,MAAM,CAAC,KAAK,EAAE,aAAa;IAM3B,OAAO;CAIV;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA"}
package/dist/query.js CHANGED
@@ -1,18 +1,26 @@
1
1
  import { Future } from "fluent-future";
2
- import { PostgresError } from "./error";
2
+ import { ErrQueryTimeout } from "./error";
3
3
  export const QueryState = {
4
4
  Parsing: 0,
5
- Describing: 1,
6
- Executing: 2,
7
- Completed: 3,
8
- Failed: 4
5
+ Executing: 1,
6
+ Completed: 2,
7
+ Failed: 3
9
8
  };
10
9
  export class Query {
11
- constructor(text, args, state, statementName, columns) {
10
+ constructor(statement) {
11
+ this.statement = statement;
12
+ }
13
+ startTimeout(timeout) {
14
+ this._timer = setTimeout(() => {
15
+ this.reject(ErrQueryTimeout);
16
+ }, timeout);
17
+ }
18
+ }
19
+ export class SimpleQuery extends Query {
20
+ constructor(statement, text, args, columns) {
21
+ super(statement);
12
22
  this.text = text;
13
23
  this.args = args;
14
- this.state = state;
15
- this.statementName = statementName;
16
24
  this.columns = columns;
17
25
  this._rows = [];
18
26
  const { future, reject, resolve } = Future.withResolvers();
@@ -20,14 +28,6 @@ export class Query {
20
28
  this._resolve = resolve;
21
29
  this._reject = reject;
22
30
  }
23
- startTimeout(timeout) {
24
- this._timer = setTimeout(() => {
25
- this.reject(new PostgresError('Query timeout', '57014'));
26
- }, timeout);
27
- }
28
- setState(state) {
29
- this.state = state;
30
- }
31
31
  push(value) {
32
32
  this._rows.push(value);
33
33
  }
@@ -40,32 +40,41 @@ export class Query {
40
40
  this._resolve(this._rows);
41
41
  }
42
42
  }
43
- export class StreamQuery {
44
- constructor(text, args, state, statementName, _controller, columns) {
43
+ export class ParseQuery extends Query {
44
+ constructor(statement, text) {
45
+ super(statement);
45
46
  this.text = text;
46
- this.args = args;
47
- this.state = state;
48
- this.statementName = statementName;
49
- this._controller = _controller;
50
- this.columns = columns;
47
+ const { future, reject, resolve } = Future.withResolvers();
48
+ this.future = future;
49
+ this._resolve = resolve;
50
+ this._reject = reject;
51
51
  }
52
- setState(state) {
53
- this.state = state;
52
+ reject(cause) {
53
+ clearTimeout(this._timer);
54
+ this._reject(cause);
54
55
  }
55
- startTimeout(timeout) {
56
- this._timer = setTimeout(() => {
57
- this.reject(new PostgresError('Query timeout', '57014'));
58
- }, timeout);
56
+ resolve(meta) {
57
+ clearTimeout(this._timer);
58
+ this._resolve(meta);
59
+ }
60
+ }
61
+ export class StreamQuery extends Query {
62
+ constructor(statement, text, args, controller, columns) {
63
+ super(statement);
64
+ this.text = text;
65
+ this.args = args;
66
+ this.controller = controller;
67
+ this.columns = columns;
59
68
  }
60
69
  push(value) {
61
- this._controller.enqueue(value);
70
+ this.controller.enqueue(value);
62
71
  }
63
72
  reject(cause) {
64
73
  clearTimeout(this._timer);
65
- this._controller.error(cause);
74
+ this.controller.error(cause);
66
75
  }
67
76
  resolve() {
68
77
  clearTimeout(this._timer);
69
- this._controller.close();
78
+ this.controller.close();
70
79
  }
71
80
  }
package/dist/queue.d.ts CHANGED
@@ -10,4 +10,21 @@ export declare class Queue<T> {
10
10
  get hasMore(): boolean;
11
11
  get isFree(): boolean;
12
12
  }
13
+ export declare class RingQueue<T> {
14
+ private readonly _queue;
15
+ private readonly _mask;
16
+ private _head;
17
+ private _tail;
18
+ private _size;
19
+ constructor(requestedCapacity?: number);
20
+ next(): void;
21
+ get current(): T;
22
+ get last(): T;
23
+ get shift(): T;
24
+ push(item: T): void;
25
+ get size(): number;
26
+ get hasMore(): boolean;
27
+ get isFree(): boolean;
28
+ get isFull(): boolean;
29
+ }
13
30
  //# sourceMappingURL=queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK,CAAC,CAAC;IAChB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAI;IAEpB,IAAI;IAcJ,IAAI,OAAO,MAEV;IAED,IAAI,IAAI,MAA+C;IAGvD,IAAI,KAAK,MAKR;IAGD,IAAI,CAAC,IAAI,EAAE,CAAC;IAIZ,IAAI,IAAI,WAEP;IAGD,IAAI,OAAO,YAEV;IAGD,IAAI,MAAM,YAA+C;CAC5D"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK,CAAC,CAAC;IAChB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAI;IAEpB,IAAI;IAUJ,IAAI,OAAO,MAEV;IAED,IAAI,IAAI,MAA+C;IAGvD,IAAI,KAAK,MAKR;IAGD,IAAI,CAAC,IAAI,EAAE,CAAC;IAIZ,IAAI,IAAI,WAEP;IAGD,IAAI,OAAO,YAEV;IAGD,IAAI,MAAM,YAA+C;CAC5D;AAID,qBAAa,SAAS,CAAC,CAAC;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAK;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAE9B,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,KAAK,CAAI;gBAEL,iBAAiB,SAAQ;IAOrC,IAAI;IAMJ,IAAI,OAAO,MAEV;IAED,IAAI,IAAI,MAEP;IAED,IAAI,KAAK,MAIR;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;IAMZ,IAAI,IAAI,WAEP;IAED,IAAI,OAAO,YAEV;IAED,IAAI,MAAM,YAET;IAED,IAAI,MAAM,YAET;CACJ"}
package/dist/queue.js CHANGED
@@ -4,11 +4,8 @@ export class Queue {
4
4
  this._pointer = 0;
5
5
  }
6
6
  next() {
7
+ this._queue[this._pointer] = undefined;
7
8
  this._pointer++;
8
- if (this._pointer > 10000) {
9
- this._queue.splice(0, this._pointer);
10
- this._pointer = 0;
11
- }
12
9
  if (this._pointer >= this._queue.length) {
13
10
  this._queue.length = 0;
14
11
  this._pointer = 0;
@@ -34,3 +31,46 @@ export class Queue {
34
31
  }
35
32
  get isFree() { return this._pointer >= this._queue.length; }
36
33
  }
34
+ export class RingQueue {
35
+ constructor(requestedCapacity = 20000) {
36
+ this._head = 0;
37
+ this._tail = 0;
38
+ this._size = 0;
39
+ const capacity = 2 ** Math.ceil(Math.log2(requestedCapacity));
40
+ this._queue = new Array();
41
+ this._mask = capacity - 1;
42
+ }
43
+ next() {
44
+ this._queue[this._head] = undefined;
45
+ this._head = (this._head + 1) & this._mask;
46
+ this._size--;
47
+ }
48
+ get current() {
49
+ return this._queue[this._head];
50
+ }
51
+ get last() {
52
+ return this._queue[(this._tail - 1) & this._mask];
53
+ }
54
+ get shift() {
55
+ const item = this.current;
56
+ this.next();
57
+ return item;
58
+ }
59
+ push(item) {
60
+ this._queue[this._tail] = item;
61
+ this._tail = (this._tail + 1) & this._mask;
62
+ this._size++;
63
+ }
64
+ get size() {
65
+ return this._size;
66
+ }
67
+ get hasMore() {
68
+ return this._size !== 0;
69
+ }
70
+ get isFree() {
71
+ return this._size === 0;
72
+ }
73
+ get isFull() {
74
+ return this._size === this._mask + 1;
75
+ }
76
+ }
@@ -17,11 +17,11 @@ export declare class Transaction {
17
17
  /**
18
18
  * Commits the current transaction.
19
19
  */
20
- commit(): Future<void, any>;
20
+ commit(): Future<Record<string, any>[], PostgresError>;
21
21
  /**
22
22
  * Rolls back the current transaction.
23
23
  */
24
- rollback(): Future<void, any>;
24
+ rollback(): Future<Record<string, any>[], PostgresError>;
25
25
  /**
26
26
  * Executes a query within the current transaction.
27
27
  */
@@ -36,6 +36,6 @@ export declare class Transaction {
36
36
  * if (error) throw new Error() // Only this insert rolls back
37
37
  * });
38
38
  */
39
- savepoint<T>(name: string, callback: (tx: Transaction) => Promise<T>): Future<T, Error>;
39
+ savepoint<T>(name: string, callback: (tx: Transaction) => Promise<T>): Future<T, unknown>;
40
40
  }
41
41
  //# sourceMappingURL=transaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEvC;;;GAGG;AACH,qBAAa,WAAW;IAIhB,QAAQ,CAAC,IAAI,EAAE,UAAU;IAH7B,OAAO,CAAC,UAAU,CAAiB;gBAGtB,IAAI,EAAE,UAAU;IAG7B;;OAEG;IACH,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACI,MAAM;IAQb;;OAEG;IACI,QAAQ;IAQf;;OAEG;IACI,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE;IAK3F;;;;;;;;;OASG;IACI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;CAWjG"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEvC;;;GAGG;AACH,qBAAa,WAAW;IAIhB,QAAQ,CAAC,IAAI,EAAE,UAAU;IAH7B,OAAO,CAAC,UAAU,CAAiB;gBAGtB,IAAI,EAAE,UAAU;IAG7B;;OAEG;IACH,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED,OAAO,CAAC,WAAW;IAMnB;;OAEG;IACI,MAAM;IAOb;;OAEG;IACI,QAAQ;IAOf;;OAEG;IACI,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE;IAK3F;;;;;;;;;OASG;IACI,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC;CAW9E"}
@@ -26,8 +26,7 @@ export class Transaction {
26
26
  commit() {
27
27
  this.checkActive();
28
28
  return this.conn.query `COMMIT`
29
- .tap(() => { this.isFinished = true; })
30
- .map(() => { });
29
+ .tap(() => this.isFinished = true);
31
30
  }
32
31
  /**
33
32
  * Rolls back the current transaction.
@@ -35,8 +34,7 @@ export class Transaction {
35
34
  rollback() {
36
35
  this.checkActive();
37
36
  return this.conn.query `ROLLBACK`
38
- .tap(() => { this.isFinished = true; })
39
- .map(() => { });
37
+ .tap(() => this.isFinished = true);
40
38
  }
41
39
  /**
42
40
  * Executes a query within the current transaction.
package/dist/types.d.ts CHANGED
@@ -9,7 +9,7 @@ export type CompiledSqlQuery = {
9
9
  args: (string | null)[];
10
10
  };
11
11
  export type ClauseStrategyParams = {
12
- text: string[];
12
+ text: string;
13
13
  args: any[];
14
14
  };
15
15
  export type CompileSQLParams = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,MAAM,MAAM,iBAAiB,CAAC,OAAO,SAAS,GAAG,EAAE,OAAO,SAAS,GAAG,EAAE,IAAI;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;CACpD,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;CAC3B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,CAAC;CACf,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,SAAS,EAAE,oBAAoB,CAAC;IAChC,IAAI,EAAE,GAAG,EAAE,CAAC;CACf,CAAA;AAGD,MAAM,MAAM,iBAAiB,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,WAAW,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG;IAAC,OAAO,EAAE,KAAK,CAAA;CAAC,CAAA;AAEpD,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,MAAM,MAAM,iBAAiB,CAAC,OAAO,SAAS,GAAG,EAAE,OAAO,SAAS,GAAG,EAAE,IAAI;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;CACpD,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;CAC3B,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;CACf,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,SAAS,EAAE,oBAAoB,CAAC;IAChC,IAAI,EAAE,GAAG,EAAE,CAAC;CACf,CAAA;AAGD,MAAM,MAAM,iBAAiB,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,WAAW,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG;IAAC,OAAO,EAAE,KAAK,CAAA;CAAC,CAAA;AAEpD,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA"}
@@ -1,3 +1,3 @@
1
- import { CompiledSqlQuery, CompileSQLParams } from "../types";
2
- export declare function compileSqlTemplate(params: Readonly<CompileSQLParams>, argOffset?: number): CompiledSqlQuery;
1
+ import { CompiledSqlQuery } from "../types";
2
+ export declare function compileSqlTemplate(templates: TemplateStringsArray, args: unknown[], argOffset?: number): CompiledSqlQuery;
3
3
  //# sourceMappingURL=template-compiler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-compiler.d.ts","sourceRoot":"","sources":["../../src/utils/template-compiler.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAInF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,SAAI,GAAG,gBAAgB,CA+BtG"}
1
+ {"version":3,"file":"template-compiler.d.ts","sourceRoot":"","sources":["../../src/utils/template-compiler.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAIjE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,oBAAoB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,SAAI,GAAG,gBAAgB,CAqCpH"}
@@ -1,15 +1,19 @@
1
1
  import { Clause } from "../clauses/abstract.clause";
2
- export function compileSqlTemplate(params, argOffset = 0) {
3
- const templateLength = params.templates.length;
2
+ const cache = new WeakMap();
3
+ export function compileSqlTemplate(templates, args, argOffset = 0) {
4
+ const cached = cache.get(templates);
5
+ if (cached)
6
+ return { args: args.map(prepareValue), text: cached };
7
+ const templateLength = templates.length;
4
8
  const query = {
5
- text: [],
9
+ text: '',
6
10
  args: [],
7
11
  };
8
- params.templates.forEach((template, index) => {
9
- query.text.push(template);
12
+ templates.forEach((template, index) => {
13
+ query.text += template;
10
14
  if (index === templateLength - 1)
11
15
  return;
12
- const value = params.args[index];
16
+ const value = args[index];
13
17
  if (value instanceof Clause) {
14
18
  value.mapIntoQuery(query);
15
19
  }
@@ -19,10 +23,11 @@ export function compileSqlTemplate(params, argOffset = 0) {
19
23
  Use null if you want NULL in SQL, or ensure the value is defined.`);
20
24
  }
21
25
  query.args.push(value);
22
- query.text.push(`$${query.args.length + argOffset}`);
26
+ query.text += `$${query.args.length + argOffset}`;
23
27
  }
24
28
  });
25
- return { args: query.args.map(prepareValue), text: query.text.join('') };
29
+ !args.some(value => value instanceof Clause) && cache.set(templates, query.text);
30
+ return { args: query.args.map(prepareValue), text: query.text };
26
31
  }
27
32
  const prepareValue = (value) => {
28
33
  if (value === null || value === undefined) {
@@ -54,7 +59,7 @@ const prepareValue = (value) => {
54
59
  }
55
60
  return prepareObject(value);
56
61
  }
57
- return value.toString();
62
+ return String(value);
58
63
  };
59
64
  const prepareObject = (obj) => {
60
65
  if (obj && typeof obj.toPG === 'function') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m2k-5f/pgtx",
3
- "version": "2.5.2",
3
+ "version": "2.6.0",
4
4
  "type": "module",
5
5
  "description": "Blazing-fast PostgreSQL driver with pipeline support.",
6
6
  "files": [
@@ -16,11 +16,13 @@
16
16
  },
17
17
  "repository": {
18
18
  "type": "git",
19
- "url": "git://github.com/M2K-5F/pgtx.git"
19
+ "url": "git://github.com/M2Kc-s4/pgtx.git"
20
20
  },
21
21
  "keywords": [
22
22
  "sql",
23
23
  "postgres",
24
+ "blazing",
25
+ "stream",
24
26
  "driver",
25
27
  "pipeline",
26
28
  "query-builder",
@@ -28,11 +30,11 @@
28
30
  "transactions",
29
31
  "prepared-statements"
30
32
  ],
31
- "author": "M2K-5F",
33
+ "author": "M2Kc-s4",
32
34
  "license": "MIT",
33
- "homepage": "https://github.com/M2K-5F/pgtx",
35
+ "homepage": "https://github.com/M2Kc-s4/pgtx",
34
36
  "bugs": {
35
- "url": "https://github.com/M2K-5F/pgtx/issues"
37
+ "url": "https://github.com/M2Kc-s4/pgtx/issues"
36
38
  },
37
39
  "exports": {
38
40
  ".": {
@@ -50,6 +52,6 @@
50
52
  "typescript": "^5.9.3"
51
53
  },
52
54
  "dependencies": {
53
- "fluent-future": "^1.4.1"
55
+ "fluent-future": "^1.5.0"
54
56
  }
55
57
  }