Databases and the D Standard Library
Jacob Carlborg via Digitalmars-d
digitalmars-d at puremagic.com
Tue Jan 3 11:43:48 PST 2017
On 2017-01-03 18:13, Chris Wright wrote:
> The returned row data is mandatory, and its size can be much larger than
> the stack limit. (A MySQL MEDIUMBLOB field will likely break your stack
> limit.)
>
> I suppose you could have a streaming API for row data, one that has a
> stack-allocated buffer and returns slices of that:
>
> string fieldName;
> ubyte[] data;
> ubyte[][string] fields;
> db.query("SELECT * FROM USERS")
> // have to revisit this if a db allows large names
> .onFieldStart((fieldName) => field = fieldName)
> .onFieldData((fragment) => data ~= fragment)
> .onFieldEnd(() { fields[field] = data; data = null; })
> .onRowEnd(() => process(fields))
> .onResultsEnd!(() => writeln("done"))
> .exec();
>
> This looks pretty terrible, to be honest. I get this sort of thing from
> nodejs because it doesn't want to potentially block and also doesn't want
> to delay letting me process things, but the worst I get there is usually
> two callbacks.
>
> This would also result in more GC use for the majority of people who use
> the GC.
Look, I didn't say that using the GC should be completely forbidden. I
just said we should try to avoid it. For example, I've been using the
ddb Postgres driver [1]. It uses classes for most of its types, even if
it might not be necessary. Here's one example [2], unless there some
intention to have some form of higher level, DB independent, API on top
of this, I don't see a reason why that type needs to be a class.
>> 2. Buffers say nothing how they're allocated. With classes on the other
>> hand, you're basically forced to allocate with the GC
>
> You haven't looked at std.experimental.allocator, have you?
I know it's possible to allocate a class without the GC, hence the
"basically". I'm not sure how other write their code but at least I make
the assumption that all objects are allocated with the GC.
[1] https://github.com/pszturmaj/ddb
[2] https://github.com/pszturmaj/ddb/blob/master/source/ddb/postgres.d#L904
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list