eslint-plugin-sql icon indicating copy to clipboard operation
eslint-plugin-sql copied to clipboard

Ensure that transaction is used the associated connection

Open gajus opened this issue 8 years ago • 0 comments

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.

gajus avatar Jun 06 '17 14:06 gajus