equal
deleted
inserted
replaced
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'"'; |