Skip to content

Commit 01d527b

Browse files
committed
Join: add swap option
1 parent 8a25b28 commit 01d527b

File tree

2 files changed

+19
-9
lines changed

2 files changed

+19
-9
lines changed

src/nodes/join.jl

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

11-
JoinNode(; over = nothing, joinee, on, left = false, right = false, optional = false) =
12-
new(over, joinee, on, left, right, optional)
12+
JoinNode(; over = nothing, joinee, on, left = false, right = false, optional = false, swap = false) =
13+
new(over, joinee, on, left, right, optional, swap)
1314
end
1415

15-
JoinNode(joinee; over = nothing, on, left = false, right = false, optional = false) =
16-
JoinNode(over = over, joinee = joinee, on = on, left = left, right = right, optional = optional)
16+
JoinNode(joinee; over = nothing, on, left = false, right = false, optional = false, swap = false) =
17+
JoinNode(over = over, joinee = joinee, on = on, left = left, right = right, optional = optional, swap = swap)
1718

18-
JoinNode(joinee, on; over = nothing, left = false, right = false, optional = false) =
19-
JoinNode(over = over, joinee = joinee, on = on, left = left, right = right, optional = optional)
19+
JoinNode(joinee, on; over = nothing, left = false, right = false, optional = false, swap = false) =
20+
JoinNode(over = over, joinee = joinee, on = on, left = left, right = right, optional = optional, swap = swap)
2021

2122
"""
22-
Join(; over = nothing, joinee, on, left = false, right = false, optional = false)
23-
Join(joinee; over = nothing, on, left = false, right = false, optional = false)
24-
Join(joinee, on; over = nothing, left = false, right = false, optional = false)
23+
Join(; over = nothing, joinee, on, left = false, right = false, optional = false, swap = false)
24+
Join(joinee; over = nothing, on, left = false, right = false, optional = false, swap = false)
25+
Join(joinee, on; over = nothing, left = false, right = false, optional = false, swap = false)
2526
2627
`Join` correlates two input datasets.
2728
@@ -107,6 +108,9 @@ function PrettyPrinting.quoteof(n::JoinNode, ctx::QuoteContext)
107108
if n.optional
108109
push!(ex.args, Expr(:kw, :optional, n.optional))
109110
end
111+
if n.swap
112+
push!(ex.args, Expr(:kw, :swap, n.swap))
113+
end
110114
else
111115
push!(ex.args, :)
112116
end
@@ -115,3 +119,6 @@ function PrettyPrinting.quoteof(n::JoinNode, ctx::QuoteContext)
115119
end
116120
ex
117121
end
122+
123+
label(n::JoinNode) =
124+
n.swap ? label(n.joinee) : label(n.over)

src/resolve.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,9 @@ function resolve(n::IterateNode, ctx)
378378
end
379379

380380
function resolve(n::JoinNode, ctx)
381+
if n.swap
382+
return resolve(JoinNode(over = n.joinee, joinee = n.over, on = n.on, left = n.right, right = n.left, optional = n.optional), ctx)
383+
end
381384
over′ = resolve(n.over, ctx)
382385
lt = row_type(over′)
383386
name = label(n.joinee)

0 commit comments

Comments
 (0)