It's hard to believe you expect the random order of SQL statements returned from a hash to remain acceptable for long. But rather than pick at details, I believe the greatest improvement would be to think about code design at the highest level. Consider organising your functionality into separate utility modules. I use a master-class module for methods I want to call from anywhere and a DB module for utilities that relate to databases and files. In this case you probably want a subclass called e.g. DB::Queue for managing a statement queue object and methods for appending, executing and transaction behavior (e.g. commit or rollback the lot) for these queues. It is rarely a good idea to build complex code that only services local blocks. Often you will be rewarded when generic code proves actually much easier to write and test.