Simplify patch, and make Mysql#close not crash if called more than once
This commit is contained in:
parent
6336fd55b2
commit
e828657b45
@ -1,9 +1,9 @@
|
||||
# $OpenBSD: Makefile,v 1.38 2019/07/12 20:44:01 sthen Exp $
|
||||
# $OpenBSD: Makefile,v 1.39 2020/11/11 02:39:12 jeremy Exp $
|
||||
|
||||
COMMENT= access a MySQL database from Ruby
|
||||
|
||||
DISTNAME= mysql-2.9.1
|
||||
REVISION= 3
|
||||
REVISION= 4
|
||||
CATEGORIES= databases
|
||||
|
||||
HOMEPAGE= http://tmtm.org/mysql/ruby/
|
||||
|
@ -1,89 +1,78 @@
|
||||
$OpenBSD: patch-ext_mysql_api_mysql_c,v 1.3 2019/05/08 22:33:32 jca Exp $
|
||||
$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.
|
||||
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
|
||||
@@ -3,6 +3,11 @@
|
||||
*/
|
||||
|
||||
#include <ruby.h>
|
||||
+#ifdef HAVE_RUBY_ENCODING_H
|
||||
+#include <ruby/version.h>
|
||||
+#else
|
||||
+#define RUBY_API_VERSION_CODE 10807
|
||||
+#endif
|
||||
#ifndef RSTRING_PTR
|
||||
#define RSTRING_PTR(str) RSTRING(str)->ptr
|
||||
#endif
|
||||
@@ -234,6 +239,7 @@ static VALUE real_connect(int argc, VALUE* argv, VALUE
|
||||
unsigned int pp, f;
|
||||
struct mysql* myp;
|
||||
VALUE obj;
|
||||
+ my_bool reconnect;
|
||||
|
||||
#if MYSQL_VERSION_ID >= 32200
|
||||
rb_scan_args(argc, argv, "07", &host, &user, &passwd, &db, &port, &sock, &flag);
|
||||
@@ -273,7 +279,8 @@ static VALUE real_connect(int argc, VALUE* argv, VALUE
|
||||
@@ -273,7 +273,6 @@ static VALUE real_connect(int argc, VALUE* argv, VALUE
|
||||
rb_thread_start_timer();
|
||||
#endif
|
||||
|
||||
- myp->handler.reconnect = 0;
|
||||
+ reconnect = 0;
|
||||
+ mysql_options(&myp->handler, MYSQL_OPT_RECONNECT, &reconnect);
|
||||
myp->connection = Qtrue;
|
||||
myp->query_with_result = Qtrue;
|
||||
rb_obj_call_init(obj, argc, argv);
|
||||
@@ -326,6 +333,7 @@ static VALUE real_connect2(int argc, VALUE* argv, VALU
|
||||
char *h, *u, *p, *d, *s;
|
||||
unsigned int pp, f;
|
||||
MYSQL* m = GetHandler(obj);
|
||||
+ my_bool reconnect;
|
||||
rb_scan_args(argc, argv, "07", &host, &user, &passwd, &db, &port, &sock, &flag);
|
||||
d = NILorSTRING(db);
|
||||
f = NILorINT(flag);
|
||||
@@ -347,7 +355,8 @@ static VALUE real_connect2(int argc, VALUE* argv, VALU
|
||||
@@ -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;
|
||||
+ reconnect = 0;
|
||||
+ mysql_options(&m, MYSQL_OPT_RECONNECT, &reconnect);
|
||||
GetMysqlStruct(obj)->connection = Qtrue;
|
||||
|
||||
return obj;
|
||||
@@ -917,13 +926,17 @@ static VALUE query_with_result_set(VALUE obj, VALUE fl
|
||||
@@ -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;
|
||||
+ my_bool reconnect;
|
||||
+ if (mysql_get_option(GetHandler(obj), MYSQL_OPT_RECONNECT, &reconnect))
|
||||
+ reconnect = 0;
|
||||
+ return reconnect ? Qtrue : Qfalse;
|
||||
+ return Qfalse;
|
||||
}
|
||||
|
||||
/* reconnect=(flag) */
|
||||
static VALUE reconnect_set(VALUE obj, VALUE flag)
|
||||
{
|
||||
- GetHandler(obj)->reconnect = (flag == Qnil || flag == Qfalse) ? 0 : 1;
|
||||
+ my_bool reconnect = (flag == Qnil || flag == Qfalse) ? 0 : 1;
|
||||
+ mysql_options(GetHandler(obj), MYSQL_OPT_RECONNECT, &reconnect);
|
||||
return flag;
|
||||
}
|
||||
|
||||
@@ -1317,7 +1330,11 @@ static VALUE stmt_bind_result(int argc, VALUE *argv, V
|
||||
@@ -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
|
||||
+#if (RUBY_API_VERSION_CODE < 20400)
|
||||
+ || argv[i] == rb_cFixnum
|
||||
+#endif
|
||||
+ )
|
||||
+ 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;
|
||||
|
Loading…
Reference in New Issue
Block a user