6#include "SqlServerType.hpp"
18[[nodiscard]]
inline bool IsTableAlreadyExistsError(SqlErrorInfo
const& error, SqlServerType serverType)
noexcept
22 case SqlServerType::MICROSOFT_SQL:
25 return error.sqlState ==
"42S01" || error.nativeErrorCode == 2714;
26 case SqlServerType::POSTGRESQL:
28 return error.sqlState ==
"42P07";
29 case SqlServerType::SQLITE:
31 return error.message.contains(
"already exists");
32 case SqlServerType::MYSQL:
35 return error.sqlState ==
"42S01" || error.nativeErrorCode == 1050;
38 return error.message.contains(
"already exists");
47[[nodiscard]]
inline bool IsTableNotFoundError(SqlErrorInfo
const& error, SqlServerType serverType)
noexcept
51 case SqlServerType::MICROSOFT_SQL:
54 return error.sqlState ==
"42S02" || error.nativeErrorCode == 208;
55 case SqlServerType::POSTGRESQL:
57 return error.sqlState ==
"42P01";
58 case SqlServerType::SQLITE:
60 return error.message.contains(
"no such table");
61 case SqlServerType::MYSQL:
64 return error.sqlState ==
"42S02" || error.nativeErrorCode == 1146;
67 return error.message.contains(
"not found") || error.message.contains(
"no such")
68 || error.message.contains(
"does not exist");
79[[nodiscard]]
inline bool IsTransientError(SqlErrorInfo
const& error)
noexcept
81 std::string_view state = error.sqlState;
89 if (state.starts_with(
"08"))
95 if (state ==
"HYT00" || state ==
"HYT01")
102 if (state.starts_with(
"40"))
106 if (error.message.contains(
"database is locked"))
108 if (error.message.contains(
"SQLITE_BUSY"))
110 if (error.message.contains(
"SQLITE_LOCKED"))
115 switch (error.nativeErrorCode)
133[[nodiscard]]
inline bool IsUniqueConstraintViolation(SqlErrorInfo
const& error, SqlServerType serverType)
noexcept
137 case SqlServerType::MICROSOFT_SQL:
141 return error.nativeErrorCode == 2627 || error.nativeErrorCode == 2601;
142 case SqlServerType::POSTGRESQL:
144 return error.sqlState ==
"23505";
145 case SqlServerType::SQLITE:
147 return error.message.contains(
"UNIQUE constraint failed");
148 case SqlServerType::MYSQL:
150 return error.nativeErrorCode == 1062;
152 return error.sqlState ==
"23000" || error.sqlState ==
"23505";
161[[nodiscard]]
inline bool IsForeignKeyViolation(SqlErrorInfo
const& error, SqlServerType serverType)
noexcept
165 case SqlServerType::MICROSOFT_SQL:
167 return error.nativeErrorCode == 547;
168 case SqlServerType::POSTGRESQL:
170 return error.sqlState ==
"23503";
171 case SqlServerType::SQLITE:
173 return error.message.contains(
"FOREIGN KEY constraint failed");
174 case SqlServerType::MYSQL:
177 return error.nativeErrorCode == 1451 || error.nativeErrorCode == 1452;
179 return error.sqlState ==
"23503";