diff --git a/src/sql/session.cpp b/src/sql/session.cpp index aae935d..906db2b 100644 --- a/src/sql/session.cpp +++ b/src/sql/session.cpp @@ -50,9 +50,14 @@ query_result session::fetch(const query &q) const if (it == prototypes_.end()) { it = prototypes_.emplace(q.table_name, c->describe(q.table_name)).first; } + // adjust columns from given query + for (auto &col : q.prototype) { + if (const auto rit = it->second.find(col.name()); col.type() == data_type_t::type_unknown && rit != it->second.end()) { + const_cast(col).type(rit->type()); + } + } auto res = c->call_fetch(q.sql); return query_result{std::move(res), q.prototype}; -// return query_result{std::move(res), [it]() { return new record(it->second); }}; } //query_result session::fetch(const std::string &sql) const diff --git a/test/SessionTest.cpp b/test/SessionTest.cpp index 05dfe4b..0534ec1 100644 --- a/test/SessionTest.cpp +++ b/test/SessionTest.cpp @@ -72,13 +72,13 @@ TEST_CASE("Execute select statement with where clause", "[session]") { for (const auto& i : result_record) { REQUIRE(i.size() == 3); REQUIRE(i.at(0).name() == "id"); - REQUIRE(i.at(0).type() == data_type_t::type_long_long); + REQUIRE(i.at(0).type() == data_type_t::type_unsigned_long); REQUIRE(i.at(0).as() == george.id); REQUIRE(i.at(1).name() == "name"); REQUIRE(i.at(1).type() == data_type_t::type_varchar); REQUIRE(i.at(1).as() == george.name); REQUIRE(i.at(2).name() == "age"); - REQUIRE(i.at(2).type() == matador::sql::data_type_t::type_long_long); + REQUIRE(i.at(2).type() == matador::sql::data_type_t::type_unsigned_int); REQUIRE(i.at(2).as() == george.age); }