eslint-plugin-sql
eslint-plugin-sql copied to clipboard
Ensure that transaction is used the associated connection
Example,
const createReservation = async (
connection: DatabaseConnectionType,
sessionId: string,
userId?: number,
email?: string,
eventId,
seatIds: $ReadOnlyArray<number>,
ticketIds: $ReadOnlyArray<number>
): Promise<ReservationType> => {
return connection.transaction(async (transactionConnection) => {
const reservationFee = await getReservationFee(transactionConnection);
const {
id: reservationId
} = await transactionConnection.one(sql`INSERT INTO reservation (session_id, user_id, event_id, reservation_fee_id, email) VALUES (?, ?, ?, ?, ?) RETURNING id`, [
sessionId,
userId || null,
eventId,
reservationFee.id,
email || null
]);
await insertReservationSeats(transactionConnection, reservationId, seatIds);
await insertReservationTickets(transactionConnection, reservationId, ticketIds);
return getReservationByReservationId(transactionConnection, reservationId);
});
};
Here it is easy to mistakenly use connection instead of transactionConnection.
This rule is a bit broad and biased towards the https://github.com/gajus/mightyql. It might require a dedicated ESLint plugin.