--- 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";
}