I don't like how this changes the calling convention compared to query-to-vec by mandating result-columns be passed in. I think it complects validation with execution of the query. Callers should know what columns to expect by the queries they're issuing, so I think validation is more properly handled there. A higher level of the stack is I think more appropriate for handling the exception thrown during validation, as well.