multithreading & sqlite

Jordan Wilson wilsonjord at gmail.com
Thu Jan 29 04:09:38 UTC 2026


On Wednesday, 28 January 2026 at 09:53:45 UTC, Lars Johansson 
wrote:
> In general programming with D has been a pleasent experience. 
> BUT templates, I do not get it.  Instead of having well defined 
> types, it seems you can have anyting with as!.

Consider `java/sql`, querying a `ResultSet`...you'd use 
`.getInt`, `.getString`, `.getFloat`, `.getDouble`...for 
`d2sqlite3`, it's `as!int`, `as!string`, `as!float`, `as!double`.


> And how do I know I should use e.g. 'as!quirky' in some special 
> case?
> Or are there a small set of well defined as! along with the 
> types?

 From a brief look at the source code, it seems like there are 
constraints:
```dlang
auto as(T)(T defaultValue = T.init)
         if (isBoolean!T || isNumeric!T || isSomeString!T)
```

This gives you an indication of what kind of values `T` can be.


If you wanted to deal with the whole row, you can also provide 
your own struct:

```dlang
T as(T)()
         if (is(T == struct))
```

 From the unittest:
```dlang
unittest
     {
         struct Item
         {
             int _id;
             string name;
         }

         auto db = Database(":memory:");
         db.run("CREATE TABLE items (name TEXT);
                 INSERT INTO items VALUES ('Light bulb')");

         auto results = db.execute("SELECT rowid AS id, name FROM 
items");
         auto row = results.front;
         auto thing = row.as!Item();

         assert(thing == Item(1, "Light bulb"));
     }
```

Generally, I find templates useful, although a little bit of a 
learning curve.

Jordan


More information about the Digitalmars-d-learn mailing list