Skip to content

Commit da32a80

Browse files
committed
add DuckDB::LogicalType#set_alias
1 parent 8e4b34b commit da32a80

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

ext/duckdb/logical_type.c

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ static VALUE duckdb_logical_type__internal_type(VALUE self);
2222
static VALUE duckdb_logical_type_dictionary_size(VALUE self);
2323
static VALUE duckdb_logical_type_dictionary_value_at(VALUE self, VALUE didx);
2424
static VALUE duckdb_logical_type__get_alias(VALUE self);
25+
static VALUE duckdb_logical_type__set_alias(VALUE self, VALUE aname);
2526

2627
static const rb_data_type_t logical_type_data_type = {
2728
"DuckDB/LogicalType",
@@ -380,6 +381,27 @@ static VALUE duckdb_logical_type__get_alias(VALUE self) {
380381
return alias;
381382
}
382383

384+
/*
385+
* call-seq:
386+
* col.logical_type.alias(alias) -> String
387+
*
388+
* Return the set alias of the logical type.
389+
*
390+
*/
391+
static VALUE duckdb_logical_type__set_alias(VALUE self, VALUE aname) {
392+
rubyDuckDBLogicalType *ctx;
393+
VALUE alias = Qnil;
394+
const char *_alias = StringValuePtr(aname);
395+
396+
TypedData_Get_Struct(self, rubyDuckDBLogicalType, &logical_type_data_type, ctx);
397+
duckdb_logical_type_set_alias(ctx->logical_type, _alias);
398+
if (_alias != NULL) {
399+
alias = rb_utf8_str_new_cstr(_alias);
400+
}
401+
402+
return alias;
403+
}
404+
383405
VALUE rbduckdb_create_logical_type(duckdb_logical_type logical_type) {
384406
VALUE obj;
385407
rubyDuckDBLogicalType *ctx;
@@ -415,6 +437,6 @@ void rbduckdb_init_duckdb_logical_type(void) {
415437
rb_define_method(cDuckDBLogicalType, "_internal_type", duckdb_logical_type__internal_type, 0);
416438
rb_define_method(cDuckDBLogicalType, "dictionary_size", duckdb_logical_type_dictionary_size, 0);
417439
rb_define_method(cDuckDBLogicalType, "dictionary_value_at", duckdb_logical_type_dictionary_value_at, 1);
418-
rb_define_method(cDuckDBLogicalType, "alias", duckdb_logical_type_alias, 0);
419440
rb_define_method(cDuckDBLogicalType, "get_alias", duckdb_logical_type__get_alias, 0);
441+
rb_define_method(cDuckDBLogicalType, "set_alias", duckdb_logical_type__set_alias, 1);
420442
}

lib/duckdb/logical_type.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
module DuckDB
44
class LogicalType
55
alias :alias get_alias
6+
alias :alias= set_alias
67

78
# returns logical type's type symbol
89
# `:unknown` means that the logical type's type is unknown/unsupported by ruby-duckdb.

test/duckdb_test/logical_type_test.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,13 @@ def test_type
118118
assert_equal(EXPECTED_TYPES, logical_types.map(&:type))
119119
end
120120

121+
def test_alias
122+
enum_column = @columns.find { |column| column.type == :enum }
123+
enum_logical_type = enum_column.logical_type
124+
assert_equal("mood", enum_logical_type.alias=("mood"))
125+
assert_equal("mood", enum_logical_type.alias)
126+
end
127+
121128
def test_decimal_internal_type
122129
decimal_column = @columns.find { |column| column.type == :decimal }
123130
assert_equal(:integer, decimal_column.logical_type.internal_type)

0 commit comments

Comments
 (0)