Ad Hoc Transactions in Web Applications: The Good, the Bad, and the Ugly