2 biggish things, the transaction stuff is now a counting semaphore, so if I manually start a transaction, and then call set(), the transaction_stop in set won't commit the transaction before I'm ready to end it, every call to transaction_start() increments the count but transaction_fail() will fail everything. I also added some logging, so you can configure a logger and get interface information like the queries that are ran