Note that this code is actually broken :-\ I didn't take the time to either fix it or rip it out, but this at least improves matters slightly.
add rakefile with test and release tasks; add version file
Previously, we computed the minimum legal strata for each relation, and then placed every rule with that relation in its LHS in that strata. That is not incorrect, but it is unnecessarily conservative. Consider a program like: (r1) a <= b (r2) a <= c.group(...) (r3) c <= d Clearly, r2 can only be evaluated after c has been completely determined, but we needn't wait for c to be determined before evaluating r1. Hence, we can place r1 and r3 in stratum 0 and r2 in stratum 1. Along the way, add a new builtin relation, t_rule_stratum, that contains the stratum associated with each rule.
Code snippets in the guide are fixed to be same as in /examples/chat
Somewhat obscure, but arises in RSE/GC-generated code. Basic problem is that we only want to call setup_accessors once; for lefts/rights, we were calling it multiple times. Unclear why that mucked things up, but it was certainly wrong anyway. On examination, the code for assigning a schema to a pairs join is completely bogus anyway (see comment) -- but I won't fix that for now.
Try to avoid directly accessing BudCollection fields like @delta, @tick_delta from outside BudCollection.
Avoid a needless conjunction in a conditional.
If the collection has an empty set of key columns and a single tuple, we *cannot* assume that include?(t) is true for any t.
…n occurs within a dependency cycle. Fixes #321.
The previous coding was wrong -- in some cases, a cycle through negation was not detected correctly. This meant that some unstratifiable programs were not rejected (and instead we might produce incorrect results for them). Along the way, do some minor code cleanup.
Adjust TupleStruct#hash and #eql? so that we can use TupleStructs and Arrays interchangably in more places. In particular, we can now add TupleStructs to a Set and have the Set compare as equal to a Set that contains the same values represented as Arrays.