git: 27c87a9897f6 - main - databases/rubygem-mysql: fix build with mariadb 10.11 and ruby 3.2

From: Dirk Meyer <dinoex_at_FreeBSD.org>
Date: Sun, 21 Jan 2024 15:02:14 UTC
The branch main has been updated by dinoex:

URL: https://cgit.FreeBSD.org/ports/commit/?id=27c87a9897f6db98e8afc07c6584a53f3e8e9e27

commit 27c87a9897f6db98e8afc07c6584a53f3e8e9e27
Author:     Dirk Meyer <dinoex@FreeBSD.org>
AuthorDate: 2024-01-21 15:01:50 +0000
Commit:     Dirk Meyer <dinoex@FreeBSD.org>
CommitDate: 2024-01-21 15:01:50 +0000

    databases/rubygem-mysql: fix build with mariadb 10.11 and ruby 3.2
---
 databases/rubygem-mysql/Makefile                   |   2 +-
 .../files/patch-ext-mysql_api-extconf.rb           |  11 ++
 .../files/patch-ext-mysql_api-mysql.c              | 131 ++++++++++++++++++++-
 3 files changed, 142 insertions(+), 2 deletions(-)

diff --git a/databases/rubygem-mysql/Makefile b/databases/rubygem-mysql/Makefile
index 462c4779a28d..7309806b9962 100644
--- a/databases/rubygem-mysql/Makefile
+++ b/databases/rubygem-mysql/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	mysql
 PORTVERSION=	2.9.1
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	databases rubygems
 MASTER_SITES=	RG
 
diff --git a/databases/rubygem-mysql/files/patch-ext-mysql_api-extconf.rb b/databases/rubygem-mysql/files/patch-ext-mysql_api-extconf.rb
new file mode 100644
index 000000000000..945358044a3f
--- /dev/null
+++ b/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
diff --git a/databases/rubygem-mysql/files/patch-ext-mysql_api-mysql.c b/databases/rubygem-mysql/files/patch-ext-mysql_api-mysql.c
index ce59e04255ac..5f32c77d2cb3 100644
--- a/databases/rubygem-mysql/files/patch-ext-mysql_api-mysql.c
+++ b/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
@@ -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();
@@ -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;
@@ -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)
@@ -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)