Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Origins + more test suite passing #7

Merged
merged 47 commits into from
Mar 29, 2024
Merged
Changes from 1 commit
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
190fd93
WIP
malcolmstill Mar 19, 2024
ec48aff
Working test001
malcolmstill Mar 19, 2024
bb0942f
Initial parser
malcolmstill Mar 19, 2024
525d888
Fix parameter name
malcolmstill Mar 20, 2024
40880e4
More illuminating name
malcolmstill Mar 21, 2024
d876d4c
WIP parser
malcolmstill Mar 23, 2024
10432f2
WIP parser
malcolmstill Mar 23, 2024
e7dc323
WIP parser
malcolmstill Mar 23, 2024
7e07bf5
Test 010 passes
malcolmstill Mar 23, 2024
185e678
Test 012 passes
malcolmstill Mar 23, 2024
521bbb9
Test 022 works
malcolmstill Mar 23, 2024
04da1de
Convert bytes and set
malcolmstill Mar 23, 2024
fad0623
Some RFC 3339 support
malcolmstill Mar 24, 2024
7acf870
WIP date
malcolmstill Mar 24, 2024
9d44302
WIP expressions
malcolmstill Mar 24, 2024
59011f7
WIP expression parser
malcolmstill Mar 24, 2024
f5c7dc1
Working expression parse
malcolmstill Mar 24, 2024
b17b962
Fix
malcolmstill Mar 24, 2024
9faa7d8
WIP
malcolmstill Mar 24, 2024
e36ccc6
WIP
malcolmstill Mar 25, 2024
0df1e74
WIP
malcolmstill Mar 25, 2024
e19e375
RuleSet / FactSet
malcolmstill Mar 25, 2024
3d061f8
Trusted facts compiles but does not work
malcolmstill Mar 25, 2024
2524056
Still not working
malcolmstill Mar 26, 2024
9f9fa9d
WIP
malcolmstill Mar 26, 2024
1959667
Fixed iterator (need to be pointers to FactSet, not FactSet by value)…
malcolmstill Mar 26, 2024
ec38967
WIP
malcolmstill Mar 26, 2024
2fd0b47
WIP
malcolmstill Mar 26, 2024
bb37f8c
I have a feeling we shouldn't think about TrustedOrigins as containin…
malcolmstill Mar 26, 2024
283109b
Fix Term.convert
malcolmstill Mar 26, 2024
710f96c
Rule.findMatch: evalute expressions where rule has no body predicates
malcolmstill Mar 26, 2024
9cb5ba4
Parse external key out of block
malcolmstill Mar 26, 2024
d1d7f3b
Verify external signature
malcolmstill Mar 26, 2024
a92c5b0
Test 027 passes
malcolmstill Mar 26, 2024
25ea0f0
More scope stuff
malcolmstill Mar 27, 2024
0aa6dd0
Test 024 third pary works
malcolmstill Mar 28, 2024
fd7aed5
Fix test 025
malcolmstill Mar 28, 2024
3b29527
Partial fix fo r test 026
malcolmstill Mar 28, 2024
286621b
Implement policies / builder expression conversion
malcolmstill Mar 28, 2024
b029049
Fix parser + working test 026...this required some additional mapping…
malcolmstill Mar 28, 2024
5ca2107
Depend on zig-regex + working test 014
malcolmstill Mar 28, 2024
270e63c
Concat
malcolmstill Mar 28, 2024
460f826
Update the samples...eveything now works apart from test 018
malcolmstill Mar 28, 2024
a5a06c0
Latest samples.json + required sample.zig changes
malcolmstill Mar 28, 2024
26028a7
Yay, test018 passes...all the tests pass!
malcolmstill Mar 28, 2024
f8bb0f3
Fix double free
malcolmstill Mar 28, 2024
58cfd30
Let's get all module tests running again
malcolmstill Mar 28, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
WIP
malcolmstill committed Mar 24, 2024
commit 9faa7d82feb6a1bec6ec08d1410e27aab4987dfa
41 changes: 24 additions & 17 deletions biscuit-datalog/src/combinator.zig
Original file line number Diff line number Diff line change
@@ -90,22 +90,6 @@ pub const Combinator = struct {
// Return from next combinator until expended
if (combinator.next_combinator) |c| {
if (try c.next()) |vars| {
const complete_vars = try vars.complete(combinator.allocator) orelse continue :blk;

for (combinator.expressions) |expr| {
std.debug.print("Evaluating {any}\n", .{expr});
const result = try expr.evaluate(combinator.allocator, complete_vars, combinator.symbols);

switch (result) {
.bool => |b| if (b) {
continue;
} else {
continue :blk;
},
else => continue :blk,
}
}

return vars;
} else {
c.deinit();
@@ -141,11 +125,34 @@ pub const Combinator = struct {
const next_predicates = combinator.predicates[1..];

if (next_predicates.len == 0) {
const complete_vars = try vars.complete(combinator.allocator) orelse continue :blk;

for (combinator.expressions) |expr| {
const result = try expr.evaluate(combinator.allocator, complete_vars, combinator.symbols);

switch (result) {
.bool => |b| if (b) {
continue;
} else {
continue :blk;
},
else => continue :blk,
}
}

return vars;
} else {
if (combinator.next_combinator) |c| c.deinit();

combinator.next_combinator = try Combinator.init(combinator.id + 1, combinator.allocator, vars, next_predicates, combinator.expressions, combinator.facts, combinator.symbols);
combinator.next_combinator = try Combinator.init(
combinator.id + 1,
combinator.allocator,
vars,
next_predicates,
combinator.expressions,
combinator.facts,
combinator.symbols,
);
}
}

42 changes: 42 additions & 0 deletions biscuit-datalog/src/expression.zig
Original file line number Diff line number Diff line change
@@ -102,6 +102,48 @@ pub const Expression = struct {
//
return expression;
}

pub fn format(expression: Expression, comptime _: []const u8, _: std.fmt.FormatOptions, writer: anytype) !void {
for (expression.ops.items) |op| {
switch (op) {
.value => |v| try writer.print("{any}", .{v}),
.unary => |u| {
switch (u) {
.negate => try writer.print("neg", .{}),
.parens => try writer.print("paren", .{}),
.length => try writer.print("length", .{}),
}
},
.binary => |b| {
switch (b) {
.less_than => try writer.print("<", .{}),
.greater_than => try writer.print(">", .{}),
.less_or_equal => try writer.print("<=", .{}),
.greater_or_equal => try writer.print(">=", .{}),
.equal => try writer.print("==", .{}),
.contains => try writer.print("contains", .{}),
.prefix => try writer.print("starts_with", .{}),
.suffix => try writer.print("ends_with", .{}),
.regex => try writer.print("matches", .{}),
.add => try writer.print("+", .{}),
.sub => try writer.print("-", .{}),
.mul => try writer.print("*", .{}),
.div => try writer.print("/", .{}),
.@"and" => try writer.print("&&", .{}),
.@"or" => try writer.print("||", .{}),
.intersection => try writer.print("intersection", .{}),
.@"union" => try writer.print("union", .{}),
.bitwise_and => try writer.print("&", .{}),
.bitwise_or => try writer.print("|", .{}),
.bitwise_xor => try writer.print("^", .{}),
.not_equal => try writer.print("!=", .{}),
}
},
}

try writer.print(" ", .{});
}
}
};

const OpKind = enum(u8) {
13 changes: 13 additions & 0 deletions biscuit-datalog/src/rule.zig
Original file line number Diff line number Diff line change
@@ -165,6 +165,12 @@ pub const Rule = struct {

const matched_variables = try MatchedVariables.init(arena.allocator(), rule);

// if (rule.body.items.len == 0) {
// for (rule.expressions.items) |expression| {
// matched_variables.checkExpressions(rule.expressions.items)
// }
// }

var it = try Combinator.init(0, allocator, matched_variables, rule.body.items, rule.expressions.items, facts, symbols);
defer it.deinit();

@@ -177,6 +183,13 @@ pub const Rule = struct {
try writer.print("{any}", .{predicate.*});
if (i < rule.body.items.len - 1) try writer.print(", ", .{});
}

if (rule.expressions.items.len > 0) try writer.print(", ", .{});

for (rule.expressions.items, 0..) |*expressions, i| {
try writer.print("{any}", .{expressions.*});
if (i < rule.expressions.items.len - 1) try writer.print(", ", .{});
}
}

// Convert datalog fact from old symbol space to new symbol space