class DuckDB::Vector
The DuckDB::Vector represents a column vector in a data chunk.
Vectors store the actual data for table function output.
Example:
vector = output.get_vector(0) vector.assign_string_element(0, 'hello') vector.assign_string_element(1, 'world')
rubocop:disable Lint/EmptyClass
Public Instance Methods
Source
static VALUE rbduckdb_vector_assign_string_element(VALUE self, VALUE index, VALUE str) {
rubyDuckDBVector *ctx;
idx_t idx;
const char *string_val;
TypedData_Get_Struct(self, rubyDuckDBVector, &vector_data_type, ctx);
idx = NUM2ULL(index);
string_val = StringValueCStr(str);
duckdb_vector_assign_string_element(ctx->vector, idx, string_val);
return self;
}
Assigns a string value at the specified index.
vector.assign_string_element(0, 'hello')
Source
static VALUE rbduckdb_vector_assign_string_element_len(VALUE self, VALUE index, VALUE str) {
rubyDuckDBVector *ctx;
idx_t idx;
const char *string_val;
idx_t str_len;
TypedData_Get_Struct(self, rubyDuckDBVector, &vector_data_type, ctx);
idx = NUM2ULL(index);
string_val = StringValuePtr(str);
str_len = RSTRING_LEN(str);
duckdb_vector_assign_string_element_len(ctx->vector, idx, string_val, str_len);
return self;
}
Assigns a string/blob value at the specified index with explicit length. Supports strings containing null bytes (for BLOB columns).
vector.assign_string_element_len(0, "\x00\x01\x02\x03")
Source
static VALUE rbduckdb_vector_get_data(VALUE self) {
rubyDuckDBVector *ctx;
void *data;
TypedData_Get_Struct(self, rubyDuckDBVector, &vector_data_type, ctx);
data = duckdb_vector_get_data(ctx->vector);
return ULL2NUM((uintptr_t)data);
}
Gets the raw data pointer for the vector. Returns the memory address as an integer.
ptr = vector.get_data
Source
static VALUE rbduckdb_vector_get_validity(VALUE self) {
rubyDuckDBVector *ctx;
uint64_t *validity;
TypedData_Get_Struct(self, rubyDuckDBVector, &vector_data_type, ctx);
validity = duckdb_vector_get_validity(ctx->vector);
if (!validity) {
return Qnil;
}
return ULL2NUM((uintptr_t)validity);
}
Gets the validity mask pointer for the vector. Returns nil if all values are valid.
validity = vector.get_validity
Source
static VALUE rbduckdb_vector_logical_type(VALUE self) {
rubyDuckDBVector *ctx;
duckdb_logical_type logical_type;
TypedData_Get_Struct(self, rubyDuckDBVector, &vector_data_type, ctx);
logical_type = duckdb_vector_get_column_type(ctx->vector);
return rbduckdb_create_logical_type(logical_type);
}
Gets the logical type of the vector.
vector = output.get_vector(0) type = vector.logical_type type.id #=> DuckDB::Type::BIGINT
Source
static VALUE rbduckdb_vector_set_validity(VALUE self, VALUE index, VALUE valid) {
rubyDuckDBVector *ctx;
idx_t idx;
uint64_t *validity;
TypedData_Get_Struct(self, rubyDuckDBVector, &vector_data_type, ctx);
idx = NUM2ULL(index);
if (RTEST(valid)) {
// Setting to valid - ensure validity mask exists and set bit
duckdb_vector_ensure_validity_writable(ctx->vector);
validity = duckdb_vector_get_validity(ctx->vector);
duckdb_validity_set_row_valid(validity, idx);
} else {
// Setting to invalid (NULL)
duckdb_vector_ensure_validity_writable(ctx->vector);
validity = duckdb_vector_get_validity(ctx->vector);
duckdb_validity_set_row_invalid(validity, idx);
}
return self;
}
Sets the validity of a value at the specified index.
vector.set_validity(0, false) # Mark row 0 as NULL vector.set_validity(1, true) # Mark row 1 as valid