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.find(
"already exists") != std::string::npos;
32 case SqlServerType::MYSQL:
35 return error.sqlState ==
"42S01" || error.nativeErrorCode == 1050;
38 return error.message.find(
"already exists") != std::string::npos;
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.find(
"no such table") != std::string::npos;
61 case SqlServerType::MYSQL:
64 return error.sqlState ==
"42S02" || error.nativeErrorCode == 1146;
67 return error.message.find(
"not found") != std::string::npos || error.message.find(
"no such") != std::string::npos
68 || error.message.find(
"does not exist") != std::string::npos;
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.find(
"database is locked") != std::string::npos)
108 if (error.message.find(
"SQLITE_BUSY") != std::string::npos)
110 if (error.message.find(
"SQLITE_LOCKED") != std::string::npos)
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.find(
"UNIQUE constraint failed") != std::string::npos;
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.find(
"FOREIGN KEY constraint failed") != std::string::npos;
174 case SqlServerType::MYSQL:
177 return error.nativeErrorCode == 1451 || error.nativeErrorCode == 1452;
179 return error.sqlState ==
"23503";