Skip to content

Commit 71aeff0

Browse files
committed
Fix crash on DATETIME null result
Fixes #10
1 parent bf27d7a commit 71aeff0

1 file changed

Lines changed: 25 additions & 21 deletions

File tree

src/res.cpp

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -39,27 +39,31 @@ game_value Result::cmd_toArray(game_state&, game_value_parameter right) {
3939
auto_array<game_value> row;
4040

4141
for (mariadb::u32 i = 0u; i < res->column_count(); ++i) {
42-
switch (res->column_type(i)) {
43-
case mariadb::value::null: row.emplace_back(game_value{}); break;
44-
case mariadb::value::date: row.emplace_back(res->get_date(i).str()); break;
45-
case mariadb::value::date_time: row.emplace_back(res->get_date_time(i).str()); break;
46-
case mariadb::value::time: row.emplace_back(res->get_time(i).str_time()); break;
47-
case mariadb::value::string: row.emplace_back(res->get_string(i)); break;
48-
case mariadb::value::boolean: row.emplace_back(res->get_boolean(i)); break;
49-
case mariadb::value::decimal: row.emplace_back(res->get_decimal(i).float32()); break;
50-
case mariadb::value::unsigned8: row.emplace_back(static_cast<float>(res->get_unsigned8(i))); break;
51-
case mariadb::value::signed8: row.emplace_back(static_cast<float>(res->get_signed8(i))); break;
52-
case mariadb::value::unsigned16: row.emplace_back(static_cast<float>(res->get_unsigned16(i))); break;
53-
case mariadb::value::signed16: row.emplace_back(static_cast<float>(res->get_signed16(i))); break;
54-
case mariadb::value::unsigned32: row.emplace_back(static_cast<float>(res->get_unsigned32(i))); break;
55-
case mariadb::value::signed32: row.emplace_back(static_cast<float>(res->get_signed32(i))); break;
56-
case mariadb::value::unsigned64: row.emplace_back(static_cast<float>(res->get_unsigned64(i))); break;
57-
case mariadb::value::signed64: row.emplace_back(static_cast<float>(res->get_signed64(i))); break;
58-
case mariadb::value::float32: row.emplace_back(res->get_float(i)); break;
59-
case mariadb::value::double64: row.emplace_back(static_cast<float>(res->get_double(i))); break;
60-
case mariadb::value::enumeration: row.emplace_back(res->get_string(i)); break;
61-
case mariadb::value::blob: row.emplace_back(res->get_blobString(i)); break;
62-
default: ;
42+
try {
43+
switch (res->column_type(i)) {
44+
case mariadb::value::null: row.emplace_back(game_value{}); break;
45+
case mariadb::value::date: row.emplace_back(res->get_date(i).str()); break;
46+
case mariadb::value::date_time: row.emplace_back(res->get_date_time(i).str()); break;
47+
case mariadb::value::time: row.emplace_back(res->get_time(i).str_time()); break;
48+
case mariadb::value::string: row.emplace_back(res->get_string(i)); break;
49+
case mariadb::value::boolean: row.emplace_back(res->get_boolean(i)); break;
50+
case mariadb::value::decimal: row.emplace_back(res->get_decimal(i).float32()); break;
51+
case mariadb::value::unsigned8: row.emplace_back(static_cast<float>(res->get_unsigned8(i))); break;
52+
case mariadb::value::signed8: row.emplace_back(static_cast<float>(res->get_signed8(i))); break;
53+
case mariadb::value::unsigned16: row.emplace_back(static_cast<float>(res->get_unsigned16(i))); break;
54+
case mariadb::value::signed16: row.emplace_back(static_cast<float>(res->get_signed16(i))); break;
55+
case mariadb::value::unsigned32: row.emplace_back(static_cast<float>(res->get_unsigned32(i))); break;
56+
case mariadb::value::signed32: row.emplace_back(static_cast<float>(res->get_signed32(i))); break;
57+
case mariadb::value::unsigned64: row.emplace_back(static_cast<float>(res->get_unsigned64(i))); break;
58+
case mariadb::value::signed64: row.emplace_back(static_cast<float>(res->get_signed64(i))); break;
59+
case mariadb::value::float32: row.emplace_back(res->get_float(i)); break;
60+
case mariadb::value::double64: row.emplace_back(static_cast<float>(res->get_double(i))); break;
61+
case mariadb::value::enumeration: row.emplace_back(res->get_string(i)); break;
62+
case mariadb::value::blob: row.emplace_back(res->get_blobString(i)); break;
63+
default: ;
64+
}
65+
} catch (std::invalid_argument & x) {//get_date_time getting "NULL"
66+
row.emplace_back("NULL"sv); break;
6367
}
6468
}
6569
result.emplace_back(std::move(row));

0 commit comments

Comments
 (0)