Hey folks,
I've been following the spec and have put together an implementation of the select-stmt production for a database system we've developed internally where I work. So far things are working just fine, but I do have some concerns. In particular, I'm wondering how much work you intend to do to define semantics in certain troublesome areas where "NoSQL" (and SQL) database systems tend to disagree.
Let me start with an example from the spec website (the "UPSERT" example):
UPDATE abc SET abc.n=abc.n+1 WHERE
abc.page=="/page/one"
ELSE INSERT {page:"/page/one", n: 1, create_time: 1234567};
Already, the semantics of this operation make some tacit assumptions about the isolation level and the consistency model of the database system. And already, the syntax is not expressive enough to provide all of the necessary information for systems like Cassandra that rely on client-provided logical clocks and operation idempotence as part of their consistency model.
I'd be happy to go into more detail, but first I was wondering whether you _care_ to define this sort of thing. Ultimately, I think something will have to bridge this gap for a universal query mechanism to be useful. But it doesn't seem to be an easily solvable problem. Meijer's work with LINQ may provide a starting point for bridging the data models, but it does not address the distinctions between consensus protocols, global serialization (or lack thereof), consistency model, isolation model, etc.
Anyways, my biggest concern is that these issues are ignored completely. If they're explicitly left ambiguous and implementation defined that's fine (I guess), but it would be a shame if UnQL painted implementations into a corner conceptually by making the same sorts of subtle assumptions that SQL does about these issues.
Mike