Skip to content

Commit 9a45eee

Browse files
authored
Merge pull request #84 from alan-turing-institute/selectrows-fallback
implement non-erroring fallback for selectrows to address #77
2 parents 524b320 + f198711 commit 9a45eee

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

src/data_utils.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -239,10 +239,14 @@ Select single or multiple rows from a table, abstract vector or matrix
239239
preferred sink type of `typeof(X)`, even if only a single row is
240240
selected.
241241
242+
If the object is neither a table, abstract vector or matrix, `X` is
243+
returned and `r` is ignored.
244+
242245
"""
243246
selectrows(X, r) = selectrows(get_interface_mode(), vtrait(X), X, r)
244247

245-
selectrows(::Mode, ::Val{:other}, ::Nothing, r) = nothing
248+
# fall-back is to return object, ignoring vector of row indices, `r`:
249+
selectrows(::Mode, ::Val{:other}, X::Any, r) = X
246250

247251
selectrows(::Mode, ::Val{:other}, X::AbstractVector, r) = X[r]
248252
selectrows(::Mode, ::Val{:other}, X::AbstractVector, r::Integer) = X[r:r]
@@ -252,10 +256,6 @@ selectrows(::Mode, ::Val{:other}, X::AbstractMatrix, r) = X[r, :]
252256
selectrows(::Mode, ::Val{:other}, X::AbstractMatrix, r::Integer) = X[r:r, :]
253257
selectrows(::Mode, ::Val{:other}, X::AbstractMatrix, ::Colon) = X
254258

255-
selectrows(::Mode, ::Val{:other}, X, r) =
256-
throw(ArgumentError("Function `selectrows` only supports AbstractVector " *
257-
"or AbstractMatrix or containers implementing the " * "Tables interface."))
258-
259259
selectrows(::LightInterface, ::Val{:table}, X, r; kw...) =
260260
errlight("selectrows")
261261

test/data_utils.jl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ end
141141
# ------------------------------------------------------------------------
142142
@testset "select-light" begin
143143
setlight()
144+
145+
# test fallback
144146
X = nothing
145147
@test selectrows(X, 1) === nothing
146148
@test selectcols(X, 1) === nothing
@@ -173,12 +175,20 @@ end
173175

174176
# something else
175177
X = (1,2,3)
176-
@test_throws ArgumentError selectrows(X, 1)
178+
selectrows(X, 1) == X
177179
@test_throws ArgumentError selectcols(X, 1)
178180
@test_throws ArgumentError select(X, 1, 1)
179181
end
180182
@testset "select-full" begin
181183
setfull()
184+
185+
# test fallback
186+
X = nothing
187+
@test selectrows(X, 1) === nothing
188+
@test selectcols(X, 1) === nothing
189+
@test select(X, 1, 2) === nothing
190+
191+
# implement some behaviour:
182192
M.selectrows(::FI, ::Val{:table}, X, ::Colon) = X
183193
M.selectcols(::FI, ::Val{:table}, X, ::Colon) = X
184194
function M.selectrows(::FI, ::Val{:table}, X, r)

0 commit comments

Comments
 (0)