diff -r 428c278af4be -r c83119110c7b src/SqlHandler.h --- a/src/SqlHandler.h Thu Jun 04 00:46:00 2020 +0200 +++ b/src/SqlHandler.h Thu Jun 04 13:24:17 2020 +0200 @@ -117,7 +117,16 @@ while (resultSet->next()) { for (int columnNumber = 1; columnNumber <= columnCount; columnNumber++) { - relationalWriter->writeAttribute(resultSet->getString(columnNumber)); + // TODO: null values (when supported in the format) + if (metadata[columnNumber - 1].typeId == relpipe::writer::TypeId::BOOLEAN) { + auto booleanValue = resultSet->getBoolean(columnNumber); + relationalWriter->writeAttribute(&booleanValue, typeid (booleanValue)); + } else if (metadata[columnNumber - 1].typeId == relpipe::writer::TypeId::INTEGER) { + auto integerValue = resultSet->getInteger(columnNumber); + relationalWriter->writeAttribute(&integerValue, typeid (integerValue)); + } else { + relationalWriter->writeAttribute(resultSet->getString(columnNumber)); + } } } } @@ -146,8 +155,8 @@ } relpipe::writer::string_t toSQLType(relpipe::reader::TypeId typeId) { - if (typeId == relpipe::reader::TypeId::BOOLEAN) return L"integer"; // TODO: map selected values back to booleans or allow optional storage as string - else if (typeId == relpipe::reader::TypeId::INTEGER) return L"integer"; + if (typeId == relpipe::reader::TypeId::BOOLEAN) return L"integer"; // TODO: bit type might fit better, but needs more testing (support in various DBMS and their drivers) + else if (typeId == relpipe::reader::TypeId::INTEGER) return L"bigint"; else return L"text"; }