src/SqlHandler.h
branchv_0
changeset 48 c83119110c7b
parent 47 428c278af4be
child 58 a4907b207f0c
equal deleted inserted replaced
47:428c278af4be 48:c83119110c7b
   115 		}
   115 		}
   116 		relationalWriter->startRelation(statement.relation, metadata, true);
   116 		relationalWriter->startRelation(statement.relation, metadata, true);
   117 
   117 
   118 		while (resultSet->next()) {
   118 		while (resultSet->next()) {
   119 			for (int columnNumber = 1; columnNumber <= columnCount; columnNumber++) {
   119 			for (int columnNumber = 1; columnNumber <= columnCount; columnNumber++) {
   120 				relationalWriter->writeAttribute(resultSet->getString(columnNumber));
   120 				// TODO: null values (when supported in the format)
       
   121 				if (metadata[columnNumber - 1].typeId == relpipe::writer::TypeId::BOOLEAN) {
       
   122 					auto booleanValue = resultSet->getBoolean(columnNumber);
       
   123 					relationalWriter->writeAttribute(&booleanValue, typeid (booleanValue));
       
   124 				} else if (metadata[columnNumber - 1].typeId == relpipe::writer::TypeId::INTEGER) {
       
   125 					auto integerValue = resultSet->getInteger(columnNumber);
       
   126 					relationalWriter->writeAttribute(&integerValue, typeid (integerValue));
       
   127 				} else {
       
   128 					relationalWriter->writeAttribute(resultSet->getString(columnNumber));
       
   129 				}
   121 			}
   130 			}
   122 		}
   131 		}
   123 	}
   132 	}
   124 
   133 
   125 	void copyRelations(const CopyRelations& copy) {
   134 	void copyRelations(const CopyRelations& copy) {
   144 			}
   153 			}
   145 		}
   154 		}
   146 	}
   155 	}
   147 
   156 
   148 	relpipe::writer::string_t toSQLType(relpipe::reader::TypeId typeId) {
   157 	relpipe::writer::string_t toSQLType(relpipe::reader::TypeId typeId) {
   149 		if (typeId == relpipe::reader::TypeId::BOOLEAN) return L"integer"; // TODO: map selected values back to booleans or allow optional storage as string 
   158 		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)
   150 		else if (typeId == relpipe::reader::TypeId::INTEGER) return L"integer";
   159 		else if (typeId == relpipe::reader::TypeId::INTEGER) return L"bigint";
   151 		else return L"text";
   160 		else return L"text";
   152 	}
   161 	}
   153 
   162 
   154 	void writeIdentifier(std::wstringstream& output, relpipe::writer::string_t identifier) {
   163 	void writeIdentifier(std::wstringstream& output, relpipe::writer::string_t identifier) {
   155 		output << L'"';
   164 		output << L'"';