code: protected final <T> T executeQuery(final String sql, final StatementWithReturnBlock<T> queryBlock) throws Exception {
          checkState(initialized);
  
          setupConnection();
          checkNotNull(connection);
          boolean committed = false;
          try {
              T returnValue = withStatement(connection, sql, queryBlock);
              connection.commit();
              committed = true;
              return returnValue;
          } finally {
              if (!committed) {
                  connection.rollback();
                  cleanupConnection();
              }
          }
      }
docs: FIXME (AG): both of these methods are extremely similar and should be consolidated