On Thursday, 3 March 2016 at 01:49:22 UTC, Chris Wright wrote:
If you're trying to connect to a SQL database or a document database, as I'd expect for something called "std.database"

The thing is I strongly encourage to not reserve std.database for external database clients and even what is more limiting to SQL ones only.

, it's a pretty terrible API:
 * No index scans, lookups, or range queries.

Indexes can be supported by strings and CTFE, can't they?
e.g.
filter!q{item.elements.length < 10 && item.model == "Sport"}

 * No support for complex queries.

Not sure what you mean by complex queries. Also I think the API allows arbitrary complex queries.

 * No support for joins.

Can be done by @attributes or other linking functionality between DbCollections.

 * No support for projections.

You mean something like referring to part of the item's fields?
I see no problem here.

 * No support for transactions.
* If you add support for transactions, you'll crash all the time because the transactions got too large, thanks to the full table scan mentality.

Isn't it just the "index support" case?

* In your implementation, updates must bring every affected row over the
wire, then send back the modified row.

In my implementation there is no wire (that's why I call it embedded). However I thought we talk about API and not particular implementation. I don't see how this API excludes RPC. Query strings (e.g. SQL) can be provided in old fashioned way.

* Updates affect an entire row. If one process updates one field in a row and another one updates a different field, one of those writes gets
clobbered.

I think this is just a "must have" for any db engine. I don't see how it applies to the proposed API other than any implementation of db engine has to handle it properly.

When I say DbCollection should behave similar to an ordinal array I don't mean it should be an ordinal array.

* The API assumes a total ordering for each DbCollection. This is not valid.

I don't know what you mean here. Example would be good.

* If there are multiple rows that compare as equals, there's no way to
update only one of them in your implementation.
* In your implementation, updating one row is a ϴ(N) operation. It still costs ϴ(N) when the row you want to update is the first one in the collection.

I'm still not sure if you are referring to my implementation or hypothetical API. To be clear: my current implementation is still proof of concept and surly *unfinished*. And in case you refer to my implementation I plan to support O(1), O(log n) and O(n) access patterns with its "rights and duties".

Cheers,
Piotrek


Reply via email to