We should just have one method for the public interface. We can have a protected method like `do_query` that the subclasses implement.