@@ -155,6 +155,8 @@ game_value Result::cmd_toArray(game_state&, game_value_parameter right) {
155155 auto_array<game_value> result;
156156
157157 const auto [dateParser, dateTimeParser, timeParser] = getDateParser (Config::get ().getDateType ());
158+ const auto parseTinyintAsBool = Config::get ().getTinyintAsBool ();
159+
158160 while (res->next ()) {
159161 auto_array<game_value> row;
160162
@@ -168,8 +170,18 @@ game_value Result::cmd_toArray(game_state&, game_value_parameter right) {
168170 case mariadb::value::string: row.emplace_back (res->get_string (i)); break ;
169171 case mariadb::value::boolean: row.emplace_back (res->get_boolean (i)); break ;
170172 case mariadb::value::decimal: row.emplace_back (res->get_decimal (i).float32 ()); break ;
171- case mariadb::value::unsigned8: row.emplace_back (static_cast <float >(res->get_unsigned8 (i))); break ;
172- case mariadb::value::signed8: row.emplace_back (static_cast <float >(res->get_signed8 (i))); break ;
173+ case mariadb::value::unsigned8: {
174+ if (parseTinyintAsBool && res->column_type_raw (i) == MYSQL_TYPE_TINY)
175+ row.emplace_back (static_cast <bool >(res->get_unsigned8 (i)));
176+ else
177+ row.emplace_back (static_cast <float >(res->get_unsigned8 (i)));
178+ } break ;
179+ case mariadb::value::signed8: {
180+ if (parseTinyintAsBool && res->column_type_raw (i) == MYSQL_TYPE_TINY)
181+ row.emplace_back (static_cast <bool >(res->get_signed8 (i)));
182+ else
183+ row.emplace_back (static_cast <float >(res->get_signed8 (i)));
184+ } break ;
173185 case mariadb::value::unsigned16: row.emplace_back (static_cast <float >(res->get_unsigned16 (i))); break ;
174186 case mariadb::value::signed16: row.emplace_back (static_cast <float >(res->get_signed16 (i))); break ;
175187 case mariadb::value::unsigned32: row.emplace_back (static_cast <float >(res->get_unsigned32 (i))); break ;
@@ -197,6 +209,7 @@ game_value Result::cmd_toParsedArray(game_state& state, game_value_parameter rig
197209 auto_array<game_value> result;
198210
199211 const auto [dateParser, dateTimeParser, timeParser] = getDateParser (Config::get ().getDateType ());
212+ const auto parseTinyintAsBool = Config::get ().getTinyintAsBool ();
200213
201214 while (res->next ()) {
202215 auto_array<game_value> row;
@@ -249,8 +262,18 @@ game_value Result::cmd_toParsedArray(game_state& state, game_value_parameter rig
249262 case mariadb::value::blob: addParsedString (res->get_blobString (i)); break ;
250263 case mariadb::value::boolean: row.emplace_back (res->get_boolean (i)); break ;
251264 case mariadb::value::decimal: row.emplace_back (res->get_decimal (i).float32 ()); break ;
252- case mariadb::value::unsigned8: row.emplace_back (static_cast <float >(res->get_unsigned8 (i))); break ;
253- case mariadb::value::signed8: row.emplace_back (static_cast <float >(res->get_signed8 (i))); break ;
265+ case mariadb::value::unsigned8: {
266+ if (parseTinyintAsBool && res->column_type_raw (i) == MYSQL_TYPE_TINY)
267+ row.emplace_back (static_cast <bool >(res->get_unsigned8 (i)));
268+ else
269+ row.emplace_back (static_cast <float >(res->get_unsigned8 (i)));
270+ } break ;
271+ case mariadb::value::signed8: {
272+ if (parseTinyintAsBool && res->column_type_raw (i) == MYSQL_TYPE_TINY)
273+ row.emplace_back (static_cast <bool >(res->get_signed8 (i)));
274+ else
275+ row.emplace_back (static_cast <float >(res->get_signed8 (i)));
276+ } break ;
254277 case mariadb::value::unsigned16: row.emplace_back (static_cast <float >(res->get_unsigned16 (i))); break ;
255278 case mariadb::value::signed16: row.emplace_back (static_cast <float >(res->get_signed16 (i))); break ;
256279 case mariadb::value::unsigned32: row.emplace_back (static_cast <float >(res->get_unsigned32 (i))); break ;
0 commit comments