pipework 0.196.0 → 0.197.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.197.0
4
+
5
+ - **Faster: a collapsed `db.transaction()` under transaction isolation costs 2 harness round trips, down from 6 + k** (#763). With k settings changed in the block, the harness used to send each step as its own statement: a settings snapshot, `current_user`, `SAVEPOINT`, `RELEASE`, a second snapshot, and one `set_config` per changed setting. Now:
6
+ - opening is one query: `SAVEPOINT` and a single snapshot of the role and every known setting;
7
+ - closing is one query: `RELEASE` and every touched setting set back, plus the role if it was changed;
8
+ - an error is one query: `ROLLBACK TO` and `RELEASE`.
9
+
10
+ The semantics are unchanged. In pipework's own count, 8 transactions went from 64 harness statements to 16. Step-graph and job tests that open many transactions spend far less time waiting on the database.
11
+
3
12
  ## 0.196.0
4
13
 
5
14
  - **Added: an upload's `onRefuse` hook gets the route's `params` and `query`** (#762). They arrive as the handler gets them: parsed by the route's schema (transforms and coercions applied), or raw when the route has no schema. They are `null` when they fail it, because the file's refusal can come before the handler parses them.
@@ -1 +1 @@
1
- {"version":3,"file":"savepoints.d.ts","sourceRoot":"","sources":["../../src/test/savepoints.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAA;AACpC,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,oCAAoC,CAAA;AAMnG;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gCAAgC,CAAC,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CA8FlI"}
1
+ {"version":3,"file":"savepoints.d.ts","sourceRoot":"","sources":["../../src/test/savepoints.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAA;AACpC,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,oCAAoC,CAAA;AAKnG;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gCAAgC,CAAC,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CA+FlI"}
@@ -1,7 +1,6 @@
1
1
  import { AsyncLocalStorage } from 'node:async_hooks';
2
2
  import { PostgresJsTransaction } from '../data/query/postgres-js/index.js';
3
3
  import { throughErrorBoundary } from '../data/query/postgres-js/driver-error-boundary.js';
4
- import { sql } from '../data/query/index.js';
5
4
  /**
6
5
  * Makes `db.transaction(fn)` — and `transaction` on the handle `fn` receives,
7
6
  * to any depth — a SAVEPOINT on the transaction the harness already holds on
@@ -81,10 +80,12 @@ export function collapseTransactionsToSavepoints(db, client) {
81
80
  }
82
81
  block.open = false;
83
82
  };
83
+ // Each of the three steps below is one simple-protocol round trip on the
84
+ // raw client, so the harness adds no more than two per block.
85
+ const send = unsafe;
84
86
  const runSavepoint = async (fn, block, target) => {
85
87
  const name = `pw_${++counter}`;
86
- const before = await snapshot(db, known);
87
- await db.execute(sql.raw(`SAVEPOINT ${name}`));
88
+ const before = await openSavepoint(send, name, known);
88
89
  let result;
89
90
  try {
90
91
  const handle = new PostgresJsTransaction(target.dialect, target.session, undefined);
@@ -93,13 +94,11 @@ export function collapseTransactionsToSavepoints(db, client) {
93
94
  }
94
95
  catch (err) {
95
96
  await settleChildren(block);
96
- await db.execute(sql.raw(`ROLLBACK TO SAVEPOINT ${name}`));
97
- await db.execute(sql.raw(`RELEASE SAVEPOINT ${name}`));
97
+ await send(`ROLLBACK TO SAVEPOINT ${name}; RELEASE SAVEPOINT ${name}`);
98
98
  throw err;
99
99
  }
100
100
  await settleChildren(block);
101
- await db.execute(sql.raw(`RELEASE SAVEPOINT ${name}`));
102
- await restore(db, before, block);
101
+ await send(releaseAndRestore(name, before, block));
103
102
  return result;
104
103
  };
105
104
  wrap(db);
@@ -121,27 +120,28 @@ function settingNames(query, params) {
121
120
  names.push(set[1]);
122
121
  return names;
123
122
  }
124
- async function snapshot(db, names) {
125
- const settings = new Map();
126
- if (names.size > 0) {
127
- const list = [...names].map(n => `'${n}'`).join(', ');
128
- const rows = await db.execute(sql.raw(`SELECT n, current_setting(n, true) AS v FROM unnest(ARRAY[${list}]) AS n`));
129
- for (const row of rows)
130
- settings.set(String(row['n']), row['v'] ?? null);
131
- }
132
- const [who] = await db.execute(sql `SELECT current_user AS role`);
133
- return { settings, role: String(who?.['role']) };
123
+ const literal = (value) => `'${value.replaceAll("'", "''")}'`;
124
+ /** `SAVEPOINT name` and the snapshot of the known settings and the role, in one query. */
125
+ async function openSavepoint(send, name, names) {
126
+ const settings = names.size === 0
127
+ ? 'NULL'
128
+ : `(SELECT jsonb_object_agg(n, current_setting(n, true)) FROM unnest(ARRAY[${[...names].map(literal).join(', ')}]::text[]) AS n)`;
129
+ // postgres.js answers a multi-statement simple query with one result per statement.
130
+ const results = await send(`SAVEPOINT ${name}; SELECT current_user AS role, ${settings} AS settings`);
131
+ const row = results[1]?.[0];
132
+ const values = (row?.['settings'] ?? {});
133
+ return { settings: new Map(Object.entries(values)), role: String(row?.['role']) };
134
134
  }
135
- async function restore(db, before, block) {
136
- const after = await snapshot(db, block.touched);
137
- for (const [name, value] of after.settings) {
135
+ /** `RELEASE SAVEPOINT name`, then every touched setting and a touched role set back, in one query. */
136
+ function releaseAndRestore(name, before, block) {
137
+ let query = `RELEASE SAVEPOINT ${name}`;
138
+ if (block.touched.size > 0) {
138
139
  // A setting first seen inside the savepoint was unset before it.
139
- const was = before.settings.get(name) ?? '';
140
- if ((value ?? '') !== was)
141
- await db.execute(sql `SELECT set_config(${name}, ${was}, true)`);
142
- }
143
- if (block.roleTouched && after.role !== before.role) {
144
- await db.execute(sql.raw(`SET LOCAL ROLE "${before.role.replaceAll('"', '""')}"`));
140
+ const calls = [...block.touched].map(n => `set_config(${literal(n)}, ${literal(before.settings.get(n) ?? '')}, true)`);
141
+ query += `; SELECT ${calls.join(', ')}`;
145
142
  }
143
+ if (block.roleTouched)
144
+ query += `; SET LOCAL ROLE "${before.role.replaceAll('"', '""')}"`;
145
+ return query;
146
146
  }
147
147
  //# sourceMappingURL=savepoints.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"savepoints.js","sourceRoot":"","sources":["../../src/test/savepoints.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"savepoints.js","sourceRoot":"","sources":["../../src/test/savepoints.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pipework",
3
- "version": "0.196.0",
3
+ "version": "0.197.0",
4
4
  "description": "TypeScript framework for multi-tenant SaaS applications. PostgreSQL-only.",
5
5
  "type": "module",
6
6
  "license": "MIT",