--- a/include/relpipe/reader/handlers/AttributeMetadata.h Sat Sep 15 23:22:50 2018 +0200
+++ b/include/relpipe/reader/handlers/AttributeMetadata.h Sun Sep 16 00:42:42 2018 +0200
@@ -1,5 +1,7 @@
#pragma once
+#include <memory>
+
#include "../TypeId.h"
namespace relpipe {
@@ -10,11 +12,10 @@
class AttributeMetadata {
private:
- AttributeMetadataPrivate* impl;
+ std::shared_ptr<AttributeMetadataPrivate> impl;
public:
- ~AttributeMetadata();
- AttributeMetadata(AttributeMetadataPrivate* impl) :
+ AttributeMetadata(std::shared_ptr<AttributeMetadataPrivate> impl) :
impl(impl) {
}
--- a/src/AttributeMetadataPrivate.h Sat Sep 15 23:22:50 2018 +0200
+++ b/src/AttributeMetadataPrivate.h Sun Sep 16 00:42:42 2018 +0200
@@ -15,11 +15,6 @@
string_t typeName;
};
-AttributeMetadata::~AttributeMetadata() {
- // delete impl;
- std::cout << "FIXME: delete impl in ~AttributeMetadata() but no double-delete / smart pointer" << std::endl;
-}
-
string_t AttributeMetadata::getAttributeName() const {
return impl->attributeName;
}
--- a/src/StreamRelationalReader.h Sat Sep 15 23:22:50 2018 +0200
+++ b/src/StreamRelationalReader.h Sun Sep 16 00:42:42 2018 +0200
@@ -5,6 +5,7 @@
#include <vector>
#include <relpipe/protocol/constants.h>
+#include <memory>
#include "../include/relpipe/reader/typedefs.h"
#include "../include/relpipe/reader/RelationalReader.h"
@@ -25,6 +26,8 @@
using StringHandler = relpipe::reader::handlers::RelationalReaderStringHadler;
using ValuesHandler = relpipe::reader::handlers::RelationalReaderValueHadler;
+using AttributeMetadata = relpipe::reader::handlers::AttributeMetadata;
+using AttributeMetadataPrivate = relpipe::reader::handlers::AttributeMetadataPrivate;
class StreamRelationalReader : public RelationalReader {
private:
@@ -51,7 +54,7 @@
*/
std::vector<TypeId> columnTypes;
std::vector<string_t> columnNames;
- std::vector<handlers::AttributeMetadata> columns;
+ std::vector<AttributeMetadata> columns;
/**
* TODO: remove?
@@ -158,7 +161,7 @@
columnTypes.push_back(typeId);
// put together names, type ids and type codes:
- columns.push_back(handlers::AttributeMetadata(new handlers::AttributeMetadataPrivate({columnNames[i], columnTypes[i], typeCode})));
+ columns.push_back(std::shared_ptr<AttributeMetadataPrivate>(new AttributeMetadataPrivate({columnNames[i], columnTypes[i], typeCode})));
}
for (StringHandler* handler : stringHandlers) handler->startRelation(tableName, columns);