Skip to content

Commit 3945f76

Browse files
committed
pass vortex session to scalar get methods in ffi
1 parent 8d52fff commit 3945f76

6 files changed

Lines changed: 258 additions & 108 deletions

File tree

lang/cpp/src/array.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,11 @@ BytesView Array::bytes(const Session &session) const {
325325
}
326326

327327
bool PrimitiveView<bool>::value(size_t i) const {
328+
if (i >= size_) {
329+
throw VortexException("index " + std::to_string(i) + " out of bounds for view of size " +
330+
std::to_string(size_),
331+
ErrorCode::OutOfBounds);
332+
}
328333
return vx_array_get_bool(Access::c_ptr(canonical_), i);
329334
}
330335

lang/cpp/tests/expression.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ TEST_CASE("Operator overloading", "[expr]") {
8585
REQUIRE(bits.value(1));
8686
REQUIRE(bits.value(2));
8787
REQUIRE_FALSE(bits.value(3));
88+
REQUIRE_THROWS_AS(bits.value(data.size()), VortexException);
8889
}
8990

9091
TEST_CASE("Apply error", "[expr]") {

vortex-ffi/cinclude/vortex.h

Lines changed: 62 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,10 @@ const vx_array *vx_array_slice(const vx_array *array, size_t start, size_t stop,
742742
* validity array. Sets error if index is out of bounds or underlying validity
743743
* array is corrupted.
744744
*/
745-
bool vx_array_element_is_invalid(const vx_array *array, size_t index, vx_error **error);
745+
bool vx_array_element_is_invalid(const vx_session *session,
746+
const vx_array *array,
747+
size_t index,
748+
vx_error **error);
746749

747750
/**
748751
* Check how many items in the array are invalid (null).
@@ -800,49 +803,85 @@ const vx_array *vx_array_new_primitive(vx_ptype ptype,
800803
const vx_array *
801804
vx_array_from_arrow(FFI_ArrowArray *array, FFI_ArrowSchema *schema, bool nullable, vx_error **error_out);
802805

803-
uint8_t vx_array_get_u8(const vx_array *array, size_t index);
806+
uint8_t vx_array_get_u8(const vx_session *session, const vx_array *array, size_t index, vx_error **error_out);
804807

805-
uint8_t vx_array_get_storage_u8(const vx_array *array, size_t index);
808+
uint8_t
809+
vx_array_get_storage_u8(const vx_session *session, const vx_array *array, size_t index, vx_error **error_out);
806810

807-
uint16_t vx_array_get_u16(const vx_array *array, size_t index);
811+
uint16_t
812+
vx_array_get_u16(const vx_session *session, const vx_array *array, size_t index, vx_error **error_out);
808813

809-
uint16_t vx_array_get_storage_u16(const vx_array *array, size_t index);
814+
uint16_t vx_array_get_storage_u16(const vx_session *session,
815+
const vx_array *array,
816+
size_t index,
817+
vx_error **error_out);
810818

811-
uint32_t vx_array_get_u32(const vx_array *array, size_t index);
819+
uint32_t
820+
vx_array_get_u32(const vx_session *session, const vx_array *array, size_t index, vx_error **error_out);
812821

813-
uint32_t vx_array_get_storage_u32(const vx_array *array, size_t index);
822+
uint32_t vx_array_get_storage_u32(const vx_session *session,
823+
const vx_array *array,
824+
size_t index,
825+
vx_error **error_out);
814826

815-
uint64_t vx_array_get_u64(const vx_array *array, size_t index);
827+
uint64_t
828+
vx_array_get_u64(const vx_session *session, const vx_array *array, size_t index, vx_error **error_out);
816829

817-
uint64_t vx_array_get_storage_u64(const vx_array *array, size_t index);
830+
uint64_t vx_array_get_storage_u64(const vx_session *session,
831+
const vx_array *array,
832+
size_t index,
833+
vx_error **error_out);
818834

819-
int8_t vx_array_get_i8(const vx_array *array, size_t index);
835+
int8_t vx_array_get_i8(const vx_session *session, const vx_array *array, size_t index, vx_error **error_out);
820836

821-
int8_t vx_array_get_storage_i8(const vx_array *array, size_t index);
837+
int8_t
838+
vx_array_get_storage_i8(const vx_session *session, const vx_array *array, size_t index, vx_error **error_out);
822839

823-
int16_t vx_array_get_i16(const vx_array *array, size_t index);
840+
int16_t
841+
vx_array_get_i16(const vx_session *session, const vx_array *array, size_t index, vx_error **error_out);
824842

825-
int16_t vx_array_get_storage_i16(const vx_array *array, size_t index);
843+
int16_t vx_array_get_storage_i16(const vx_session *session,
844+
const vx_array *array,
845+
size_t index,
846+
vx_error **error_out);
826847

827-
int32_t vx_array_get_i32(const vx_array *array, size_t index);
848+
int32_t
849+
vx_array_get_i32(const vx_session *session, const vx_array *array, size_t index, vx_error **error_out);
828850

829-
int32_t vx_array_get_storage_i32(const vx_array *array, size_t index);
851+
int32_t vx_array_get_storage_i32(const vx_session *session,
852+
const vx_array *array,
853+
size_t index,
854+
vx_error **error_out);
830855

831-
int64_t vx_array_get_i64(const vx_array *array, size_t index);
856+
int64_t
857+
vx_array_get_i64(const vx_session *session, const vx_array *array, size_t index, vx_error **error_out);
832858

833-
int64_t vx_array_get_storage_i64(const vx_array *array, size_t index);
859+
int64_t vx_array_get_storage_i64(const vx_session *session,
860+
const vx_array *array,
861+
size_t index,
862+
vx_error **error_out);
834863

835-
uint16_t vx_array_get_f16(const vx_array *array, size_t index);
864+
uint16_t
865+
vx_array_get_f16(const vx_session *session, const vx_array *array, size_t index, vx_error **error_out);
836866

837-
uint16_t vx_array_get_storage_f16(const vx_array *array, size_t index);
867+
uint16_t vx_array_get_storage_f16(const vx_session *session,
868+
const vx_array *array,
869+
size_t index,
870+
vx_error **error_out);
838871

839-
float vx_array_get_f32(const vx_array *array, size_t index);
872+
float vx_array_get_f32(const vx_session *session, const vx_array *array, size_t index, vx_error **error_out);
840873

841-
float vx_array_get_storage_f32(const vx_array *array, size_t index);
874+
float vx_array_get_storage_f32(const vx_session *session,
875+
const vx_array *array,
876+
size_t index,
877+
vx_error **error_out);
842878

843-
double vx_array_get_f64(const vx_array *array, size_t index);
879+
double vx_array_get_f64(const vx_session *session, const vx_array *array, size_t index, vx_error **error_out);
844880

845-
double vx_array_get_storage_f64(const vx_array *array, size_t index);
881+
double vx_array_get_storage_f64(const vx_session *session,
882+
const vx_array *array,
883+
size_t index,
884+
vx_error **error_out);
846885

847886
/**
848887
* Return UTF-8 string at "index" in a canonical Utf8 array.

0 commit comments

Comments
 (0)