As a query is built the query object should in in different variant states and the query methods should limit their input based upon these variants. * I think this will have to use polymorphic variants.