react-native-nitro-sqlite
Version:
Fast SQLite library for React Native built using Nitro Modules
64 lines (63 loc) • 2.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.transaction = void 0;
var _DatabaseQueue = require("../DatabaseQueue.js");
var _execute = require("./execute.js");
var _NitroSQLiteError = _interopRequireDefault(require("../NitroSQLiteError.js"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const transaction = async (dbName, transactionCallback, isExclusive = false) => {
(0, _DatabaseQueue.throwIfDatabaseIsNotOpen)(dbName);
let isFinished = false;
const executeOnTransaction = (query, params) => {
if (isFinished) {
throw new _NitroSQLiteError.default(`Cannot execute query on finalized transaction: ${dbName}`);
}
return (0, _execute.execute)(dbName, query, params);
};
const executeAsyncOnTransaction = (query, params) => {
if (isFinished) {
throw new _NitroSQLiteError.default(`Cannot execute query on finalized transaction: ${dbName}`);
}
return (0, _execute.executeAsync)(dbName, query, params);
};
const commit = () => {
if (isFinished) {
throw new _NitroSQLiteError.default(`Cannot execute commit on finalized transaction: ${dbName}`);
}
isFinished = true;
return (0, _execute.execute)(dbName, 'COMMIT');
};
const rollback = () => {
if (isFinished) {
throw new _NitroSQLiteError.default(`Cannot execute rollback on finalized transaction: ${dbName}`);
}
isFinished = true;
return (0, _execute.execute)(dbName, 'ROLLBACK');
};
return await (0, _DatabaseQueue.queueOperationAsync)(dbName, async () => {
try {
await (0, _execute.executeAsync)(dbName, isExclusive ? 'BEGIN EXCLUSIVE TRANSACTION' : 'BEGIN TRANSACTION');
const result = await transactionCallback({
commit,
execute: executeOnTransaction,
executeAsync: executeAsyncOnTransaction,
rollback
});
if (!isFinished) commit();
return result;
} catch (executionError) {
if (!isFinished) {
try {
rollback();
} catch (rollbackError) {
throw _NitroSQLiteError.default.fromError(rollbackError);
}
}
throw _NitroSQLiteError.default.fromError(executionError);
}
});
};
exports.transaction = transaction;
//# sourceMappingURL=transaction.js.map