@m2k-5f/pgtx 1.3.11 → 1.4.1

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 (54) hide show
  1. package/README.md +55 -17
  2. package/dist/clauses/abstract.clause.d.ts +5 -0
  3. package/dist/clauses/abstract.clause.d.ts.map +1 -0
  4. package/dist/clauses/abstract.clause.js +6 -0
  5. package/dist/clauses/array.clause.d.ts +5 -5
  6. package/dist/clauses/array.clause.d.ts.map +1 -1
  7. package/dist/clauses/array.clause.js +15 -19
  8. package/dist/clauses/empty.clause.d.ts +3 -3
  9. package/dist/clauses/empty.clause.d.ts.map +1 -1
  10. package/dist/clauses/empty.clause.js +4 -6
  11. package/dist/clauses/exclude.clause.d.ts +5 -5
  12. package/dist/clauses/exclude.clause.d.ts.map +1 -1
  13. package/dist/clauses/exclude.clause.js +8 -9
  14. package/dist/clauses/fragment.clause.d.ts +7 -7
  15. package/dist/clauses/fragment.clause.d.ts.map +1 -1
  16. package/dist/clauses/fragment.clause.js +17 -11
  17. package/dist/clauses/iden.caluse.d.ts +4 -4
  18. package/dist/clauses/iden.caluse.d.ts.map +1 -1
  19. package/dist/clauses/iden.caluse.js +9 -13
  20. package/dist/clauses/insert.clause.d.ts +4 -4
  21. package/dist/clauses/insert.clause.d.ts.map +1 -1
  22. package/dist/clauses/insert.clause.js +21 -24
  23. package/dist/clauses/literal.clause.d.ts +4 -4
  24. package/dist/clauses/literal.clause.d.ts.map +1 -1
  25. package/dist/clauses/literal.clause.js +9 -10
  26. package/dist/clauses/update.clause.d.ts +4 -4
  27. package/dist/clauses/update.clause.d.ts.map +1 -1
  28. package/dist/clauses/update.clause.js +12 -13
  29. package/dist/clauses/where.clause.d.ts +3 -3
  30. package/dist/clauses/where.clause.d.ts.map +1 -1
  31. package/dist/clauses/where.clause.js +9 -9
  32. package/dist/connection.d.ts +1 -1
  33. package/dist/connection.d.ts.map +1 -1
  34. package/dist/connection.js +7 -14
  35. package/dist/index.d.ts +16 -16
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +15 -15
  38. package/dist/pool.d.ts +1 -1
  39. package/dist/pool.d.ts.map +1 -1
  40. package/dist/pool.js +2 -19
  41. package/dist/prepared.statement.d.ts +17 -0
  42. package/dist/prepared.statement.d.ts.map +1 -0
  43. package/dist/prepared.statement.js +41 -0
  44. package/dist/query.cacher.d.ts +2 -2
  45. package/dist/query.cacher.d.ts.map +1 -1
  46. package/dist/query.cacher.js +7 -7
  47. package/dist/transaction.d.ts.map +1 -1
  48. package/dist/transaction.js +3 -3
  49. package/dist/types.d.ts +15 -0
  50. package/dist/types.d.ts.map +1 -1
  51. package/dist/utils.d.ts +2 -6
  52. package/dist/utils.d.ts.map +1 -1
  53. package/dist/utils.js +17 -18
  54. package/package.json +48 -39
@@ -1,9 +1,9 @@
1
- import { Clause } from "./base.clause";
2
- import { CompiledSqlQuery } from "../utils";
1
+ import { Clause } from "./abstract.clause";
2
+ import { ClauseStrategyParams } from "../types";
3
3
  export declare class WhereClause<T extends Record<string, any>> extends Clause {
4
4
  private _value;
5
5
  constructor(_value: T);
6
6
  static create<T extends Record<string, any>>(whereMap: T): WhereClause<T>;
7
- map(argCounter: number): CompiledSqlQuery;
7
+ mapIntoQuery(params: ClauseStrategyParams): void;
8
8
  }
9
9
  //# sourceMappingURL=where.clause.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"where.clause.d.ts","sourceRoot":"","sources":["../../src/clauses/where.clause.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAE,SAAQ,MAAM;IAE9D,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,CAAC;WAGP,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;IAItD,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB;CAcrD"}
1
+ {"version":3,"file":"where.clause.d.ts","sourceRoot":"","sources":["../../src/clauses/where.clause.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEhD,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAE,SAAQ,MAAM;IAE9D,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,CAAC;WAGP,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;IAItD,YAAY,CAAC,MAAM,EAAE,oBAAoB;CAYrD"}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WhereClause = void 0;
4
- const base_clause_1 = require("./base.clause");
5
- class WhereClause extends base_clause_1.Clause {
4
+ const abstract_clause_1 = require("./abstract.clause");
5
+ class WhereClause extends abstract_clause_1.Clause {
6
6
  constructor(_value) {
7
7
  super();
8
8
  this._value = _value;
@@ -10,16 +10,16 @@ class WhereClause extends base_clause_1.Clause {
10
10
  static create(whereMap) {
11
11
  return new WhereClause(whereMap);
12
12
  }
13
- map(argCounter) {
14
- const args = [];
13
+ mapIntoQuery(params) {
15
14
  const entries = Object.entries(this._value).filter(([_, value]) => value !== undefined);
16
15
  if (entries.length === 0)
17
16
  throw new Error('Where clause has no data to update. All values are `undefined`');
18
- const text = entries.map(([key, value]) => {
19
- args.push(value);
20
- return `${key} = $${argCounter++}`;
21
- }).join(' AND ');
22
- return { text, args, argCounter };
17
+ entries.forEach(([key, value], index) => {
18
+ if (index)
19
+ params.text.push(' AND ');
20
+ params.args.push(value);
21
+ params.text.push(`${key} = $${params.counter++}`);
22
+ });
23
23
  }
24
24
  }
25
25
  exports.WhereClause = WhereClause;
@@ -22,7 +22,7 @@ export declare class Connection {
22
22
  * const stmt = await conn.prepare('get_user', 'SELECT * FROM users WHERE id = ?');
23
23
  * const rows = await stmt.execute(1);
24
24
  */
25
- prepare<TResult extends QueryResultRow = any, TParams extends any[] = any[]>(name: string, sqlTemplate: string): Promise<PreparedStatement<TResult, TParams>>;
25
+ prepare<TResult extends QueryResultRow, TParams extends any[] = []>(name: string, sqlTemplate: string): Promise<PreparedStatement<TResult, TParams>>;
26
26
  /**
27
27
  * Releases the connection back to the pool.
28
28
  * The connection cannot be used after this call.
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,IAAI,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAK3C;;;GAGG;AACH,qBAAa,UAAU;IAIf,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ/B,OAAO,CAAC,UAAU,CAAiB;gBAGd,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,OAAO;IAGxC;;OAEG;IACH,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED;;;;;;;OAOG;IACU,OAAO,CAAC,OAAO,SAAS,cAAc,GAAG,GAAG,EAAE,OAAO,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EACpF,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAoB/C;;;OAGG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrC,OAAO,CAAC,WAAW;IAMnB;;;;;;OAMG;IACU,KAAK,CAAC,CAAC,SAAS,cAAc,GAAG,GAAG,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAcjH;;;;;;;;OAQG;IACU,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAmB/E"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,IAAI,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAM3C;;;GAGG;AACH,qBAAa,UAAU;IAIf,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ/B,OAAO,CAAC,UAAU,CAAiB;gBAGd,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,OAAO;IAGxC;;OAEG;IACH,IAAW,QAAQ,IAAI,OAAO,CAE7B;IAED;;;;;;;OAOG;IACU,OAAO,CAAC,OAAO,SAAS,cAAc,EAAE,OAAO,SAAS,GAAG,EAAE,GAAG,EAAE,EAC3E,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAY/C;;;OAGG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrC,OAAO,CAAC,WAAW;IAMnB;;;;;;OAMG;IACU,KAAK,CAAC,CAAC,SAAS,cAAc,GAAG,GAAG,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAkBjH;;;;;;;;OAQG;IACU,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAmB/E"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Connection = void 0;
4
4
  const transaction_1 = require("./transaction");
5
5
  const query_cacher_1 = require("./query.cacher");
6
+ const prepared_statement_1 = require("./prepared.statement");
6
7
  const cacher = new query_cacher_1.QueryCacher();
7
8
  /**
8
9
  * Represents a single dedicated connection to the database.
@@ -31,19 +32,7 @@ class Connection {
31
32
  async prepare(name, sqlTemplate) {
32
33
  let index = 1;
33
34
  const text = sqlTemplate.replace(/\?/g, () => `$${index++}`);
34
- return {
35
- text: text,
36
- name: name,
37
- execute: async (...args) => {
38
- this.checkActive();
39
- const result = await this.client.query({
40
- name,
41
- text,
42
- values: args
43
- });
44
- return result.rows;
45
- }
46
- };
35
+ return new prepared_statement_1.ConnPraparedStatement(this.client, text, name);
47
36
  }
48
37
  /**
49
38
  * Releases the connection back to the pool.
@@ -69,7 +58,11 @@ class Connection {
69
58
  */
70
59
  async query(strings, ...values) {
71
60
  this.checkActive();
72
- const { text, args } = cacher.cachedBuild(strings, values, 1);
61
+ const { text, args } = cacher.cachedBuild({
62
+ templates: strings,
63
+ args: values,
64
+ counter: 1
65
+ });
73
66
  if (this.enableLogs) {
74
67
  console.log(`\nQUERY: ${text}\n${args.length ? `ARGUMENTS: [${args}]\n` : ""}`);
75
68
  }
package/dist/index.d.ts CHANGED
@@ -1,15 +1,15 @@
1
- import { arrayClause } from "./clauses/array.clause";
2
- import { fragmentClause } from "./clauses/fragment.clause";
3
- import { identClause } from "./clauses/iden.caluse";
4
1
  import { Pool as PgtxPool } from "./pool";
5
- import { literalClause } from "./clauses/literal.clause";
6
- import { updateClause } from "./clauses/update.clause";
7
- import { insertClause } from "./clauses/insert.clause";
8
- import { Connection } from "./connection";
9
- import { Transaction } from "./transaction";
10
- import { excludeClause } from "./clauses/exclude.clause";
11
2
  import { EmptyClause } from "./clauses/empty.clause";
12
3
  import { WhereClause } from "./clauses/where.clause";
4
+ import { InsertClause } from "./clauses/insert.clause";
5
+ import { UpdateClause } from "./clauses/update.clause";
6
+ import { ExcludeUpdateClause } from "./clauses/exclude.clause";
7
+ import { IdentifierClause } from "./clauses/iden.caluse";
8
+ import { LiteralClause } from "./clauses/literal.clause";
9
+ import { FragmentClause } from "./clauses/fragment.clause";
10
+ import { ArrayClause } from "./clauses/array.clause";
11
+ import { Connection } from "./connection";
12
+ import { Transaction } from "./transaction";
13
13
  /**
14
14
  * Core SQL tagging utility for Pgtx.
15
15
  * Provides type-safe helpers for building dynamic queries with recursive support.
@@ -27,7 +27,7 @@ export declare const sql: {
27
27
  * sql.insert([{ id: 1 }, { id: 2 }])
28
28
  * // Result: (id) VALUES ($1), ($2)
29
29
  */
30
- insert: typeof insertClause;
30
+ insert: typeof InsertClause.create;
31
31
  /**
32
32
  * Generates a SET clause for UPDATE queries from a JavaScript object.
33
33
  *
@@ -35,7 +35,7 @@ export declare const sql: {
35
35
  * sql.update({ status: 'active', updated_at: new Date() })
36
36
  * // Result: status = $1, updated_at = $2
37
37
  */
38
- update: typeof updateClause;
38
+ update: typeof UpdateClause.create;
39
39
  /**
40
40
  * Generates an assignment list for ON CONFLICT DO UPDATE using the EXCLUDED table.
41
41
  *
@@ -43,7 +43,7 @@ export declare const sql: {
43
43
  * sql`INSERT INTO users ${sql.insert(data)} ON CONFLICT (id) DO UPDATE SET ${sql.excluded(['name', 'email'])}`
44
44
  * // Result: name = EXCLUDED.name, email = EXCLUDED.email
45
45
  */
46
- excluded: typeof excludeClause;
46
+ excluded: typeof ExcludeUpdateClause.create;
47
47
  /**
48
48
  * Represents a safe empty SQL fragment.
49
49
  * Useful for dynamic query building when a condition or list might be optional.
@@ -78,7 +78,7 @@ export declare const sql: {
78
78
  * sql.ident('table.column')
79
79
  * // Result: "table.column"
80
80
  */
81
- ident: typeof identClause;
81
+ ident: typeof IdentifierClause.create;
82
82
  /**
83
83
  * Injects raw, unescaped SQL strings.
84
84
  * ⚠️ Use with caution to prevent SQL injection!
@@ -87,7 +87,7 @@ export declare const sql: {
87
87
  * sql.literal('DESC')
88
88
  * // Result: DESC
89
89
  */
90
- literal: typeof literalClause;
90
+ literal: typeof LiteralClause.create;
91
91
  /**
92
92
  * Creates a reusable, recursive SQL fragment.
93
93
  * Fragments can be nested within each other; argument numbering is handled automatically.
@@ -97,7 +97,7 @@ export declare const sql: {
97
97
  * sql`SELECT * FROM users WHERE ${filter} AND status = ${'active'}`
98
98
  * // Result: SELECT * FROM users WHERE age > $1 AND status = $2
99
99
  */
100
- fragment: typeof fragmentClause;
100
+ fragment: typeof FragmentClause.create;
101
101
  /**
102
102
  * Formats an array for dynamic lists (IN clauses, column lists, or joined conditions).
103
103
  * Supports recursive Clauses (fragments, idents) within the array.
@@ -118,7 +118,7 @@ export declare const sql: {
118
118
  * sql`SELECT ${sql.array([sql.ident('id'), sql.ident('name')])}`
119
119
  * // Result: SELECT "id", "name"
120
120
  */
121
- array: typeof arrayClause;
121
+ array: typeof ArrayClause.create;
122
122
  };
123
123
  /**
124
124
  * Main Pgtx Connection Pool.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAuB,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAe,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD;;;GAGG;AACH,eAAO,MAAM,GAAG;IACZ;;;;;;;;;;;OAWG;;IAGH;;;;;;OAMG;;IAGH;;;;;;OAMG;;IAGH;;;;;;;;OAQG;;IAGH;;;;;;;;;;;KAWC;;IAGD;;;;;;;;;;OAUG;;IAGH;;;;;;;OAOG;;IAGH;;;;;;;;OAQG;;IAGH;;;;;;;;;;;;;;;;;;;OAmBG;;CAEN,CAAA;AAGD;;;GAGG;AAEH,OAAO,EAAC,UAAU,IAAI,UAAU,EAAC,CAAA;AAEjC,OAAO,EAAC,WAAW,IAAI,WAAW,EAAC,CAAA;AAEnC,OAAO,EAAE,QAAQ,IAAI,IAAI,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAe,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,GAAG;IACZ;;;;;;;;;;;OAWG;;IAGH;;;;;;OAMG;;IAGH;;;;;;OAMG;;IAGH;;;;;;;;OAQG;;IAGH;;;;;;;;;;;KAWC;;IAGD;;;;;;;;;;OAUG;;IAGH;;;;;;;OAOG;;IAGH;;;;;;;;OAQG;;IAGH;;;;;;;;;;;;;;;;;;;OAmBG;;CAEN,CAAA;AAGD;;;GAGG;AAEH,OAAO,EAAC,UAAU,IAAI,UAAU,EAAC,CAAA;AAEjC,OAAO,EAAC,WAAW,IAAI,WAAW,EAAC,CAAA;AAEnC,OAAO,EAAE,QAAQ,IAAI,IAAI,EAAE,CAAA"}
package/dist/index.js CHANGED
@@ -1,21 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Pool = exports.Transaction = exports.Connection = exports.sql = void 0;
4
- const array_clause_1 = require("./clauses/array.clause");
5
- const fragment_clause_1 = require("./clauses/fragment.clause");
6
- const iden_caluse_1 = require("./clauses/iden.caluse");
7
4
  const pool_1 = require("./pool");
8
5
  Object.defineProperty(exports, "Pool", { enumerable: true, get: function () { return pool_1.Pool; } });
9
- const literal_clause_1 = require("./clauses/literal.clause");
10
- const update_clause_1 = require("./clauses/update.clause");
6
+ const empty_clause_1 = require("./clauses/empty.clause");
7
+ const where_clause_1 = require("./clauses/where.clause");
11
8
  const insert_clause_1 = require("./clauses/insert.clause");
9
+ const update_clause_1 = require("./clauses/update.clause");
10
+ const exclude_clause_1 = require("./clauses/exclude.clause");
11
+ const iden_caluse_1 = require("./clauses/iden.caluse");
12
+ const literal_clause_1 = require("./clauses/literal.clause");
13
+ const fragment_clause_1 = require("./clauses/fragment.clause");
14
+ const array_clause_1 = require("./clauses/array.clause");
12
15
  const connection_1 = require("./connection");
13
16
  Object.defineProperty(exports, "Connection", { enumerable: true, get: function () { return connection_1.Connection; } });
14
17
  const transaction_1 = require("./transaction");
15
18
  Object.defineProperty(exports, "Transaction", { enumerable: true, get: function () { return transaction_1.Transaction; } });
16
- const exclude_clause_1 = require("./clauses/exclude.clause");
17
- const empty_clause_1 = require("./clauses/empty.clause");
18
- const where_clause_1 = require("./clauses/where.clause");
19
19
  /**
20
20
  * Core SQL tagging utility for Pgtx.
21
21
  * Provides type-safe helpers for building dynamic queries with recursive support.
@@ -33,7 +33,7 @@ exports.sql = {
33
33
  * sql.insert([{ id: 1 }, { id: 2 }])
34
34
  * // Result: (id) VALUES ($1), ($2)
35
35
  */
36
- insert: insert_clause_1.insertClause,
36
+ insert: insert_clause_1.InsertClause.create,
37
37
  /**
38
38
  * Generates a SET clause for UPDATE queries from a JavaScript object.
39
39
  *
@@ -41,7 +41,7 @@ exports.sql = {
41
41
  * sql.update({ status: 'active', updated_at: new Date() })
42
42
  * // Result: status = $1, updated_at = $2
43
43
  */
44
- update: update_clause_1.updateClause,
44
+ update: update_clause_1.UpdateClause.create,
45
45
  /**
46
46
  * Generates an assignment list for ON CONFLICT DO UPDATE using the EXCLUDED table.
47
47
  *
@@ -49,7 +49,7 @@ exports.sql = {
49
49
  * sql`INSERT INTO users ${sql.insert(data)} ON CONFLICT (id) DO UPDATE SET ${sql.excluded(['name', 'email'])}`
50
50
  * // Result: name = EXCLUDED.name, email = EXCLUDED.email
51
51
  */
52
- excluded: exclude_clause_1.excludeClause,
52
+ excluded: exclude_clause_1.ExcludeUpdateClause.create,
53
53
  /**
54
54
  * Represents a safe empty SQL fragment.
55
55
  * Useful for dynamic query building when a condition or list might be optional.
@@ -84,7 +84,7 @@ exports.sql = {
84
84
  * sql.ident('table.column')
85
85
  * // Result: "table.column"
86
86
  */
87
- ident: iden_caluse_1.identClause,
87
+ ident: iden_caluse_1.IdentifierClause.create,
88
88
  /**
89
89
  * Injects raw, unescaped SQL strings.
90
90
  * ⚠️ Use with caution to prevent SQL injection!
@@ -93,7 +93,7 @@ exports.sql = {
93
93
  * sql.literal('DESC')
94
94
  * // Result: DESC
95
95
  */
96
- literal: literal_clause_1.literalClause,
96
+ literal: literal_clause_1.LiteralClause.create,
97
97
  /**
98
98
  * Creates a reusable, recursive SQL fragment.
99
99
  * Fragments can be nested within each other; argument numbering is handled automatically.
@@ -103,7 +103,7 @@ exports.sql = {
103
103
  * sql`SELECT * FROM users WHERE ${filter} AND status = ${'active'}`
104
104
  * // Result: SELECT * FROM users WHERE age > $1 AND status = $2
105
105
  */
106
- fragment: fragment_clause_1.fragmentClause,
106
+ fragment: fragment_clause_1.FragmentClause.create,
107
107
  /**
108
108
  * Formats an array for dynamic lists (IN clauses, column lists, or joined conditions).
109
109
  * Supports recursive Clauses (fragments, idents) within the array.
@@ -124,5 +124,5 @@ exports.sql = {
124
124
  * sql`SELECT ${sql.array([sql.ident('id'), sql.ident('name')])}`
125
125
  * // Result: SELECT "id", "name"
126
126
  */
127
- array: array_clause_1.arrayClause,
127
+ array: array_clause_1.ArrayClause.create,
128
128
  };
package/dist/pool.d.ts CHANGED
@@ -27,7 +27,7 @@ export declare class Pool {
27
27
  * const stmt = await pool.prepare<User, [string]>('get_user', 'SELECT * FROM users WHERE email = ?');
28
28
  * const users = await stmt.execute('test@example.com');
29
29
  */
30
- prepare<TResult extends QueryResultRow = any, TParams extends any[] = any[]>(name: string, sqlTemplate: string): Promise<PreparedStatement<TResult, TParams>>;
30
+ prepare<TResult extends QueryResultRow, TParams extends any[] = []>(name: string, sqlTemplate: string): Promise<PreparedStatement<TResult, TParams>>;
31
31
  /**
32
32
  * Acquires a dedicated connection from the pool.
33
33
  * **Note:** You must call `connection.release()` manually when finished.
@@ -1 +1 @@
1
- {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAC,MAAM,IAAI,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C;;;GAGG;AACH,qBAAa,IAAI;IACb,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,UAAU,CAAS;gBAGvB,MAAM,EAAE,UAAU;IAMtB;;;;;;OAMG;IACU,KAAK,CAAC,CAAC,SAAS,cAAc,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE;IAc5F;;;;;;;;OAQG;IACU,OAAO,CAAC,OAAO,SAAS,cAAc,GAAG,GAAG,EAAE,OAAO,SAAS,GAAG,EAAE,GAAG,GAAG,EAAE,EACpF,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAyB/C;;;OAGG;IACU,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;IAK3C;;;;;;;;;OASG;IACU,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAc5E;;OAEG;IACH,IAAW,KAAK;;;;MAMf;IAED;;OAEG;IACI,KAAK;CAGf"}
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAC,MAAM,IAAI,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAG3C;;;GAGG;AACH,qBAAa,IAAI;IACb,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,UAAU,CAAS;gBAGvB,MAAM,EAAE,UAAU;IAMtB;;;;;;OAMG;IACU,KAAK,CAAC,CAAC,SAAS,cAAc,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE;IAc5F;;;;;;;;OAQG;IACU,OAAO,CAAC,OAAO,SAAS,cAAc,EAAE,OAAO,SAAS,GAAG,EAAE,GAAG,EAAE,EAC3E,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAY/C;;;OAGG;IACU,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;IAK3C;;;;;;;;;OASG;IACU,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAc5E;;OAEG;IACH,IAAW,KAAK;;;;MAMf;IAED;;OAEG;IACI,KAAK;CAGf"}
package/dist/pool.js CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Pool = void 0;
4
4
  const pg_1 = require("pg");
5
5
  const connection_1 = require("./connection");
6
+ const prepared_statement_1 = require("./prepared.statement");
6
7
  /**
7
8
  * The main entry point for Pgtx.
8
9
  * Manages a connection pool and provides high-level API for queries and transactions.
@@ -43,25 +44,7 @@ class Pool {
43
44
  async prepare(name, sqlTemplate) {
44
45
  let index = 1;
45
46
  const text = sqlTemplate.replace(/\?/g, () => `$${index++}`);
46
- return {
47
- text,
48
- name,
49
- execute: async (...args) => {
50
- const conn = await this.acquire();
51
- conn['checkActive']();
52
- try {
53
- const result = await conn['client'].query({
54
- name,
55
- text,
56
- values: args
57
- });
58
- return result.rows;
59
- }
60
- finally {
61
- conn.release();
62
- }
63
- }
64
- };
47
+ return new prepared_statement_1.PoolPreparedStatement(this.pool, text, name);
65
48
  }
66
49
  /**
67
50
  * Acquires a dedicated connection from the pool.
@@ -0,0 +1,17 @@
1
+ import { PoolClient, Pool, QueryResultRow } from "pg";
2
+ import { PreparedStatement } from "./types";
3
+ export declare class ConnPraparedStatement<Result extends QueryResultRow, Args extends any[]> {
4
+ private readonly conn;
5
+ readonly text: string;
6
+ readonly name: string;
7
+ constructor(conn: PoolClient, text: string, name: string);
8
+ execute(...params: Args): Promise<Result[]>;
9
+ }
10
+ export declare class PoolPreparedStatement<Result extends QueryResultRow, Args extends any[]> implements PreparedStatement<Result, Args> {
11
+ private readonly pool;
12
+ readonly text: string;
13
+ readonly name: string;
14
+ constructor(pool: Pool, text: string, name: string);
15
+ execute(...params: Args): Promise<Result[]>;
16
+ }
17
+ //# sourceMappingURL=prepared.statement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepared.statement.d.ts","sourceRoot":"","sources":["../src/prepared.statement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,qBAAa,qBAAqB,CAAC,MAAM,SAAS,cAAc,EAAE,IAAI,SAAS,GAAG,EAAE;IAE5E,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAFJ,IAAI,EAAE,UAAU,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM;IAGnB,OAAO,CAAC,GAAG,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAQpD;AAED,qBAAa,qBAAqB,CAAC,MAAM,SAAS,cAAc,EAAE,IAAI,SAAS,GAAG,EAAE,CAAE,YAAW,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC;IAExH,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAFJ,IAAI,EAAE,IAAI,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM;IAGnB,OAAO,CAAC,GAAG,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAepD"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PoolPreparedStatement = exports.ConnPraparedStatement = void 0;
4
+ class ConnPraparedStatement {
5
+ constructor(conn, text, name) {
6
+ this.conn = conn;
7
+ this.text = text;
8
+ this.name = name;
9
+ }
10
+ async execute(...params) {
11
+ return this.conn.query({
12
+ text: this.text,
13
+ name: this.name,
14
+ values: params
15
+ })
16
+ .then(result => result.rows);
17
+ }
18
+ }
19
+ exports.ConnPraparedStatement = ConnPraparedStatement;
20
+ class PoolPreparedStatement {
21
+ constructor(pool, text, name) {
22
+ this.pool = pool;
23
+ this.text = text;
24
+ this.name = name;
25
+ }
26
+ async execute(...params) {
27
+ const conn = await this.pool.connect();
28
+ try {
29
+ return await conn.query({
30
+ text: this.text,
31
+ name: this.name,
32
+ values: params
33
+ })
34
+ .then(result => result.rows);
35
+ }
36
+ finally {
37
+ conn.release();
38
+ }
39
+ }
40
+ }
41
+ exports.PoolPreparedStatement = PoolPreparedStatement;
@@ -1,6 +1,6 @@
1
- import { CompiledSqlQuery } from "./utils";
1
+ import { CompiledSqlQuery, CompileSQLParams } from "./types";
2
2
  export declare class QueryCacher {
3
3
  private readonly cache;
4
- cachedBuild(strings: TemplateStringsArray, values: any[], argCounter: number): CompiledSqlQuery;
4
+ cachedBuild(params: CompileSQLParams): CompiledSqlQuery;
5
5
  }
6
6
  //# sourceMappingURL=query.cacher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.cacher.d.ts","sourceRoot":"","sources":["../src/query.cacher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,SAAS,CAAC;AAG/D,qBAAa,WAAW;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyE;IAExF,WAAW,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB;CAezG"}
1
+ {"version":3,"file":"query.cacher.d.ts","sourceRoot":"","sources":["../src/query.cacher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAI7D,qBAAa,WAAW;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyE;IAExF,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB;CAgBjE"}
@@ -1,21 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.QueryCacher = void 0;
4
- const base_clause_1 = require("./clauses/base.clause");
4
+ const abstract_clause_1 = require("./clauses/abstract.clause");
5
5
  const utils_1 = require("./utils");
6
6
  class QueryCacher {
7
7
  constructor() {
8
8
  this.cache = new WeakMap();
9
9
  }
10
- cachedBuild(strings, values, argCounter) {
11
- const cached = this.cache.get(strings);
10
+ cachedBuild(params) {
11
+ const cached = this.cache.get(params.templates);
12
12
  if (cached?.isStatic) {
13
- return { text: cached.text, args: values, argCounter };
13
+ return { text: cached.text, args: params.args, counter: params.counter };
14
14
  }
15
- const result = (0, utils_1.compileSqlTemplate)(strings, values, 1);
15
+ const result = (0, utils_1.compileSqlTemplate)(params);
16
16
  if (!cached) {
17
- const isStatic = !values.some(value => value instanceof base_clause_1.Clause);
18
- this.cache.set(strings, { text: result.text, isStatic });
17
+ const isStatic = !params.args.some(value => value instanceof abstract_clause_1.Clause);
18
+ this.cache.set(params.templates, { text: result.text, isStatic });
19
19
  }
20
20
  return result;
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAIzC;;;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;IACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtC;;OAEG;IACU,KAAK,CAAC,CAAC,SAAS,cAAc,GAAG,GAAG,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAKjH;;;;;;;;;OASG;IACU,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;CAe5G"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../src/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAGzC;;;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;IACU,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC;;OAEG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtC;;OAEG;IACU,KAAK,CAAC,CAAC,SAAS,cAAc,GAAG,GAAG,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAKjH;;;;;;;;;OASG;IACU,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;CAe5G"}
@@ -57,14 +57,14 @@ class Transaction {
57
57
  */
58
58
  async savepoint(name, callback) {
59
59
  this.checkActive();
60
- await this.conn.query `SAVEPOINT ${(0, iden_caluse_1.identClause)(name)}`;
60
+ await this.conn.query `SAVEPOINT ${iden_caluse_1.IdentifierClause.create(name)}`;
61
61
  try {
62
62
  await callback(this);
63
- await this.conn.query `RELEASE SAVEPOINT ${(0, iden_caluse_1.identClause)(name)}`;
63
+ await this.conn.query `RELEASE SAVEPOINT ${iden_caluse_1.IdentifierClause.create(name)}`;
64
64
  return null;
65
65
  }
66
66
  catch (err) {
67
- await this.conn.query `ROLLBACK TO SAVEPOINT ${(0, iden_caluse_1.identClause)(name)}`;
67
+ await this.conn.query `ROLLBACK TO SAVEPOINT ${iden_caluse_1.IdentifierClause.create(name)}`;
68
68
  return err instanceof Error ? err : new Error(String(err));
69
69
  }
70
70
  }
package/dist/types.d.ts CHANGED
@@ -7,4 +7,19 @@ export type PreparedStatement<TResult extends any, Tparams extends any[]> = {
7
7
  name: string;
8
8
  execute: (...args: Tparams) => Promise<TResult[]>;
9
9
  };
10
+ export type CompiledSqlQuery = {
11
+ text: string;
12
+ args: any[];
13
+ counter: number;
14
+ };
15
+ export type ClauseStrategyParams = {
16
+ text: string[];
17
+ args: any[];
18
+ counter: number;
19
+ };
20
+ export type CompileSQLParams = {
21
+ templates: TemplateStringsArray;
22
+ args: any[];
23
+ counter: number;
24
+ };
10
25
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,IAAI,CAAA;AAE/C,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAC,CAAA;AAE9D,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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,YAAY,EAAE,MAAM,IAAI,CAAA;AAE/C,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAC,CAAA;AAE9D,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,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IAC/B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,SAAS,EAAE,oBAAoB,CAAC;IAChC,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,MAAM,CAAA;CAClB,CAAA"}
package/dist/utils.d.ts CHANGED
@@ -1,7 +1,3 @@
1
- export type CompiledSqlQuery = {
2
- text: string;
3
- args: any[];
4
- argCounter: number;
5
- };
6
- export declare function compileSqlTemplate(strings: TemplateStringsArray, values: any[], argCounter: number): CompiledSqlQuery;
1
+ import { CompiledSqlQuery, CompileSQLParams } from "./types";
2
+ export declare function compileSqlTemplate(params: Readonly<CompileSQLParams>): CompiledSqlQuery;
7
3
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,UAAU,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAgCrH"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAIlF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAgCvF"}
package/dist/utils.js CHANGED
@@ -1,31 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.compileSqlTemplate = compileSqlTemplate;
4
- const base_clause_1 = require("./clauses/base.clause");
5
- function compileSqlTemplate(strings, values, argCounter) {
6
- const templateLength = strings.length;
7
- let text = '';
8
- let args = [];
9
- strings.forEach((template, index) => {
10
- text += template;
4
+ const abstract_clause_1 = require("./clauses/abstract.clause");
5
+ function compileSqlTemplate(params) {
6
+ const templateLength = params.templates.length;
7
+ const query = {
8
+ text: [],
9
+ args: [],
10
+ counter: params.counter
11
+ };
12
+ params.templates.forEach((template, index) => {
13
+ query.text.push(template);
11
14
  if (index === templateLength - 1)
12
15
  return;
13
- const value = values[index];
14
- if (value instanceof base_clause_1.Clause) {
15
- const result = value.map(argCounter);
16
- argCounter = result.argCounter;
17
- text += result.text;
18
- args.push(...result.args);
16
+ const value = params.args[index];
17
+ if (value instanceof abstract_clause_1.Clause) {
18
+ value.mapIntoQuery(query);
19
19
  }
20
20
  else {
21
21
  if (value === undefined) {
22
- throw new TypeError(`Query parameter at position ${argCounter} is undefined.
22
+ throw new TypeError(`Query parameter at position ${query.counter} is undefined.
23
23
  Use null if you want NULL in SQL, or ensure the value is defined.`);
24
24
  }
25
- args.push(value);
26
- text += `$${argCounter}`;
27
- argCounter++;
25
+ query.args.push(value);
26
+ query.text.push(`$${query.counter++}`);
28
27
  }
29
28
  });
30
- return { text, args, argCounter };
29
+ return { ...query, text: query.text.join('') };
31
30
  }