
Jean-Louis Leroy wrote:
They have this in common : the query is expressed as SQL text (à la Boost.Regex) that is parsed at run time instead of using language constructs (à la Boost.Xpressive) that can be checked at compile time. This is error prone : you can pass illegal SQL ; and the returned values will incur runtime typecasting, which may fail at run time in case of mismatch.
While I agree this is indeed a great feature, I don't think it is a necessary one for the first version of a library. Indeed, once you have the necessary features to send requests as strings, you can build this on top of these as a SQL request string generator. Also, a great thing with such a feature that you didn't mention would be the ability of writing portable requests instead of having to rely on specific SQL extensions, since the request could be analyzed and generate different SQL depending on the backend.