// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include "Database.hpp" namespace { template inline bool starts_with(const T &str, const T &start) { if (start.size() > str.size()) return false; return str.compare(0, start.size(), start) == 0; } template inline bool ends_with(const T &str, const T &end) { if (end.size() > str.size()) return false; return std::equal(end.rbegin(), end.rend(), str.rbegin()); } } // namespace class DatabaseInitializer { class ScopedFile { public: ScopedFile(std::string path, std::string mode) { file = vfs.fopen(path.c_str(), mode.c_str()); } ~ScopedFile() { vfs.fclose(file); } [[nodiscard]] auto get() const -> vfs::FILE * { return file; } private: vfs::FILE *file = nullptr; }; public: DatabaseInitializer(Database *db); ~DatabaseInitializer() = default; auto run(fs::path path, std::string ext = "sql") -> bool; auto readCommands(fs::path filePath) -> std::vector; auto listFiles(fs::path path, std::string prefix, std::string ext) -> std::vector; auto executeOnDb(const std::vector statements) -> bool; private: /* * Splits filename in format _.ext into array * [0] - filename * [1] - prefix * [2] - num */ auto splitFilename(std::string filename) -> std::array; Database *db = nullptr; };