$OpenBSD: patch-ext_mysql_api_mysql_c,v 1.4 2020/11/11 02:39:12 jeremy Exp $

Allow building with ruby 2.4+.
Allow building with recent mariadb releases, which do not support automatic
reconnection. This makes the reconnect setting always false. Also, make
Mysql#close not cause a crash if called more than once.

Index: ext/mysql_api/mysql.c
--- ext/mysql_api/mysql.c.orig
+++ ext/mysql_api/mysql.c
@@ -273,7 +273,6 @@ static VALUE real_connect(int argc, VALUE* argv, VALUE
     rb_thread_start_timer();
 #endif
 
-    myp->handler.reconnect = 0;
     myp->connection = Qtrue;
     myp->query_with_result = Qtrue;
     rb_obj_call_init(obj, argc, argv);
@@ -347,7 +346,6 @@ static VALUE real_connect2(int argc, VALUE* argv, VALU
 #ifdef HAVE_RB_THREAD_START_TIMER
     rb_thread_start_timer();
 #endif
-    m->reconnect = 0;
     GetMysqlStruct(obj)->connection = Qtrue;
 
     return obj;
@@ -477,8 +475,10 @@ static VALUE character_set_name(VALUE obj)
 static VALUE my_close(VALUE obj)
 {
     MYSQL* m = GetHandler(obj);
-    mysql_close(m);
-    GetMysqlStruct(obj)->connection = Qfalse;
+    if (RTEST(GetMysqlStruct(obj)->connection)) {
+	mysql_close(m);
+	GetMysqlStruct(obj)->connection = Qfalse;
+    }
     return obj;
 }
 
@@ -875,12 +875,12 @@ static VALUE stmt_init(VALUE obj)
     MYSQL *m = GetHandler(obj);
     MYSQL_STMT *s;
     struct mysql_stmt* stmt;
-    my_bool true = 1;
+    my_bool mtrue = 1;
     VALUE st_obj;
 
     if ((s = mysql_stmt_init(m)) == NULL)
 	mysql_raise(m);
-    if (mysql_stmt_attr_set(s, STMT_ATTR_UPDATE_MAX_LENGTH, &true))
+    if (mysql_stmt_attr_set(s, STMT_ATTR_UPDATE_MAX_LENGTH, &mtrue))
 	rb_raise(rb_eArgError, "mysql_stmt_attr_set() failed");
     st_obj = Data_Make_Struct(cMysqlStmt, struct mysql_stmt, 0, free_mysqlstmt, stmt);
     memset(stmt, 0, sizeof(*stmt));
@@ -917,13 +917,12 @@ static VALUE query_with_result_set(VALUE obj, VALUE fl
 /*	reconnect()	*/
 static VALUE reconnect(VALUE obj)
 {
-    return GetHandler(obj)->reconnect ? Qtrue : Qfalse;
+    return Qfalse;
 }
 
 /*	reconnect=(flag)	*/
 static VALUE reconnect_set(VALUE obj, VALUE flag)
 {
-    GetHandler(obj)->reconnect = (flag == Qnil || flag == Qfalse) ? 0 : 1;
     return flag;
 }
 
@@ -1317,7 +1316,7 @@ static VALUE stmt_bind_result(int argc, VALUE *argv, V
 	}
 	else if (argv[i] == rb_cString)
 	    s->result.bind[i].buffer_type = MYSQL_TYPE_STRING;
-	else if (argv[i] == rb_cNumeric || argv[i] == rb_cInteger || argv[i] == rb_cFixnum)
+	else if (argv[i] == rb_cNumeric || argv[i] == rb_cInteger)
 	    s->result.bind[i].buffer_type = MYSQL_TYPE_LONGLONG;
 	else if (argv[i] == rb_cFloat)
 	    s->result.bind[i].buffer_type = MYSQL_TYPE_DOUBLE;
