Skip to content

Commit

Permalink
Check for rb_enc_interned_str_cstr and fall back
Browse files Browse the repository at this point in the history
Truffle Ruby doesn't implement this function yet, so we need to check
for it and then fall back if it's not there.
  • Loading branch information
tenderlove committed Jan 25, 2024
1 parent bb63f86 commit b6dc749
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
4 changes: 4 additions & 0 deletions ext/sqlite3/extconf.rb
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ def configure_extension

abort_could_not_find(libname) unless find_library(libname, "sqlite3_libversion_number", "sqlite3.h")

# Truffle Ruby doesn't support this yet:
# https://github.com/oracle/truffleruby/issues/3408
have_func("rb_enc_interned_str_cstr")

# Functions defined in 1.9 but not 1.8
have_func("rb_proc_arity")

Expand Down
18 changes: 17 additions & 1 deletion ext/sqlite3/statement.c
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,22 @@ column_count(VALUE self)
return INT2NUM(sqlite3_column_count(ctx->st));
}

#if HAVE_RB_ENC_INTERNED_STR_CSTR
static VALUE
interned_utf8_cstr(const char * str)
{
return rb_enc_interned_str_cstr(str, rb_utf8_encoding());
}
#else
static VALUE
interned_utf8_cstr(const char * str)
{
VALUE rb_str = rb_utf8_str_new_cstr(str);
rb_funcall(rb_str, rb_intern("-@"), 0);
return rb_str;
}
#endif

/* call-seq: stmt.column_name(index)
*
* Get the column name at +index+. 0 based.
Expand All @@ -382,7 +398,7 @@ column_name(VALUE self, VALUE index)
VALUE ret = Qnil;

if (name) {
ret = rb_enc_interned_str_cstr(name, rb_utf8_encoding());
ret = interned_utf8_cstr(name);
}
return ret;
}
Expand Down

0 comments on commit b6dc749

Please sign in to comment.