Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -260,11 +260,11 @@ async def merge_rows(
if c.reset_row:
raise _ResetRow(c)
k = c.row_key
f = c.family_name.value
f = c.family_name.value if c.HasField("family_name") else None
q = c.qualifier.value if c.HasField("qualifier") else None
if k and k != row_key:
raise InvalidChunk("unexpected new row key")
if f:
if f is not None:
family = f
if q is not None:
qualifier = q
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -219,11 +219,11 @@ def merge_rows(
if c.reset_row:
raise _ResetRow(c)
k = c.row_key
f = c.family_name.value
f = c.family_name.value if c.HasField("family_name") else None
q = c.qualifier.value if c.HasField("qualifier") else None
if k and k != row_key:
raise InvalidChunk("unexpected new row key")
if f:
if f is not None:
family = f
if q is not None:
qualifier = q
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,50 @@ async def test_missing_family(self):
)
)

@CrossSync.pytest
async def test_empty_family_name_first_chunk(self):
rows = await self._process_chunks(
ReadRowsResponse.CellChunk(
row_key=b"a",
family_name="",
qualifier=b"q",
timestamp_micros=1000,
value=b"v",
commit_row=True,
)
)
assert len(rows) == 1
cells = rows[0].get_cells(family="", qualifier=b"q")
assert len(cells) == 1
assert cells[0].value == b"v"

@CrossSync.pytest
async def test_empty_family_name_after_nonempty_family(self):
rows = await self._process_chunks(
ReadRowsResponse.CellChunk(
row_key=b"a",
family_name="cf1",
qualifier=b"q",
timestamp_micros=2000,
value=b"v1",
commit_row=False,
),
ReadRowsResponse.CellChunk(
family_name="",
qualifier=b"q",
timestamp_micros=1000,
value=b"v2",
commit_row=True,
),
)
assert len(rows) == 1
cf1_cells = rows[0].get_cells(family="cf1", qualifier=b"q")
empty_cells = rows[0].get_cells(family="", qualifier=b"q")
assert len(cf1_cells) == 1
assert cf1_cells[0].value == b"v1"
assert len(empty_cells) == 1
assert empty_cells[0].value == b"v2"

@CrossSync.pytest
async def test_mid_cell_row_key_change(self):
with pytest.raises(InvalidChunk):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,48 @@ def test_missing_family(self):
)
)

def test_empty_family_name_first_chunk(self):
rows = self._process_chunks(
ReadRowsResponse.CellChunk(
row_key=b"a",
family_name="",
qualifier=b"q",
timestamp_micros=1000,
value=b"v",
commit_row=True,
)
)
assert len(rows) == 1
cells = rows[0].get_cells(family="", qualifier=b"q")
assert len(cells) == 1
assert cells[0].value == b"v"

def test_empty_family_name_after_nonempty_family(self):
rows = self._process_chunks(
ReadRowsResponse.CellChunk(
row_key=b"a",
family_name="cf1",
qualifier=b"q",
timestamp_micros=2000,
value=b"v1",
commit_row=False,
),
ReadRowsResponse.CellChunk(
family_name="",
qualifier=b"q",
timestamp_micros=1000,
value=b"v2",
commit_row=True,
),
)
assert len(rows) == 1
cf1_cells = rows[0].get_cells(family="cf1", qualifier=b"q")
empty_cells = rows[0].get_cells(family="", qualifier=b"q")
assert len(cf1_cells) == 1
assert cf1_cells[0].value == b"v1"
assert len(empty_cells) == 1
assert empty_cells[0].value == b"v2"

def test_mid_cell_row_key_change(self):
with pytest.raises(InvalidChunk):
self._process_chunks(
Expand Down
Loading