Skip to content

Commit

Permalink
databases/rubygem-mysql: fix build with mariadb 10.11 and ruby 3.2
Browse files Browse the repository at this point in the history
  • Loading branch information
Dirk Meyer authored and Dirk Meyer committed Jan 21, 2024
1 parent 1f17722 commit 27c87a9
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 2 deletions.
2 changes: 1 addition & 1 deletion databases/rubygem-mysql/Makefile
@@ -1,6 +1,6 @@
PORTNAME= mysql
PORTVERSION= 2.9.1
PORTREVISION= 1
PORTREVISION= 2
CATEGORIES= databases rubygems
MASTER_SITES= RG

Expand Down
11 changes: 11 additions & 0 deletions databases/rubygem-mysql/files/patch-ext-mysql_api-extconf.rb
@@ -0,0 +1,11 @@
--- ext/mysql_api/extconf.rb.orig 2024-01-21 14:47:39 UTC
+++ ext/mysql_api/extconf.rb
@@ -76,6 +76,8 @@ IO.foreach('confout') do |l|
next unless l =~ /errmsg\.h|mysqld_error\.h/
fn = l.split(/\"/)[1]
IO.foreach(fn) do |m|
+ next if m == 'ER_UNKNOWN_ERROR_CODE'
+
if m =~ /^#define\s+([CE]R_[0-9A-Z_]+)/ then
error_syms << $1
end
131 changes: 130 additions & 1 deletion databases/rubygem-mysql/files/patch-ext-mysql_api-mysql.c
@@ -1,5 +1,27 @@
--- ext/mysql_api/mysql.c.orig 2023-03-11 18:29:50 UTC
--- ext/mysql_api/mysql.c.orig 2024-01-21 14:38:01 UTC
+++ ext/mysql_api/mysql.c
@@ -170,7 +170,7 @@ static void mysql_raise(MYSQL* m)
VALUE e = rb_exc_new2(eMysql, mysql_error(m));
rb_iv_set(e, "errno", INT2FIX(mysql_errno(m)));
#if MYSQL_VERSION_ID >= 40101
- rb_iv_set(e, "sqlstate", rb_tainted_str_new2(mysql_sqlstate(m)));
+ rb_iv_set(e, "sqlstate", rb_str_new_cstr(mysql_sqlstate(m)));
#endif
rb_exc_raise(e);
}
@@ -197,9 +197,9 @@ static VALUE make_field_obj(MYSQL_FIELD* f)
if (f == NULL)
return Qnil;
obj = rb_obj_alloc(cMysqlField);
- rb_iv_set(obj, "name", f->name? rb_str_freeze(rb_tainted_str_new2(f->name)): Qnil);
- rb_iv_set(obj, "table", f->table? rb_str_freeze(rb_tainted_str_new2(f->table)): Qnil);
- rb_iv_set(obj, "def", f->def? rb_str_freeze(rb_tainted_str_new2(f->def)): Qnil);
+ rb_iv_set(obj, "name", f->name? rb_str_freeze(rb_str_new_cstr(f->name)): Qnil);
+ rb_iv_set(obj, "table", f->table? rb_str_freeze(rb_str_new_cstr(f->table)): Qnil);
+ rb_iv_set(obj, "def", f->def? rb_str_freeze(rb_str_new_cstr(f->def)): Qnil);
rb_iv_set(obj, "type", INT2NUM(f->type));
rb_iv_set(obj, "length", INT2NUM(f->length));
rb_iv_set(obj, "max_length", INT2NUM(f->max_length));
@@ -273,7 +273,10 @@ static VALUE real_connect(int argc, VALUE* argv, VALUE
rb_thread_start_timer();
#endif
Expand All @@ -11,6 +33,15 @@
myp->connection = Qtrue;
myp->query_with_result = Qtrue;
rb_obj_call_init(obj, argc, argv);
@@ -294,7 +297,7 @@ static VALUE escape_string(VALUE klass, VALUE str)
/* client_info() */
static VALUE client_info(VALUE klass)
{
- return rb_tainted_str_new2(mysql_get_client_info());
+ return rb_str_new_cstr(mysql_get_client_info());
}

#if MYSQL_VERSION_ID >= 32332
@@ -347,7 +350,10 @@ static VALUE real_connect2(int argc, VALUE* argv, VALU
#ifdef HAVE_RB_THREAD_START_TIMER
rb_thread_start_timer();
Expand All @@ -22,6 +53,77 @@
GetMysqlStruct(obj)->connection = Qtrue;

return obj;
@@ -469,7 +475,7 @@ static VALUE change_user(int argc, VALUE* argv, VALUE
/* character_set_name() */
static VALUE character_set_name(VALUE obj)
{
- return rb_tainted_str_new2(mysql_character_set_name(GetHandler(obj)));
+ return rb_str_new_cstr(mysql_character_set_name(GetHandler(obj)));
}
#endif

@@ -534,7 +540,7 @@ static VALUE field_count(VALUE obj)
/* host_info() */
static VALUE host_info(VALUE obj)
{
- return rb_tainted_str_new2(mysql_get_host_info(GetHandler(obj)));
+ return rb_str_new_cstr(mysql_get_host_info(GetHandler(obj)));
}

/* proto_info() */
@@ -546,14 +552,14 @@ static VALUE proto_info(VALUE obj)
/* server_info() */
static VALUE server_info(VALUE obj)
{
- return rb_tainted_str_new2(mysql_get_server_info(GetHandler(obj)));
+ return rb_str_new_cstr(mysql_get_server_info(GetHandler(obj)));
}

/* info() */
static VALUE info(VALUE obj)
{
const char* p = mysql_info(GetHandler(obj));
- return p? rb_tainted_str_new2(p): Qnil;
+ return p? rb_str_new_cstr(p): Qnil;
}

/* insert_id() */
@@ -588,7 +594,7 @@ static VALUE list_dbs(int argc, VALUE* argv, VALUE obj
n = mysql_num_rows(res);
ret = rb_ary_new2(n);
for (i=0; i<n; i++)
- rb_ary_store(ret, i, rb_tainted_str_new2(mysql_fetch_row(res)[0]));
+ rb_ary_store(ret, i, rb_str_new_cstr(mysql_fetch_row(res)[0]));
mysql_free_result(res);
return ret;
}
@@ -633,7 +639,7 @@ static VALUE list_tables(int argc, VALUE* argv, VALUE
n = mysql_num_rows(res);
ret = rb_ary_new2(n);
for (i=0; i<n; i++)
- rb_ary_store(ret, i, rb_tainted_str_new2(mysql_fetch_row(res)[0]));
+ rb_ary_store(ret, i, rb_str_new_cstr(mysql_fetch_row(res)[0]));
mysql_free_result(res);
return ret;
}
@@ -697,7 +703,7 @@ static VALUE my_stat(VALUE obj)
const char* s = mysql_stat(m);
if (s == NULL)
mysql_raise(m);
- return rb_tainted_str_new2(s);
+ return rb_str_new_cstr(s);
}

/* store_result() */
@@ -864,7 +870,7 @@ static VALUE set_server_option(VALUE obj, VALUE option
static VALUE sqlstate(VALUE obj)
{
MYSQL *m = GetHandler(obj);
- return rb_tainted_str_new2(mysql_sqlstate(m));
+ return rb_str_new_cstr(mysql_sqlstate(m));
}
#endif

@@ -875,12 +881,12 @@ static VALUE stmt_init(VALUE obj)
MYSQL *m = GetHandler(obj);
MYSQL_STMT *s;
Expand Down Expand Up @@ -59,6 +161,24 @@
return flag;
}

@@ -1053,7 +1067,7 @@ static VALUE fetch_hash2(VALUE obj, VALUE with_table)
if (colname == Qnil) {
colname = rb_ary_new2(n);
for (i=0; i<n; i++) {
- VALUE s = rb_tainted_str_new2(fields[i].name);
+ VALUE s = rb_str_new_cstr(fields[i].name);
rb_obj_freeze(s);
rb_ary_store(colname, i, s);
}
@@ -1257,7 +1271,7 @@ static void mysql_stmt_raise(MYSQL_STMT* s)
{
VALUE e = rb_exc_new2(eMysql, mysql_stmt_error(s));
rb_iv_set(e, "errno", INT2FIX(mysql_stmt_errno(s)));
- rb_iv_set(e, "sqlstate", rb_tainted_str_new2(mysql_stmt_sqlstate(s)));
+ rb_iv_set(e, "sqlstate", rb_str_new_cstr(mysql_stmt_sqlstate(s)));
rb_exc_raise(e);
}

@@ -1317,7 +1331,7 @@ static VALUE stmt_bind_result(int argc, VALUE *argv, V
}
else if (argv[i] == rb_cString)
Expand All @@ -68,6 +188,15 @@
s->result.bind[i].buffer_type = MYSQL_TYPE_LONGLONG;
else if (argv[i] == rb_cFloat)
s->result.bind[i].buffer_type = MYSQL_TYPE_DOUBLE;
@@ -1762,7 +1776,7 @@ static VALUE stmt_send_long_data(VALUE obj, VALUE col,
static VALUE stmt_sqlstate(VALUE obj)
{
struct mysql_stmt* s = DATA_PTR(obj);
- return rb_tainted_str_new2(mysql_stmt_sqlstate(s->stmt));
+ return rb_str_new_cstr(mysql_stmt_sqlstate(s->stmt));
}

/*-------------------------------
@@ -1884,6 +1898,7 @@ static VALUE error_sqlstate(VALUE obj)

void Init_mysql_api(void)
Expand Down

0 comments on commit 27c87a9

Please sign in to comment.