On 2013-11-11 23:22, Edward Diener wrote:
On 11/11/2013 4:51 PM, Roland Bock wrote:
On 2013-11-11 22:22, Edward Diener wrote:
On 11/11/2013 10:01 AM, Roland Bock wrote:
On 2013-11-11 15:36, Edward Diener wrote: [snip] With that said the idea of your library looks very interesting. I have always favored an SQL C++ library as one dealing with SQL syntaxes as templated C++ constructs via a DSEL rather than SQL strings of statements. The only downside to your library is that on-the-fly SQL queries based on run-time analysis of database table structure is impossible with such a design, so that I would suggest you also provide a way of generating an SQL string at run-time as a query, with all syntax checking of the string as an end-user responsibility.
Actually, you can build the query almost completely at runtime, already. There is the verbatim method for instance.
auto s = dynamic_select(db).dynamic_columns().dynamic_from(); ... const auto cake = sqlpp::verbatimsqlpp::text("cake"); s.add_column(cake).add_from(tab_bakery);
for (const auto& row : db.run(s)) { std::cout << row.at("cake") << std::endl; }
At the moment, I can think of the following limitations:
* You cannot use verbatim() as a table yet, but that extension would be almost trivial.
I am not sure what this means. The end-user has to be able to specify a table to be used in a valid SQL query, so a verbatim query must accept a table. But I suspect you mean something else.
Yeah, that was neither clear nor thought through. Sorry. What I should have written is: As of now, you cannot use strings in from(): auto s = dynamic_select(...).dynamic_from(); s.add_from("my_table"); // compile error today But I'll make that compile rather sooner than later.
* When used as an expression, verbatim() must represent exactly one expression.
That is fine. There is little need in practical code for creating more than one verbatim query and running it in multi-threaded code.
* All dynamic fields are returned as text representations, implicitly convertible to std::string
That is fine. Here since the end-user is doing on-the-fly run-time creation of queries it should be his responsibility of parsing the return data.
sqlpp11 would still do all the syntax checks, assuming that your verbatim strings are valid expressions (e.g. correct column names).
That would be great if it is not too much work for sqlpp11 ! Even without syntax checking for verbatim queries it is a worthwhile feature.
Hmm? I guess that wasn't clear enough as well. I meant: If you are using verbatim(), sqlpp11 assumes that you know what you are doing. It will not check those strings. But under the assumption, that the provided strings are correct, the EDSL will ensure that the overall syntax of the query will be OK. So you only have to worry about your verbatim strings. I will try to get some sleep now, and to write clearer sentences tomorrow :-) Regards, Roland