<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body><div><div style="font-family: Calibri,sans-serif; font-size: 11pt;">Ok than it is ok :)</div></div><div dir="ltr"><hr><span style="font-family: Calibri,sans-serif; font-size: 11pt; font-weight: bold;">Od:</span><span style="font-family: Calibri,sans-serif; font-size: 11pt;"><a href="mailto:digitalmars-d@puremagic.com">Vadim Lopatin via Digitalmars-d</a></span><br><span style="font-family: Calibri,sans-serif; font-size: 11pt; font-weight: bold;">Odesláno:</span><span style="font-family: Calibri,sans-serif; font-size: 11pt;">‎3. ‎2. ‎2015 18:00</span><br><span style="font-family: Calibri,sans-serif; font-size: 11pt; font-weight: bold;">Komu:</span><span style="font-family: Calibri,sans-serif; font-size: 11pt;"><a href="mailto:digitalmars-d@puremagic.com">digitalmars-d@puremagic.com</a></span><br><span style="font-family: Calibri,sans-serif; font-size: 11pt; font-weight: bold;">Předmět:</span><span style="font-family: Calibri,sans-serif; font-size: 11pt;">Re: H1 2015 - db access support in Phobos</span><br><br></div>On Tuesday, 3 February 2015 at 15:30:42 UTC, Daniel Kozák wrote:<br>> V Tue, 03 Feb 2015 15:20:40 +0000<br>> Vadim Lopatin via Digitalmars-d <digitalmars-d@puremagic.com> <br>> napsáno:<br>><br>>> On Tuesday, 3 February 2015 at 14:41:02 UTC, Vadim Lopatin <br>>> wrote:<br>>> > On Tuesday, 3 February 2015 at 10:49:07 UTC, Robert burner<br>>> >> IMO writing:<br>>> >><br>>> >> foreach(it; db.select<User>("...")) {<br>>> >> }<br>>> >><br>>> >> is epic. you have entered std.(range|algorithm) land.<br>>> ><br>>> > Implemented in v0.2.17 for select.<br>>> ><br>>> > test:<br>>> ><br>>> >     auto ds = new ConnectionPoolDataSourceImpl(new <br>>> > SQLITEDriver(), "ddbctest.sqlite");<br>>> >     auto conn = ds.getConnection();<br>>> >     scope(exit) conn.close();<br>>> >     Statement stmt = conn.createStatement();<br>>> >     scope(exit) stmt.close();<br>>> >     // test data preparation<br>>> >     stmt.executeUpdate("DROP TABLE IF EXISTS user");<br>>> >     stmt.executeUpdate("CREATE TABLE user (id INTEGER <br>>> > PRIMARY KEY, name VARCHAR(255) NOT NULL, flags int null)");<br>>> >     stmt.executeUpdate(`INSERT INTO user (id, name, flags) <br>>> > VALUES (1, "John", 5), (2, "Andrei", 2), (3, "Walter", 2), <br>>> > (4, "Rikki", 3), (5, "Iain", 0), (6, "Robert", 1)`);<br>>> ><br>>> >     // our POD struct<br>>> >     struct User {<br>>> >         long id;<br>>> >         string name;<br>>> >         int flags;<br>>> >     }<br>>> ><br>>> >     // let's execute select and nump query result<br>>> >     foreach(user; stmt.select!User.where("id < <br>>> > 6").orderBy("name desc")) {<br>>> >         writeln("id:", user.id, " name:", user.name, " <br>>> > flags:", user.flags);<br>>> >     }<br>>> ><br>>> > Output is:<br>>> > ------------------<br>>> > id:3 name:Walter flags:2<br>>> > id:4 name:Rikki flags:3<br>>> > id:1 name:John flags:5<br>>> > id:5 name:Iain flags:0<br>>> > id:2 name:Andrei flags:2<br>>> > ------------------<br>>> > Where and orderBy are optional - without them always reads <br>>> > all rows in default order.<br>>> ><br>>> > Possible improvements: ability to specify field list to read <br>>> > only necessary fields.<br>>> <br>>> Update in v0.2.19: you can specify field list for select<br>>> <br>>>      writeln("reading all user table rows, but fetching only <br>>> id and name (you will see default value 0 in flags field)");<br>>>      foreach(ref e; stmt.select!(User, "id", "name")) {<br>>>          writeln("id:", e.id, " name:", e.name, " flags:", <br>>> e.flags);<br>>>      }<br>>> <br>>> output:<br>>> <br>>> reading all user table rows, but fetching only id and name <br>>> (you will see default value 0 in flags field)<br>>> id:1 name:John flags:0<br>>> id:2 name:Andrei flags:0<br>>> id:3 name:Walter flags:0<br>>> id:4 name:Rikki flags:0<br>>> id:5 name:Iain flags:0<br>>> id:6 name:Robert flags:0<br>>> <br>> This is dangerous zone, you shoud not do this ;-). In my work I <br>> have<br>> writen our ORM-like db layer which has this funcionality (mainly<br>> performance reasons) but if I can go back in time. I will be <br>> against<br>> such a misfeature.<br><br>It's not considered as a main API. It's not madatory to import <br>this module.<br>It's a set of helpers to simplify getting field values from <br>ResultSet into struct or tuple, or write to prepared statement <br>parameters, a kind of syntax sugar.<br><br>For ORM purposes, real ORM must be used.<br></body></html>