Skip to content

Commit 18d988a

Browse files
committed
Fix a few declarations and variable usage in statement.c
1 parent e84933b commit 18d988a

File tree

1 file changed

+34
-30
lines changed

1 file changed

+34
-30
lines changed

ext/mysql2/statement.c

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
VALUE cMysql2Statement;
44
extern VALUE mMysql2, cMysql2Error, cBigDecimal, cDateTime, cDate;
55
static VALUE sym_stream, intern_error_number_eql, intern_sql_state_eql, intern_each;
6+
static VALUE intern_usec, intern_sec, intern_min, intern_hour, intern_day, intern_month, intern_year;
67

78
#define GET_STATEMENT(self) \
89
mysql_stmt_wrapper *stmt_wrapper; \
@@ -205,26 +206,28 @@ static void *nogvl_stmt_store_result(void *ptr) {
205206
*/
206207
static VALUE execute(int argc, VALUE *argv, VALUE self) {
207208
MYSQL_BIND *bind_buffers = NULL;
209+
unsigned long *length_buffers = NULL;
208210
unsigned long bind_count;
209211
long i;
210212
MYSQL_STMT *stmt;
211213
MYSQL_RES *metadata;
212214
VALUE current;
213215
VALUE resultObj;
214-
VALUE *params_enc = alloca(sizeof(VALUE) * argc);
215-
unsigned long* length_buffers = NULL;
216-
int is_streaming = 0;
216+
VALUE *params_enc;
217+
int is_streaming;
218+
#ifdef HAVE_RUBY_ENCODING_H
219+
rb_encoding *conn_enc;
220+
#endif
221+
217222
GET_STATEMENT(self);
218223
GET_CLIENT(stmt_wrapper->client);
224+
219225
#ifdef HAVE_RUBY_ENCODING_H
220-
rb_encoding *conn_enc = rb_to_encoding(wrapper->encoding);
226+
conn_enc = rb_to_encoding(wrapper->encoding);
221227
#endif
222-
{
223-
VALUE valStreaming = rb_hash_aref(rb_iv_get(stmt_wrapper->client, "@query_options"), sym_stream);
224-
if(valStreaming == Qtrue) {
225-
is_streaming = 1;
226-
}
227-
}
228+
229+
/* Scratch space for string encoding exports, allocate on the stack. */
230+
params_enc = alloca(sizeof(VALUE) * argc);
228231

229232
stmt = stmt_wrapper->stmt;
230233

@@ -291,13 +294,13 @@ static VALUE execute(int argc, VALUE *argv, VALUE self) {
291294

292295
memset(&t, 0, sizeof(MYSQL_TIME));
293296
t.neg = 0;
294-
t.second_part = FIX2INT(rb_funcall(rb_time, rb_intern("usec"), 0));
295-
t.second = FIX2INT(rb_funcall(rb_time, rb_intern("sec"), 0));
296-
t.minute = FIX2INT(rb_funcall(rb_time, rb_intern("min"), 0));
297-
t.hour = FIX2INT(rb_funcall(rb_time, rb_intern("hour"), 0));
298-
t.day = FIX2INT(rb_funcall(rb_time, rb_intern("day"), 0));
299-
t.month = FIX2INT(rb_funcall(rb_time, rb_intern("month"), 0));
300-
t.year = FIX2INT(rb_funcall(rb_time, rb_intern("year"), 0));
297+
t.second_part = FIX2INT(rb_funcall(rb_time, intern_usec, 0));
298+
t.second = FIX2INT(rb_funcall(rb_time, intern_sec, 0));
299+
t.minute = FIX2INT(rb_funcall(rb_time, intern_min, 0));
300+
t.hour = FIX2INT(rb_funcall(rb_time, intern_hour, 0));
301+
t.day = FIX2INT(rb_funcall(rb_time, intern_day, 0));
302+
t.month = FIX2INT(rb_funcall(rb_time, intern_month, 0));
303+
t.year = FIX2INT(rb_funcall(rb_time, intern_year, 0));
301304

302305
*(MYSQL_TIME*)(bind_buffers[i].buffer) = t;
303306
} else if (CLASS_OF(argv[i]) == cDate) {
@@ -310,9 +313,9 @@ static VALUE execute(int argc, VALUE *argv, VALUE self) {
310313
memset(&t, 0, sizeof(MYSQL_TIME));
311314
t.second_part = 0;
312315
t.neg = 0;
313-
t.day = FIX2INT(rb_funcall(rb_time, rb_intern("day"), 0));
314-
t.month = FIX2INT(rb_funcall(rb_time, rb_intern("month"), 0));
315-
t.year = FIX2INT(rb_funcall(rb_time, rb_intern("year"), 0));
316+
t.day = FIX2INT(rb_funcall(rb_time, intern_day, 0));
317+
t.month = FIX2INT(rb_funcall(rb_time, intern_month, 0));
318+
t.year = FIX2INT(rb_funcall(rb_time, intern_year, 0));
316319

317320
*(MYSQL_TIME*)(bind_buffers[i].buffer) = t;
318321
} else if (CLASS_OF(argv[i]) == cBigDecimal) {
@@ -349,7 +352,10 @@ static VALUE execute(int argc, VALUE *argv, VALUE self) {
349352
}
350353

351354
current = rb_hash_dup(rb_iv_get(stmt_wrapper->client, "@query_options"));
355+
(void)RB_GC_GUARD(current);
356+
Check_Type(current, T_HASH);
352357

358+
is_streaming = (Qtrue == rb_hash_aref(current, sym_stream));
353359
if (!is_streaming) {
354360
// recieve the whole result set from the server
355361
if (rb_thread_call_without_gvl(nogvl_stmt_store_result, stmt, RUBY_UBF_IO, 0) == Qfalse) {
@@ -360,16 +366,6 @@ static VALUE execute(int argc, VALUE *argv, VALUE self) {
360366

361367
resultObj = rb_mysql_result_to_obj(stmt_wrapper->client, wrapper->encoding, current, metadata, stmt);
362368

363-
#ifdef HAVE_RUBY_ENCODING_H
364-
{
365-
mysql2_result_wrapper *result_wrapper;
366-
367-
GET_CLIENT(stmt_wrapper->client);
368-
GetMysql2Result(resultObj, result_wrapper);
369-
result_wrapper->encoding = wrapper->encoding;
370-
}
371-
#endif
372-
373369
if (!is_streaming) {
374370
// cache all result
375371
rb_funcall(resultObj, intern_each, 0);
@@ -439,4 +435,12 @@ void init_mysql2_statement() {
439435
intern_error_number_eql = rb_intern("error_number=");
440436
intern_sql_state_eql = rb_intern("sql_state=");
441437
intern_each = rb_intern("each");
438+
439+
intern_usec = rb_intern("usec");
440+
intern_sec = rb_intern("sec");
441+
intern_min = rb_intern("min");
442+
intern_hour = rb_intern("hour");
443+
intern_day = rb_intern("day");
444+
intern_month = rb_intern("month");
445+
intern_year = rb_intern("year");
442446
}

0 commit comments

Comments
 (0)