src/SqlHandler.h
branchv_0
changeset 48 c83119110c7b
parent 47 428c278af4be
child 58 a4907b207f0c
--- 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";
 	}