# HG changeset patch # User František Kučera # Date 1564494695 -7200 # Node ID 925b15fb5c630603dd8be2fd4a6459aa412f5b74 # Parent 0b932e05aa9f5c35cf074e1329cb32dafb3f9003 generate relational outputs diff -r 0b932e05aa9f -r 925b15fb5c63 src/SqlHandler.h --- a/src/SqlHandler.h Tue Jul 30 14:01:21 2019 +0200 +++ b/src/SqlHandler.h Tue Jul 30 15:51:35 2019 +0200 @@ -87,7 +87,8 @@ // TODO: sqlite3_column_type std::string getString(int columnIndex) { - return (char *) sqlite3_column_text(stmt, columnIndex); + const char* value = (const char*) sqlite3_column_text(stmt, columnIndex); + return value ? value : ""; // TODO: support NULL values (when supported in relpipe format) } }; @@ -132,13 +133,13 @@ prepared.setString(i + 1, convertor.to_bytes(statement.parameters[i].value)); } - for (int i = 0; i < columnCount; i++) { - printf("column %d ~ %s\n", i, prepared.getColumName(i).c_str()); - } + std::vector metadata; + for (int i = 0; i < columnCount; i++) metadata.push_back({convertor.from_bytes(prepared.getColumName(i).c_str()), relpipe::writer::TypeId::STRING}); + relationalWriter->startRelation(statement.relation, metadata, true); while (prepared.next()) { for (int i = 0; i < columnCount; i++) { - printf("column %d ~ %s = %s\n", i, prepared.getColumName(i).c_str(), prepared.getString(i).c_str()); + relationalWriter->writeAttribute(convertor.from_bytes(prepared.getString(i))); } } }