--- a/src/SqlHandler.h Sun May 31 16:56:07 2020 +0200
+++ b/src/SqlHandler.h Sun May 31 21:20:24 2020 +0200
@@ -160,22 +160,18 @@
output << L'"';
}
+ Connection* getConnection() {
+ if (configuration.dataSourceName.size()) return driverManager->getConnectionByDSN(configuration.dataSourceName);
+ else if (configuration.dataSourceURL.size()) return driverManager->getConnectionByURL(configuration.dataSourceURL);
+ else return driverManager->getConnectionByURL(L"Driver=SQLite3;Database=:memory:");
+ // SQLite is default/fallback oprion
+ // TODO: use environmental variable to allow setting a different default
+ }
+
public:
SqlHandler(writer::RelationalWriter* relationalWriter, DriverManager* driverManager, Configuration& configuration) : relationalWriter(relationalWriter), driverManager(driverManager), configuration(configuration) {
- std::string file;
- if (configuration.file.size()) {
- file = convertor.to_bytes(configuration.file);
-
- // in C++17 we can use: std::filesystem::exists()
- struct stat fileStat;
- fileAlreadyExisted = (stat(file.c_str(), &fileStat) == 0);
- } else {
- file = ":memory:";
- }
-
- connection.reset(driverManager->getConnectionByDSN(L"sqlite-memory")); // FIXME: custom DSN and files
- connection.reset(driverManager->getConnectionByDSN(L"relpipe")); // FIXME: custom DSN and files
+ connection.reset(getConnection());
//connection->setAutoCommit(false);
}
@@ -266,15 +262,6 @@
for (const CopyRelations& copy : configuration.copyRelations) copyRelations(copy);
connection->commit();
-
- // delete or keep the file:
- if (configuration.file.size()) {
- if (configuration.keepFile == KeepFile::Never || (configuration.keepFile == KeepFile::Automatic && !fileAlreadyExisted)) {
- std::wcerr << L"will unlink file" << std::endl;
- int result = unlink(convertor.to_bytes(configuration.file).c_str());
- if (result) throw SqlException(L"Unable to delete SQLite file.");
- }
- } // else: we had no file, everything was in memory
}
static void listDataSources(writer::RelationalWriter* relationalWriter, DriverManager* driverManager) {