17class [[nodiscard]] SqlUpdateQueryBuilder final:
public SqlWhereClauseBuilder<SqlUpdateQueryBuilder>
27 SqlUpdateQueryBuilder(SqlQueryFormatter
const& formatter,
29 std::string tableAlias,
30 std::vector<SqlVariant>* inputBindings)
noexcept:
31 SqlWhereClauseBuilder<SqlUpdateQueryBuilder> {},
32 m_formatter { formatter }
34 m_searchCondition.tableName = std::move(table);
35 m_searchCondition.tableAlias = std::move(tableAlias);
36 m_searchCondition.inputBindings = inputBindings;
39 SqlSearchCondition& SearchCondition() noexcept
41 return m_searchCondition;
45 [[nodiscard]] SqlQueryFormatter
const& Formatter() const noexcept
51 template <
typename ColumnValue>
52 SqlUpdateQueryBuilder& Set(std::string_view columnName, ColumnValue
const& value);
55 template <std::
size_t N>
56 SqlUpdateQueryBuilder& Set(std::string_view columnName,
char const (&value)[N]);
59 [[nodiscard]] std::string ToSql()
const;
62 SqlQueryFormatter
const& m_formatter;
64 SqlSearchCondition m_searchCondition;
67template <
typename ColumnValue>
68SqlUpdateQueryBuilder& SqlUpdateQueryBuilder::Set(std::string_view columnName, ColumnValue
const& value)
70 using namespace std::string_view_literals;
72 if (!m_values.empty())
76 m_values += columnName;
77 m_values += R
"(" = )"sv;
79 if constexpr (std::is_same_v<ColumnValue, SqlNullType>)
81 else if constexpr (std::is_same_v<ColumnValue, SqlWildcardType>)
83 else if (m_searchCondition.inputBindings)
86 m_searchCondition.inputBindings->emplace_back(value);
88 else if constexpr (std::is_same_v<ColumnValue, char>)
89 m_values += m_formatter.StringLiteral(value);
90 else if constexpr (std::is_arithmetic_v<ColumnValue>)
91 m_values += std::format(
"{}", value);
92 else if constexpr (!WhereConditionLiteralType<ColumnValue>::needsQuotes)
93 m_values += std::format(
"{}", value);
97 m_values += std::format(
"{}", value);
104template <std::
size_t N>
105SqlUpdateQueryBuilder& SqlUpdateQueryBuilder::Set(std::string_view columnName,
char const (&value)[N])
107 return Set(columnName, std::string_view { value, N - 1 });
110inline LIGHTWEIGHT_FORCE_INLINE std::string SqlUpdateQueryBuilder::ToSql()
const
112 return m_formatter.Update(
113 m_searchCondition.tableName, m_searchCondition.tableAlias, m_values, m_searchCondition.condition);