Skip to content

Commit 9db429f

Browse files
committed
fix: Fix bswap* function signature
1 parent f0d6987 commit 9db429f

File tree

2 files changed

+18
-32
lines changed

2 files changed

+18
-32
lines changed

src/questdb/dataframe.pxi

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@ cdef bint should_auto_flush(
5656

5757
return False
5858

59-
cdef inline uint32_t bswap32(uint32_t value):
59+
cdef inline uint32_t bswap32(uint32_t value) noexcept:
6060
return (((value & 0xFF000000u) >> 24u) |
6161
((value & 0x00FF0000u) >> 8u) |
6262
((value & 0x0000FF00u) << 8u) |
6363
((value & 0x000000FFu) << 24u))
6464

65-
cdef inline uint64_t bswap64(uint64_t value):
65+
cdef inline uint64_t bswap64(uint64_t value) noexcept:
6666
return (((value & 0xFF00000000000000u) >> 56u) |
6767
((value & 0x00FF000000000000u) >> 40u) |
6868
((value & 0x0000FF0000000000u) >> 24u) |
@@ -150,10 +150,10 @@ cdef enum col_source_t:
150150
col_source_dt64ns_tz_arrow = 502000
151151
col_source_arr_f64_numpyobj = 601100
152152
col_source_decimal_pyobj = 701100
153-
col_source_decimal32_arrow = 702100
154-
col_source_decimal64_arrow = 703100
155-
col_source_decimal128_arrow = 704100
156-
col_source_decimal256_arrow = 705100
153+
col_source_decimal32_arrow = 702000
154+
col_source_decimal64_arrow = 703000
155+
col_source_decimal128_arrow = 704000
156+
col_source_decimal256_arrow = 705000
157157

158158

159159
cdef bint col_source_needs_gil(col_source_t source) noexcept nogil:
@@ -2222,16 +2222,11 @@ cdef void_int _dataframe_serialize_cell_column_decimal__decimal32_arrow(
22222222
cdef line_sender_error* err = NULL
22232223
cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
22242224
cdef uint32_t value
2225-
if not valid:
2226-
if not line_sender_buffer_column_dec(ls_buf, col.name, 0, NULL, 0, &err):
2227-
_ensure_has_gil(gs)
2228-
raise c_err_to_py(err)
2229-
else:
2225+
if valid:
22302226
value = bswap32((<uint32_t*>col.cursor.chunk.buffers[1])[col.cursor.offset])
22312227
if not line_sender_buffer_column_dec(ls_buf, col.name, col.scale, <uint8_t *> &value, sizeof(value), &err):
22322228
_ensure_has_gil(gs)
22332229
raise c_err_to_py(err)
2234-
return 0
22352230

22362231
cdef void_int _dataframe_serialize_cell_column_decimal__decimal64_arrow(
22372232
line_sender_buffer* ls_buf,
@@ -2241,16 +2236,11 @@ cdef void_int _dataframe_serialize_cell_column_decimal__decimal64_arrow(
22412236
cdef line_sender_error* err = NULL
22422237
cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
22432238
cdef uint64_t value
2244-
if not valid:
2245-
if not line_sender_buffer_column_dec(ls_buf, col.name, 0, NULL, 0, &err):
2246-
_ensure_has_gil(gs)
2247-
raise c_err_to_py(err)
2248-
else:
2239+
if valid:
22492240
value = bswap64((<uint64_t*>col.cursor.chunk.buffers[1])[col.cursor.offset])
22502241
if not line_sender_buffer_column_dec(ls_buf, col.name, col.scale, <uint8_t *> &value, sizeof(value), &err):
22512242
_ensure_has_gil(gs)
22522243
raise c_err_to_py(err)
2253-
return 0
22542244

22552245
cdef void_int _dataframe_serialize_cell_column_decimal__decimal128_arrow(
22562246
line_sender_buffer* ls_buf,
@@ -2261,18 +2251,13 @@ cdef void_int _dataframe_serialize_cell_column_decimal__decimal128_arrow(
22612251
cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
22622252
cdef uint64_t *cell
22632253
cdef uint64_t[2] value
2264-
if not valid:
2265-
if not line_sender_buffer_column_dec(ls_buf, col.name, 0, NULL, 0, &err):
2266-
_ensure_has_gil(gs)
2267-
raise c_err_to_py(err)
2268-
else:
2254+
if valid:
22692255
cell = &(<uint64_t*>col.cursor.chunk.buffers[1])[col.cursor.offset << 1]
22702256
value[0] = bswap64(cell[1])
22712257
value[1] = bswap64(cell[0])
22722258
if not line_sender_buffer_column_dec(ls_buf, col.name, col.scale, <uint8_t *> value, 16, &err):
22732259
_ensure_has_gil(gs)
22742260
raise c_err_to_py(err)
2275-
return 0
22762261

22772262
cdef void_int _dataframe_serialize_cell_column_decimal__decimal256_arrow(
22782263
line_sender_buffer* ls_buf,
@@ -2283,11 +2268,7 @@ cdef void_int _dataframe_serialize_cell_column_decimal__decimal256_arrow(
22832268
cdef bint valid = _dataframe_arrow_is_valid(&col.cursor)
22842269
cdef uint64_t *cell
22852270
cdef uint64_t[4] value
2286-
if not valid:
2287-
if not line_sender_buffer_column_dec(ls_buf, col.name, 0, NULL, 0, &err):
2288-
_ensure_has_gil(gs)
2289-
raise c_err_to_py(err)
2290-
else:
2271+
if valid:
22912272
cell = &(<uint64_t*>col.cursor.chunk.buffers[1])[col.cursor.offset << 2]
22922273
value[0] = bswap64(cell[3])
22932274
value[1] = bswap64(cell[2])
@@ -2296,8 +2277,6 @@ cdef void_int _dataframe_serialize_cell_column_decimal__decimal256_arrow(
22962277
if not line_sender_buffer_column_dec(ls_buf, col.name, col.scale, <uint8_t *> value, 32, &err):
22972278
_ensure_has_gil(gs)
22982279
raise c_err_to_py(err)
2299-
return 0
2300-
23012280

23022281
cdef void_int _dataframe_serialize_cell_column_ts__dt64ns_tz_arrow(
23032282
line_sender_buffer* ls_buf,

test/test_dataframe.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -635,14 +635,21 @@ def test_decimal_arrow_columns(self):
635635
prefix = b'tbl dec='
636636
for unscaled, count in zip(unscaled_values, counts):
637637
suffix = f',count={count}i\n'.encode('ascii')
638+
if unscaled is None:
639+
# If the decimal is invalid, we shouldn't have encoded it
640+
try:
641+
buf.index(suffix, offset)
642+
self.fail("There shouldn't be any other fields")
643+
except ValueError:
644+
continue
645+
638646
end = buf.index(suffix, offset)
639647
line = buf[offset:end + len(suffix)]
640648
self.assertTrue(line.startswith(prefix), line)
641649
payload = line[len(prefix):len(line) - len(suffix)] if len(suffix) else line[len(prefix):]
642650
expected_payload = _decimal_binary_payload(unscaled, arrow_type.scale, arrow_type.byte_width)
643651
self.assertEqual(payload, expected_payload)
644652
offset = end + len(suffix)
645-
self.assertEqual(offset, len(buf))
646653

647654
def test_u8_arrow_col(self):
648655
df = pd.DataFrame({

0 commit comments

Comments
 (0)