pqb 0.73.0 → 0.73.2

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/index.mjs CHANGED
@@ -4206,15 +4206,67 @@ var TransactionAdapterClass = class {
4206
4206
  async transaction(asyncStorage, options, cb) {
4207
4207
  return transaction(asyncStorage, this.adapter, this.driverAdapter, this.client, options, cb, this);
4208
4208
  }
4209
- savepoint(name, cb) {
4210
- return this.driverAdapter.savepoint(this.client, (client) => {
4209
+ async savepoint(name, log, cb) {
4210
+ if (!log) return this.driverAdapter.savepoint(this.client, (client) => {
4211
4211
  this.client = client;
4212
4212
  }, name, cb);
4213
+ const savepointSql = { text: `SAVEPOINT "${name}"` };
4214
+ const savepointLogData = log.beforeQuery(savepointSql);
4215
+ let releaseSql;
4216
+ let releaseLogData;
4217
+ let rollbackSql;
4218
+ let rollbackLogData;
4219
+ let error;
4220
+ return this.driverAdapter.savepoint(this.client, (client) => {
4221
+ this.client = client;
4222
+ }, name, async () => {
4223
+ try {
4224
+ return await cb();
4225
+ } catch (err) {
4226
+ error = err;
4227
+ throw err;
4228
+ }
4229
+ }, () => log.afterQuery(savepointSql, savepointLogData), () => {
4230
+ releaseSql = { text: `RELEASE SAVEPOINT "${name}"` };
4231
+ releaseLogData = log.beforeQuery(releaseSql);
4232
+ }, () => log.afterQuery(releaseSql, releaseLogData), () => {
4233
+ rollbackSql = { text: `ROLLBACK TO SAVEPOINT "${name}"` };
4234
+ rollbackLogData = log.beforeQuery(rollbackSql);
4235
+ }, () => {
4236
+ if (error) log.onError(error, rollbackSql, rollbackLogData);
4237
+ });
4213
4238
  }
4214
- hackySavepoint(state, text, values, arraysMode) {
4215
- return this.driverAdapter.hackySavepoint(this.client, (client) => {
4239
+ hackySavepoint(state, text, values, arraysMode, log) {
4240
+ if (!log) return this.driverAdapter.hackySavepoint(this.client, (client) => {
4216
4241
  this.client = client;
4217
4242
  }, state, text, values, arraysMode);
4243
+ const savepointSql = { text: `SAVEPOINT "${state.name}"` };
4244
+ const savepointLogData = log.beforeQuery(savepointSql);
4245
+ let releaseSql;
4246
+ let releaseLogData;
4247
+ let rollbackSql;
4248
+ let rollbackLogData;
4249
+ let error;
4250
+ const result = this.driverAdapter.hackySavepoint(this.client, (client) => {
4251
+ this.client = client;
4252
+ }, state, text, values, arraysMode, () => log.afterQuery(savepointSql, savepointLogData), () => {
4253
+ releaseSql = { text: `RELEASE SAVEPOINT "${state.name}"` };
4254
+ releaseLogData = log.beforeQuery(releaseSql);
4255
+ }, () => log.afterQuery(releaseSql, releaseLogData), () => {
4256
+ rollbackSql = { text: `ROLLBACK TO SAVEPOINT "${state.name}"` };
4257
+ rollbackLogData = log.beforeQuery(rollbackSql);
4258
+ }, () => {
4259
+ if (error) log.onError(error, rollbackSql, rollbackLogData);
4260
+ });
4261
+ const activeSavepoint = state.activeSavepoint;
4262
+ if (activeSavepoint) {
4263
+ const rollback = activeSavepoint.rollback;
4264
+ activeSavepoint.rollback = async (err) => {
4265
+ error = err;
4266
+ return rollback.call(activeSavepoint, err);
4267
+ };
4268
+ }
4269
+ return result;
4218
4270
  }
4219
4271
  close() {
4220
4272
  return this.adapter.close();
@@ -4306,7 +4358,7 @@ const nestedTransaction = async (adapter, driverAdapter, transactionAdapter, cli
4306
4358
  const state = ctx.state;
4307
4359
  const parentRole = state?.transactionRole;
4308
4360
  const parentSetConfig = state?.transactionSetConfig;
4309
- const result = await transactionAdapter.savepoint(`t${transactionId}`, async () => {
4361
+ const result = await transactionAdapter.savepoint(`t${transactionId}`, options?.log, async () => {
4310
4362
  const setRoleSql = getSetRoleSql(parentRole, options);
4311
4363
  if (setRoleSql) driverAdapter.queryClient(client, setRoleSql);
4312
4364
  const setConfigSql = getSetConfigSql(parentSetConfig, options);
@@ -4734,7 +4786,7 @@ const then = async (q, adapter, state, beforeHooks, afterHooks, afterSaveHooks,
4734
4786
  if (query.autoPreparedStatements) sql.name = queriesNames[sql.text] || (queriesNames[sql.text] = (nameI++).toString(36));
4735
4787
  if (log) logData = log.beforeQuery(sql);
4736
4788
  const method = queryMethodByReturnType[tempReturnType];
4737
- queryResult = await execQuery(adapter, method, sql, startingSavepoint, releasingSavepoint, sqlSessionContextGetStateFromAsyncState(state));
4789
+ queryResult = await execQuery(adapter, method, sql, log, startingSavepoint, releasingSavepoint, sqlSessionContextGetStateFromAsyncState(state));
4738
4790
  const { runAfterQuery } = sql;
4739
4791
  if (log) {
4740
4792
  log.afterQuery(sql, logData);
@@ -4763,7 +4815,7 @@ const then = async (q, adapter, state, beforeHooks, afterHooks, afterSaveHooks,
4763
4815
  for (let i = 0; i <= last; i++) {
4764
4816
  sql = batch[i];
4765
4817
  if (log) logData = log.beforeQuery(sql);
4766
- const result = await execQuery(adapter, queryMethod, sql, i === 0 ? startingSavepoint : void 0, i === last ? releasingSavepoint : void 0, sqlSessionContextGetStateFromAsyncState(state));
4818
+ const result = await execQuery(adapter, queryMethod, sql, log, i === 0 ? startingSavepoint : void 0, i === last ? releasingSavepoint : void 0, sqlSessionContextGetStateFromAsyncState(state));
4767
4819
  if (queryResult) {
4768
4820
  queryResult.rowCount += result.rowCount;
4769
4821
  queryResult.rows.push(...result.rows);
@@ -4964,12 +5016,12 @@ const setCatchingSavepoint = (catchTrx) => {
4964
5016
  * it populates the response with empty objects,
4965
5017
  * because user might expect empty objects to be returned for an empty select.
4966
5018
  */
4967
- const execQuery = (adapter, method, sql, startingSavepoint, releasingSavepoint, sqlSessionState) => {
5019
+ const execQuery = (adapter, method, sql, log, startingSavepoint, releasingSavepoint, sqlSessionState) => {
4968
5020
  let promise;
4969
- if (startingSavepoint) if (releasingSavepoint) promise = startingSavepoint.transactionAdapter.savepoint(startingSavepoint.name, () => {
5021
+ if (startingSavepoint) if (releasingSavepoint) promise = startingSavepoint.transactionAdapter.savepoint(startingSavepoint.name, log, () => {
4970
5022
  return promise = adapter[method](sql.text, sql.values, sqlSessionState);
4971
5023
  });
4972
- else promise = startingSavepoint.transactionAdapter.hackySavepoint(startingSavepoint, sql.text, sql.values, method === "arrays");
5024
+ else promise = startingSavepoint.transactionAdapter.hackySavepoint(startingSavepoint, sql.text, sql.values, method === "arrays", log);
4973
5025
  else promise = adapter[method](sql.text, sql.values, sqlSessionState);
4974
5026
  if (!startingSavepoint && releasingSavepoint) promise = promise.then(async (res) => {
4975
5027
  await releasingSavepoint.activeSavepoint?.release();