src/SqlHandler.h
branchv_0
changeset 37 3de41719d7eb
parent 36 91cb012d779a
child 47 428c278af4be
--- 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) {