Datalog column references should not be resolved at compile-time
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
congress |
Fix Released
|
High
|
Tim Hinrichs |
Bug Description
Currently we resolve column-references in Datalog rules at compile time. For example, p(x) :- nova:servers(id=x) is translated into p(x) :- nova:servers(x, y0, y1, ..., yn) when the rule is read into memory. This is problematic because it assumes we know the schema for the 'nova' service at the time the rule is submitted. But 'nova' might be a service loaded *after* the rule is submitted, and until it is loaded we do not necessarily know which datasource driver class 'nova' references.
Resolving the rule at the time the datasource is loaded isn't great either since then we lose the ability to change the 'nova' service to a different class later. Not that we would necessarily want to do that, but it would be a source of confusion.
And eventually we would like to enable schemas to be declared in policy as well, in which case the user can change the schema at any time.
All told it makes sense to build column-references directly into the evaluation engine. This would require the Literal class, the safety checks, and the unifier to be aware of schemas.
Changed in congress: | |
status: | New → In Progress |
Changed in congress: | |
status: | In Progress → Fix Committed |
Changed in congress: | |
milestone: | none → kilo-3 |
status: | Fix Committed → Fix Released |