Skip to content

Commit cc3797e

Browse files
committed
Work around statement.c
1 parent af040c9 commit cc3797e

File tree

3 files changed

+12
-18
lines changed

3 files changed

+12
-18
lines changed

ext/mysql2/extconf.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ def asplode lib
100100

101101
# This is our wishlist. We use whichever flags work on the host.
102102
# -Wall and -Wextra are included by default.
103+
# TODO: fix statement.c and remove -Wno-error=declaration-after-statement
103104
%w(
104105
-Werror
105106
-Weverything
@@ -109,6 +110,7 @@ def asplode lib
109110
-fsanitize=memory
110111
-fsanitize=undefined
111112
-fsanitize=cfi
113+
-Wno-error=declaration-after-statement
112114
).each do |flag|
113115
if try_link('int main() {return 0;}', flag)
114116
$CFLAGS << ' ' << flag

ext/mysql2/result.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -848,7 +848,7 @@ static VALUE rb_mysql_result_each_(VALUE self,
848848

849849
static VALUE rb_mysql_result_each(int argc, VALUE * argv, VALUE self) {
850850
result_each_args args;
851-
VALUE defaults, opts, block;
851+
VALUE defaults, opts, block, (*fetch_row_func)(VALUE, MYSQL_FIELD *fields, const result_each_args *args);
852852
ID db_timezone, app_timezone, dbTz, appTz;
853853
mysql2_result_wrapper * wrapper;
854854
int symbolizeKeys, asArray, castBool, cacheRows, cast;
@@ -921,7 +921,6 @@ static VALUE rb_mysql_result_each(int argc, VALUE * argv, VALUE self) {
921921
args.app_timezone = app_timezone;
922922
args.block_given = block;
923923

924-
VALUE (*fetch_row_func)(VALUE, MYSQL_FIELD *fields, const result_each_args *args);
925924
if (wrapper->stmt) {
926925
fetch_row_func = rb_mysql_result_fetch_row_stmt;
927926
} else {

ext/mysql2/statement.c

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ VALUE rb_raise_mysql2_stmt_error2(MYSQL_STMT *stmt
3131
) {
3232
VALUE rb_error_msg = rb_str_new2(mysql_stmt_error(stmt));
3333
VALUE rb_sql_state = rb_tainted_str_new2(mysql_stmt_sqlstate(stmt));
34+
VALUE e = rb_exc_new3(cMysql2Error, rb_error_msg);
3435
#ifdef HAVE_RUBY_ENCODING_H
3536
rb_encoding *default_internal_enc = rb_default_internal_encoding();
3637

@@ -41,8 +42,6 @@ VALUE rb_raise_mysql2_stmt_error2(MYSQL_STMT *stmt
4142
rb_sql_state = rb_str_export_to_enc(rb_sql_state, default_internal_enc);
4243
}
4344
#endif
44-
45-
VALUE e = rb_exc_new3(cMysql2Error, rb_error_msg);
4645
rb_funcall(e, intern_error_number_eql, 1, UINT2NUM(mysql_stmt_errno(stmt)));
4746
rb_funcall(e, intern_sql_state_eql, 1, rb_sql_state);
4847
rb_exc_raise(e);
@@ -209,19 +208,15 @@ static VALUE execute(int argc, VALUE *argv, VALUE self) {
209208
long i;
210209
MYSQL_STMT *stmt;
211210
MYSQL_RES *metadata;
211+
VALUE current;
212212
VALUE resultObj;
213213
VALUE *params_enc = alloca(sizeof(VALUE) * argc);
214214
unsigned long* length_buffers = NULL;
215215
int is_streaming = 0;
216-
#ifdef HAVE_RUBY_ENCODING_H
217-
rb_encoding *conn_enc;
218-
#endif
219216
GET_STATEMENT(self);
217+
GET_CLIENT(stmt_wrapper->client);
220218
#ifdef HAVE_RUBY_ENCODING_H
221-
{
222-
GET_CLIENT(stmt_wrapper->client);
223-
conn_enc = rb_to_encoding(wrapper->encoding);
224-
}
219+
rb_encoding *conn_enc = rb_to_encoding(wrapper->encoding);
225220
#endif
226221
{
227222
VALUE valStreaming = rb_hash_aref(rb_iv_get(stmt_wrapper->client, "@query_options"), sym_stream);
@@ -287,11 +282,12 @@ static VALUE execute(int argc, VALUE *argv, VALUE self) {
287282
default:
288283
// TODO: what Ruby type should support MYSQL_TYPE_TIME
289284
if (CLASS_OF(argv[i]) == rb_cTime || CLASS_OF(argv[i]) == cDateTime) {
285+
MYSQL_TIME t;
286+
VALUE rb_time = argv[i];
287+
290288
bind_buffers[i].buffer_type = MYSQL_TYPE_DATETIME;
291289
bind_buffers[i].buffer = xmalloc(sizeof(MYSQL_TIME));
292290

293-
MYSQL_TIME t;
294-
VALUE rb_time = argv[i];
295291
memset(&t, 0, sizeof(MYSQL_TIME));
296292
t.neg = 0;
297293
t.second_part = FIX2INT(rb_funcall(rb_time, rb_intern("usec"), 0));
@@ -304,13 +300,12 @@ static VALUE execute(int argc, VALUE *argv, VALUE self) {
304300

305301
*(MYSQL_TIME*)(bind_buffers[i].buffer) = t;
306302
} else if (CLASS_OF(argv[i]) == cDate) {
303+
MYSQL_TIME t;
304+
VALUE rb_time = argv[i];
307305

308306
bind_buffers[i].buffer_type = MYSQL_TYPE_DATE;
309-
310307
bind_buffers[i].buffer = xmalloc(sizeof(MYSQL_TIME));
311308

312-
MYSQL_TIME t;
313-
VALUE rb_time = argv[i];
314309
memset(&t, 0, sizeof(MYSQL_TIME));
315310
t.second_part = 0;
316311
t.neg = 0;
@@ -352,9 +347,7 @@ static VALUE execute(int argc, VALUE *argv, VALUE self) {
352347
return Qnil;
353348
}
354349

355-
VALUE current;
356350
current = rb_hash_dup(rb_iv_get(stmt_wrapper->client, "@query_options"));
357-
GET_CLIENT(stmt_wrapper->client);
358351

359352
if (!is_streaming) {
360353
// recieve the whole result set from the server

0 commit comments

Comments
 (0)