Skip to content

Commit 6a0d232

Browse files
committed
Join: add swap option
1 parent a35594c commit 6a0d232

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

src/nodes/join.jl

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,22 @@ mutable struct JoinNode <: TabularNode
66
left::Bool
77
right::Bool
88
optional::Bool
9+
swap::Bool
910

10-
JoinNode(; joinee, on, left = false, right = false, optional = false) =
11-
new(joinee, on, left, right, optional)
11+
JoinNode(; joinee, on, left = false, right = false, optional = false, swap = false) =
12+
new(joinee, on, left, right, optional, swap)
1213
end
1314

14-
JoinNode(joinee; on, left = false, right = false, optional = false) =
15-
JoinNode(; joinee, on, left, right, optional)
15+
JoinNode(joinee; on, left = false, right = false, optional = false, swap = false) =
16+
JoinNode(; joinee, on, left, right, optional, swap)
1617

17-
JoinNode(joinee, on; left = false, right = false, optional = false) =
18-
JoinNode(; joinee, on, left, right, optional)
18+
JoinNode(joinee, on; left = false, right = false, optional = false, swap = false) =
19+
JoinNode(; joinee, on, left, right, optional, swap)
1920

2021
"""
21-
Join(; joinee, on, left = false, right = false, optional = false)
22-
Join(joinee; on, left = false, right = false, optional = false)
23-
Join(joinee, on; left = false, right = false, optional = false)
22+
Join(; joinee, on, left = false, right = false, optional = false, swap = false)
23+
Join(joinee; on, left = false, right = false, optional = false, swap = false)
24+
Join(joinee, on; left = false, right = false, optional = false, swap = false)
2425
2526
`Join` correlates two input datasets.
2627
@@ -102,8 +103,14 @@ function PrettyPrinting.quoteof(n::JoinNode, ctx::QuoteContext)
102103
if n.optional
103104
push!(ex.args, Expr(:kw, :optional, n.optional))
104105
end
106+
if n.swap
107+
push!(ex.args, Expr(:kw, :swap, n.swap))
108+
end
105109
else
106110
push!(ex.args, :)
107111
end
108112
ex
109113
end
114+
115+
label(n::JoinNode) =
116+
n.swap ? label(n.joinee) : label(n.over)

src/resolve.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,10 @@ function resolve(n::IterateNode, ctx)
414414
end
415415

416416
function resolve(n::JoinNode, ctx)
417+
if n.swap
418+
ctx′ = ResolveContext(Ctx, tail = n.joinee)
419+
return resolve(JoinNode(joinee = ctx.tail, on = n.on, left = n.right, right = n.left, optional = n.optional), ctx′)
420+
end
417421
tail′ = resolve(ctx)
418422
lt = row_type(tail′)
419423
name = label(n.joinee)

0 commit comments

Comments
 (0)