In the previous versions, we exposed the Query as public. The detailed rationale behind that decision is provided in this issue #250
We might also refactor the constructors as public instead of protected. There is no compeling reason why they should be protected. On the other hand, having them public would benefit the consumers in certain scenarios.