On Thursday, 28 May 2015 at 05:12:34 UTC, Vadim Lopatin wrote:
On Thursday, 28 May 2015 at 05:00:30 UTC, Rikki Cattermole
wrote:
On 28/05/2015 4:57 p.m., Robert burner Schadek wrote:
On Thursday, 28 May 2015 at 04:45:52 UTC, Erik Smith wrote:
Shouldn't the statement be reusable?
Yes it should. I added this use case:
auto stmt = con.statement("insert into table values(?,?)");
stmt.execute("a",1);
stmt.execute("b",2);
stmt.execute("c",3);
struct Table;
Table a, b, c;
con.insert!Table(a);
...
if you use CTFE to create the statement string there is no
reason to
reuse it.
it will be string literal, that's even better! Think Big.
Think D
the other code is Java not D
Then you open up table names, property serialization ext. ext.
Please no.
That is an ORM's job. I'm saying this from experience.
Similar project: DDBC https://github.com/buggins/ddbc
Inspired by Java JDBC API.
Currently supports MySQL, PostreSQL, SQLite.
Some time ago I tried a similar thing (not to build a library but
rather to learn D a bit), however I never had time to finish it.
A brief sample of the interface for my Result object:
1. Result's structure not known in advance
// execute simple query using connection c and assign results to r
auto r = c.execute("SELECT int_column, string_column FROM
Table;");
// output column names
writeln(r.names[0], "\t", r.names[1]);
// iterate thru result and output values for each row
for (; !r.empty; r.popFront()) {
writeln(r.front[0], "\t", r.front[1]);
}
2. Result's structure known in advance
// define Sample_Record struct (struct data types must conform to
column types from query)
struct Sample_Record {
int i;
string s;
}
// execute simple query using connection c and assign results to r
auto r = c.execute("SELECT int_column, string_column FROM
Table;");
// assign results to sample_record struct
auto sample_record = r.getRecord!(Sample_Record);
// output sample_record struct values
writeln(sample_record.i, "\t", sample_record.s);