Skip to content

Commit aa1b5ff

Browse files
committed
Add test
1 parent 7b7999c commit aa1b5ff

1 file changed

Lines changed: 29 additions & 0 deletions

File tree

tiledb/tests/test_core.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import random
33

44
import numpy as np
5+
import pytest
56
from numpy.testing import assert_array_equal
67

78
import tiledb
@@ -157,3 +158,31 @@ def test_import_buffer(self):
157158
self.assertTrue("foo" in r)
158159
self.assertTrue("str" not in r)
159160
del q
161+
162+
def test_nullable_arrow_buffer(self):
163+
# BufferHolder must hold reference to converted bitmap, not original.
164+
# Corrupted validity buffer causes wrong null positions in .to_pandas().
165+
pyarrow = pytest.importorskip("pyarrow")
166+
167+
def _read_arrow(self, uri):
168+
with tiledb.open(uri, "r") as A:
169+
q = core.PyQuery(A.ctx, A, ("a",), (), 0, True)
170+
sub = tiledb.Subarray(A)
171+
sub.add_dim_range(0, (0, 4))
172+
q.set_subarray(sub)
173+
q.submit()
174+
return q._buffers_to_pa_table()
175+
176+
uri = self.path("test_nullable_arrow_buffer")
177+
dom = tiledb.Domain(tiledb.Dim("d", domain=(0, 4), tile=1, dtype=np.uint64))
178+
attr = tiledb.Attr("a", dtype="ascii", var=True, nullable=True)
179+
tiledb.Array.create(
180+
uri, tiledb.ArraySchema(domain=dom, attrs=[attr], sparse=True)
181+
)
182+
183+
with tiledb.open(uri, "w") as A:
184+
A[np.arange(5)] = {"a": pyarrow.array(["x", "y", None, None, ""])}
185+
186+
df = self._read_arrow(uri).to_pandas()
187+
188+
assert df["a"].isna().tolist() == [False, False, True, True, False]

0 commit comments

Comments
 (0)