|
1 | 1 | # Important, for broadcast joins we cannot assume c and d have same number of columns: |
2 | 2 | # c could have more columns than d |
3 | | -@generated function rowcmp(c::StructVector, i, d::StructVector{C, D}, j) where {C, D} |
4 | | - N = fieldcount(D) |
5 | | - ex = :(cmp(getfield(fieldarrays(c),$N)[i], getfield(fieldarrays(d),$N)[j])) |
6 | | - for n in N-1:-1:1 |
7 | | - ex = quote |
8 | | - let k = rowcmp(getfield(fieldarrays(c),$n), i, getfield(fieldarrays(d),$n), j) |
9 | | - (k == 0) ? ($ex) : k |
10 | | - end |
11 | | - end |
| 3 | +rowcmp(::Tuple, i, ::Tuple{}, j) = 0 |
| 4 | + |
| 5 | +function rowcmp(tc::Tuple, i, td::Tuple, j) |
| 6 | + c, d = tc[1], td[1] |
| 7 | + let k = rowcmp(c, i, d, j) |
| 8 | + (k == 0) ? rowcmp(tail(tc), i, tail(td), j) : k |
12 | 9 | end |
13 | | - ex |
| 10 | +end |
| 11 | + |
| 12 | +function rowcmp(c::StructVector, i, d::StructVector, j) |
| 13 | + tc = Tuple(fieldarrays(c)) |
| 14 | + td = Tuple(fieldarrays(d)) |
| 15 | + return rowcmp(tc, i, td, j) |
14 | 16 | end |
15 | 17 |
|
16 | 18 | @inline function rowcmp(c::AbstractVector, i, d::AbstractVector, j) |
|
0 commit comments