Skip to content

Commit 7a22cc5

Browse files
authored
Add specific error messages based on the mode the Array is opened (#2140)
1 parent 610fd32 commit 7a22cc5

File tree

3 files changed

+44
-10
lines changed

3 files changed

+44
-10
lines changed

tiledb/dense_array.py

+26-4
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,19 @@ def query(
165165
... {"a1": np.zeros(5)})
166166
167167
"""
168-
if not self.isopen or self.mode != "r":
169-
raise tiledb.TileDBError("DenseArray must be opened in read mode")
168+
if not self.isopen:
169+
raise tiledb.TileDBError("Array is not opened")
170+
171+
if self.mode == "w":
172+
raise tiledb.TileDBError(
173+
"Write mode is not supported for queries on Dense Arrays"
174+
)
175+
elif self.mode == "d":
176+
raise tiledb.TileDBError(
177+
"Delete mode is not supported for queries on Dense Arrays"
178+
)
179+
elif self.mode != "r":
180+
raise tiledb.TileDBError("Invalid mode for queries on Dense Arrays")
170181

171182
return Query(
172183
self,
@@ -215,8 +226,19 @@ def subarray(self, selection, attrs=None, cond=None, coords=False, order=None):
215226
... OrderedDict({'a1': np.zeros(5)}))
216227
217228
"""
218-
if not self.isopen or self.mode != "r":
219-
raise tiledb.TileDBError("DenseArray must be opened in read mode")
229+
if not self.isopen:
230+
raise tiledb.TileDBError("Array is not opened")
231+
232+
if self.mode == "w":
233+
raise tiledb.TileDBError(
234+
"Write mode is not supported for subarray queries on Dense Arrays"
235+
)
236+
elif self.mode == "d":
237+
raise tiledb.TileDBError(
238+
"Delete mode is not supported for subarray queries on Dense Arrays"
239+
)
240+
elif self.mode != "r":
241+
raise tiledb.TileDBError("Invalid mode for subarray query on Dense Array")
220242

221243
layout = lt.LayoutType.UNORDERED
222244
if order is None or order == "C":

tiledb/sparse_array.py

+16-4
Original file line numberDiff line numberDiff line change
@@ -372,10 +372,15 @@ def query(
372372
... OrderedDict({'a1': np.array([1, 2])}))
373373
374374
"""
375-
if not self.isopen or self.mode not in ("r", "d"):
375+
if not self.isopen:
376+
raise tiledb.TileDBError("Array is not opened")
377+
378+
if self.mode == "w":
376379
raise tiledb.TileDBError(
377-
"SparseArray must be opened in read or delete mode"
380+
"Write mode is not supported for queries on Sparse Arrays"
378381
)
382+
elif self.mode not in ("r", "d"):
383+
raise tiledb.TileDBError("Invalid mode for queries on Sparse Arrays")
379384

380385
# backwards compatibility
381386
_coords = coords
@@ -484,8 +489,15 @@ def subarray(self, selection, coords=True, attrs=None, cond=None, order=None):
484489
"""
485490
from .subarray import Subarray
486491

487-
if not self.isopen or self.mode not in ("r", "d"):
488-
raise tiledb.TileDBError("SparseArray is not opened in read or delete mode")
492+
if not self.isopen:
493+
raise tiledb.TileDBError("Array is not opened")
494+
495+
if self.mode == "w":
496+
raise tiledb.TileDBError(
497+
"Write mode is not supported for subarray queries on Sparse Arrays"
498+
)
499+
elif self.mode not in ("r", "d"):
500+
raise tiledb.TileDBError("Invalid mode for subarray query on Sparse Array")
489501

490502
layout = lt.LayoutType.UNORDERED
491503
if order is None or order == "U":

tiledb/tests/test_query_condition.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1022,7 +1022,7 @@ def test_basic_sparse(self):
10221022

10231023
with pytest.raises(
10241024
tiledb.TileDBError,
1025-
match="SparseArray must be opened in read or delete mode",
1025+
match="Write mode is not supported for queries on Sparse Arrays",
10261026
):
10271027
A.query(cond=qc).submit()
10281028

@@ -1052,7 +1052,7 @@ def test_basic_dense(self):
10521052
with tiledb.open(path, "d") as A:
10531053
with pytest.raises(
10541054
tiledb.TileDBError,
1055-
match="DenseArray must be opened in read mode",
1055+
match="Delete mode is not supported for queries on Dense Arrays",
10561056
):
10571057
A.query()
10581058

0 commit comments

Comments
 (0)