#pragma once /** * Interface to provide non-portable behaviour, specific to each * database engine we want to support. * * Everything else (all portable stuf) should go outside of this class. */ #include #include #include #include #include #include class DatabaseEngine { public: DatabaseEngine() = default; virtual ~DatabaseEngine() = default; DatabaseEngine(const DatabaseEngine&) = delete; DatabaseEngine& operator=(const DatabaseEngine&) = delete; DatabaseEngine(DatabaseEngine&&) = delete; DatabaseEngine& operator=(DatabaseEngine&&) = delete; virtual std::set get_all_columns_from_table(const std::string& table_name) = 0; virtual std::tuple raw_exec(const std::string& query) = 0; virtual std::unique_ptr prepare(const std::string& query) = 0; virtual void extract_last_insert_rowid(Statement& statement) = 0; virtual std::string get_returning_id_sql_string(const std::string&) { return {}; } virtual std::string id_column_type() = 0; int64_t last_inserted_rowid{-1}; };