5#include "../SqlConnection.hpp"
7#include "RestoreFailureLog.hpp"
8#include "SqlBackup.hpp"
23 #pragma clang diagnostic push
24 #pragma clang diagnostic ignored "-Wnullability-extension"
28 #pragma clang diagnostic pop
31namespace Lightweight::SqlBackup::detail
35struct RestoreChunkInfo
37 std::string tableName;
38 std::string chunkPath;
39 std::vector<uint8_t> content;
40 TableInfo
const* tableInfo {};
41 std::optional<size_t> displayTotal;
42 bool isEndOfStream {};
48 std::string tableName;
58 bool Add(std::string
const& tableName)
60 auto const lock = std::scoped_lock(_mutex);
61 return _names.insert(tableName).second;
67 [[nodiscard]]
bool Contains(std::string
const& tableName)
const
69 auto const lock = std::scoped_lock(_mutex);
70 return _names.contains(tableName);
74 mutable std::mutex _mutex;
75 std::set<std::string> _names;
79enum class ChunkRestoreOutcome : std::uint8_t
96[[nodiscard]]
inline std::string TargetSchema(TableInfo
const& info, std::string
const& defaultSchema)
98 return info.schema.empty() ? defaultSchema : info.schema;
104[[nodiscard]]
inline std::string TargetTableName(std::string
const& key, TableInfo
const& info)
106 return info.name.empty() ? key : info.name;
112 SqlConnectionString connectionString;
114 std::map<std::string, TableInfo>
const& tableMap;
116 std::map<std::string, std::string>
const& chunkTables;
117 std::deque<ZipEntryInfo>& dataQueue;
119 std::mutex& queueMutex;
120 std::mutex& fileMutex;
121 ProgressManager& progress;
122 std::map<std::string, std::shared_ptr<std::atomic<size_t>>> tableProgress;
123 std::map<std::string, std::shared_ptr<std::atomic<size_t>>> chunksProcessed;
124 std::map<std::string, size_t> totalChunks;
126 std::map<std::string, std::shared_ptr<std::atomic<std::uint64_t>>> committedRows;
127 std::map<std::string, std::string>
const* checksums;
128 RetrySettings
const& retrySettings;
129 RestoreSettings restoreSettings;
131 FailedTables& failedTables;
133 RestoreFailureLog& failureLog;
135 SqlServerType sourceServerType = SqlServerType::UNKNOWN;
147void IncrementChunkCounter(RestoreContext& ctx, std::string
const& tableName);
155void SettleFailedTableRows(RestoreContext& ctx, std::string
const& tableName);
164std::expected<RestoreChunkInfo, FetchChunkError> FetchNextRestoreChunk(RestoreContext& ctx);
181ChunkRestoreOutcome RestoreChunkData(RestoreContext& ctx,
182 SqlConnection& workerConn,
183 RestoreChunkInfo
const& chunk,
184 size_t batchCapacity);
197void RestoreWorker(RestoreContext ctx, SqlConnection& workerConn);
209LIGHTWEIGHT_API
void RestoreIndexes(SqlConnectionString
const& connectionString,
210 std::string
const& schema,
211 std::map<std::string, TableInfo>
const& tableMap,
212 ProgressManager& progress);
223LIGHTWEIGHT_API
void ApplyDatabaseConstraints(SqlConnectionString
const& connectionString,
224 std::string
const& schema,
225 std::map<std::string, TableInfo>
const& tableMap,
226 ProgressManager& progress);
241LIGHTWEIGHT_API std::set<std::string> RecreateDatabaseSchema(SqlConnectionString
const& connectionString,
242 std::string
const& schema,
243 std::map<std::string, TableInfo>
const& tableMap,
244 ProgressManager& progress);