pqb 0.73.2 → 0.73.3
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.js +77 -73
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +77 -73
- package/dist/index.mjs.map +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/internal.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4124,6 +4124,81 @@ const getResetSetConfigSql = (parentSetConfig, options) => {
|
|
|
4124
4124
|
const setConfigSql = (key, value) => {
|
|
4125
4125
|
return `set_config('${key.replace(/'/g, "''")}', '${typeof value === "string" ? value.replace(/'/g, "''") : value === void 0 ? "" : value}', true)`;
|
|
4126
4126
|
};
|
|
4127
|
+
var Rollback = class extends Error {};
|
|
4128
|
+
const trxForTest = Symbol("trxForTest");
|
|
4129
|
+
const argToDb = (arg) => "$qb" in arg ? arg.$qb : arg;
|
|
4130
|
+
const testTransaction = {
|
|
4131
|
+
/**
|
|
4132
|
+
* Start a test transaction.
|
|
4133
|
+
* The returned promise is resolved immediately when transaction starts, not waiting for it to end.
|
|
4134
|
+
*
|
|
4135
|
+
* @param arg - ORM instance or a queryable instance (such as db.someTable).
|
|
4136
|
+
*/
|
|
4137
|
+
start(arg) {
|
|
4138
|
+
const db = argToDb(arg);
|
|
4139
|
+
const { asyncStorage } = db.internal;
|
|
4140
|
+
const { getStore } = asyncStorage;
|
|
4141
|
+
const { adapter } = db.baseQuery.q;
|
|
4142
|
+
const data = { adapter: {
|
|
4143
|
+
query: adapter.query,
|
|
4144
|
+
arrays: adapter.arrays,
|
|
4145
|
+
transaction: adapter.transaction
|
|
4146
|
+
} };
|
|
4147
|
+
(db.internal[trxForTest] ??= []).push(data);
|
|
4148
|
+
return new Promise((resolve) => {
|
|
4149
|
+
data.promise = db.transaction(() => {
|
|
4150
|
+
resolve();
|
|
4151
|
+
return new Promise((_, rej) => {
|
|
4152
|
+
const state = asyncStorage.getStore();
|
|
4153
|
+
db.internal.asyncStorage.getStore = () => state;
|
|
4154
|
+
const t = state?.transactionAdapter;
|
|
4155
|
+
if (t) {
|
|
4156
|
+
adapter.query = t.query.bind(t);
|
|
4157
|
+
adapter.arrays = t.arrays.bind(t);
|
|
4158
|
+
adapter.transaction = t.transaction.bind(t);
|
|
4159
|
+
state.testTransactionCount = state.testTransactionCount ? state.testTransactionCount + 1 : 1;
|
|
4160
|
+
}
|
|
4161
|
+
data.reject = rej;
|
|
4162
|
+
});
|
|
4163
|
+
}).catch((err) => {
|
|
4164
|
+
if (!(err instanceof Rollback)) throw err;
|
|
4165
|
+
}).finally(() => {
|
|
4166
|
+
const state = db.internal.asyncStorage.getStore();
|
|
4167
|
+
if (state?.testTransactionCount) state.testTransactionCount--;
|
|
4168
|
+
db.internal.asyncStorage.getStore = getStore;
|
|
4169
|
+
});
|
|
4170
|
+
});
|
|
4171
|
+
},
|
|
4172
|
+
/**
|
|
4173
|
+
* Rollback a test transaction.
|
|
4174
|
+
*
|
|
4175
|
+
* @param arg - the same ORM or query argument passed into the `testTransaction.start`.
|
|
4176
|
+
*/
|
|
4177
|
+
rollback(arg) {
|
|
4178
|
+
const db = argToDb(arg);
|
|
4179
|
+
const data = db.internal[trxForTest];
|
|
4180
|
+
const last = data?.pop();
|
|
4181
|
+
if (!last) return;
|
|
4182
|
+
if (!data?.length) Object.assign(db.baseQuery.q.adapter, last.adapter);
|
|
4183
|
+
last.reject?.(new Rollback());
|
|
4184
|
+
return last.promise;
|
|
4185
|
+
},
|
|
4186
|
+
/**
|
|
4187
|
+
* Will roll back the current `testTransaction` (won't have any effect if it was rolled back already),
|
|
4188
|
+
* and if there's no nested test transactions left, it will close the db connection.
|
|
4189
|
+
*
|
|
4190
|
+
* @param arg - the same ORM or query argument passed into the `testTransaction.start`.
|
|
4191
|
+
*/
|
|
4192
|
+
async close(arg) {
|
|
4193
|
+
const db = argToDb(arg);
|
|
4194
|
+
await this.rollback(db);
|
|
4195
|
+
if (db.internal[trxForTest]?.length === 0) return db.q.adapter.close();
|
|
4196
|
+
}
|
|
4197
|
+
};
|
|
4198
|
+
const logSavepointRollback = (log, error, rollbackSql, rollbackLogData) => {
|
|
4199
|
+
if (error instanceof Rollback) log.afterQuery(rollbackSql, rollbackLogData);
|
|
4200
|
+
else if (error) log.onError(error, rollbackSql, rollbackLogData);
|
|
4201
|
+
};
|
|
4127
4202
|
/**
|
|
4128
4203
|
* Shared runtime adapter orchestrator over a driver-specific adapter implementation.
|
|
4129
4204
|
*/
|
|
@@ -4256,7 +4331,7 @@ var TransactionAdapterClass = class {
|
|
|
4256
4331
|
rollbackSql = { text: `ROLLBACK TO SAVEPOINT "${name}"` };
|
|
4257
4332
|
rollbackLogData = log.beforeQuery(rollbackSql);
|
|
4258
4333
|
}, () => {
|
|
4259
|
-
|
|
4334
|
+
logSavepointRollback(log, error, rollbackSql, rollbackLogData);
|
|
4260
4335
|
});
|
|
4261
4336
|
}
|
|
4262
4337
|
hackySavepoint(state, text, values, arraysMode, log) {
|
|
@@ -4279,7 +4354,7 @@ var TransactionAdapterClass = class {
|
|
|
4279
4354
|
rollbackSql = { text: `ROLLBACK TO SAVEPOINT "${state.name}"` };
|
|
4280
4355
|
rollbackLogData = log.beforeQuery(rollbackSql);
|
|
4281
4356
|
}, () => {
|
|
4282
|
-
|
|
4357
|
+
logSavepointRollback(log, error, rollbackSql, rollbackLogData);
|
|
4283
4358
|
});
|
|
4284
4359
|
const activeSavepoint = state.activeSavepoint;
|
|
4285
4360
|
if (activeSavepoint) {
|
|
@@ -14585,77 +14660,6 @@ function copyTableData(query, arg) {
|
|
|
14585
14660
|
q.toSQL = () => makeCopySql(q, arg);
|
|
14586
14661
|
return q;
|
|
14587
14662
|
}
|
|
14588
|
-
var Rollback = class extends Error {};
|
|
14589
|
-
const trxForTest = Symbol("trxForTest");
|
|
14590
|
-
const argToDb = (arg) => "$qb" in arg ? arg.$qb : arg;
|
|
14591
|
-
const testTransaction = {
|
|
14592
|
-
/**
|
|
14593
|
-
* Start a test transaction.
|
|
14594
|
-
* The returned promise is resolved immediately when transaction starts, not waiting for it to end.
|
|
14595
|
-
*
|
|
14596
|
-
* @param arg - ORM instance or a queryable instance (such as db.someTable).
|
|
14597
|
-
*/
|
|
14598
|
-
start(arg) {
|
|
14599
|
-
const db = argToDb(arg);
|
|
14600
|
-
const { asyncStorage } = db.internal;
|
|
14601
|
-
const { getStore } = asyncStorage;
|
|
14602
|
-
const { adapter } = db.baseQuery.q;
|
|
14603
|
-
const data = { adapter: {
|
|
14604
|
-
query: adapter.query,
|
|
14605
|
-
arrays: adapter.arrays,
|
|
14606
|
-
transaction: adapter.transaction
|
|
14607
|
-
} };
|
|
14608
|
-
(db.internal[trxForTest] ??= []).push(data);
|
|
14609
|
-
return new Promise((resolve) => {
|
|
14610
|
-
data.promise = db.transaction(() => {
|
|
14611
|
-
resolve();
|
|
14612
|
-
return new Promise((_, rej) => {
|
|
14613
|
-
const state = asyncStorage.getStore();
|
|
14614
|
-
db.internal.asyncStorage.getStore = () => state;
|
|
14615
|
-
const t = state?.transactionAdapter;
|
|
14616
|
-
if (t) {
|
|
14617
|
-
adapter.query = t.query.bind(t);
|
|
14618
|
-
adapter.arrays = t.arrays.bind(t);
|
|
14619
|
-
adapter.transaction = t.transaction.bind(t);
|
|
14620
|
-
state.testTransactionCount = state.testTransactionCount ? state.testTransactionCount + 1 : 1;
|
|
14621
|
-
}
|
|
14622
|
-
data.reject = rej;
|
|
14623
|
-
});
|
|
14624
|
-
}).catch((err) => {
|
|
14625
|
-
if (!(err instanceof Rollback)) throw err;
|
|
14626
|
-
}).finally(() => {
|
|
14627
|
-
const state = db.internal.asyncStorage.getStore();
|
|
14628
|
-
if (state?.testTransactionCount) state.testTransactionCount--;
|
|
14629
|
-
db.internal.asyncStorage.getStore = getStore;
|
|
14630
|
-
});
|
|
14631
|
-
});
|
|
14632
|
-
},
|
|
14633
|
-
/**
|
|
14634
|
-
* Rollback a test transaction.
|
|
14635
|
-
*
|
|
14636
|
-
* @param arg - the same ORM or query argument passed into the `testTransaction.start`.
|
|
14637
|
-
*/
|
|
14638
|
-
rollback(arg) {
|
|
14639
|
-
const db = argToDb(arg);
|
|
14640
|
-
const data = db.internal[trxForTest];
|
|
14641
|
-
const last = data?.pop();
|
|
14642
|
-
if (!last) return;
|
|
14643
|
-
if (!data?.length) Object.assign(db.baseQuery.q.adapter, last.adapter);
|
|
14644
|
-
last.reject?.(new Rollback());
|
|
14645
|
-
return last.promise;
|
|
14646
|
-
},
|
|
14647
|
-
/**
|
|
14648
|
-
* Will roll back the current `testTransaction` (won't have any effect if it was rolled back already),
|
|
14649
|
-
* and if there's no nested test transactions left, it will close the db connection.
|
|
14650
|
-
*
|
|
14651
|
-
* @param arg - the same ORM or query argument passed into the `testTransaction.start`.
|
|
14652
|
-
*/
|
|
14653
|
-
async close(arg) {
|
|
14654
|
-
const db = argToDb(arg);
|
|
14655
|
-
await this.rollback(db);
|
|
14656
|
-
if (db.internal[trxForTest]?.length === 0) return db.q.adapter.close();
|
|
14657
|
-
}
|
|
14658
|
-
};
|
|
14659
14663
|
exports.AdapterClass = AdapterClass;
|
|
14660
14664
|
exports.ArrayColumn = ArrayColumn;
|
|
14661
14665
|
exports.BigIntColumn = BigIntColumn;
|