Duckalog is a Datalog engine built on DuckDB.
Currently only usable as a Rust library; there is no parser.
The language is 100% vanilla Datalog. There are no datatypes, no negation, no aggregation. Relations are not declared separately from their uses. Facts are part of the program, they are simply rules with empty bodies.
-
DuckDB and SQLite backends
- Dynamic join order (query planning)
- Indices
- Join algorithms
-
Semi-naïve evaluation
-
That's it!
See the issue tracker.
- Syntax
- Aggregation
- Negation
- Datatypes, built-in functions
- Duckalog is like Duckegg, but the focus is on supporting moderately performant (semi-naïve) evaluation, rather than experimenting with e-graphs.
- Duckalog is to DuckDB what RecStep is to QuickStep---though Duckalog is currently much less optimized.
- Duckalog is much simpler and less fully-featured than Soufflé, and likely way slower. Duckalog only has an interpreter, not a compiler.
- Unlike Ascent, Duckalog is an interpreter. Duckalog is also probably way slower, and certainly less featureful.
- Duckalog is meant to be run on a single node, unlike BigDatalog, Distributed SociaLite, etc.
- Duckalog is open source, unlike LogicBlox.
- I don't understand DataFrog enough to draw a comparison
Not yet!
To provide a hackable platform for experimentation!