Skip to content

Commit cef4bf9

Browse files
committed
Factor out result @query_options into a separate function.
1 parent 1e8eb4a commit cef4bf9

File tree

1 file changed

+33
-28
lines changed

1 file changed

+33
-28
lines changed

ext/mysql2/result.c

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -444,9 +444,40 @@ static VALUE rb_mysql_result_fetch_fields(VALUE self) {
444444
return wrapper->fields;
445445
}
446446

447+
static void rb_mysql_row_query_options(VALUE opts, ID *db_timezone, ID *app_timezone, int *symbolizeKeys, int *asArray, int *castBool, int *cast, int *cacheRows) {
448+
ID dbTz, appTz;
449+
450+
*symbolizeKeys = RTEST(rb_hash_aref(opts, sym_symbolize_keys));
451+
*asArray = rb_hash_aref(opts, sym_as) == sym_array;
452+
*castBool = RTEST(rb_hash_aref(opts, sym_cast_booleans));
453+
*cacheRows = RTEST(rb_hash_aref(opts, sym_cache_rows));
454+
*cast = RTEST(rb_hash_aref(opts, sym_cast));
455+
456+
dbTz = rb_hash_aref(opts, sym_database_timezone);
457+
if (dbTz == sym_local) {
458+
*db_timezone = intern_local;
459+
} else if (dbTz == sym_utc) {
460+
*db_timezone = intern_utc;
461+
} else {
462+
if (!NIL_P(dbTz)) {
463+
rb_warn(":database_timezone option must be :utc or :local - defaulting to :local");
464+
}
465+
*db_timezone = intern_local;
466+
}
467+
468+
appTz = rb_hash_aref(opts, sym_application_timezone);
469+
if (appTz == sym_local) {
470+
*app_timezone = intern_local;
471+
} else if (appTz == sym_utc) {
472+
*app_timezone = intern_utc;
473+
} else {
474+
*app_timezone = Qnil;
475+
}
476+
}
477+
447478
static VALUE rb_mysql_result_each(int argc, VALUE * argv, VALUE self) {
448479
VALUE defaults, opts, block;
449-
ID db_timezone, app_timezone, dbTz, appTz;
480+
ID db_timezone, app_timezone;
450481
mysql2_result_wrapper * wrapper;
451482
unsigned long i;
452483
const char * errstr;
@@ -461,38 +492,12 @@ static VALUE rb_mysql_result_each(int argc, VALUE * argv, VALUE self) {
461492
} else {
462493
opts = defaults;
463494
}
464-
465-
symbolizeKeys = RTEST(rb_hash_aref(opts, sym_symbolize_keys));
466-
asArray = rb_hash_aref(opts, sym_as) == sym_array;
467-
castBool = RTEST(rb_hash_aref(opts, sym_cast_booleans));
468-
cacheRows = RTEST(rb_hash_aref(opts, sym_cache_rows));
469-
cast = RTEST(rb_hash_aref(opts, sym_cast));
495+
rb_mysql_row_query_options(opts, &db_timezone, &app_timezone, &symbolizeKeys, &asArray, &castBool, &cast, &cacheRows);
470496

471497
if (wrapper->is_streaming && cacheRows) {
472498
rb_warn("cacheRows is ignored if streaming is true");
473499
}
474500

475-
dbTz = rb_hash_aref(opts, sym_database_timezone);
476-
if (dbTz == sym_local) {
477-
db_timezone = intern_local;
478-
} else if (dbTz == sym_utc) {
479-
db_timezone = intern_utc;
480-
} else {
481-
if (!NIL_P(dbTz)) {
482-
rb_warn(":database_timezone option must be :utc or :local - defaulting to :local");
483-
}
484-
db_timezone = intern_local;
485-
}
486-
487-
appTz = rb_hash_aref(opts, sym_application_timezone);
488-
if (appTz == sym_local) {
489-
app_timezone = intern_local;
490-
} else if (appTz == sym_utc) {
491-
app_timezone = intern_utc;
492-
} else {
493-
app_timezone = Qnil;
494-
}
495-
496501
if (wrapper->is_streaming) {
497502
/* When streaming, we will only yield rows, not return them. */
498503
if (wrapper->rows == Qnil) {

0 commit comments

Comments
 (0)