ribelo / doxa

The Unlicense
232 stars 8 forks source link

dx/q support for runtime queries #5

Closed stevebuik closed 3 years ago

stevebuik commented 3 years ago

this works

(dx/q [:find ?e :where [?e :name ?t]] db)

=> lots of results

but this does not

(dx/q '[:find ?e :where [?e :name ?t]] db)

-> []

This means that I cannot pass a query at composed runtime to dx/q and this limits the query power a lot.

I noticed that dx/q is a macro (vs pull which is not) so maybe that's the reason why.

Can the quoted version be supported?

ribelo commented 3 years ago

Currently, even if this can be done, it will work very slowly. Doxa uses a meander underneath, which builds queries during compilation. There is also meander.interpeter which runs on runetime, but the problem is that its performance is not satisfactory.

It would be possible to drop the meander, but that would require writing joins from scratch, the rest is up to fairly simple, but fast joins are difficult.

stevebuik commented 3 years ago

I thought that might be the reason. that's ok, I can work around this in my apps.

I can understand that you would rather let meander do the heavy lifting.

It might be worth mentioning this limitation in the docs.

stevebuik commented 3 years ago

closing for now